summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernd Schmidt <bernds_cb1@t-online.de>2007-11-23 18:02:12 +0000
committerBernd Schmidt <bernds_cb1@t-online.de>2007-11-23 18:02:12 +0000
commite682ab4139c03632d37f26f58652bfa71f728cd4 (patch)
tree97dd25de93652ca2a6202d0f4ad92b8a0b00189f
parentf1e85d44f964341ce2bcdc0c271df593c37acb2b (diff)
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.
-rw-r--r--Makerules7
-rw-r--r--libc/Makefile.in7
-rw-r--r--libc/misc/internals/Makefile.in7
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