Hey! Thanks so much for sharing this, it's quite useful to put your earlier email[1] about minimzing the bsp_specs in context.
>From looking ahead a bit without testing (still compiling), the patch may need an ENDFILE_SPEC definition as well for "crtend.o" (it defines __TMC_END__ which crtbegin.o has left undefined for eg.) and possibly "crtn.o", at least to eliminate the x86_64 port's bsp_specs entirely (see here[2]). I've also left some comments inline below. +1 on upstreaming this into GCC (making sure it also backports to 7.3 for simplicity, so we don't need to write a 7.3-specific patch for the RSB as well) with a few additons (at least for the x86_64 target, to try to have an empty bsp_specs to begin with). [1] https://lists.rtems.org/pipermail/devel/2018-May/021430.html [2] https://github.com/AmaanC/rtems-gsoc18/blob/ac/daily-01-compile-stub/bsps/x86_64/amd64/start/bsp_specs On Wed, May 16, 2018 at 8:46 PM, Joel Sherrill <j...@rtems.org> wrote: > --- > gcc/config.gcc | 2 +- > gcc/config/arm/rtems.h | 4 ++++ > gcc/config/bfin/rtems.h | 4 ++++ > gcc/config/i386/rtemself.h | 6 +++++- > gcc/config/i386/rtemself64.h | 39 +++++++++++++++++++++++++++++++++++++++ > gcc/config/m68k/rtemself.h | 4 ++++ > gcc/config/microblaze/rtems.h | 4 ++++ > gcc/config/mips/rtems.h | 4 ++++ > gcc/config/moxie/rtems.h | 4 ++++ > gcc/config/nios2/rtems.h | 4 ++++ > gcc/config/riscv/rtems.h | 4 ++++ > gcc/config/rs6000/rtems.h | 5 +++++ > gcc/config/rtems.h | 6 +++++- > gcc/config/sh/rtems.h | 4 ++++ > gcc/config/sh/rtemself.h | 4 ++++ > gcc/config/sparc/rtemself.h | 4 ++++ > gcc/config/v850/rtems.h | 4 ++++ > 17 files changed, 103 insertions(+), 3 deletions(-) > create mode 100644 gcc/config/i386/rtemself64.h > > diff --git a/gcc/config.gcc b/gcc/config.gcc > index d509800..de27e5c 100644 > --- a/gcc/config.gcc > +++ b/gcc/config.gcc > @@ -1499,7 +1499,7 @@ x86_64-*-elf*) > tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h > newlib-stdint.h i386/i386elf.h i386/x86-64.h" > ;; > x86_64-*-rtems*) > - tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h > newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rtemself.h rtems.h" > + tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h > newlib-stdint.h i386/i386elf.h i386/x86-64.h i386/rtemself64.h" In rebasing with upstream, this commit must have silently mistakenly also dropped rtems.h (which my patch earlier added to support the -qrtems, -qnolinkcmds, etc. flags). > ;; > i[34567]86-*-rdos*) > tm_file="${tm_file} i386/unix.h i386/att.h dbxelf.h elfos.h > newlib-stdint.h i386/i386elf.h i386/rdos.h" > diff --git a/gcc/config/arm/rtems.h b/gcc/config/arm/rtems.h > index 1123f4a..e79ce90 100644 > --- a/gcc/config/arm/rtems.h > +++ b/gcc/config/arm/rtems.h > @@ -34,3 +34,7 @@ > } while (0) > > #define ARM_DEFAULT_SHORT_ENUMS false > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/bfin/rtems.h b/gcc/config/bfin/rtems.h > index 6a9a41f..28a69b9 100644 > --- a/gcc/config/bfin/rtems.h > +++ b/gcc/config/bfin/rtems.h > @@ -31,3 +31,7 @@ > builtin_assert ("system=rtems"); \ > } \ > while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/i386/rtemself.h b/gcc/config/i386/rtemself.h > index 65e8dad..3a09354 100644 > --- a/gcc/config/i386/rtemself.h > +++ b/gcc/config/i386/rtemself.h > @@ -1,4 +1,4 @@ > -/* Definitions for rtems targeting an ix86 using ELF. > +/* Definitions for rtems targeting an x86_64 using ELF. I think you meant to have this comment in rtemself64.h, which says ix86 currently? > Copyright (C) 1996-2018 Free Software Foundation, Inc. > Contributed by Joel Sherrill (j...@oarcorp.com). > > @@ -33,3 +33,7 @@ > builtin_assert ("system=rtems"); \ > } \ > while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crtbegin.o%s}" > diff --git a/gcc/config/i386/rtemself64.h b/gcc/config/i386/rtemself64.h > new file mode 100644 > index 0000000..34e5937 > --- /dev/null > +++ b/gcc/config/i386/rtemself64.h > @@ -0,0 +1,39 @@ > +/* Definitions for rtems targeting an ix86 using ELF. See above. > + Copyright (C) 1996-2018 Free Software Foundation, Inc. > + Contributed by Joel Sherrill (j...@oarcorp.com). > + > + This file is part of GCC. > + > + GCC is free software; you can redistribute it and/or modify it > + under the terms of the GNU General Public License as published > + by the Free Software Foundation; either version 3, or (at your > + option) any later version. > + > + GCC is distributed in the hope that it will be useful, but WITHOUT > + ANY WARRANTY; without even the implied warranty of MERCHANTABILITY > + or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public > + License for more details. > + > + Under Section 7 of GPL version 3, you are granted additional > + permissions described in the GCC Runtime Library Exception, version > + 3.1, as published by the Free Software Foundation. > + > + You should have received a copy of the GNU General Public License and > + a copy of the GCC Runtime Library Exception along with this program; > + see the files COPYING3 and COPYING.RUNTIME respectively. If not, see > + <http://www.gnu.org/licenses/>. */ > + > +/* Specify predefined symbols in preprocessor. */ > + > +#define TARGET_OS_CPP_BUILTINS() \ > + do \ > + { \ > + builtin_define ("__rtems__"); \ > + builtin_define ("__USE_INIT_FINI__"); \ > + builtin_assert ("system=rtems"); \ > + } \ > + while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/m68k/rtemself.h b/gcc/config/m68k/rtemself.h > index e18a06e..6f31aa5 100644 > --- a/gcc/config/m68k/rtemself.h > +++ b/gcc/config/m68k/rtemself.h > @@ -36,3 +36,7 @@ > builtin_assert ("system=rtems"); \ > } \ > while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/microblaze/rtems.h b/gcc/config/microblaze/rtems.h > index 5f23321..fc8914c 100644 > --- a/gcc/config/microblaze/rtems.h > +++ b/gcc/config/microblaze/rtems.h > @@ -35,3 +35,7 @@ > %{mbig-endian:-EB --oformat=elf32-microblaze} \ > %{mlittle-endian:-EL --oformat=elf32-microblazeel} \ > %{mxl-gp-opt:%{G*}} %{!mxl-gp-opt: -G 0}" > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/mips/rtems.h b/gcc/config/mips/rtems.h > index 66e00bf..6e96853 100644 > --- a/gcc/config/mips/rtems.h > +++ b/gcc/config/mips/rtems.h > @@ -37,3 +37,7 @@ do { \ > */ > #undef MIPS_DEFAULT_GVALUE > #define MIPS_DEFAULT_GVALUE 0 > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/moxie/rtems.h b/gcc/config/moxie/rtems.h > index bc28d6e..6c79063 100644 > --- a/gcc/config/moxie/rtems.h > +++ b/gcc/config/moxie/rtems.h > @@ -38,3 +38,7 @@ > #undef PTRDIFF_TYPE > #undef WCHAR_TYPE > #undef WCHAR_TYPE_SIZE > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/nios2/rtems.h b/gcc/config/nios2/rtems.h > index b4a6082..f6eedf6 100644 > --- a/gcc/config/nios2/rtems.h > +++ b/gcc/config/nios2/rtems.h > @@ -37,3 +37,7 @@ do { \ > > This is done so RTEMS targets have Thread Local Storage like Linux. */ > #define TARGET_LINUX_ABI 1 > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/riscv/rtems.h b/gcc/config/riscv/rtems.h > index 231b6a0..a9d1e01 100644 > --- a/gcc/config/riscv/rtems.h > +++ b/gcc/config/riscv/rtems.h > @@ -29,3 +29,7 @@ > builtin_define ("__USE_INIT_FINI__"); \ > builtin_assert ("system=rtems"); \ > } while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/rs6000/rtems.h b/gcc/config/rs6000/rtems.h > index 54ddcb4..20a4ffa 100644 > --- a/gcc/config/rs6000/rtems.h > +++ b/gcc/config/rs6000/rtems.h > @@ -72,6 +72,11 @@ > } \ > while (0) > > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} ecrti.o%s crtbegin.o%s}" > + > /* Copy and paste from linux64.h and freebsd64.h */ > #undef RELOCATABLE_NEEDS_FIXUP > #define RELOCATABLE_NEEDS_FIXUP \ > diff --git a/gcc/config/rtems.h b/gcc/config/rtems.h > index dcea95c..9a0619c 100644 > --- a/gcc/config/rtems.h > +++ b/gcc/config/rtems.h > @@ -30,11 +30,15 @@ > * Dummy start/end specification to let linker work as > * needed by autoconf scripts using this compiler. > */ > +#if 0 > #undef STARTFILE_SPEC > -#define STARTFILE_SPEC "crt0.o%s" > +#define STARTFILE_SPEC "%{!qrtems: crt0.o%s}" > +#endif > > +#if 0 > #undef ENDFILE_SPEC > #define ENDFILE_SPEC "" > +#endif > > /* > * Some targets do not set up LIB_SPECS, override it, here. > diff --git a/gcc/config/sh/rtems.h b/gcc/config/sh/rtems.h > index d2f2b2a..f699151 100644 > --- a/gcc/config/sh/rtems.h > +++ b/gcc/config/sh/rtems.h > @@ -29,3 +29,7 @@ > builtin_define( "__rtems__" ); \ > builtin_assert( "system=rtems" ); \ > } while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/sh/rtemself.h b/gcc/config/sh/rtemself.h > index 6a67b49..85f26b0 100644 > --- a/gcc/config/sh/rtemself.h > +++ b/gcc/config/sh/rtemself.h > @@ -29,3 +29,7 @@ > builtin_define( "__rtems__" ); \ > builtin_assert( "system=rtems" ); \ > } while (0) > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/sparc/rtemself.h b/gcc/config/sparc/rtemself.h > index e4b52d8..7c5bf43 100644 > --- a/gcc/config/sparc/rtemself.h > +++ b/gcc/config/sparc/rtemself.h > @@ -38,3 +38,7 @@ > > /* Use the default */ > #undef LINK_GCC_C_SEQUENCE_SPEC > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > diff --git a/gcc/config/v850/rtems.h b/gcc/config/v850/rtems.h > index b20b2c3..1b56649 100644 > --- a/gcc/config/v850/rtems.h > +++ b/gcc/config/v850/rtems.h > @@ -39,3 +39,7 @@ > %{!mv850es:%{!mv850e1:%{mv*:-mv%*}} \ > %{m8byte-align:-m8byte-align} \ > %{mgcc-abi:-mgcc-abi}}" > + > +#undef STARTFILE_SPEC > +#define STARTFILE_SPEC "\ > +%{!nostdlib: %{!qrtems: crt0.o%s} crti.o%s crtbegin.o%s}" > -- > 1.8.3.1 > > _______________________________________________ > devel mailing list > devel@rtems.org > http://lists.rtems.org/mailman/listinfo/devel _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel