svn commit: r362203 - in head/lib/csu: . aarch64 amd64 arm common i386 mips powerpc powerpc64 riscv

John Baldwin jhb at FreeBSD.org
Mon Jun 15 19:38:52 UTC 2020


Author: jhb
Date: Mon Jun 15 19:38:48 2020
New Revision: 362203
URL: https://svnweb.freebsd.org/changeset/base/362203

Log:
  Remove the sed hack for ABI tag notes.
  
  The ELF notes compiled in C were placed in a section with the wrong type
  (SHT_PROGBITS instead of SHT_NOTE).  Previously, sed was used on the
  generated assembly to rewrite the section type.  Instead, write the notes
  in assembly which permits setting the correct section type directly.
  
  While here, move inline assembly entry points out of C and into assembly
  for aarch64, arm, and riscv.
  
  Reviewed by:	kib
  Tested on:	amd64 (cirrus-ci), riscv64
  Sponsored by:	DARPA
  Differential Revision:	https://reviews.freebsd.org/D25211

Added:
  head/lib/csu/aarch64/crt1_c.c
     - copied, changed from r362202, head/lib/csu/aarch64/crt1.c
  head/lib/csu/aarch64/crt1_s.S
     - copied, changed from r362201, head/lib/csu/aarch64/crt1.c
  head/lib/csu/amd64/crt1_c.c
     - copied, changed from r362202, head/lib/csu/amd64/crt1.c
  head/lib/csu/arm/crt1_c.c
     - copied, changed from r362202, head/lib/csu/arm/crt1.c
  head/lib/csu/arm/crt1_s.S
     - copied, changed from r362201, head/lib/csu/arm/crt1.c
  head/lib/csu/common/crtbrand.S
     - copied, changed from r362202, head/lib/csu/common/crtbrand.c
  head/lib/csu/common/ignore_init_note.S
     - copied, changed from r362201, head/lib/csu/common/ignore_init.c
  head/lib/csu/mips/crt1_c.c
     - copied, changed from r362202, head/lib/csu/mips/crt1.c
  head/lib/csu/powerpc/crt1_c.c
     - copied, changed from r362202, head/lib/csu/powerpc/crt1.c
  head/lib/csu/powerpc64/crt1_c.c
     - copied, changed from r362202, head/lib/csu/powerpc64/crt1.c
  head/lib/csu/riscv/crt1_c.c
     - copied, changed from r362202, head/lib/csu/riscv/crt1.c
  head/lib/csu/riscv/crt1_s.S
     - copied, changed from r362201, head/lib/csu/riscv/crt1.c
Deleted:
  head/lib/csu/aarch64/crt1.c
  head/lib/csu/amd64/crt1.c
  head/lib/csu/arm/crt1.c
  head/lib/csu/common/crtbrand.c
  head/lib/csu/mips/crt1.c
  head/lib/csu/powerpc/crt1.c
  head/lib/csu/powerpc64/crt1.c
  head/lib/csu/riscv/crt1.c
Modified:
  head/lib/csu/Makefile.inc
  head/lib/csu/aarch64/Makefile
  head/lib/csu/amd64/Makefile
  head/lib/csu/arm/Makefile
  head/lib/csu/common/ignore_init.c
  head/lib/csu/i386/Makefile
  head/lib/csu/i386/crt1_c.c
  head/lib/csu/i386/crt1_s.S
  head/lib/csu/mips/Makefile
  head/lib/csu/powerpc/Makefile
  head/lib/csu/powerpc64/Makefile
  head/lib/csu/riscv/Makefile

Modified: head/lib/csu/Makefile.inc
==============================================================================
--- head/lib/csu/Makefile.inc	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/Makefile.inc	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,8 +2,6 @@
 
 SSP_CFLAGS=
 
-SED_FIX_NOTE = -i "" -e '/\.note\.tag/s/progbits/note/'
-
 NO_WMISSING_VARIABLE_DECLARATIONS=
 
 .include <src.opts.mk>
@@ -12,6 +10,8 @@ NO_WMISSING_VARIABLE_DECLARATIONS=
 
 OBJS+=	crtbegin.o crtbeginS.o crtbeginT.o
 OBJS+=	crtend.o crtendS.o
