Merge "Introduce BTI support in ROMLIB" into integration

This commit is contained in:
John Tsichritzis 2019-06-06 10:26:10 +00:00 committed by TrustedFirmware Code Review
commit 0f95565c40
4 changed files with 41 additions and 10 deletions

View File

@ -937,7 +937,7 @@ ${SPTOOL}:
.PHONY: libraries
romlib.bin: libraries
${Q}${MAKE} PLAT_DIR=${PLAT_DIR} BUILD_PLAT=${BUILD_PLAT} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
${Q}${MAKE} PLAT_DIR=${PLAT_DIR} BUILD_PLAT=${BUILD_PLAT} ENABLE_BTI=${ENABLE_BTI} ARM_ARCH_MINOR=${ARM_ARCH_MINOR} INCLUDES='${INCLUDES}' DEFINES='${DEFINES}' --no-print-directory -C ${ROMLIBPATH} all
cscope:
@echo " CSCOPE"

View File

@ -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)/*

View File

@ -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 &&

View File

@ -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