diff options
| author | John Tsichritzis <john.tsichritzis@arm.com> | 2019-06-06 10:26:10 +0000 | 
|---|---|---|
| committer | TrustedFirmware Code Review <review@review.trustedfirmware.org> | 2019-06-06 10:26:10 +0000 | 
| commit | 0f95565c40d54188dd072fe2b429046dbbd9a6a3 (patch) | |
| tree | 966fe8d7dc4aa50011d5f720a50672bdf9e390ea /lib | |
| parent | 16b49f601df30378b78bb323a859109149f3ea00 (diff) | |
| parent | bbb24f611c92ada192ed7a6825da8b477fd6bcfb (diff) | |
Merge "Introduce BTI support in ROMLIB" into integration
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/romlib/Makefile | 9 | ||||
| -rwxr-xr-x | lib/romlib/gentbl.sh | 13 | ||||
| -rwxr-xr-x | lib/romlib/genwrappers.sh | 27 | 
3 files changed, 40 insertions, 9 deletions
| diff --git a/lib/romlib/Makefile b/lib/romlib/Makefile index 7a3a51ea..bc05d0fa 100644 --- a/lib/romlib/Makefile +++ b/lib/romlib/Makefile @@ -29,6 +29,11 @@ ifeq ($(DEBUG),1)     LDFLAGS += -Map=$(MAPFILE)  endif +ifeq (${ARM_ARCH_MINOR},0) +	ASFLAGS = -march=armv8-a +else +	ASFLAGS = -march=armv8.${ARM_ARCH_MINOR}-a +endif  .PHONY: all clean distclean @@ -60,13 +65,13 @@ $(WRAPPER_DIR)/jmpvar.s: $(BUILD_DIR)/romlib.elf  $(LIB_DIR)/libwrappers.a: $(BUILD_DIR)/jmptbl.i $(WRAPPER_DIR)/jmpvar.o  	@echo "  AR      $@" -	$(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ $(BUILD_DIR)/jmptbl.i +	$(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ --bti=$(ENABLE_BTI) --asflags=$(ASFLAGS) $(BUILD_DIR)/jmptbl.i  $(BUILD_DIR)/jmptbl.i: $(BUILD_DIR)/jmptbl.s  $(BUILD_DIR)/jmptbl.s: ../../$(PLAT_DIR)/jmptbl.i  	@echo "  TBL     $@" -	$(Q)./gentbl.sh -o $@ -b $(BUILD_DIR) ../../$(PLAT_DIR)/jmptbl.i +	$(Q)./gentbl.sh -o $@ -b $(BUILD_DIR) --bti=$(ENABLE_BTI) ../../$(PLAT_DIR)/jmptbl.i  clean:  	@rm -f $(BUILD_DIR)/* diff --git a/lib/romlib/gentbl.sh b/lib/romlib/gentbl.sh index e64cfe2b..bfb1ec3cf 100755 --- a/lib/romlib/gentbl.sh +++ b/lib/romlib/gentbl.sh @@ -1,5 +1,5 @@  #!/bin/sh -# Copyright (c) 2018, ARM Limited and Contributors. All rights reserved. +# Copyright (c) 2018-2019, ARM Limited and Contributors. All rights reserved.  #  # SPDX-License-Identifier: BSD-3-Clause @@ -19,6 +19,10 @@ do  		build=$2  		shift 2  		;; +	--bti=*) +		enable_bti=$(echo $1 | sed 's/--bti=\(.*\)/\1/') +		shift 1 +		;;  	--)  		shift  		break @@ -47,12 +51,15 @@ if (NF == 2 && $1 == "include") {  awk -v OFS="\t" '  BEGIN{print "#index\tlib\tfunction\t[patch]"}  {print NR-1, $0}' | tee $build/jmptbl.i | -awk -v OFS="\n" ' +awk -v OFS="\n" -v BTI=$enable_bti '  BEGIN {print "\t.text",               "\t.globl\tjmptbl",               "jmptbl:"}        {sub(/[:blank:]*#.*/,"")} -!/^$/ {if ($3 == "reserved") +!/^$/ { +	if (BTI == 1) +		print "\tbti\tj" +	if ($3 == "reserved")  		print "\t.word\t0x0"  	else  		print "\tb\t" $3}' > $$.tmp && diff --git a/lib/romlib/genwrappers.sh b/lib/romlib/genwrappers.sh index 07d59ac4..e092548e 100755 --- a/lib/romlib/genwrappers.sh +++ b/lib/romlib/genwrappers.sh @@ -19,6 +19,14 @@ do  		build=$2  		shift 2  		;; +	--bti=*) +		enable_bti=$(echo $1 | sed 's/--bti=\(.*\)/\1/') +		shift 1 +		;; +	--asflags=*) +		asflags=$(echo $1 | sed 's/--asflags=\(.*\)/\1/') +		shift 1 +		;;  	--)  		shift  		break @@ -30,8 +38,13 @@ do  	esac  done -awk  '{sub(/[:blank:]*#.*/,"")} -!/^$/ && $NF != "patch" && $NF != "reserved" {print $1*4, $2, $3}' "$@" | +awk -v BTI=$enable_bti ' +{sub(/[:blank:]*#.*/,"")} +!/^$/ && $NF != "patch" && $NF != "reserved" { +		if (BTI == 1) +			print $1*8, $2, $3 +		else +			print $1*4, $2, $3}' "$@" |  while read idx lib sym  do  	file=$build/${lib}_$sym @@ -39,14 +52,20 @@ do  	cat <<EOF > $file.s  	.globl	$sym  $sym: +EOF +if [ $enable_bti = 1 ] +then +	echo "\tbti\tjc" >> $file.s +fi +	cat <<EOF >> $file.s  	ldr	x17, =jmptbl -	ldr	x17, [x17]  	mov	x16, #$idx +	ldr	x17, [x17]  	add	x16, x16, x17  	br	x16  EOF -	${CROSS_COMPILE}as -o $file.o $file.s +	${CROSS_COMPILE}as ${asflags} -o $file.o $file.s  done  ${CROSS_COMPILE}ar -rc $out $build/*.o | 