+
+ACFLAGS+=	-DLOCORE
 
 CFLAGS+=	-fno-asynchronous-unwind-tables
 CFLAGS+=	-fno-omit-frame-pointer

Modified: head/lib/csu/aarch64/Makefile
==============================================================================
--- head/lib/csu/aarch64/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/aarch64/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S
+SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-DCRT_IRELOC_SUPPRESS
@@ -17,31 +17,21 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-crt1.s: crt1.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+gcrt1.o: gcrt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+crt1.o:	crt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o
 
-gcrt1.s: crt1.c
-	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1.o: gcrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
-
-Scrt1.s: crt1.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1.o: Scrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+Scrt1.o: Scrt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o
 
 .include <bsd.lib.mk>

Copied and modified: head/lib/csu/aarch64/crt1_c.c (from r362202, head/lib/csu/aarch64/crt1.c)
==============================================================================
--- head/lib/csu/aarch64/crt1.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/aarch64/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -35,7 +35,6 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 #ifdef GCRT
@@ -48,19 +47,6 @@ extern int etext;
 extern long * _end;
 
 void __start(int, char **, char **, void (*)(void));
-
-/* The entry function. */
-__asm("	.text			\n"
-"	.align	0		\n"
-"	.globl	_start		\n"
-"	_start:			\n"
-"	mov	x3, x2		\n" /* cleanup */
-"	add	x1, x0, #8	\n" /* load argv */
-"	ldr	x0, [x0]	\n" /* load argc */
-"	add	x2, x1, x0, lsl #3 \n" /* env is after argv */
-"	add	x2, x2, #8	\n" /* argv is null terminated */
-"	b	 __start  ");
-
 
 /* The entry function. */
 void

Copied and modified: head/lib/csu/aarch64/crt1_s.S (from r362201, head/lib/csu/aarch64/crt1.c)
==============================================================================
--- head/lib/csu/aarch64/crt1.c	Mon Jun 15 16:35:27 2020	(r362201, copy source)
+++ head/lib/csu/aarch64/crt1_s.S	Mon Jun 15 19:38:48 2020	(r362203)
@@ -29,57 +29,19 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
+#include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
-#include <stdlib.h>
+#include "crtbrand.S"
+#include "ignore_init_note.S"
 
-#include "libc_private.h"
-#include "crtbrand.c"
-#include "ignore_init.c"
+ENTRY(_start)
+	mov	x3, x2		/* cleanup */
+	add	x1, x0, #8	/* load argv */
+	ldr	x0, [x0]	/* load argc */
+	add	x2, x1, x0, lsl #3 /* env is after argv */
+	add	x2, x2, #8	/* argv is null terminated */
+	b	 __start
+END(_start)
 
-#ifdef GCRT
-extern void _mcleanup(void);
-extern void monstartup(void *, void *);
-extern int eprol;
-extern int etext;
-#endif
-
-extern long * _end;
-
-void __start(int, char **, char **, void (*)(void));
-
-/* The entry function. */
-__asm("	.text			\n"
-"	.align	0		\n"
-"	.globl	_start		\n"
-"	_start:			\n"
-"	mov	x3, x2		\n" /* cleanup */
-"	add	x1, x0, #8	\n" /* load argv */
-"	ldr	x0, [x0]	\n" /* load argc */
-"	add	x2, x1, x0, lsl #3 \n" /* env is after argv */
-"	add	x2, x2, #8	\n" /* argv is null terminated */
-"	b	 __start  ");
-
-
-/* The entry function. */
-void
-__start(int argc, char *argv[], char *env[], void (*cleanup)(void))
-{
-
-	handle_argv(argc, argv, env);
-
-	if (&_DYNAMIC != NULL)
-		atexit(cleanup);
-	else
-		_init_tls();
-
-#ifdef GCRT
-	atexit(_mcleanup);
-	monstartup(&eprol, &etext);
-__asm__("eprol:");
-#endif
-
-	handle_static_init(argc, argv, env);
-	exit(main(argc, argv, env));
-}
+	.section .note.GNU-stack,"", at progbits

