Add support for -nolibc
authorOlivier Hainque <hainque@adacore.com>
Tue, 31 Jul 2018 09:24:41 +0000 (09:24 +0000)
committerOlivier Hainque <hainque@gcc.gnu.org>
Tue, 31 Jul 2018 09:24:41 +0000 (09:24 +0000)
2018-06-07  Olivier Hainque  <hainque@adacore.com>

* common.opt (nolibc): New option.
* doc/invoke.texi (Link Options): Document it.
* gcc.c (LINK_GCC_C_SEQUENCE_SPEC): Honor nolibc.
* config/alpha/linux.h: Likewise.
* config/arc/elf.h: Likewise.
* config/arm/uclinux-elf.h: Likewise.
* config/arm/unknown-elf.h: Likewise.
* config/avr/avrlibc.h: Likewise.
* config/bfin/bfin.h: Likewise.
* config/bfin/linux.h: Likewise.
* config/bfin/uclinux.h: Likewise.
* config/darwin.h: Likewise.
* config/darwin10.h: Likewise.
* config/darwin12.h: Likewise.
* config/gnu-user.h: Likewise.
* config/lm32/uclinux-elf.h: Likewise.
* config/pa/pa-hpux11.h: Likewise.
* config/pa/pa64-hpux.h: Likewise.
* config/sparc/sparc.h: Likewise.

From-SVN: r263083

20 files changed:
gcc/ChangeLog
gcc/common.opt
gcc/config/alpha/linux.h
gcc/config/arc/elf.h
gcc/config/arm/uclinux-elf.h
gcc/config/arm/unknown-elf.h
gcc/config/avr/avrlibc.h
gcc/config/bfin/bfin.h
gcc/config/bfin/linux.h
gcc/config/bfin/uclinux.h
gcc/config/darwin.h
gcc/config/darwin10.h
gcc/config/darwin12.h
gcc/config/gnu-user.h
gcc/config/lm32/uclinux-elf.h
gcc/config/pa/pa-hpux11.h
gcc/config/pa/pa64-hpux.h
gcc/config/sparc/sparc.h
gcc/doc/invoke.texi
gcc/gcc.c

index e2eb1c69fd054243ac6079f275fa2639f2731a1d..cb0fb088548fa628862ab000d528f06a177a83b1 100644 (file)
@@ -1,3 +1,25 @@
+2018-07-31  Olivier Hainque  <hainque@adacore.com>
+
+       * common.opt (nolibc): New option.
+       * doc/invoke.texi (Link Options): Document it.
+       * gcc.c (LINK_GCC_C_SEQUENCE_SPEC): Honor nolibc.
+       * config/alpha/linux.h: Likewise.
+       * config/arc/elf.h: Likewise.
+       * config/arm/uclinux-elf.h: Likewise.
+       * config/arm/unknown-elf.h: Likewise.
+       * config/avr/avrlibc.h: Likewise.
+       * config/bfin/bfin.h: Likewise.
+       * config/bfin/linux.h: Likewise.
+       * config/bfin/uclinux.h: Likewise.
+       * config/darwin.h: Likewise.
+       * config/darwin10.h: Likewise.
+       * config/darwin12.h: Likewise.
+       * config/gnu-user.h: Likewise.
+       * config/lm32/uclinux-elf.h: Likewise.
+       * config/pa/pa-hpux11.h: Likewise.
+       * config/pa/pa64-hpux.h: Likewise.
+       * config/sparc/sparc.h: Likewise.
+
 2018-07-31  Olivier Hainque  <hainque@adacore.com>
 
        * gcc.c (getenv_spec_function): Prepend '/' to value for allowed
index 4bf8de903318efeb906c8b7a0be678918a42aafc..5bb645291cfc9cc0e4cf4395593b3d5890eb18eb 100644 (file)
@@ -3040,6 +3040,9 @@ Driver
 nostartfiles
 Driver
 
