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,"",@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 ***
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to