Modified: head/lib/csu/amd64/Makefile
==============================================================================
--- head/lib/csu/amd64/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/amd64/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S
+SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR} -I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-fno-omit-frame-pointer -DCRT_IRELOC_RELA
@@ -17,31 +17,22 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o gcrt1_c.o Scrt1_c.o
+CLEANFILES+=	crtbrand.o ignore_init_note.o
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-crt1.s: crt1.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+gcrt1.o: gcrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o gcrt1.o -r crtbrand.o ignore_init_note.o gcrt1_c.o
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+crt1.o:	crt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o crt1.o -r crtbrand.o ignore_init_note.o crt1_c.o
 
-gcrt1.s: crt1.c
-	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1.o: gcrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
-
-Scrt1.s: crt1.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1.o: Scrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+Scrt1.o: Scrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o Scrt1.o -r crtbrand.o ignore_init_note.o Scrt1_c.o
 
 .include <bsd.lib.mk>

Copied and modified: head/lib/csu/amd64/crt1_c.c (from r362202, head/lib/csu/amd64/crt1.c)
==============================================================================
--- head/lib/csu/amd64/crt1.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/amd64/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -32,7 +32,6 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 typedef void (*fptr)(void);

Modified: head/lib/csu/arm/Makefile
==============================================================================
--- head/lib/csu/arm/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/arm/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S
+SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-DCRT_IRELOC_SUPPRESS
@@ -17,31 +17,24 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
+crt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} ${STATIC_CFLAGS} -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-crt1.s: crt1.c
-	${CC} ${CFLAGS} ${STATIC_CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+crt1.o:	crt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} ${STATIC_CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1.s: crt1.c
-	${CC} ${CFLAGS} ${STATIC_CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+gcrt1.o: gcrt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o
 
-gcrt1.o: gcrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-Scrt1.s: crt1.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1.o: Scrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+Scrt1.o: Scrt1_c.o crt1_s.o
+	${LD} ${_LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o
 
 .include <bsd.lib.mk>

Copied and modified: head/lib/csu/arm/crt1_c.c (from r362202, head/lib/csu/arm/crt1.c)
==============================================================================
--- head/lib/csu/arm/crt1.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/arm/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -49,7 +49,6 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 struct Struct_Obj_Entry;
@@ -70,26 +69,6 @@ struct ps_strings *__ps_strings;
 void __start(int, char **, char **, struct ps_strings *,
     const struct Struct_Obj_Entry *, void (*)(void));
 
-/* The entry function. */
-__asm("	.text			\n"
-"	.align	0		\n"
-"	.globl	_start		\n"
-"	_start:			\n"
-"	mov	r5, r2		/* cleanup */		\n"
-"	mov	r4, r1		/* obj_main */		\n"
-"	mov	r3, r0		/* ps_strings */	\n"
-"	/* Get argc, argv, and envp from stack */	\n"
-"	ldr	r0, [sp, #0x0000]	\n"
-"	add	r1, sp, #0x0004		\n"
-"	add	r2, r1, r0, lsl #2	\n"
-"	add	r2, r2, #0x0004		\n"
-"	/* Ensure the stack is properly aligned before calling C code. */\n"
-"	bic	sp, sp, #7	\n"
-"	sub	sp, sp, #8	\n"
-"	str	r5, [sp, #4]	\n"
-"	str	r4, [sp, #0]	\n"
-"\n"
-"	b	 __start  ");
 /* ARGSUSED */
 void
 __start(int argc, char **argv, char **env, struct ps_strings *ps_strings,
@@ -112,20 +91,6 @@ __start(int argc, char **argv, char **env, struct ps_s
 	handle_static_init(argc, argv, env);
 	exit(main(argc, argv, env));
 }
-
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	char	desc[sizeof(MACHINE_ARCH)];
-} archtag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(MACHINE_ARCH),
-	.type = NT_FREEBSD_ARCH_TAG,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = MACHINE_ARCH
-};
 
 #ifdef GCRT
 __asm__(".text");

Copied and modified: head/lib/csu/arm/crt1_s.S (from r362201, head/lib/csu/arm/crt1.c)
==============================================================================
--- head/lib/csu/arm/crt1.c	Mon Jun 15 16:35:27 2020	(r362201, copy source)
+++ head/lib/csu/arm/crt1_s.S	Mon Jun 15 19:38:48 2020	(r362203)
@@ -41,94 +41,38 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
+#include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
-#include <sys/param.h>
-#include <sys/elf_common.h>
-#include <stdlib.h>
+#include "crtbrand.S"
+#include "ignore_init_note.S"
 
-#include "libc_private.h"
-#include "crtbrand.c"
-#include "ignore_init.c"
+ENTRY(_start)
+	mov	r5, r2		/* cleanup */
+	mov	r4, r1		/* obj_main */
+	mov	r3, r0		/* ps_strings */
+	/* Get argc, argv, and envp from stack */
+	ldr	r0, [sp, #0x0000]
+	add	r1, sp, #0x0004
+	add	r2, r1, r0, lsl #2
+	add	r2, r2, #0x0004
+	/* Ensure the stack is properly aligned before calling C code. */
+	bic	sp, sp, #7
+	sub	sp, sp, #8
+	str	r5, [sp, #4]
+	str	r4, [sp, #0]
 
-struct Struct_Obj_Entry;
-struct ps_strings;
+	b	 __start
+END(_start)
 
-extern void _start(int, char **, char **, const struct Struct_Obj_Entry *,
-    void (*)(void), struct ps_strings *);
+	.section .note.tag,"a",%note
+	.p2align	2
+	.4byte		2f-1f
+	.4byte		4f-3f
+	.4byte		NT_FREEBSD_ARCH_TAG
+1:	.asciz		NOTE_FREEBSD_VENDOR
+2:	.p2align	2
+3:	.asciz		MACHINE_ARCH
+4:
 
-#ifdef GCRT
-extern void _mcleanup(void);
-extern void monstartup(void *, void *);
-extern int eprol;
-extern int etext;
-#endif
-
-struct ps_strings *__ps_strings;
-
-void __start(int, char **, char **, struct ps_strings *,
-    const struct Struct_Obj_Entry *, void (*)(void));
-
-/* The entry function. */
-__asm("	.text			\n"
-"	.align	0		\n"
-"	.globl	_start		\n"
-"	_start:			\n"
-"	mov	r5, r2		/* cleanup */		\n"
-"	mov	r4, r1		/* obj_main */		\n"
-"	mov	r3, r0		/* ps_strings */	\n"
-"	/* Get argc, argv, and envp from stack */	\n"
-"	ldr	r0, [sp, #0x0000]	\n"
-"	add	r1, sp, #0x0004		\n"
-"	add	r2, r1, r0, lsl #2	\n"
-"	add	r2, r2, #0x0004		\n"
-"	/* Ensure the stack is properly aligned before calling C code. */\n"
-"	bic	sp, sp, #7	\n"
-"	sub	sp, sp, #8	\n"
-"	str	r5, [sp, #4]	\n"
-"	str	r4, [sp, #0]	\n"
-"\n"
-"	b	 __start  ");
-/* ARGSUSED */
-void
-__start(int argc, char **argv, char **env, struct ps_strings *ps_strings,
-    const struct Struct_Obj_Entry *obj __unused, void (*cleanup)(void))
-{
-
-	handle_argv(argc, argv, env);
-
-	if (ps_strings != (struct ps_strings *)0)
-		__ps_strings = ps_strings;
-
-	if (&_DYNAMIC != NULL)
-		atexit(cleanup);
-	else
-		_init_tls();
-#ifdef GCRT
-	atexit(_mcleanup);
-	monstartup(&eprol, &etext);
-#endif
-	handle_static_init(argc, argv, env);
-	exit(main(argc, argv, env));
-}
-
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	char	desc[sizeof(MACHINE_ARCH)];
-} archtag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(MACHINE_ARCH),
-	.type = NT_FREEBSD_ARCH_TAG,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = MACHINE_ARCH
-};
-
-#ifdef GCRT
-__asm__(".text");
-__asm__("eprol:");
-__asm__(".previous");
-#endif
+	.section .note.GNU-stack,"",%progbits

Copied and modified: head/lib/csu/common/crtbrand.S (from r362202, head/lib/csu/common/crtbrand.c)
==============================================================================
--- head/lib/csu/common/crtbrand.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/common/crtbrand.S	Mon Jun 15 19:38:48 2020	(r362203)
@@ -25,7 +25,7 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
+#include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
 #include <sys/param.h>
@@ -33,52 +33,27 @@ __FBSDID("$FreeBSD$");
 #include "notes.h"
 
 /*
- * Special ".note" entry specifying the ABI version.  See
+ * Special ".note.tag" entry specifying the ABI version.  See
  * http://www.netbsd.org/Documentation/kernel/elf-notes.html
  * for more information.
- *
- * For all arches except sparc, gcc emits the section directive for the
- * following struct with a PROGBITS type.  However, newer versions of binutils
- * (after 2.16.90) require the section to be of NOTE type, to guarantee that the
- * .note.ABI-tag section correctly ends up in the first page of the final
- * executable.
- *
- * Unfortunately, there is no clean way to tell gcc to use another section type,
- * so this C file (or the C file that includes it) must be compiled in multiple
- * steps:
- *
- * - Compile the .c file to a .s file.
- * - Edit the .s file to change the 'progbits' type to 'note', for the section
- *   directive that defines the .note.ABI-tag section.
- * - Compile the .s file to an object file.
- *
- * These steps are done in the invididual Makefiles for each applicable arch.
  */
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	int32_t	desc;
-} abitag __attribute__ ((section (NOTE_SECTION), aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(int32_t),
-	.type = NT_FREEBSD_ABI_TAG,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = __FreeBSD_version
-};
 
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	uint32_t	desc[1];
-} crt_feature_ctl __attribute__ ((section (NOTE_SECTION),
-    aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(uint32_t),
-	.type = NT_FREEBSD_FEATURE_CTL,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = { 0 }
-};
+	.section .note.tag,"a",%note
+	.p2align	2
+	.4byte		2f-1f
+	.4byte		4f-3f
+	.4byte		NT_FREEBSD_ABI_TAG
+1:	.asciz		NOTE_FREEBSD_VENDOR
+2:	.p2align	2
+3:	.4byte		__FreeBSD_version
+4:
+
+	.section .note.tag,"a",%note
+	.p2align	2
+	.4byte		2f-1f
+	.4byte		4f-3f
+	.4byte		NT_FREEBSD_FEATURE_CTL
+1:	.asciz		NOTE_FREEBSD_VENDOR
+2:	.p2align	2
+3:	.4byte		0
+4:

Modified: head/lib/csu/common/ignore_init.c
==============================================================================
--- head/lib/csu/common/ignore_init.c	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/common/ignore_init.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -32,8 +32,6 @@ __FBSDID("$FreeBSD$");
 #include <sys/elf.h>
 #include <sys/elf_common.h>
 
-#include "notes.h"
-
 extern int main(int, char **, char **);
 
 extern void (*__preinit_array_start[])(int, char **, char **) __hidden;
@@ -140,18 +138,3 @@ handle_argv(int argc, char *argv[], char **env)
 		}
 	}
 }
-
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	uint32_t desc;
-} crt_noinit_tag __attribute__ ((section (NOTE_SECTION),
-    aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(uint32_t),
-	.type = NT_FREEBSD_NOINIT_TAG,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = 0
-};

Copied and modified: head/lib/csu/common/ignore_init_note.S (from r362201, head/lib/csu/common/ignore_init.c)
==============================================================================
--- head/lib/csu/common/ignore_init.c	Mon Jun 15 16:35:27 2020	(r362201, copy source)
+++ head/lib/csu/common/ignore_init_note.S	Mon Jun 15 19:38:48 2020	(r362203)
@@ -25,133 +25,19 @@
  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  */
 
-#include <sys/cdefs.h>
+#include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
-#include <sys/param.h>
-#include <sys/elf.h>
 #include <sys/elf_common.h>
 
 #include "notes.h"
 
-extern int main(int, char **, char **);
-
-extern void (*__preinit_array_start[])(int, char **, char **) __hidden;
-extern void (*__preinit_array_end[])(int, char **, char **) __hidden;
-extern void (*__init_array_start[])(int, char **, char **) __hidden;
-extern void (*__init_array_end[])(int, char **, char **) __hidden;
-extern void (*__fini_array_start[])(void) __hidden;
-extern void (*__fini_array_end[])(void) __hidden;
-extern void _fini(void) __hidden;
-extern void _init(void) __hidden;
-
-extern int _DYNAMIC;
-#pragma weak _DYNAMIC
-
-#if defined(CRT_IRELOC_RELA)
-extern const Elf_Rela __rela_iplt_start[] __weak_symbol __hidden;
-extern const Elf_Rela __rela_iplt_end[] __weak_symbol __hidden;
-
-#include "reloc.c"
-
-static void
-process_irelocs(void)
-{
-	const Elf_Rela *r;
-
-	for (r = &__rela_iplt_start[0]; r < &__rela_iplt_end[0]; r++)
-		crt1_handle_rela(r);
-}
-#elif defined(CRT_IRELOC_REL)
-extern const Elf_Rel __rel_iplt_start[] __weak_symbol __hidden;
-extern const Elf_Rel __rel_iplt_end[] __weak_symbol __hidden;
-
-#include "reloc.c"
-
-static void
-process_irelocs(void)
-{
-	const Elf_Rel *r;
-
-	for (r = &__rel_iplt_start[0]; r < &__rel_iplt_end[0]; r++)
-		crt1_handle_rel(r);
-}
-#elif defined(CRT_IRELOC_SUPPRESS)
-#else
-#error "Define platform reloc type"
-#endif
-
-char **environ;
-const char *__progname = "";
-
-static void
-finalizer(void)
-{
-	void (*fn)(void);
-	size_t array_size, n;
-
-	array_size = __fini_array_end - __fini_array_start;
-	for (n = array_size; n > 0; n--) {
-		fn = __fini_array_start[n - 1];
-		if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
-			(fn)();
-	}
-	_fini();
-}
-
-static inline void
-handle_static_init(int argc, char **argv, char **env)
-{
-	void (*fn)(int, char **, char **);
-	size_t array_size, n;
-
-	if (&_DYNAMIC != NULL)
-		return;
-
-	atexit(finalizer);
-
-	array_size = __preinit_array_end - __preinit_array_start;
-	for (n = 0; n < array_size; n++) {
-		fn = __preinit_array_start[n];
-		if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
-			fn(argc, argv, env);
-	}
-	_init();
-	array_size = __init_array_end - __init_array_start;
-	for (n = 0; n < array_size; n++) {
-		fn = __init_array_start[n];
-		if ((uintptr_t)fn != 0 && (uintptr_t)fn != 1)
-			fn(argc, argv, env);
-	}
-}
-
-static inline void
-handle_argv(int argc, char *argv[], char **env)
-{
-	const char *s;
-
-	if (environ == NULL)
-		environ = env;
-	if (argc > 0 && argv[0] != NULL) {
-		__progname = argv[0];
-		for (s = __progname; *s != '\0'; s++) {
-			if (*s == '/')
-				__progname = s + 1;
-		}
-	}
-}
-
-static const struct {
-	int32_t	namesz;
-	int32_t	descsz;
-	int32_t	type;
-	char	name[sizeof(NOTE_FREEBSD_VENDOR)];
-	uint32_t desc;
-} crt_noinit_tag __attribute__ ((section (NOTE_SECTION),
-    aligned(4))) __used = {
-	.namesz = sizeof(NOTE_FREEBSD_VENDOR),
-	.descsz = sizeof(uint32_t),
-	.type = NT_FREEBSD_NOINIT_TAG,
-	.name = NOTE_FREEBSD_VENDOR,
-	.desc = 0
-};
+	.section .note.tag,"a",%note
+	.p2align	2
+	.4byte		2f-1f
+	.4byte		4f-3f
+	.4byte		NT_FREEBSD_NOINIT_TAG
+1:	.asciz		NOTE_FREEBSD_VENDOR
+2:	.p2align	2
+3:	.4byte		0
+4:

Modified: head/lib/csu/i386/Makefile
==============================================================================
--- head/lib/csu/i386/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/i386/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -4,7 +4,7 @@
 
 SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		gcrt1.o crt1.o Scrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR} -I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-DCRT_IRELOC_REL