+nolibc
+Driver
+
 nostdlib
 Driver
 
index 2bf52fe78aedc8f1917bce64af6785c5f88786dc..6d12d90351b2e358062c9dcae6e4ec1ab9c0498a 100644 (file)
@@ -105,7 +105,7 @@ along with GCC; see the file COPYING3.  If not see
    %{shared|pie:crtendS.o%s;:crtend.o%s} crtn.o%s"
 
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static|static-pie:--start-group} %G %L \
+  "%{static|static-pie:--start-group} %G %{!nolibc:%L} \
    %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}"
 
 /* Use --as-needed -lgcc_s for eh support.  */
index 66ee5b698eabf7b5e84d17ffe178dbfc69826d15..3472fd2e4188f2b81b642f39157c4218a5b0b731 100644 (file)
@@ -77,4 +77,4 @@ along with GCC; see the file COPYING3.  If not see
 /* If no specs file is enforced, default to nosys libarary.  */
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC                               \
-  "--start-group %G %{!specs=*:-lc -lnosys} --end-group"
+  "--start-group %G %{!specs=*:%{!nolibc:-lc -lnosys}} --end-group"
index f78f279f0abe80e5a4d350b59ef9e10bb257282a..573398321331dccaf9ea8e92aaa6bc3dd0a69571 100644 (file)
@@ -67,8 +67,8 @@
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static|static-pie:--start-group} %G %L \
-   %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %L}}"
+  "%{static|static-pie:--start-group} %G %{!nolibc:%L} \
+   %{static|static-pie:--end-group}%{!static:%{!static-pie:%G %{!nolibc:%L}}}"
 
 /* Use --as-needed -lgcc_s for eh support.  */
 #ifdef HAVE_LD_AS_NEEDED
index 12dd0931b086c561e801841f1e35d023a5fa4f49..6eeb0eb2d1f762ab4df29a15a5b0009e86501bba 100644 (file)
@@ -93,4 +93,4 @@
    udivmoddi4, which will depend on the exception unwind routines,
    which will depend on abort, which is defined in libc.  */ 
 #undef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %L --end-group"
+#define LINK_GCC_C_SEQUENCE_SPEC "--start-group %G %{!nolibc:%L} --end-group"
index 95a1d7c302f860956339a25c2e9a884102b81a28..f4a41a1b5560d975c0b02ba0e6dee0a78314f306 100644 (file)
@@ -37,4 +37,4 @@ along with GCC; see the file COPYING3.  If not see
 
 #undef  LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "--start-group %G %L --end-group"
+  "--start-group %G %{!nolibc:%L} --end-group"
index 4709282aab5bab3c2c75d0dcb09e5625e4476c7e..a503d579f1a43a18ca4a1483706b630563d1c85d 100644 (file)
 #endif
 
 #define LINK_GCC_C_SEQUENCE_SPEC "\
-  %{mfast-fp:-lbffastfp} %G %L %{mfast-fp:-lbffastfp} %G \
+  %{mfast-fp:-lbffastfp} %G %{!nolibc:%L} %{mfast-fp:-lbffastfp} %G \
 "
 
 #undef  ASM_SPEC
index 9d317d10f24b002fd406f9de59f2696c55289733..b1592ee77540991c4de6db3dc4e25a960005d51a 100644 (file)
@@ -35,7 +35,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %L \
+  "%{static|static-pie:--start-group} %{mfast-fp:-lbffastfp} %G %{!nolibc:%L} \
    %{static|static-pie:--end-group} \
    %{!static:%{!static-pie:%{mfast-fp:-lbffastfp} %G}}"
 
index 7ef3b16f9847b804733567040016857bb7e85db3..beb6d457061f96e58cd09e7d351ab6c25f627ccf 100644 (file)
@@ -29,7 +29,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC "\
-  %{mfast-fp:-lbffastfp} %G %L %{mfast-fp:-lbffastfp} %G \
+  %{mfast-fp:-lbffastfp} %G %{!nolibc:%L} %{mfast-fp:-lbffastfp} %G \
 "
 
 #undef TARGET_SUPPORTS_SYNC_CALLS
