Page MenuHomeFreeBSD

D22922.id.diff
No OneTemporary

D22922.id.diff

Index: sys/conf/Makefile.arm
===================================================================
--- sys/conf/Makefile.arm
+++ sys/conf/Makefile.arm
@@ -32,9 +32,6 @@
INCLUDES+= -I$S/contrib/libfdt -I$S/gnu/dts/include
-SYSTEM_LD:= ${SYSTEM_LD:$S/conf/ldscript.$M=ldscript.$M}
-SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscript.$M=ldscript.$M}
-
.if !defined(DEBUG) && !defined(PROFLEVEL)
STRIP_FLAGS = -S
.endif
@@ -58,20 +55,41 @@
KERNVIRTADDR= 0xc0000000
.endif
+# Use a custom SYSTEM_LD command to generate the elf kernel, so we can
+# set the text segment start address, and also strip the "arm mapping
+# symbols" which have names like $a.0 and $d.2; see the document
+# "ELF for the ARM architecture" for more info on the mapping symbols.
+SYSTEM_LD= \
+ ${SYSTEM_LD_BASECMD} \
+ --defsym='text_start=${KERNVIRTADDR} + SIZEOF_HEADERS' \
+ -o ${.TARGET} ${SYSTEM_OBJS} vers.o; \
+ $(OBJCOPY) \
+ --wildcard \
+ --strip-symbol='$$[adt]*' \
+ ${.TARGET}
+
+# Generate the .bin (no elf headers) kernel as an extra build output.
+# We must relink to generate the .bin kernel, because without headers the
+# location of everything changes. We also strip the ARM marker symbols.
+KERNEL_EXTRA+= ${KERNEL_KO}.bin
+KERNEL_EXTRA_INSTALL+= ${KERNEL_KO}.bin
+
+${KERNEL_KO}.bin: ${SYSTEM_DEP} vers.o
+ @echo "linking ${.TARGET}"
+ @${SYSTEM_LD_BASECMD} \
+ --defsym='text_start=${KERNVIRTADDR}' \
+ -o ${.TARGET} ${SYSTEM_OBJS} vers.o
+ ${SIZE} ${.TARGET}
+ @${OBJCOPY} \
+ --wildcard \
+ --strip-symbol='$$[adt]*' \
+ --output-target=binary \
+ ${.TARGET}
+ @chmod 755 ${.TARGET}
+
# hack because genassym.c includes sys/bus.h which includes these.
genassym.o: bus_if.h device_if.h
-SYSTEM_LD_ = ${LD} -m ${LD_EMULATION} -Bdynamic -T ldscript.$M.noheader \
- ${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
- --dynamic-linker /red/herring \
- -o ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
-SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// ldscript.$M \
- >ldscript.$M.noheader; \
- ${SYSTEM_LD_}; \
- ${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \
- ${KERNEL_KO}.bin; \
- rm ${FULLKERNEL}.noheader
-
%BEFORE_DEPEND
%OBJS
@@ -84,10 +102,7 @@
%CLEAN
-CLEAN+= ldscript.$M ${KERNEL_KO}.bin ldscript.$M.noheader
-
-ldscript.$M: $S/conf/ldscript.$M
- sed s/KERNVIRTADDR/${KERNVIRTADDR}/g > ldscript.$M < $S/conf/ldscript.$M
+CLEAN+= ${KERNEL_KO}.bin
%RULES
Index: sys/conf/Makefile.arm64
===================================================================
--- sys/conf/Makefile.arm64
+++ sys/conf/Makefile.arm64
@@ -27,24 +27,42 @@
INCLUDES+= -I$S/contrib/libfdt
-#SYSTEM_LD:= ${SYSTEM_LD:$S/conf/ldscript.$M=ldscript.$M}
-#SYSTEM_DEP:= ${SYSTEM_DEP:$S/conf/ldscript.$M=ldscript.$M}
+# Use a custom SYSTEM_LD command to generate the elf kernel, so we can
+# set the text segment start address, and also strip the "arm mapping
+# symbols" which have names like $a.0 and $d.2; see the document
+# "ELF for the ARM architecture" for more info on the mapping symbols.
+SYSTEM_LD= \
+ ${SYSTEM_LD_BASECMD} \
+ --defsym='text_start=kernbase + SIZEOF_HEADERS' \
+ -o ${.TARGET} ${SYSTEM_OBJS} vers.o; \
+ $(OBJCOPY) \
+ --wildcard \
+ --strip-symbol='$$[adt]*' \
+ ${.TARGET}
+# Generate the .bin (no elf headers) kernel as an extra build output.
+# We must relink to generate the .bin kernel, because without headers the
+# location of everything changes. We also strip the ARM marker symbols.
+KERNEL_EXTRA+= ${KERNEL_KO}.bin
+KERNEL_EXTRA_INSTALL+= ${KERNEL_KO}.bin
+
+${KERNEL_KO}.bin: ${SYSTEM_DEP} vers.o
+ @echo "linking ${.TARGET}"
+ @${SYSTEM_LD_BASECMD} \
+ --defsym='text_start=kernbase' \
+ -o ${.TARGET} ${SYSTEM_OBJS} vers.o
+ ${SIZE} ${.TARGET}
+ @${OBJCOPY} \
+ --wildcard \
+ --strip-symbol='$$[adt]*' \
+ --output-target=binary \
+ ${.TARGET}
+ @chmod 755 ${.TARGET}
+
.if !empty(DDB_ENABLED)
CFLAGS += -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer
.endif
-SYSTEM_LD_ = ${LD} -m ${LD_EMULATION} -Bdynamic -T ldscript.$M.noheader \
- ${_LDFLAGS} --no-warn-mismatch --warn-common --export-dynamic \
- --dynamic-linker /red/herring \
- -o ${FULLKERNEL}.noheader -X ${SYSTEM_OBJS} vers.o
-SYSTEM_LD_TAIL +=;sed s/" + SIZEOF_HEADERS"// $(LDSCRIPT)\
- >ldscript.$M.noheader;\
- ${SYSTEM_LD_}; \
- ${OBJCOPY} -S -O binary ${FULLKERNEL}.noheader \
- ${KERNEL_KO}.bin; \
- rm ${FULLKERNEL}.noheader
-
%BEFORE_DEPEND
%OBJS
@@ -56,7 +74,7 @@
%FILES.m
%CLEAN
-CLEAN+= ldscript.$M ${KERNEL_KO}.bin ldscript.$M.noheader
+CLEAN+= ${KERNEL_KO}.bin
%RULES
Index: sys/conf/ldscript.arm
===================================================================
--- sys/conf/ldscript.arm
+++ sys/conf/ldscript.arm
@@ -6,7 +6,7 @@
SECTIONS
{
/* Read-only sections, merged into text segment: */
- . = KERNVIRTADDR + SIZEOF_HEADERS;
+ . = text_start; /* This is set using --defsym= on the command line. */
.text :
{
*(.text)
Index: sys/conf/ldscript.arm64
===================================================================
--- sys/conf/ldscript.arm64
+++ sys/conf/ldscript.arm64
@@ -6,7 +6,7 @@
SECTIONS
{
/* Read-only sections, merged into text segment: */
- . = kernbase + SIZEOF_HEADERS;
+ . = text_start; /* This is set using --defsym= on the command line. */
.text :
{
*(.text)

File Metadata

Mime Type
text/plain
Expires
Sat, May 16, 5:50 AM (9 h, 40 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33116968
Default Alt Text
D22922.id.diff (5 KB)

Event Timeline