# Compile crtbeginS.o and crtendS.o with pic.
CRTSTUFF_T_CFLAGS_S = -fPIC

# Compile libgcc2.a with pic.
TARGET_LIBGCC2_CFLAGS = -fPIC

# Build a shared libgcc library.
SHLIB_EXT = .so
SHLIB_NAME = @shlib_base_name@.so
SHLIB_SONAME = @shlib_base_name@.so.1
SHLIB_OBJS = @shlib_objs@

# Hide all POSIX threads related symbols provided by gthr-posix.c.  This
# only has an effect if t-osf-pthread is in use.
SHLIB_LINK = $(GCC_FOR_TARGET) $(LIBGCC2_CFLAGS) -shared -nodefaultlibs \
	-Wl,-hidden_symbol,pthread\* -Wl,-hidden_symbol,__pthread\* \
	-Wl,-hidden_symbol,sched_get_\* -Wl,-hidden_symbol,sched_yield \
	-Wl,-msym -Wl,-set_version,gcc.1 -Wl,-soname,$(SHLIB_SONAME) \
	-o $(SHLIB_NAME).tmp @multilib_flags@ $(SHLIB_OBJS) -lc && \
	rm -f $(SHLIB_SONAME) && \
	if [ -f $(SHLIB_NAME) ]; then \
	  mv -f $(SHLIB_NAME) $(SHLIB_NAME).backup; \
	else true; fi && \
	mv $(SHLIB_NAME).tmp $(SHLIB_NAME) && \
	$(LN_S) $(SHLIB_NAME) $(SHLIB_SONAME)
# $(slibdir) double quoted to protect it from expansion while building
# libgcc.mk.  We want this delayed until actual install time.
SHLIB_INSTALL = \
	$$(mkinstalldirs) $$(DESTDIR)$$(slibdir); \
	$(INSTALL_DATA) $(SHLIB_NAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_SONAME); \
	rm -f $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME); \
	$(LN_S) $(SHLIB_SONAME) $$(DESTDIR)$$(slibdir)/$(SHLIB_NAME)
