svn commit: r305353 - in head/sys/boot: i386 i386/boot0 i386/boot2 i386/btx/btx i386/btx/btxldr i386/cdboot i386/gptboot i386/gptzfsboot i386/mbr i386/pmbr i386/pxeldr i386/zfsboot pc98 pc98/boot0 ...

Warner Losh imp at FreeBSD.org
Sat Sep 3 15:26:31 UTC 2016


Author: imp
Date: Sat Sep  3 15:26:28 2016
New Revision: 305353
URL: https://svnweb.freebsd.org/changeset/base/305353

Log:
  Don't use -N to set the OMAGIC with data and text writeable and data
  not page aligned. To do this, use the ld script gnu ld installs on my
  system.
  
  This is imperfect: LDFLAGS_BIN and LD_FLAGS_BIN describe different
  things. The loader script could be better named and take into account
  other architectures. And having two different mechanisms to do
  basically the same thing needs study. However, it's blocking forward
  progress on lld, so I'll work in parallel to sort these out.
  
  Differential Revision: https://reviews.freebsd.org/D7409
  Reviewed by: emaste

Added:
  head/sys/boot/i386/boot.ldscript   (contents, props changed)
Modified:
  head/sys/boot/i386/Makefile.inc
  head/sys/boot/i386/boot0/Makefile
  head/sys/boot/i386/boot2/Makefile
  head/sys/boot/i386/btx/btx/Makefile
  head/sys/boot/i386/btx/btxldr/Makefile
  head/sys/boot/i386/cdboot/Makefile
  head/sys/boot/i386/gptboot/Makefile
  head/sys/boot/i386/gptzfsboot/Makefile
  head/sys/boot/i386/mbr/Makefile
  head/sys/boot/i386/pmbr/Makefile
  head/sys/boot/i386/pxeldr/Makefile
  head/sys/boot/i386/zfsboot/Makefile
  head/sys/boot/pc98/Makefile.inc
  head/sys/boot/pc98/boot0/Makefile
  head/sys/boot/pc98/boot2/Makefile
  head/sys/boot/pc98/btx/btx/Makefile
  head/sys/boot/pc98/btx/btxldr/Makefile
  head/sys/boot/pc98/cdboot/Makefile

Modified: head/sys/boot/i386/Makefile.inc
==============================================================================
--- head/sys/boot/i386/Makefile.inc	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/Makefile.inc	Sat Sep  3 15:26:28 2016	(r305353)
@@ -28,4 +28,9 @@ BTXLDR=		${BTXDIR}/btxldr/btxldr
 BTXKERN=	${BTXDIR}/btx/btx
 BTXCRT=		${BTXDIR}/lib/crt0.o
 
+# compact binary with no padding between text, data, bss
+LDSCRIPT=	${SRCTOP}/sys/boot/i386/boot.ldscript
+LDFLAGS_BIN=-e start -Ttext ${ORG} -Wl,-T,${LDSCRIPT},-S,--oformat,binary
+LD_FLAGS_BIN=-static -T ${LDSCRIPT} --gc-sections
+
 .include "../Makefile.inc"

Added: head/sys/boot/i386/boot.ldscript
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/sys/boot/i386/boot.ldscript	Sat Sep  3 15:26:28 2016	(r305353)
@@ -0,0 +1,11 @@
+/* $FreeBSD$ */
+/* Merge text, data and bss together almost no padding */
+OUTPUT_FORMAT("elf32-i386-freebsd")
+OUTPUT_ARCH(i386)
+ENTRY(_start)
+SECTIONS {
+  . = 0x08048000 + SIZEOF_HEADERS;
+  .text : { *(.text) } =0x90909090	/* Pad with nops, if needed */
+  .data : { *(.data) } _edata = .;
+  .bss  : { *(.bss) }  _end = .;
+}

Modified: head/sys/boot/i386/boot0/Makefile
==============================================================================
--- head/sys/boot/i386/boot0/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/boot0/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -40,6 +40,7 @@ BOOT_BOOT0_TICKS?=	0xb6
 # The base address that we the boot0 code to to run it.  Don't change this
 # unless you are glutton for punishment.
 BOOT_BOOT0_ORG?=	0x600
+ORG=${BOOT_BOOT0_ORG}
 
 # Comm settings for boot0sio.
 # Bit(s) Description