@@ -18,38 +18,19 @@ FILESDIR=	${LIBDIR}
 .undef LIBRARIES_ONLY
 
 CLEANFILES=	${OBJS} crt1_c.o crt1_s.o gcrt1_c.o Scrt1_c.o
-CLEANFILES+=	crt1_c.s gcrt1_c.s Scrt1_c.s
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1_c.c is not
-# directly compiled to .o files.
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1_c.s: crt1_c.c
-	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1_c.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-gcrt1_c.o: gcrt1_c.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1_c.s
-
 gcrt1.o: gcrt1_c.o crt1_s.o
 	${LD} ${_LDFLAGS} -o gcrt1.o -r crt1_s.o gcrt1_c.o
 
-crt1_c.s: crt1_c.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1_c.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-crt1_c.o: crt1_c.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1_c.s
-
 crt1.o:	crt1_c.o crt1_s.o
 	${LD} ${_LDFLAGS} -o crt1.o -r crt1_s.o crt1_c.o
 	${OBJCOPY} --localize-symbol _start1 crt1.o
 
-Scrt1_c.s: crt1_c.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1_c.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1_c.o: Scrt1_c.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1_c.s
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
 Scrt1.o: Scrt1_c.o crt1_s.o
 	${LD} ${_LDFLAGS} -o Scrt1.o -r crt1_s.o Scrt1_c.o

