aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIain Sandoe <iain@sandoe.co.uk>2018-08-22 11:58:43 +0000
committerIain Sandoe <iains@gcc.gnu.org>2018-08-22 11:58:43 +0000
commita49c064e407df3d39776241f2c08b14e6affde1e (patch)
tree46b0d7e2ac835e54b397263c266ab174ab46aeeb
parent36bd86fa510ec16c32d7d7134b5897787a3f54b2 (diff)
downloadgcc-a49c064e407df3d39776241f2c08b14e6affde1e.zip
gcc-a49c064e407df3d39776241f2c08b14e6affde1e.tar.gz
gcc-a49c064e407df3d39776241f2c08b14e6affde1e.tar.bz2
Move Darwin10 unwinder fix to a crt shim.
gcc/ * config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Adjust to use the Darwin10-specific unwinder-shim. * config/darwin12.h (LINK_GCC_C_SEQUENCE_SPEC): Remove. * config/rs6000/darwin.h (DARWIN_CRT1_SPEC, DARWIN_DYLIB1_SPEC): New to cater for Darwin10 Rosetta. libgcc/ * config/unwind-dw2-fde-darwin.c (_darwin10_Unwind_FindEnclosingFunction): move from here ... * config/darwin10-unwind-find-enc-func.c: … to here. * config/t-darwin: Build Darwin10 unwinder shim crt. * libgcc/config.host: Add the Darwin10 unwinder shim. From-SVN: r263765
-rw-r--r--gcc/ChangeLog17
-rw-r--r--gcc/config/darwin10.h10
-rw-r--r--gcc/config/darwin12.h8
-rw-r--r--gcc/config/rs6000/darwin.h13
-rw-r--r--libgcc/ChangeLog8
-rw-r--r--libgcc/config/darwin10-unwind-find-enc-func.c13
-rw-r--r--libgcc/config/t-darwin4
-rw-r--r--libgcc/config/unwind-dw2-fde-darwin.c13
8 files changed, 57 insertions, 29 deletions
diff --git a/gcc/ChangeLog b/gcc/ChangeLog
index a3c6753..0b8adf5 100644
--- a/gcc/ChangeLog
+++ b/gcc/ChangeLog
@@ -1,5 +1,13 @@
2018-08-22 Iain Sandoe <iain@sandoe.co.uk>
+ * config/darwin10.h (LINK_GCC_C_SEQUENCE_SPEC): Adjust to use the
+ Darwin10-specific unwinder-shim.
+ * config/darwin12.h (LINK_GCC_C_SEQUENCE_SPEC): Remove.
+ * config/rs6000/darwin.h (DARWIN_CRT1_SPEC, DARWIN_DYLIB1_SPEC):
+ New to cater for Darwin10 Rosetta.
+
+2018-08-22 Iain Sandoe <iain@sandoe.co.uk>
+
* config/i386/i386.c (ix86_output_addr_diff_elt): Move the MACH-O
specific test before the one for HAVE_AS_GOTOFF_IN_DATA.
@@ -9,10 +17,11 @@
PR target/81733
PR target/52795
* gcc/dwarf2out.c (FUNC_SECOND_SECT_LABEL): New.
- (dwarf2out_switch_text_section): Generate a local label for the second
- function sub-section and apply it as the second FDE start label.
- * gcc/final.c (final_scan_insn_1): Emit second FDE label after the second
- sub-section start.
+ (dwarf2out_switch_text_section): Generate a local label for the
+ second function sub-section and apply it as the second FDE start
+ label.
+ * gcc/final.c (final_scan_insn_1): Emit second FDE label after the
+ second sub-section start.
2018-08-22 Richard Biener <rguenther@suse.de>
diff --git a/gcc/config/darwin10.h b/gcc/config/darwin10.h
index d61eb40..df69429 100644
--- a/gcc/config/darwin10.h
+++ b/gcc/config/darwin10.h
@@ -25,10 +25,12 @@ along with GCC; see the file COPYING3. If not see
#undef LINK_GCC_C_SEQUENCE_SPEC
#define LINK_GCC_C_SEQUENCE_SPEC \
"%:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) \
- %{!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 %{!nolibc:%L}"
+ %{!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) } \
+ %{!nostdlib:%:version-compare(>< 10.6 10.7 mmacosx-version-min= -ld10-uwfef.o)} \
+ %G %{!nolibc:%L}"
#undef DEF_MIN_OSX_VERSION
#define DEF_MIN_OSX_VERSION "10.6"
diff --git a/gcc/config/darwin12.h b/gcc/config/darwin12.h
index e1e1eb0..adc9a78 100644
--- a/gcc/config/darwin12.h
+++ b/gcc/config/darwin12.h
@@ -18,14 +18,6 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
-#undef LINK_GCC_C_SEQUENCE_SPEC
-#define LINK_GCC_C_SEQUENCE_SPEC \
-"%:version-compare(>= 10.6 mmacosx-version-min= -no_compact_unwind) \
- %{!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 %{!nolibc:%L}"
-
#undef DEF_MIN_OSX_VERSION
#define DEF_MIN_OSX_VERSION "10.8"
diff --git a/gcc/config/rs6000/darwin.h b/gcc/config/rs6000/darwin.h
index cea1aa9..6b0f18e 100644
--- a/gcc/config/rs6000/darwin.h
+++ b/gcc/config/rs6000/darwin.h
@@ -119,6 +119,13 @@ extern int darwin_emit_branch_islands;
mcpu=G5:ppc970; \
:ppc}}"
+/* We need to jam the crt to 10.5 for 10.6 (Rosetta) use. */
+#undef DARWIN_CRT1_SPEC
+#define DARWIN_CRT1_SPEC \
+ "%:version-compare(!> 10.5 mmacosx-version-min= -lcrt1.o) \
+ %:version-compare(>< 10.5 10.7 mmacosx-version-min= -lcrt1.10.5.o) \
+ %{fgnu-tm: -lcrttms.o}"
+
/* crt2.o is at least partially required for 10.3.x and earlier. */
#define DARWIN_CRT2_SPEC \
"%{!m64:%:version-compare(!> 10.4 mmacosx-version-min= crt2.o%s)}"
@@ -130,6 +137,12 @@ extern int darwin_emit_branch_islands;
{ "darwin_crt2", DARWIN_CRT2_SPEC }, \
{ "darwin_subarch", DARWIN_SUBARCH_SPEC },
+/* We need to jam the dylib crt to 10.5 for 10.6 (Rosetta) use. */
+#undef DARWIN_DYLIB1_SPEC
+#define DARWIN_DYLIB1_SPEC \
+ "%:version-compare(!> 10.5 mmacosx-version-min= -ldylib1.o) \
+ %:version-compare(>< 10.5 10.7 mmacosx-version-min= -ldylib1.10.5.o)"
+
/* Output a .machine directive. */
#undef TARGET_ASM_FILE_START
#define TARGET_ASM_FILE_START rs6000_darwin_file_start
diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog
index 1cfba4c..d003fd5 100644
--- a/libgcc/ChangeLog
+++ b/libgcc/ChangeLog
@@ -1,3 +1,11 @@
+2018-08-22 Iain Sandoe <iain@sandoe.co.uk>
+
+ * config/unwind-dw2-fde-darwin.c
+ (_darwin10_Unwind_FindEnclosingFunction): move from here ...
+ * config/darwin10-unwind-find-enc-func.c: … to here.
+ * config/t-darwin: Build Darwin10 unwinder shim crt.
+ * libgcc/config.host: Add the Darwin10 unwinder shim.
+
2018-08-21 Rasmus Villemoes <rv@rasmusvillemoes.dk>
* config.host: Add crtbegin.o and crtend.o for
diff --git a/libgcc/config/darwin10-unwind-find-enc-func.c b/libgcc/config/darwin10-unwind-find-enc-func.c
new file mode 100644
index 0000000..67c4375
--- /dev/null
+++ b/libgcc/config/darwin10-unwind-find-enc-func.c
@@ -0,0 +1,13 @@
+#include "tconfig.h"
+#include "tsystem.h"
+#include "unwind-dw2-fde.h"
+
+void *
+_darwin10_Unwind_FindEnclosingFunction (void *pc)
+{
+ struct dwarf_eh_bases bases;
+ const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
+ if (fde)
+ return bases.func;
+ return NULL;
+}
diff --git a/libgcc/config/t-darwin b/libgcc/config/t-darwin
index 13ca6ed..8340ea2 100644
--- a/libgcc/config/t-darwin
+++ b/libgcc/config/t-darwin
@@ -20,3 +20,7 @@ HOST_LIBGCC2_CFLAGS += -pipe
# Use unwind-dw2-fde-darwin
LIB2ADDEH = $(srcdir)/unwind-dw2.c $(srcdir)/config/unwind-dw2-fde-darwin.c \
$(srcdir)/unwind-sjlj.c $(srcdir)/unwind-c.c
+
+# Patch to __Unwind_Find_Enclosing_Function for Darwin10.
+d10-uwfef.o: $(srcdir)/config/darwin10-unwind-find-enc-func.c
+ $(crt_compile) $(DARWIN_EXTRA_CRT_BUILD_CFLAGS) -mmacosx-version-min=10.6 -c $<
diff --git a/libgcc/config/unwind-dw2-fde-darwin.c b/libgcc/config/unwind-dw2-fde-darwin.c
index 6e2d0d6..c919de9 100644
--- a/libgcc/config/unwind-dw2-fde-darwin.c
+++ b/libgcc/config/unwind-dw2-fde-darwin.c
@@ -273,16 +273,3 @@ _Unwind_Find_FDE (void *pc, struct dwarf_eh_bases *bases)
the_obj_info);
return ret;
}
-
-void *
-_darwin10_Unwind_FindEnclosingFunction (void *pc ATTRIBUTE_UNUSED)
-{
-#if __MACH__ && (__ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ >= 1060)
- struct dwarf_eh_bases bases;
- const struct dwarf_fde *fde = _Unwind_Find_FDE (pc-1, &bases);
- if (fde)
- return bases.func;
-#endif
- return NULL;
-}
-