diff options
| author | Antonio Niño Díaz <antonio.ninodiaz@arm.com> | 2018-12-18 15:22:49 +0100 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2018-12-18 15:22:49 +0100 | 
| commit | 85686f18420d13d2edcc3cd8e833be294e7b6914 (patch) | |
| tree | 2da846f994203d8fb90675e0e94da7d0749acaed /lib | |
| parent | bcc7ad76c62fe7a65b14cf796b3beb9813e2da69 (diff) | |
| parent | 8b9a0de440223fb0820168c5a28e9dc4b46b153a (diff) | |
Merge pull request #1717 from satheesbalya-arm/sb1/sb1_2629_romlib_ifc
romlib: Add platform specific jump table list
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/romlib/Makefile | 9 | ||||
| -rwxr-xr-x | lib/romlib/gentbl.sh | 31 | ||||
| -rwxr-xr-x | lib/romlib/genwrappers.sh | 2 | ||||
| -rw-r--r-- | lib/romlib/jmptbl.i | 67 | 
4 files changed, 68 insertions, 41 deletions
| diff --git a/lib/romlib/Makefile b/lib/romlib/Makefile index 00dde31c..0e5d4475 100644 --- a/lib/romlib/Makefile +++ b/lib/romlib/Makefile @@ -60,11 +60,16 @@ $(WRAPPER_DIR)/jmpvar.s: $(BUILD_DIR)/romlib.elf  $(LIB_DIR)/libwrappers.a: jmptbl.i $(WRAPPER_DIR)/jmpvar.o  	@echo "  AR      $@" -	$(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ jmptbl.i +	$(Q)./genwrappers.sh -b $(WRAPPER_DIR) -o $@ $(BUILD_DIR)/jmptbl.i  $(BUILD_DIR)/jmptbl.s: jmptbl.i  	@echo "  TBL     $@" -	$(Q)./gentbl.sh -o $@ jmptbl.i +	if [ -e "../../$(PLAT_DIR)/jmptbl.i" ] ; \ +	then \ +		$(Q)./gentbl.sh -o $@ -b $(BUILD_DIR) ../../$(PLAT_DIR)/jmptbl.i; \ +	else \ +		@echo "USE_ROMLIB=1 requires jump table list file: jmptbl.i in platform directory"; \ +	fi  clean:  	@rm -f $(BUILD_DIR)/* diff --git a/lib/romlib/gentbl.sh b/lib/romlib/gentbl.sh index 0695f6e4..e64cfe2b 100755 --- a/lib/romlib/gentbl.sh +++ b/lib/romlib/gentbl.sh @@ -6,6 +6,7 @@  set -e  output=jmptbl.s +build=.  for i  do @@ -14,27 +15,45 @@ do  		output=$2  		shift 2  		;; +	-b) +		build=$2 +		shift 2 +		;;  	--)  		shift  		break  		;;  	-*) -		echo usage: gentbl.sh [-o output]  file ... >&2 +		echo usage: gentbl.sh [-o output] [-b dir] file ... >&2  		exit 1  		;;  	esac  done  tmp=`mktemp` -trap "rm -f $tmp" EXIT INT QUIT - +trap "rm -f $$.tmp" EXIT INT QUIT  rm -f $output +# Pre-process include files +awk '!/^$/ && !/[:blank:]*#.*/{ +if (NF == 2 && $1 == "include") { +	while ((getline line < $2) > 0) +		if (line !~ /^$/ && line !~ /[:blank:]*#.*/) +			print line +		close($2) +} else +	print +}' "$@" | +awk -v OFS="\t" ' +BEGIN{print "#index\tlib\tfunction\t[patch]"} +{print NR-1, $0}' | tee $build/jmptbl.i |  awk -v OFS="\n" '  BEGIN {print "\t.text",               "\t.globl\tjmptbl",               "jmptbl:"}        {sub(/[:blank:]*#.*/,"")} -!/^$/ {print "\tb\t" $3}' "$@" > $tmp - -mv $tmp $output +!/^$/ {if ($3 == "reserved") +		print "\t.word\t0x0" +	else +		print "\tb\t" $3}' > $$.tmp && +mv $$.tmp $output diff --git a/lib/romlib/genwrappers.sh b/lib/romlib/genwrappers.sh index 48ee5a43..746e4ba9 100755 --- a/lib/romlib/genwrappers.sh +++ b/lib/romlib/genwrappers.sh @@ -31,7 +31,7 @@ do  done  awk  '{sub(/[:blank:]*#.*/,"")} -!/^$/ && !/\\tpatch$/ {print $1*4, $2, $3}' "$@" | +!/^$/ && !/\\tpatch$/ !/\\treserved$/ {print $1*4, $2, $3}' "$@" |  while read idx lib sym  do  	file=$build/${lib}_$sym diff --git a/lib/romlib/jmptbl.i b/lib/romlib/jmptbl.i index 5eca5aab..a7280d0d 100644 --- a/lib/romlib/jmptbl.i +++ b/lib/romlib/jmptbl.i @@ -4,37 +4,40 @@  # SPDX-License-Identifier: BSD-3-Clause  #  # Format: -# index	lib	function	[patch] +# lib	function	[patch]  # Add "patch" at the end of the line to patch a function. For example: -# 14	mbedtls	mbedtls_memory_buffer_alloc_init	patch +# mbedtls	mbedtls_memory_buffer_alloc_init	patch +# Holes can be introduced in the table by using a special keyword "reserved". +# Example: +# reserved	reserved +# The jump table will contain an invalid instruction instead of branch -0	rom	rom_lib_init -1	fdt	fdt_getprop_namelen -2	fdt	fdt_setprop_inplace -3	fdt	fdt_check_header -4	fdt	fdt_node_offset_by_compatible -5	mbedtls	mbedtls_asn1_get_alg -6	mbedtls	mbedtls_asn1_get_alg_null -7	mbedtls	mbedtls_asn1_get_bitstring_null -8	mbedtls	mbedtls_asn1_get_bool -9	mbedtls	mbedtls_asn1_get_int -10	mbedtls	mbedtls_asn1_get_tag -11	mbedtls	mbedtls_free -12	mbedtls	mbedtls_md -13	mbedtls	mbedtls_md_get_size -14	mbedtls	mbedtls_memory_buffer_alloc_init -15	mbedtls	mbedtls_oid_get_md_alg -16	mbedtls	mbedtls_oid_get_numeric_string -17	mbedtls	mbedtls_oid_get_pk_alg -18	mbedtls	mbedtls_oid_get_sig_alg -19	mbedtls	mbedtls_pk_free -20	mbedtls	mbedtls_pk_init -21	mbedtls	mbedtls_pk_parse_subpubkey -22	mbedtls	mbedtls_pk_verify_ext -23	mbedtls	mbedtls_platform_set_calloc_free -24	mbedtls	mbedtls_platform_set_snprintf -25	mbedtls	mbedtls_x509_get_rsassa_pss_params -26	mbedtls	mbedtls_x509_get_sig_alg -27	mbedtls	mbedtls_md_info_from_type -28	c	exit -29	c	atexit
\ No newline at end of file +rom	rom_lib_init +fdt	fdt_getprop_namelen +fdt	fdt_setprop_inplace +fdt	fdt_check_header +fdt	fdt_node_offset_by_compatible +mbedtls	mbedtls_asn1_get_alg +mbedtls	mbedtls_asn1_get_alg_null +mbedtls	mbedtls_asn1_get_bitstring_null +mbedtls	mbedtls_asn1_get_bool +mbedtls	mbedtls_asn1_get_int +mbedtls	mbedtls_asn1_get_tag +mbedtls	mbedtls_free +mbedtls	mbedtls_md +mbedtls	mbedtls_md_get_size +mbedtls	mbedtls_memory_buffer_alloc_init +mbedtls	mbedtls_oid_get_md_alg +mbedtls	mbedtls_oid_get_numeric_string +mbedtls	mbedtls_oid_get_pk_alg +mbedtls	mbedtls_oid_get_sig_alg +mbedtls	mbedtls_pk_free +mbedtls	mbedtls_pk_init +mbedtls	mbedtls_pk_parse_subpubkey +mbedtls	mbedtls_pk_verify_ext +mbedtls	mbedtls_platform_set_snprintf +mbedtls	mbedtls_x509_get_rsassa_pss_params +mbedtls	mbedtls_x509_get_sig_alg +mbedtls	mbedtls_md_info_from_type +c	exit +c	atexit | 