@@ -74,7 +75,7 @@ CFLAGS+=-DFLAGS=${BOOT_BOOT0_FLAGS} \
 	-DTICKS=${BOOT_BOOT0_TICKS} \
 	-DCOMSPEED=${BOOT_BOOT0_COMCONSOLE_SPEED}
 
-LDFLAGS=-e start -Ttext ${BOOT_BOOT0_ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/i386/boot2/Makefile
==============================================================================
--- head/sys/boot/i386/boot2/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/boot2/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -48,7 +48,7 @@ CFLAGS.gcc+=   -mno-align-long-strings
 
 CFLAGS.clang+=	-Oz ${CLANG_OPT_SMALL}
 
-LD_FLAGS=-static -N --gc-sections
+LD_FLAGS=${LD_FLAGS_BIN}
 
 # Pick up ../Makefile.inc early.
 .include <bsd.init.mk>

Modified: head/sys/boot/i386/btx/btx/Makefile
==============================================================================
--- head/sys/boot/i386/btx/btx/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/btx/btx/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -25,7 +25,7 @@ CFLAGS+=-DBTX_SERIAL -DSIOPRT=${BOOT_COM
 
 ORG=	0x9000
 
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/i386/btx/btxldr/Makefile
==============================================================================
--- head/sys/boot/i386/btx/btxldr/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/btx/btxldr/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -12,7 +12,8 @@ CFLAGS+=-I${.CURDIR}/../../common
 CFLAGS+=-DBTXLDR_VERBOSE
 .endif
 
-LDFLAGS=-e start -Ttext ${LOADER_ADDRESS} -Wl,-N,-S,--oformat,binary
+ORG=${LOADER_ADDRESS}
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/i386/cdboot/Makefile
==============================================================================
--- head/sys/boot/i386/cdboot/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/cdboot/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -10,7 +10,7 @@ CFLAGS+=-I${.CURDIR}/../common
 
 ORG=	0x7c00
 
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/i386/gptboot/Makefile
==============================================================================
--- head/sys/boot/i386/gptboot/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/gptboot/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -47,7 +47,7 @@ LIBGELIBOOT=	${.OBJDIR}/../../geli/libge
 OPENCRYPTO_XTS=	xform_aes_xts.o
 .endif
 
-LD_FLAGS=-static -N --gc-sections
+LD_FLAGS=${LD_FLAGS_BIN}
 
 LIBSTAND=	${.OBJDIR}/../../libstand32/libstand.a
 

Modified: head/sys/boot/i386/gptzfsboot/Makefile
==============================================================================
--- head/sys/boot/i386/gptzfsboot/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/gptzfsboot/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -46,7 +46,7 @@ OPENCRYPTO_XTS=	xform_aes_xts.o
 
 CFLAGS.gcc+=	--param max-inline-insns-single=100
 
-LD_FLAGS=-static -N --gc-sections
+LD_FLAGS=${LD_FLAGS_BIN}
 
 LIBSTAND=	${.OBJDIR}/../../libstand32/libstand.a
 

Modified: head/sys/boot/i386/mbr/Makefile
==============================================================================
--- head/sys/boot/i386/mbr/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/mbr/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -12,6 +12,6 @@ BOOT_MBR_FLAGS?=	0x80
 ORG=	0x600
 
 AFLAGS+=--defsym FLAGS=${BOOT_MBR_FLAGS}
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>

Modified: head/sys/boot/i386/pmbr/Makefile
==============================================================================
--- head/sys/boot/i386/pmbr/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/pmbr/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -9,6 +9,6 @@ SRCS=	${PROG}.s
 ORG=	0x600
 
 AFLAGS+=--defsym FLAGS=${BOOT_MBR_FLAGS}
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>

Modified: head/sys/boot/i386/pxeldr/Makefile
==============================================================================
--- head/sys/boot/i386/pxeldr/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/pxeldr/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -34,7 +34,7 @@ ${BOOT}: ${LDR} ${LOADER}
 	dd if=${.TARGET}.tmp of=${.TARGET} obs=2k conv=osync status=none
 	rm ${.TARGET}.tmp
 
-LDFLAGS+=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS+=${LDFLAGS_BIN}
 
 CLEANFILES+= ${LOADER}
 

Modified: head/sys/boot/i386/zfsboot/Makefile
==============================================================================
--- head/sys/boot/i386/zfsboot/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/i386/zfsboot/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -36,7 +36,7 @@ CFLAGS=	-DBOOTPROG=\"zfsboot\" \
 
 CFLAGS.gcc+=	--param max-inline-insns-single=100
 
-LD_FLAGS=-static -N --gc-sections
+LD_FLAGS=${LD_FLAGS_BIN}
 
 LIBSTAND=	${.OBJDIR}/../../libstand32/libstand.a
 

Modified: head/sys/boot/pc98/Makefile.inc
==============================================================================
--- head/sys/boot/pc98/Makefile.inc	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/Makefile.inc	Sat Sep  3 15:26:28 2016	(r305353)
@@ -21,4 +21,9 @@ BTXLDR=		${BTXDIR}/btxldr/btxldr
 BTXKERN=	${BTXDIR}/btx/btx
 BTXCRT=		${BTXDIR}/lib/crt0.o
 
+# compact binary with no padding between text, data, bss
+LDSCRIPT=	${SRCTOP}/sys/boot/i386/boot.ldscript
+LDFLAGS_BIN=-e start -Ttext ${ORG} -Wl,-T,${LDSCRIPT},-S,--oformat,binary
+LD_FLAGS_BIN=-static -T ${LDSCRIPT} --gc-sections
+
 .include "../Makefile.inc"

Modified: head/sys/boot/pc98/boot0/Makefile
==============================================================================
--- head/sys/boot/pc98/boot0/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/boot0/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -1,6 +1,6 @@
 # $FreeBSD$
 
-PROG=	${BOOT}.out
+PROG=	${BOOT}
 INTERNALPROG=
 FILES=	${BOOT}
 MAN=
@@ -12,10 +12,8 @@ BOOT=	boot0
 # The base address that we the boot0 code to to run it.  Don't change this
 # unless you are glutton for punishment.
 BOOT_BOOT0_ORG?=	0x0000
+ORG=${BOOT_BOOT0_ORG}
 
-LDFLAGS=-e start -Ttext ${BOOT_BOOT0_ORG} -Wl,-N
-
-${BOOT}: ${BOOT}.out
-	${OBJCOPY} -S -O binary ${BOOT}.out ${.TARGET}
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>

Modified: head/sys/boot/pc98/boot2/Makefile
==============================================================================
--- head/sys/boot/pc98/boot2/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/boot2/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -52,7 +52,7 @@ CFLAGS.gcc+=   -mno-align-long-strings
 
 CFLAGS.clang+=	-Oz ${CLANG_OPT_SMALL}
 
-LD_FLAGS=-static -N --gc-sections
+LD_FLAGS=${LD_FLAGS_BIN}
 
 # Pick up ../Makefile.inc early.
 .include <bsd.init.mk>

Modified: head/sys/boot/pc98/btx/btx/Makefile
==============================================================================
--- head/sys/boot/pc98/btx/btx/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/btx/btx/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -25,7 +25,7 @@ CFLAGS+=-DBTX_SERIAL -DSIOPRT=${BOOT_COM
 
 ORG=	0x9000
 
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/pc98/btx/btxldr/Makefile
==============================================================================
--- head/sys/boot/pc98/btx/btxldr/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/btx/btxldr/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -12,7 +12,8 @@ CFLAGS+=-I${.CURDIR}/../../../i386/commo
 CFLAGS+=-DBTXLDR_VERBOSE
 .endif
 
-LDFLAGS=-e start -Ttext ${LOADER_ADDRESS} -Wl,-N,-S,--oformat,binary
+ORG=${LOADER_ADDRESS}
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 

Modified: head/sys/boot/pc98/cdboot/Makefile
==============================================================================
--- head/sys/boot/pc98/cdboot/Makefile	Sat Sep  3 15:26:00 2016	(r305352)
+++ head/sys/boot/pc98/cdboot/Makefile	Sat Sep  3 15:26:28 2016	(r305353)
@@ -10,7 +10,7 @@ CFLAGS+=-I${.CURDIR}/../../i386/common
 
 ORG=	0x0000
 
-LDFLAGS=-e start -Ttext ${ORG} -Wl,-N,-S,--oformat,binary
+LDFLAGS=${LDFLAGS_BIN}
 
 .include <bsd.prog.mk>
 


More information about the svn-src-all mailing list