index 591188a1d19257e9b54d5463e2c1860edf44c696..980ad9b4057e68e5d26f3ba96f1dc3fe16caca87 100644 (file)
@@ -210,7 +210,7 @@ extern GTY(()) int darwin_ms_struct;
 /* We only want one instance of %G, since libSystem (Darwin's -lc) does not depend
    on libgcc.  */
 #undef  LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "%G %L"
+#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L}"
 
 /* ld64 supports a sysroot, it just has a different name and there's no easy
    way to check for it at config time.  */
index 7da32917742ff859bb0449a1d73aa885c1d57065..d61eb40b8ff2f55e4dd6a65aa8d91af6bc30f450 100644 (file)
@@ -28,7 +28,7 @@ along with GCC; see the file COPYING3.  If not see
    %{!static:%{!static-libgcc: \
       %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) } } \
    %{fno-pic|fno-PIC|fno-pie|fno-PIE|fapple-kext|mkernel|static|mdynamic-no-pic: \
-      %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %G %L"
+      %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %G %{!nolibc:%L}"
 
 #undef DEF_MIN_OSX_VERSION
 #define DEF_MIN_OSX_VERSION "10.6"
index f1562c5ad6cf0bd932e1cc3e9a0d99e345cf14ad..e1e1eb085a217d25ce54b8593b6b5a8c14caa8e6 100644 (file)
@@ -24,7 +24,7 @@ along with GCC; see the file COPYING3.  If not see
    %{!static:%{!static-libgcc: \
       %:version-compare(>= 10.6 mmacosx-version-min= -lSystem) } } \
    %{fno-pic|fno-PIC|fno-pie|fno-PIE|fapple-kext|mkernel|static|mdynamic-no-pic: \
-      %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %G %L"
+      %:version-compare(>= 10.7 mmacosx-version-min= -no_pie) } %G %{!nolibc:%L}"
 
 #undef DEF_MIN_OSX_VERSION
 #define DEF_MIN_OSX_VERSION "10.8"
index b326cf069c5f17d048bab310f80e5999dd987f0b..5b48fb215149957b3e3eb232271964f4552b13c2 100644 (file)
@@ -135,7 +135,7 @@ see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
 
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static|static-pie:--start-group} %G %L \
+  "%{static|static-pie:--start-group} %G %{!nolibc:%L} \
    %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}"
 
 /* Use --as-needed -lgcc_s for eh support.  */
index cfaca3724623d8e40587f723fd529cbc70cb3ee3..ac51d97050a7b5a5d99c3444356a95e16f0a14fa 100644 (file)
@@ -68,7 +68,7 @@
 #define TARGET_OS_CPP_BUILTINS() GNU_USER_TARGET_OS_CPP_BUILTINS()
 
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%{static|static-pie:--start-group} %G %L \
+  "%{static|static-pie:--start-group} %G %{!nolibc:%L} \
    %{static|static-pie:--end-group}%{!static:%{!static-pie:%G}}"
 
 #undef  CC1_SPEC
index 8adfe18b190f23793d5869f31ddbb7b87635aeb6..0e960c3c15aab1646776693df56ea05d59a3a158 100644 (file)
@@ -157,7 +157,7 @@ along with GCC; see the file COPYING3.  If not see
 /* The libgcc_stub.a library needs to come last.  */
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC \
-  "%G %L %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}}}"
+  "%G %{!nolibc:%L} %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}}}"
 
 #undef STARTFILE_SPEC
 #define STARTFILE_SPEC \
index 6f70767c2a5a41fd38299beec7017681dee166b7..2c24238edb4e94aa7266b44e3f9bcb516e89e9ac 100644 (file)
@@ -106,7 +106,7 @@ along with GCC; see the file COPYING3.  If not see
 /* The libgcc_stub.a and milli.a libraries need to come last.  */
 #undef LINK_GCC_C_SEQUENCE_SPEC
 #define LINK_GCC_C_SEQUENCE_SPEC "\
