⛏️ index : buildtools.git

author Simon South <ssouth@simonsouth.com> 2015-10-22 2:38:57.0 -04:00:00
committer Jérôme Duval <jerome.duval@gmail.com> 2015-10-28 18:05:10.0 +01:00:00
commit
419211519c79edc7af6fca9c6a3233129ec54d7d [patch]
tree
660e869d4c3dff5678cb8c912c67421f3981470f
parent
f625dd9f943d7bf9e9edefbf1a1edcb107122e2d
download
419211519c79edc7af6fca9c6a3233129ec54d7d.tar.gz

gcc: Allow the user to build non-PI executables

* CC1_SPEC: Remove non-existent "no-fpic" command-line option; add
  "fno-PIC" and "fno-PIE" as options that disable the generation of
  position-independent code; use "-fPIC" by default.
* LINK_SPEC: Pass "-shared" to the linker only if it was passed to gcc; output
  position-independent executables by default; when linking executables, allow
  undefined symbols in shared libraries and export all symbols (to match the
  behaviour of "-shared").

Signed-off-by: Jérôme Duval <jerome.duval@gmail.com>

Diff

 gcc/gcc/config/haiku.h        | 2 +-
 gcc/gcc/config/arm/haiku.h    | 2 +-
 gcc/gcc/config/i386/haiku.h   | 2 +-
 gcc/gcc/config/i386/haiku64.h | 2 +-
 gcc/gcc/config/m68k/haiku.h   | 2 +-
 gcc/gcc/config/mips/haiku.h   | 2 +-
 gcc/gcc/config/rs6000/haiku.h | 4 ++--
 7 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/gcc/gcc/config/haiku.h b/gcc/gcc/config/haiku.h
index bf498ee..7f456b7 100644
--- a/gcc/gcc/config/haiku.h
+++ a/gcc/gcc/config/haiku.h
@@ -46,7 +46,7 @@
   user explicitly asks for the warnings with -Wmultichar.  Note that
   CC1_SPEC is used for both cc1 and cc1plus.  */
#undef CC1_SPEC
#define CC1_SPEC "%{!no-fpic:%{!fno-pic:%{!fno-pie:%{!fpie:%{!fPIC:%{!fPIE:-fpic}}}}}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}"
#define CC1_SPEC "%{fpic|fPIC|fpie|fPIE|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-fPIC} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}"

#undef CC1PLUS_SPEC
#define CC1PLUS_SPEC "%{!Wctor-dtor-privacy:-Wno-ctor-dtor-privacy}"
diff --git a/gcc/gcc/config/arm/haiku.h b/gcc/gcc/config/arm/haiku.h
index f0c0d63..f0897fa 100644
--- a/gcc/gcc/config/arm/haiku.h
+++ a/gcc/gcc/config/arm/haiku.h
@@ -75,6 +75,6 @@
/* If ELF is the default format, we should not use /lib/elf.  */

#undef	LINK_SPEC
#define LINK_SPEC "%{!o*:-o %b} -m armelf %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}\
#define LINK_SPEC "%{!o*:-o %b} -m armelf %{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} %{nostart:-e 0} %{shared:-shared -e 0} %{!shared: %{!nostart: -no-undefined}}\
  %{mbig-endian:-EB} %{mlittle-endian:-EL} -X"

diff --git a/gcc/gcc/config/i386/haiku.h b/gcc/gcc/config/i386/haiku.h
index 3379e19..fb98940 100644
--- a/gcc/gcc/config/i386/haiku.h
+++ a/gcc/gcc/config/i386/haiku.h
@@ -53,7 +53,7 @@
/* If ELF is the default format, we should not use /lib/elf.  */

#undef	LINK_SPEC
#define LINK_SPEC "-m elf_i386_haiku %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
#define LINK_SPEC "-m elf_i386_haiku %{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} %{nostart:-e 0} %{shared:-shared -e 0} %{!shared: %{!nostart: -no-undefined}}"

/* A C statement (sans semicolon) to output to the stdio stream
   FILE the assembler definition of uninitialized global DECL named
diff --git a/gcc/gcc/config/i386/haiku64.h b/gcc/gcc/config/i386/haiku64.h
index 41b3319..d1c9b4b 100644
--- a/gcc/gcc/config/i386/haiku64.h
+++ a/gcc/gcc/config/i386/haiku64.h
@@ -65,7 +65,7 @@

#undef	LINK_SPEC
#define LINK_SPEC "%{" SPEC_64 ":-m elf_x86_64} %{" SPEC_32 ":-m elf_i386_haiku} \
	%{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
	%{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} %{nostart:-e 0} %{shared:-shared -e 0} %{!shared: %{!nostart: -no-undefined}}"

/* A C statement (sans semicolon) to output to the stdio stream
   FILE the assembler definition of uninitialized global DECL named
diff --git a/gcc/gcc/config/m68k/haiku.h b/gcc/gcc/config/m68k/haiku.h
index 358c19f..9e47da4 100644
--- a/gcc/gcc/config/m68k/haiku.h
+++ a/gcc/gcc/config/m68k/haiku.h
@@ -108,7 +108,7 @@

#undef	LINK_SPEC
/*#define LINK_SPEC "%{!o*:-o %b} -m elf_m68k_haiku -shared -no-undefined %{nostart:-e 0}"*/
#define LINK_SPEC "%{!o*:-o %b} -m m68kelf %{!r:-shared} -no-undefined %{nostart:-e 0}"
#define LINK_SPEC "%{!o*:-o %b} -m m68kelf %{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} -no-undefined %{nostart:-e 0}"

/* XXX: not sure for the rest there... */

diff --git a/gcc/gcc/config/mips/haiku.h b/gcc/gcc/config/mips/haiku.h
index f6d2efb..412d195 100644
--- a/gcc/gcc/config/mips/haiku.h
+++ a/gcc/gcc/config/mips/haiku.h
@@ -40,5 +40,5 @@
  while (0)

#undef	LINK_SPEC
#define LINK_SPEC "%{!o*:-o %b} -m elf_mipsel_haiku %{!r:-shared} %{nostart:-e 0}"
#define LINK_SPEC "%{!o*:-o %b} -m elf_mipsel_haiku %{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} %{nostart:-e 0}"

diff --git a/gcc/gcc/config/rs6000/haiku.h b/gcc/gcc/config/rs6000/haiku.h
index 9ff36f1..17c71eb 100644
--- a/gcc/gcc/config/rs6000/haiku.h
+++ a/gcc/gcc/config/rs6000/haiku.h
@@ -53,7 +53,7 @@
/* If ELF is the default format, we should not use /lib/elf.  */

#undef	LINK_SPEC
#define LINK_SPEC "%{!o*:-o %b} -m elf32ppchaiku %{!r:-shared} %{nostart:-e 0} %{shared:-e 0} %{!shared: %{!nostart: -no-undefined}}"
#define LINK_SPEC "%{!o*:-o %b} -m elf32ppchaiku %{shared|r|pie|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-pie --allow-shlib-undefined --export-dynamic} %{nostart:-e 0} %{shared:-shared -e 0} %{!shared: %{!nostart: -no-undefined}}"

#undef CC1_SPEC
#define CC1_SPEC "%{!no-fpic:%{!fno-pic:%{!fno-pie:%{!fpie:%{!fPIC:%{!fPIE:-fPIC}}}}}} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}"
#define CC1_SPEC "%{fpic|fPIC|fpie|fPIE|fno-pic|fno-PIC|fno-pie|fno-PIE:;:-fPIC} %{!Wmultichar: -Wno-multichar} %(cc1_cpu) %{profile:-p}"