gcc/libgcc/config/t-darwin
Iain Sandoe 506e74f53a libgcc: Make heap trampoline support dynamic [PR113403].
In order to handle system security constraints during GCC build
and test and that most platform versions cannot link to libgcc_eh
since the unwinder there is incompatible with the system one.

1. We make the support functions weak definitions.
2. We include them as a CRT for platform conditions that do not
   allow libgcc_eh.
3. We ensure that the weak symbols are exported from DSOs (which
   includes exes on Darwin) so that the dynamic linker will
   pick one instance (which avoids duplication of trampoline
   caches).

	PR libgcc/113403

gcc/ChangeLog:

	* config/darwin.h (DARWIN_SHARED_WEAK_ADDS, DARWIN_WEAK_CRTS): New.
	(REAL_LIBGCC_SPEC): Move weak CRT handling to separate spec.
	* config/i386/darwin.h (DARWIN_HEAP_T_LIB): New.
	* config/i386/darwin32-biarch.h (DARWIN_HEAP_T_LIB): New.
	* config/i386/darwin64-biarch.h (DARWIN_HEAP_T_LIB): New.
	* config/rs6000/darwin.h (DARWIN_HEAP_T_LIB): New.

libgcc/ChangeLog:

	* config.host: Build libheap_t.a for i686/x86_64 Darwin.
	* config/aarch64/heap-trampoline.c (HEAP_T_ATTR): New.
	(allocate_tramp_ctrl): Allow a target to build this as a weak def.
	(__gcc_nested_func_ptr_created): Likewise.
	* config/i386/heap-trampoline.c (HEAP_T_ATTR): New.
	(allocate_tramp_ctrl): Allow a target to build this as a weak def.
	(__gcc_nested_func_ptr_created): Likewise.
	* config/t-darwin: Build libheap_t.a (a CRT with heap trampoline
	support).
2024-01-30 09:33:09 +00:00

69 lines
2.6 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 += $(DARWIN_MIN_LIB_VERSION)
crt3.o: $(srcdir)/config/darwin-crt3.c
$(crt_compile) $(DARWIN_MIN_CRT_VERSION) -c $<
crttms.o: $(srcdir)/config/darwin-crt-tm.c
$(crt_compile) $(DARWIN_MIN_CRT_VERSION) -DSTART -c $<
crttme.o: $(srcdir)/config/darwin-crt-tm.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.
emutls.o: HOST_LIBGCC2_CFLAGS += \
-DEMUTLS_ATTR='__attribute__((__weak__,__visibility__("default")))'
emutls_s.o: HOST_LIBGCC2_CFLAGS += \
-DEMUTLS_ATTR='__attribute__((__weak__,__visibility__("default")))'
# Make the emutls crt as a convenience lib so that it can be linked
# optionally, use the shared version so that we can link with DSO.
libemutls_w.a: emutls_s.o
$(AR_CREATE_FOR_TARGET) $@ $<
$(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 $<
# Using this crt as a library means that it will not be added to an exe
# (or module) unless needed.
libd10-uwfef.a: d10-uwfef.o
$(AR_CREATE_FOR_TARGET) $@ d10-uwfef.o
$(RANLIB_FOR_TARGET) $@
###### Unwinder #######
# Most Darwin versions get their unwinder from libSystem; older versions
# have an installed /usr/lib/libgcc_s.1.dylib.
# So do not add the unwinder to the shared libgcc.
LIB2ADDEHSHARED =
# We still need it in the _eh.a for earlier platform versions.
# Use unwind-dw2-fde-darwin
LIB2ADDEH = $(srcdir)/unwind-dw2.c \
$(srcdir)/config/unwind-dw2-fde-darwin.c \
$(srcdir)/unwind-c.c
# Do not build a shared unwind lib by default.
LIBEHSOBJS=
# Make heap trampoline helpers weak definitions so that we can merge them from
# multiple DSOs.
heap-trampoline.o: HOST_LIBGCC2_CFLAGS += \
-DHEAP_T_ATTR='__attribute__((__weak__,__visibility__("default")))'
heap-trampoline_s.o: HOST_LIBGCC2_CFLAGS += \
-DHEAP_T_ATTR='__attribute__((__weak__,__visibility__("default")))'
# Make a heap trampoline support CRT so that it can be linked optionally, use
# the shared version so that we can link with DSOs.
libheapt_w.a: heap-trampoline_s.o
$(AR_CREATE_FOR_TARGET) $@ $<
$(RANLIB_FOR_TARGET) $@
# Symbols for all the sub-ports.
SHLIB_MAPFILES = libgcc-std.ver $(srcdir)/config/libgcc-libsystem.ver