-  %G %L %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}\
+  %G %{!nolibc:%L} %G %{!nostdlib:%{!nodefaultlibs:%{!shared:-lgcc_stub}\
   milli.a%s}}"
 
 /* Under hpux11, the normal location of the `ld' and `as' programs is the
index 032a91d467a358645e615b1f506c4d7a3c7a79eb..87358c7e90e1cb731962cd5db50bacdf37a572fc 100644 (file)
@@ -420,7 +420,7 @@ extern enum cmodel sparc_cmodel;
 
 /* Because libgcc can generate references back to libc (via .umul etc.) we have
    to list libc again after the second libgcc.  */
-#define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G %L"
+#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L} %G %{!nolibc:%L}"
 
 \f
 #define PTRDIFF_TYPE (TARGET_ARCH64 ? "long int" : "int")
index 1dcdfb51c470a3a5b45affe58189288626153219..27097d776066a71265897628b0b71dc58497e3ba 100644 (file)
@@ -517,7 +517,8 @@ Objective-C and Objective-C++ Dialects}.
 @item Linker Options
 @xref{Link Options,,Options for Linking}.
 @gccoptlist{@var{object-file-name}  -fuse-ld=@var{linker}  -l@var{library} @gol
--nostartfiles  -nodefaultlibs  -nostdlib  -pie  -pthread  -rdynamic @gol
+-nostartfiles  -nodefaultlibs  -nolibc  -nostdlib @gol
+-pie  -pthread  -rdynamic @gol
 -s  -static -static-pie -static-libgcc  -static-libstdc++ @gol
 -static-libasan  -static-libtsan  -static-liblsan  -static-libubsan @gol
 -shared  -shared-libgcc  -symbolic @gol
@@ -12350,8 +12351,8 @@ link an Objective-C or Objective-C++ program.
 @item -nostartfiles
 @opindex nostartfiles
 Do not use the standard system startup files when linking.
-The standard system libraries are used normally, unless @option{-nostdlib}
-or @option{-nodefaultlibs} is used.
+The standard system libraries are used normally, unless @option{-nostdlib},
+@option{-nolibc}, or @option{-nodefaultlibs} is used.
 
 @item -nodefaultlibs
 @opindex nodefaultlibs
@@ -12368,6 +12369,18 @@ These entries are usually resolved by entries in
 libc.  These entry points should be supplied through some other
 mechanism when this option is specified.
 
+@item -nolibc
+@opindex nolibc
+Do not use the C library or system libraries tightly coupled with it when
+linking.  Still link with the startup files, @file{libgcc} or toolchain
+provided language support libraries such as @file{libgnat}, @file{libgfortran}
+or @file{libstdc++} unless options preventing their inclusion are used as
+well.  This typically removes @option{-lc} from the link command line, as well
+as system libraries that normally go with it and become meaningless when
+absence of a C library is assumed, for example @option{-lpthread} or
+@option{-lm} in some configurations.  This is intended for bare-board
+targets when there is indeed no C library available.
+
 @item -nostdlib
 @opindex nostdlib
 Do not use the standard system startup files or libraries when linking.
index 48689ed398a2d411eb19df1b5d1f5f660d8ac2ee..da91112be5e1d8959c85383f78bdd275a9718849 100644 (file)
--- a/gcc/gcc.c
+++ b/gcc/gcc.c
@@ -872,7 +872,7 @@ proper position among the other output files.  */
    -lgcc and -lc order specially, yet not require them to override all
    of LINK_COMMAND_SPEC.  */
 #ifndef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC "%G %L %G"
+#define LINK_GCC_C_SEQUENCE_SPEC "%G %{!nolibc:%L %G}"
 #endif
 
 #ifndef LINK_SSP_SPEC