Modified: head/lib/csu/i386/crt1_c.c
==============================================================================
--- head/lib/csu/i386/crt1_c.c	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/i386/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -32,7 +32,6 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 typedef void (*fptr)(void);

Modified: head/lib/csu/i386/crt1_s.S
==============================================================================
--- head/lib/csu/i386/crt1_s.S	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/i386/crt1_s.S	Mon Jun 15 19:38:48 2020	(r362203)
@@ -25,6 +25,9 @@
 #include <machine/asm.h>
 __FBSDID("$FreeBSD$");
 
+#include "crtbrand.S"
+#include "ignore_init_note.S"
+
 	.text
 	.align	4
 	.globl	_start

Modified: head/lib/csu/mips/Makefile
==============================================================================
--- head/lib/csu/mips/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/mips/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S
+SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-DCRT_IRELOC_SUPPRESS
@@ -17,31 +17,22 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o gcrt1_c.o Scrt1_c.o
+CLEANFILES+=	crtbrand.o ignore_init_note.o
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-crt1.s: crt1.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+gcrt1.o: gcrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o gcrt1.o -r crtbrand.o ignore_init_note.o gcrt1_c.o
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+crt1.o:	crt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o crt1.o -r crtbrand.o ignore_init_note.o crt1_c.o
 
