summaryrefslogtreecommitdiff
path: root/Makerules
diff options
context:
space:
mode:
Diffstat (limited to 'Makerules')
-rw-r--r--Makerules30
1 files changed, 26 insertions, 4 deletions
diff --git a/Makerules b/Makerules
index e6a236fb4..be52e247f 100644
--- a/Makerules
+++ b/Makerules
@@ -196,16 +196,38 @@ $(CRTS): $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/$(CRT).S
$(compile.S)
$(Q)$(STRIPTOOL) -x -R .note -R .comment $@
+ifeq ($(UCLIBC_CTOR_DTOR),y)
CTOR_TARGETS=$(top_builddir)lib/crti.o $(top_builddir)lib/crtn.o
+else
+CTOR_TARGETS:=
+endif
-ifeq ($(UCLIBC_CTOR_DTOR),y)
-$(CTOR_TARGETS): $(top_builddir)lib/%.o : $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/%.S
+ifneq ($(wildcard $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/initfini.c),)
+$(top_builddir)lib/initfini.s: $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/initfini.c
+ $(compile.c) -S -finhibit-size-directive
+
+$(top_builddir)lib/defs.h: $(top_builddir)lib/initfini.s
+ $(Q)sed -n -e '/@TESTS_BEGIN/,/@TESTS_END/p' $< | \
+ gawk -f $(top_srcdir)extra/scripts/defs.awk > $@.tmp
+ $(Q)mv $@.tmp $@
+
+$(top_builddir)lib/crti.S: $(top_builddir)lib/initfini.s $(top_builddir)lib/defs.h
+ $(Q)sed -n -e '1,/@HEADER_ENDS/p' \
+ -e '/@_.*_PROLOG_BEGINS/,/@_.*_PROLOG_ENDS/p' \
+ -e '/@TRAILER_BEGINS/,$$p' $< > $@
+
+$(top_builddir)lib/crtn.S: $(top_builddir)lib/initfini.s
+ $(Q)sed -n -e '1,/@HEADER_ENDS/p' \
+ -e '/@_.*_EPILOG_BEGINS/,/@_.*_EPILOG_ENDS/p' \
+ -e '/@TRAILER_BEGINS/,$$p' $< > $@
+
+$(CTOR_TARGETS): $(top_builddir)lib/%.o : $(top_builddir)lib/%.S
$(Q)$(INSTALL) -d $(dir $@)
$(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
else
-$(CTOR_TARGETS):
+$(CTOR_TARGETS): $(top_builddir)lib/%.o : $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)/%.S
$(Q)$(INSTALL) -d $(dir $@)
- $(do_ar)
+ $(compile.S) $(PICFLAG) $(SSP_DISABLE_FLAGS)
endif
#ifeq ($(TARGET_ARCH),nios)