Skip to content

Commit

Permalink
Darwin, libgcc : Adjust min version supported for the OS.
Browse files Browse the repository at this point in the history
Tools from later versions of the OS deprecate or fail to support
earlier OS revisions.

Signed-off-by: Iain Sandoe <iain@sandoe.co.uk>

libgcc/ChangeLog:

	* config.host: Arrange to set min Darwin OS versions from
	the configured host version.
	* config/darwin10-unwind-find-enc-func.c: Do not use current
	headers, but declare the nexessary structures locally to the
	versions in use for Mac OSX 10.6.
	* config/t-darwin: Amend to handle configured min OS
	versions.
	* config/t-darwin-min-1: New.
	* config/t-darwin-min-5: New.
	* config/t-darwin-min-8: New.
  • Loading branch information
iains committed May 19, 2023
1 parent 24dcf65 commit 20b8779
Show file tree
Hide file tree
Showing 6 changed files with 63 additions and 8 deletions.
18 changes: 18 additions & 0 deletions libgcc/config.host
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,24 @@ case ${host} in
;;
esac
tmake_file="$tmake_file t-slibgcc-darwin"
# newer toolsets produce warnings when building for unsupported versions.
case ${host} in
*-*-darwin1[89]* | *-*-darwin2* )
tmake_file="t-darwin-min-8 $tmake_file"
;;
*-*-darwin9* | *-*-darwin1[0-7]*)
tmake_file="t-darwin-min-5 $tmake_file"
;;
*-*-darwin[4-8]*)
tmake_file="t-darwin-min-1 $tmake_file"
;;
*)
# Fall back to configuring for the oldest system known to work with
# all archs and the current sources.
tmake_file="t-darwin-min-5 $tmake_file"
echo "Warning: libgcc configured to support macOS 10.5" 1>&2
;;
esac
extra_parts="crt3.o libd10-uwfef.a crttms.o crttme.o libemutls_w.a"
;;
*-*-dragonfly*)
Expand Down
34 changes: 30 additions & 4 deletions libgcc/config/darwin10-unwind-find-enc-func.c
Original file line number Diff line number Diff line change
@@ -1,14 +1,40 @@
#include "tconfig.h"
#include "tsystem.h"
#include "unwind-dw2-fde.h"
#include "libgcc_tm.h"

/* This shim is special, it needs to be built for Mac OSX 10.6
regardless of the current system version.
We must also build it to use the unwinder layout that was
present for 10.6 (and not update that).
So we copy the referenced structures from unwind-dw2-fde.h
to avoid pulling in newer system headers and/or changed
layouts. */
struct dwarf_eh_bases
{
void *tbase;
void *dbase;
void *func;
};

typedef int sword __attribute__ ((mode (SI)));
typedef unsigned int uword __attribute__ ((mode (SI)));

/* The first few fields of an FDE. */
struct dwarf_fde
{
uword length;
sword CIE_delta;
unsigned char pc_begin[];
} __attribute__ ((packed, aligned (__alignof__ (void *))));

typedef struct dwarf_fde fde;

extern const fde * _Unwind_Find_FDE (void *, struct dwarf_eh_bases *);

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;
return (void *) 0;
}
10 changes: 6 additions & 4 deletions libgcc/config/t-darwin
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
# Set this as a minimum (unless overriden by arch t-files) since it's a
# reasonable lowest common denominator that works for all our archs.
HOST_LIBGCC2_CFLAGS += -mmacosx-version-min=10.4
HOST_LIBGCC2_CFLAGS += $(DARWIN_MIN_LIB_VERSION)

crt3.o: $(srcdir)/config/darwin-crt3.c
$(crt_compile) -mmacosx-version-min=10.4 -c $<
$(crt_compile) $(DARWIN_MIN_CRT_VERSION) -c $<

crttms.o: $(srcdir)/config/darwin-crt-tm.c
$(crt_compile) -mmacosx-version-min=10.4 -DSTART -c $<
$(crt_compile) $(DARWIN_MIN_CRT_VERSION) -DSTART -c $<

crttme.o: $(srcdir)/config/darwin-crt-tm.c
$(crt_compile) -mmacosx-version-min=10.4 -DEND -c $<
$(crt_compile) $(DARWIN_MIN_CRT_VERSION) -DEND -c $<

# Make emutls weak so that we can deal with -static-libgcc, override the
# hidden visibility when this is present in libgcc_eh.
Expand All @@ -25,6 +25,8 @@ libemutls_w.a: emutls_s.o
$(RANLIB_FOR_TARGET) $@

# Patch to __Unwind_Find_Enclosing_Function for Darwin10.
# This needs to be built for darwin10, regardless of the current platform
# version.
d10-uwfef.o: $(srcdir)/config/darwin10-unwind-find-enc-func.c libgcc_tm.h
$(crt_compile) -mmacosx-version-min=10.6 -c $<

Expand Down
3 changes: 3 additions & 0 deletions libgcc/config/t-darwin-min-1
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Support building with -mmacosx-version-min back to 10.1.
DARWIN_MIN_LIB_VERSION = -mmacosx-version-min=10.4
DARWIN_MIN_CRT_VERSION = -mmacosx-version-min=10.1
3 changes: 3 additions & 0 deletions libgcc/config/t-darwin-min-5
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Support building with -mmacosx-version-min back to 10.5.
DARWIN_MIN_LIB_VERSION = -mmacosx-version-min=10.5
DARWIN_MIN_CRT_VERSION = -mmacosx-version-min=10.5
3 changes: 3 additions & 0 deletions libgcc/config/t-darwin-min-8
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# Support building with -mmacosx-version-min back to 10.8.
DARWIN_MIN_LIB_VERSION = -mmacosx-version-min=10.8
DARWIN_MIN_CRT_VERSION = -mmacosx-version-min=10.8

0 comments on commit 20b8779

Please sign in to comment.