-gcrt1.s: crt1.c
-	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1.o: gcrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
-
-Scrt1.s: crt1.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1.o: Scrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+Scrt1.o: Scrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o Scrt1.o -r crtbrand.o ignore_init_note.o Scrt1_c.o
 
 .include <bsd.lib.mk>

Copied and modified: head/lib/csu/mips/crt1_c.c (from r362202, head/lib/csu/mips/crt1.c)
==============================================================================
--- head/lib/csu/mips/crt1.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/mips/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -40,7 +40,6 @@ __FBSDID("$FreeBSD$");
 
 #include <stdlib.h>
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 struct Struct_Obj_Entry;

Modified: head/lib/csu/powerpc/Makefile
==============================================================================
--- head/lib/csu/powerpc/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/powerpc/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S crtsavres.S
+SRCS=		crti.S crtn.S crtsavres.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o gcrt1.o
 CFLAGS+=	-I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include
 CFLAGS+=	-DCRT_IRELOC_SUPPRESS
@@ -17,31 +17,22 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o gcrt1_c.o Scrt1_c.o
+CLEANFILES+=	crtbrand.o ignore_init_note.o
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
+gcrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -DGCRT -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-crt1.s: crt1.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+gcrt1.o: gcrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o gcrt1.o -r crtbrand.o ignore_init_note.o gcrt1_c.o
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+crt1.o:	crt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o crt1.o -r crtbrand.o ignore_init_note.o crt1_c.o
 
