From e682ab4139c03632d37f26f58652bfa71f728cd4 Mon Sep 17 00:00:00 2001 From: Bernd Schmidt Date: Fri, 23 Nov 2007 18:02:12 +0000 Subject: Some shared flat improvements. Fix minor errors: - UCLIBC_SHARED_FLAT_ID instead of SHARED_FLAT_ID - use -Wl,-shared-lib-id properly Use libc_so.a as the source for the shared libc, in order to be able to use -mleaf-id-shared-library on the Blackfin. --- Makerules | 7 +++++-- libc/Makefile.in | 7 +++++-- libc/misc/internals/Makefile.in | 7 +++++++ 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Makerules b/Makerules index aec7238a0..409a8decd 100644 --- a/Makerules +++ b/Makerules @@ -146,14 +146,17 @@ LINK_FLAT_CRTS := $(top_builddir)lib/Scrt1.o $(top_builddir)lib/crti.o \ # Argument 1 is the shared library file -- i.e. $(@:.gdb=) -- and argument 2 # is the shared library identifier. If it wasn't for $(disp_ld), we could # avoid passing $(@:.gdb=) as an argument and use $(@:.gdb=) instead of $(1). +# +# This is so far only used for libc, for which we want to link the entire +# libgcc into the shared object. define link-flat.so $(Q)$(INSTALL) -d $(dir $@) $(Q)$(RM) $(1) $@ @$(disp_ld) $(Q)$(CC) $(LDFLAGS-$(notdir $@)) -nostdlib -o $(1) \ - -Wl,-elf2flt -Wl,-shared-lib-id $(2) $(top_builddir)lib/Scrt1.o \ + -Wl,-elf2flt -Wl,-shared-lib-id,$(2) $(top_builddir)lib/Scrt1.o \ $(top_builddir)/lib/crti.o -Wl,--whole-archive $(firstword $^) \ - -Wl,--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \ + $(LIBGCC) -Wl,--no-whole-archive $(LIBS-$(notdir $@)) $(LIBGCC) \ $(top_builddir)/lib/crtn.o endef diff --git a/libc/Makefile.in b/libc/Makefile.in index 3ff5ab578..6468ab7ea 100644 --- a/libc/Makefile.in +++ b/libc/Makefile.in @@ -93,8 +93,11 @@ $(top_builddir)lib/libc.a: $(libc-a-y) | $(crt-y) $(do_strip) $(do_ar) -$(top_builddir)lib/libc.gdb: $(top_builddir)lib/libc.a $(LINK_FLAT_CRTS) - $(call link-flat.so,$(@:.gdb=),$(SHARED_FLAT_ID)) +# We use libc_so.a so that we can compile the shared library with special +# flags - i.e. -mleaf-id-shared-library. The static libc.a needs to be +# compiled without it. +$(top_builddir)lib/libc.gdb: $(libc_OUT)/libc_so.a $(LINK_FLAT_CRTS) + $(call link-flat.so,$(@:.gdb=),$(UCLIBC_SHARED_FLAT_ID)) libc_clean: $(RM) $(libc_OUT)/*.{o,os,oS,a} diff --git a/libc/misc/internals/Makefile.in b/libc/misc/internals/Makefile.in index b9f970876..84f7ee61e 100644 --- a/libc/misc/internals/Makefile.in +++ b/libc/misc/internals/Makefile.in @@ -16,11 +16,18 @@ MISC_INTERNALS_SRC := $(patsubst %.c,$(MISC_INTERNALS_DIR)/%.c,$(CSRC)) MISC_INTERNALS_OBJ := $(patsubst %.c,$(MISC_INTERNALS_OUT)/%.o,$(CSRC)) libc-y += $(MISC_INTERNALS_OBJ) +ifneq ($(UCLIBC_FORMAT_SHARED_FLAT),y) libc-shared-y += $(MISC_INTERNALS_OUT)/__uClibc_main.oS +else +libc-shared-y += $(MISC_INTERNALS_OUT)/__uClibc_main.os +endif libc-static-y += $(MISC_INTERNALS_OUT)/__uClibc_main.o libc-static-$(UCLIBC_FORMAT_SHARED_FLAT) += \ $(MISC_INTERNALS_OUT)/shared_flat_initfini.o \ $(MISC_INTERNALS_OUT)/shared_flat_add_library.o +libc-shared-$(UCLIBC_FORMAT_SHARED_FLAT) += \ + $(MISC_INTERNALS_OUT)/shared_flat_initfini.os \ + $(MISC_INTERNALS_OUT)/shared_flat_add_library.os libc-nomulti-y += $(MISC_INTERNALS_OUT)/__uClibc_main.o objclean-y += misc_internals_objclean -- cgit v1.2.3