Skip to content

Instantly share code, notes, and snippets.

@AmaanC

AmaanC/gcc-fpic-shared.patch Secret

Created Aug 13, 2018
Embed
What would you like to do?
diff --git a/gcc/config.gcc b/gcc/config.gcc
index c3aecbfe764..d0d2be19d8b 100644
--- a/gcc/config.gcc
+++ b/gcc/config.gcc
@@ -1509,7 +1509,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 rtems.h"
;;
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/i386/rtemself64.h b/gcc/config/i386/rtemself64.h
new file mode 100644
index 00000000000..74d87ccb2cb
--- /dev/null
+++ b/gcc/config/i386/rtemself64.h
@@ -0,0 +1,53 @@
+/* Definitions for rtems targeting an x86_64 using ELF.
+ Copyright (C) 1996-2018 Free Software Foundation, Inc.
+ Contributed by Joel Sherrill (joel@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 \
+ %{!shared:crtbegin.o%s} %{shared:crtbeginS.o%s}}"
+
+#undef ENDFILE_SPEC
+#define ENDFILE_SPEC \
+ "%{!shared:crtend.o%s} %{shared:crtendS.o%s} crtn.o%s"
+
+/* Use -fPIC by default unless specified otherwise */
+#undef CC1_SPEC
+#define CC1_SPEC \
+ "%{!fno-pic:%{!fno-PIC:%{!fpic:%{!fPIC: -fPIC}}}}"
+
+#undef LINK_SPEC
+#define LINK_SPEC \
+ "%{shared:-shared}"
diff --git a/gcc/config/rtems.h b/gcc/config/rtems.h
index dcea95cddad..9a0619cb383 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/libgcc/config.host b/libgcc/config.host
index 18cabaf24f6..3be204a0da0 100644
--- a/libgcc/config.host
+++ b/libgcc/config.host
@@ -613,7 +613,7 @@ x86_64-*-elf* | x86_64-*-rtems*)
tmake_file="$tmake_file i386/t-crtstuff t-crtstuff-pic t-libgcc-pic"
case ${host} in
x86_64-*-rtems*)
- extra_parts="$extra_parts crti.o crtn.o"
+ extra_parts="$extra_parts crti.o crtn.o crtbeginS.o crtendS.o"
;;
esac
;;
@AmaanC

This comment has been minimized.

Copy link
Owner Author

@AmaanC AmaanC commented Aug 13, 2018

Built on top of Joel's WIP patch here:
https://lists.rtems.org/pipermail/devel/2018-May/021587.html

I just wanted to add sane defaults for when the -fPIC -shared options are used during compilation.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment