aboutsummaryrefslogtreecommitdiff
path: root/makefiles
diff options
context:
space:
mode:
authorMichal Ulianko <michal.ulianko@gmail.com>2015-03-19 19:50:05 +0100
committerMichal Ulianko <michal.ulianko@gmail.com>2015-03-19 19:50:05 +0100
commitc5ae02deda839919841dee5c68db564c0b74c690 (patch)
treed186f044d17520ecfc57c7274f848ced3deeb9da /makefiles
parentb938f12ccb047114736e0baf10ab21e9b9d79522 (diff)
downloadpx4-firmware-c5ae02deda839919841dee5c68db564c0b74c690.tar.gz
px4-firmware-c5ae02deda839919841dee5c68db564c0b74c690.tar.bz2
px4-firmware-c5ae02deda839919841dee5c68db564c0b74c690.zip
Fix generating $3_len in BIN_TO_OBJ makefile function
Diffstat (limited to 'makefiles')
-rw-r--r--makefiles/toolchain_gnu-arm-eabi.mk12
1 files changed, 9 insertions, 3 deletions
diff --git a/makefiles/toolchain_gnu-arm-eabi.mk b/makefiles/toolchain_gnu-arm-eabi.mk
index 2c5302812..93ee235c4 100644
--- a/makefiles/toolchain_gnu-arm-eabi.mk
+++ b/makefiles/toolchain_gnu-arm-eabi.mk
@@ -296,6 +296,9 @@ endef
#
# - compile an empty file to generate a suitable object file
# - relink the object and insert the binary file
+# - extract the length
+# - create const unsigned $3_len with the extracted length as its value and compile it to an object file
+# - link the two generated object files together
# - edit symbol names to suit
#
# NOTE: exercise caution using this with absolute pathnames; it looks
@@ -320,11 +323,14 @@ define BIN_TO_OBJ
@$(MKDIR) -p $(dir $2)
$(Q) $(ECHO) > $2.c
$(call COMPILE,$2.c,$2.c.o)
- $(Q) $(LD) -r -o $2 $2.c.o -b binary $1
+ $(Q) $(LD) -r -o $2.bin.o $2.c.o -b binary $1
+ $(Q) $(ECHO) "const unsigned int $3_len = 0x`$(NM) $2.bin.o | egrep $(call BIN_SYM_PREFIX,$1)_size$$ | cut -d' ' -f1`;" > $2.c
+ $(call COMPILE,$2.c,$2.c.o)
+ $(Q) $(LD) -r -o $2 $2.c.o $2.bin.o
$(Q) $(OBJCOPY) $2 \
--redefine-sym $(call BIN_SYM_PREFIX,$1)_start=$3 \
- --redefine-sym $(call BIN_SYM_PREFIX,$1)_size=$3_len \
+ --strip-symbol $(call BIN_SYM_PREFIX,$1)_size \
--strip-symbol $(call BIN_SYM_PREFIX,$1)_end \
--rename-section .data=.rodata
- $(Q) $(REMOVE) $2.c $2.c.o
+ $(Q) $(REMOVE) $2.c $2.c.o $2.bin.o
endef