-gcrt1.s: crt1.c
-	${CC} ${CFLAGS} -DGCRT -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
+Scrt1_c.o: crt1_c.c
+	${CC} ${CFLAGS} -fPIC -DPIC -c -o ${.TARGET} ${.CURDIR}/crt1_c.c
 
-gcrt1.o: gcrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} gcrt1.s
-
-Scrt1.s: crt1.c
-	${CC} ${CFLAGS} -fPIC -DPIC -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
-Scrt1.o: Scrt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} Scrt1.s
+Scrt1.o: Scrt1_c.o crtbrand.o ignore_init_note.o
+	${LD} ${_LDFLAGS} -o Scrt1.o -r crtbrand.o ignore_init_note.o Scrt1_c.o
 
 .include <bsd.lib.mk>

Copied and modified: head/lib/csu/powerpc/crt1_c.c (from r362202, head/lib/csu/powerpc/crt1.c)
==============================================================================
--- head/lib/csu/powerpc/crt1.c	Mon Jun 15 18:57:43 2020	(r362202, copy source)
+++ head/lib/csu/powerpc/crt1_c.c	Mon Jun 15 19:38:48 2020	(r362203)
@@ -47,7 +47,6 @@ __FBSDID("$FreeBSD$");
 #include <stdlib.h>
 
 #include "libc_private.h"
-#include "crtbrand.c"
 #include "ignore_init.c"
 
 struct Struct_Obj_Entry;

Modified: head/lib/csu/powerpc64/Makefile
==============================================================================
--- head/lib/csu/powerpc64/Makefile	Mon Jun 15 18:57:43 2020	(r362202)
+++ head/lib/csu/powerpc64/Makefile	Mon Jun 15 19:38:48 2020	(r362203)
@@ -2,9 +2,9 @@
 
 .PATH: ${.CURDIR:H}/common
 
-SRCS=		crt1.c crti.S crtn.S
+SRCS=		crti.S crtn.S
 OBJS=		${SRCS:N*.h:R:S/$/.o/g}
-OBJS+=		crtsavres.o Scrt1.o gcrt1.o
+OBJS+=		Scrt1.o crt1.o crtsavres.o gcrt1.o
 CFLAGS+=	-I${.CURDIR} -I${.CURDIR:H}/common \
 		-I${SRCTOP}/lib/libc/include \
 		-mlongcall -DCRT_IRELOC_RELA
@@ -17,35 +17,27 @@ FILESDIR=	${LIBDIR}
 # These FILES qualify as libraries for the purpose of LIBRARIES_ONLY.
 .undef LIBRARIES_ONLY
 
-CLEANFILES=	${OBJS}
-CLEANFILES+=	crt1.s crtsavres.S gcrt1.s Scrt1.s
+CLEANFILES=	${OBJS} crt1_c.o gcrt1_c.o Scrt1_c.o
+CLEANFILES+=	crtbrand.o ignore_init_note.o
+CLEANFILES+=	crtsavres.S
 
-# See the comment in lib/csu/common/crtbrand.c for the reason crt1.c is not
-# directly compiled to .o files.
-
-crt1.s: crt1.c
-	${CC} ${CFLAGS} -S -o ${.TARGET} ${.CURDIR}/crt1.c
-	sed ${SED_FIX_NOTE} ${.TARGET}
-
 # On powerpc64 crtsavres is an empty file
 crtsavres.S:
 	touch ${.TARGET}
 
-crt1.o: crt1.s
-	${CC} ${CFLAGS:N-g} ${ACFLAGS} -c -o ${.TARGET} crt1.s
+gcrt1_c.o: crt1_c.c

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-src-all mailing list