summaryrefslogtreecommitdiffstats
path: root/libc
diff options
context:
space:
mode:
Diffstat (limited to 'libc')
-rw-r--r--libc/Makefile.in6
-rw-r--r--libc/inet/Makefile.in16
-rw-r--r--libc/inet/rpc/Makefile.in6
-rw-r--r--libc/misc/assert/Makefile.in1
-rw-r--r--libc/misc/ctype/Makefile.in17
-rw-r--r--libc/misc/dirent/Makefile.in1
-rw-r--r--libc/misc/error/Makefile.in1
-rw-r--r--libc/misc/file/Makefile.in3
-rw-r--r--libc/misc/fnmatch/Makefile.in1
-rw-r--r--libc/misc/ftw/Makefile.in14
-rw-r--r--libc/misc/glob/Makefile.in5
-rw-r--r--libc/misc/gnu/Makefile.in1
-rw-r--r--libc/misc/internals/Makefile.in10
-rw-r--r--libc/misc/intl/Makefile.in6
-rw-r--r--libc/misc/locale/Makefile.in35
-rw-r--r--libc/misc/mntent/Makefile.in1
-rw-r--r--libc/misc/pthread/Makefile.in5
-rw-r--r--libc/misc/regex/Makefile.in1
-rw-r--r--libc/misc/search/Makefile.in21
-rw-r--r--libc/misc/statfs/Makefile.in1
-rw-r--r--libc/misc/syslog/Makefile.in1
-rw-r--r--libc/misc/sysvipc/Makefile.in23
-rw-r--r--libc/misc/time/Makefile.in24
-rw-r--r--libc/misc/ttyent/Makefile.in1
-rw-r--r--libc/misc/utmp/Makefile.in1
-rw-r--r--libc/misc/wchar/Makefile.in6
-rw-r--r--libc/misc/wctype/Makefile.in17
-rw-r--r--libc/misc/wordexp/Makefile.in1
-rw-r--r--libc/pwd_grp/Makefile.in7
-rw-r--r--libc/signal/Makefile.in5
-rw-r--r--libc/stdio/Makefile.in41
-rw-r--r--libc/stdlib/Makefile.in41
-rw-r--r--libc/stdlib/malloc-simple/Makefile.in6
-rw-r--r--libc/stdlib/malloc-standard/Makefile.in1
-rw-r--r--libc/stdlib/malloc/Makefile.in4
-rw-r--r--libc/string/Makefile.in93
-rw-r--r--libc/string/arm/Makefile.arch2
-rw-r--r--libc/string/frv/Makefile.arch2
-rw-r--r--libc/string/generic/Makefile.in10
-rw-r--r--libc/string/i386/Makefile.arch19
-rw-r--r--libc/string/mips/Makefile.arch2
-rw-r--r--libc/string/powerpc/Makefile.arch17
-rw-r--r--libc/string/sh64/Makefile.arch2
-rw-r--r--libc/string/sh64/memcpy.S10
-rw-r--r--libc/string/sh64/memset.S10
-rw-r--r--libc/string/sh64/strcpy.S10
-rw-r--r--libc/string/sh64/strlen.S10
-rw-r--r--libc/string/sparc/Makefile.arch3
-rw-r--r--libc/string/sparc/sparc32/memchr.S4
-rw-r--r--libc/string/sparc/sparc32/memcpy.S22
-rw-r--r--libc/string/sparc/sparc32/memset.S7
-rw-r--r--libc/string/sparc/sparc32/stpcpy.S5
-rw-r--r--libc/string/sparc/sparc32/strcat.S7
-rw-r--r--libc/string/sparc/sparc32/strchr.S14
-rw-r--r--libc/string/sparc/sparc32/strcmp.S7
-rw-r--r--libc/string/sparc/sparc32/strcpy.S7
-rw-r--r--libc/string/sparc/sparc32/strlen.S7
-rw-r--r--libc/string/sparc/sparc64/memcpy.S21
-rw-r--r--libc/string/sparc/sparc64/memset.S7
-rw-r--r--libc/string/sparc/sparc64/sparcv9b/memcpy.S21
-rw-r--r--libc/string/sparc/sparc64/strcat.S7
-rw-r--r--libc/string/sparc/sparc64/strchr.S14
-rw-r--r--libc/string/sparc/sparc64/strcmp.S7
-rw-r--r--libc/string/sparc/sparc64/strcpy.S7
-rw-r--r--libc/string/sparc/sparc64/strlen.S7
-rw-r--r--libc/string/x86_64/Makefile.arch3
-rw-r--r--libc/string/x86_64/memcpy.S7
-rw-r--r--libc/string/x86_64/memset.S7
-rw-r--r--libc/string/x86_64/strcat.S7
-rw-r--r--libc/string/x86_64/strchr.S7
-rw-r--r--libc/string/x86_64/strcmp.S7
-rw-r--r--libc/string/x86_64/strcpy.S5
-rw-r--r--libc/string/x86_64/strcspn.S12
-rw-r--r--libc/string/x86_64/strlen.S7
-rw-r--r--libc/string/x86_64/strpbrk.S5
-rw-r--r--libc/string/x86_64/strspn.S7
-rw-r--r--libc/sysdeps/linux/Makefile.arch8
-rw-r--r--libc/sysdeps/linux/alpha/Makefile73
-rw-r--r--libc/sysdeps/linux/arm/Makefile.arch28
-rw-r--r--libc/sysdeps/linux/arm/__longjmp.S19
-rw-r--r--libc/sysdeps/linux/arm/bits/endian.h11
-rw-r--r--libc/sysdeps/linux/arm/bits/fenv.h41
-rw-r--r--libc/sysdeps/linux/arm/bits/setjmp.h10
-rw-r--r--libc/sysdeps/linux/arm/crt1.S7
-rw-r--r--libc/sysdeps/linux/arm/fpu_control.h72
-rw-r--r--libc/sysdeps/linux/arm/setjmp.S39
-rw-r--r--libc/sysdeps/linux/arm/sigaction.c4
-rw-r--r--libc/sysdeps/linux/arm/syscall.c14
-rw-r--r--libc/sysdeps/linux/arm/vfork.S14
-rw-r--r--libc/sysdeps/linux/common/Makefile.in21
-rw-r--r--libc/sysdeps/linux/cris/Makefile74
-rw-r--r--libc/sysdeps/linux/i386/Makefile.arch27
-rw-r--r--libc/sysdeps/linux/i386/bits/syscalls.h12
-rw-r--r--libc/sysdeps/linux/mips/Makefile.arch41
-rw-r--r--libc/sysdeps/linux/powerpc/Makefile.arch28
-rw-r--r--libc/sysdeps/linux/sh/Makefile77
-rw-r--r--libc/sysdeps/linux/sh/bits/setjmp.h14
-rw-r--r--libc/sysdeps/linux/sparc/Makefile76
-rw-r--r--libc/sysdeps/linux/x86_64/Makefile.arch27
-rw-r--r--libc/termios/Makefile.in6
-rw-r--r--libc/unistd/Makefile.in6
101 files changed, 763 insertions, 752 deletions
diff --git a/libc/Makefile.in b/libc/Makefile.in
index 88b61819a..1e0b58437 100644
--- a/libc/Makefile.in
+++ b/libc/Makefile.in
@@ -33,8 +33,10 @@ include $(libc_DIR)/unistd/Makefile.in
# Check if the target architecture has a version script for
# libc, and if so, include it when linking.
-VERSION_SCRIPT:=${shell if [ -f $(libc_DIR)/sysdeps/linux/$(TARGET_ARCH)/libc.map ] ; then \
- echo "--version-script $(libc_DIR)/sysdeps/linux/$(TARGET_ARCH)/libc.map"; fi}
+VERSION_SCRIPT := $(wildcard $(libc_DIR)/sysdeps/linux/$(TARGET_ARCH)/libc.map)
+ifneq ($(VERSION_SCRIPT),)
+VERSION_SCRIPT := --version-script $(VERSION_SCRIPT)
+endif
EXTRA_LINK_OPTS:=$(VERSION_SCRIPT) -init __uClibc_init
EXTRA_LINK_LIBS:=$(libc_OUT)/misc/internals/interp.os $(top_builddir)lib/$(UCLIBC_LDSO) $(LIBGCC) # $(LDADD_LIBFLOAT)
diff --git a/libc/inet/Makefile.in b/libc/inet/Makefile.in
index 0b5ea7cc3..cb844907b 100644
--- a/libc/inet/Makefile.in
+++ b/libc/inet/Makefile.in
@@ -50,17 +50,25 @@ INET_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(INET_MOBJ))))
INET_OBJS:=$(INET_OBJ) $(INET_MOBJ)
-$(INET_MOBJ1) $(INET_MOBJ1:.o=.os): $(INET_MSRC1)
+$(INET_MOBJ1): $(INET_MSRC1)
$(compile.m)
-$(INET_MOBJ2) $(INET_MOBJ2:.o=.os): $(INET_MSRC2)
+$(INET_MOBJ1:.o=.os): $(INET_MSRC1)
$(compile.m)
-$(INET_MOBJ3) $(INET_MOBJ3:.o=.os): $(INET_MSRC3)
+$(INET_MOBJ2): $(INET_MSRC2)
+ $(compile.m)
+
+$(INET_MOBJ2:.o=.os): $(INET_MSRC2)
+ $(compile.m)
+
+$(INET_MOBJ3): $(INET_MSRC3)
+ $(compile.m)
+
+$(INET_MOBJ3:.o=.os): $(INET_MSRC3)
$(compile.m)
libc-a-y+=$(INET_OBJS)
-libc-a-pic-y+=$(INET_OBJS:.o=.os)
libc-so-y+=$(INET_OBJS:.o=.os)
CFLAGS-multi-y+=$(INET_DEF)
diff --git a/libc/inet/rpc/Makefile.in b/libc/inet/rpc/Makefile.in
index 08f4eeca2..9bfa781d6 100644
--- a/libc/inet/rpc/Makefile.in
+++ b/libc/inet/rpc/Makefile.in
@@ -32,16 +32,18 @@ endif
INET_RPC_DIR:=$(top_srcdir)libc/inet/rpc
INET_RPC_OUT:=$(top_builddir)libc/inet/rpc
+ifneq ($(DOMULTI),n)
INET_RPC_NO_MULTI:=rpc_commondata.c rpc_thread.c svc.c
+CSRC:=$(filter-out $(INET_RPC_NO_MULTI),$(CSRC))
+endif
INET_RPC_SRC:=$(patsubst %.c,$(INET_RPC_DIR)/%.c,$(CSRC))
INET_RPC_OBJ:=$(patsubst %.c,$(INET_RPC_OUT)/%.o,$(CSRC))
libc-a-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OBJ)
-libc-a-pic-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OBJ:.o=.os)
libc-so-$(UCLIBC_HAS_RPC)+=$(INET_RPC_OBJ:.o=.os)
-libc-multi-$(UCLIBC_HAS_RPC)+=$(filter-out $(patsubst %.c,$(INET_RPC_DIR)/%.c,$(INET_RPC_NO_MULTI)),$(INET_RPC_SRC))
+libc-multi-$(UCLIBC_HAS_RPC)+=$(INET_RPC_SRC)
libc-nomulti-$(UCLIBC_HAS_RPC)+=$(patsubst %.c,$(INET_RPC_OUT)/%.o,$(INET_RPC_NO_MULTI))
objclean-y+=inet_rpc_objclean
diff --git a/libc/misc/assert/Makefile.in b/libc/misc/assert/Makefile.in
index 6fbdcb72a..0e41268b2 100644
--- a/libc/misc/assert/Makefile.in
+++ b/libc/misc/assert/Makefile.in
@@ -15,7 +15,6 @@ MISC_ASSERT_SRC:=$(MISC_ASSERT_DIR)/__assert.c
MISC_ASSERT_OBJ:=$(MISC_ASSERT_OUT)/__assert.o
libc-a-y+=$(MISC_ASSERT_OBJ)
-libc-a-pic-y+=$(MISC_ASSERT_OBJ:.o=.os)
libc-so-y+=$(MISC_ASSERT_OBJ:.o=.os)
libc-multi-y+=$(MISC_ASSERT_SRC)
diff --git a/libc/misc/ctype/Makefile.in b/libc/misc/ctype/Makefile.in
index f9f1bfbed..0e194cbff 100644
--- a/libc/misc/ctype/Makefile.in
+++ b/libc/misc/ctype/Makefile.in
@@ -18,7 +18,7 @@ MOBJ+= __C_ctype_b.o __C_ctype_tolower.o __C_ctype_toupper.o \
__ctype_assert.o isctype.o
endif
-MOBJx= isalnum_l.o isalpha_l.o isascii_l.o iscntrl_l.o isdigit_l.o \
+MOBJx:= isalnum_l.o isalpha_l.o isascii_l.o iscntrl_l.o isdigit_l.o \
isgraph_l.o islower_l.o isprint_l.o ispunct_l.o isspace_l.o \
isupper_l.o isxdigit_l.o toascii_l.o tolower_l.o toupper_l.o \
isblank_l.o # isxlower_l.o isxupper_l.o
@@ -28,21 +28,24 @@ MISC_CTYPE_OUT:=$(top_builddir)libc/misc/ctype
MISC_CTYPE_MSRC:=$(MISC_CTYPE_DIR)/$(MSRC)
MISC_CTYPE_MOBJ:=$(patsubst %.o,$(MISC_CTYPE_OUT)/%.o,$(MOBJ))
-MISC_CTYPE_MOBJx=$(patsubst %.o,$(MISC_CTYPE_OUT)/%.o,$(MOBJx))
+MISC_CTYPE_MOBJx:=$(patsubst %.o,$(MISC_CTYPE_OUT)/%.o,$(MOBJx))
-# adapt this if MOBJx is done for multi
MISC_CTYPE_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_CTYPE_MOBJ))))
-$(MISC_CTYPE_MOBJ) $(MISC_CTYPE_MOBJ:.o=.os): $(MISC_CTYPE_MSRC)
+$(MISC_CTYPE_MOBJ): $(MISC_CTYPE_MSRC)
$(compile.m)
-$(MISC_CTYPE_MOBJx) $(MISC_CTYPE_MOBJx:.o=.os): $(MISC_CTYPE_MSRC)
+$(MISC_CTYPE_MOBJ:.o=.os): $(MISC_CTYPE_MSRC)
+ $(compile.m)
+
+$(MISC_CTYPE_MOBJx): $(MISC_CTYPE_MSRC)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(MISC_CTYPE_MOBJx:.o=.os): $(MISC_CTYPE_MSRC)
$(compile.m) -D__UCLIBC_DO_XLOCALE
libc-a-y+=$(MISC_CTYPE_MOBJ)
libc-a-$(UCLIBC_HAS_XLOCALE)+=$(MISC_CTYPE_MOBJx)
-libc-a-pic-y+=$(MISC_CTYPE_MOBJ:.o=.os)
-libc-a-pic-$(UCLIBC_HAS_XLOCALE)+=$(MISC_CTYPE_MOBJx:.o=.os)
libc-so-y+=$(MISC_CTYPE_MOBJ:.o=.os)
libc-so-$(UCLIBC_HAS_XLOCALE)+=$(MISC_CTYPE_MOBJx:.o=.os)
diff --git a/libc/misc/dirent/Makefile.in b/libc/misc/dirent/Makefile.in
index 8ba28cdeb..ee0165e38 100644
--- a/libc/misc/dirent/Makefile.in
+++ b/libc/misc/dirent/Makefile.in
@@ -17,7 +17,6 @@ MISC_DIRENT_SRC:=$(patsubst %.c,$(MISC_DIRENT_DIR)/%.c,$(CSRC))
MISC_DIRENT_OBJ:=$(patsubst %.c,$(MISC_DIRENT_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_DIRENT_OBJ)
-libc-a-pic-y+=$(MISC_DIRENT_OBJ:.o=.os)
libc-so-y+=$(MISC_DIRENT_OBJ:.o=.os)
libc-multi-y+=$(MISC_DIRENT_SRC)
diff --git a/libc/misc/error/Makefile.in b/libc/misc/error/Makefile.in
index 86bf881fa..2977256d9 100644
--- a/libc/misc/error/Makefile.in
+++ b/libc/misc/error/Makefile.in
@@ -14,7 +14,6 @@ MISC_ERROR_SRC:=$(patsubst %.c,$(MISC_ERROR_DIR)/%.c,$(CSRC))
MISC_ERROR_OBJ:=$(patsubst %.c,$(MISC_ERROR_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_ERROR_OBJ)
-libc-a-pic-y+=$(MISC_ERROR_OBJ:.o=.os)
libc-so-y+=$(MISC_ERROR_OBJ:.o=.os)
libc-multi-y+=$(MISC_ERROR_SRC)
diff --git a/libc/misc/file/Makefile.in b/libc/misc/file/Makefile.in
index 58da3e2a3..9410a887a 100644
--- a/libc/misc/file/Makefile.in
+++ b/libc/misc/file/Makefile.in
@@ -16,11 +16,10 @@ endif
MISC_FILE_OBJ:=$(patsubst $(MISC_FILE_DIR)/%.c,$(MISC_FILE_OUT)/%.o,$(MISC_FILE_SRC))
libc-a-y+=$(MISC_FILE_OBJ)
-libc-a-pic-y+=$(MISC_FILE_OBJ:.o=.os)
libc-so-y+=$(MISC_FILE_OBJ:.o=.os)
libc-multi-y+=$(MISC_FILE_DIR)/lockf.c
-libc-nomulti-y+=$(MISC_FILE_OUT)/lockf64.o
+libc-nomulti-$(UCLIBC_HAS_LFS)+=$(MISC_FILE_OUT)/lockf64.o
objclean-y+=misc_file_objclean
diff --git a/libc/misc/fnmatch/Makefile.in b/libc/misc/fnmatch/Makefile.in
index 24019dede..5476672df 100644
--- a/libc/misc/fnmatch/Makefile.in
+++ b/libc/misc/fnmatch/Makefile.in
@@ -13,7 +13,6 @@ MISC_FNMATCH_SRC:=$(MISC_FNMATCH_DIR)/fnmatch.c
MISC_FNMATCH_OBJ:=$(MISC_FNMATCH_OUT)/fnmatch.o
libc-a-y+=$(MISC_FNMATCH_OBJ)
-libc-a-pic-y+=$(MISC_FNMATCH_OBJ:.o=.os)
libc-so-y+=$(MISC_FNMATCH_OBJ:.o=.os)
libc-multi-y+=$(MISC_FNMATCH_SRC)
diff --git a/libc/misc/ftw/Makefile.in b/libc/misc/ftw/Makefile.in
index 2f92ef0ec..c2cabfa0e 100644
--- a/libc/misc/ftw/Makefile.in
+++ b/libc/misc/ftw/Makefile.in
@@ -13,24 +13,26 @@ MISC_FTW_OUT:=$(top_builddir)libc/misc/ftw
# ftw.c has to be rewritten to allow multi
MISC_FTW_NO_MULTI:=ftw64.o
-MOBJ:=$(filter-out $(MISC_FTW_NO_MULTI),$(MOBJ))
MISC_FTW_MSRC:=$(MISC_FTW_DIR)/$(MSRC)
MISC_FTW_MOBJ:=$(patsubst %.o,$(MISC_FTW_OUT)/%.o,$(MOBJ))
-MISC_FTW_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_FTW_MOBJ))))
-MISC_FTW_OBJS:=$(MISC_FTW_MOBJ) $(MISC_FTW_OUT)/$(MISC_FTW_NO_MULTI)
+MISC_FTW_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(filter-out $(MISC_FTW_NO_MULTI),$(notdir $(MISC_FTW_MOBJ)))))
-$(MISC_FTW_OBJS) $(MISC_FTW_OBJS:.o=.os): $(MISC_FTW_MSRC)
+MISC_FTW_OBJS:=$(MISC_FTW_MOBJ)
+
+$(MISC_FTW_OBJS): $(MISC_FTW_MSRC)
+ $(compile.m)
+
+$(MISC_FTW_OBJS:.o=.os): $(MISC_FTW_MSRC)
$(compile.m)
libc-a-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_OBJS)
-libc-a-pic-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_OBJS:.o=.os)
libc-so-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_OBJS:.o=.os)
CFLAGS-multi-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_DEF)
libc-multi-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_MSRC)
-libc-nomulti-$(UCLIBC_HAS_FTW)+=$(MISC_FTW_OUT)/$(MISC_FTW_NO_MULTI)
+libc-nomulti-$(UCLIBC_HAS_FTW)+=$(patsubst %.o,$(MISC_FTW_OUT)/%.o,$(MISC_FTW_NO_MULTI))
objclean-y+=misc_ftw_objclean
diff --git a/libc/misc/glob/Makefile.in b/libc/misc/glob/Makefile.in
index c17086fde..cd845464f 100644
--- a/libc/misc/glob/Makefile.in
+++ b/libc/misc/glob/Makefile.in
@@ -14,10 +14,11 @@ MISC_GLOB_OUT:=$(top_builddir)libc/misc/glob
MISC_GLOB_SRC:=$(patsubst %.c,$(MISC_GLOB_DIR)/%.c,$(CSRC))
MISC_GLOB_OBJ:=$(patsubst %.c,$(MISC_GLOB_OUT)/%.o,$(CSRC))
-$(MISC_GLOB_OUT)/glob64.o $(MISC_GLOB_OUT)/glob64.os: $(MISC_GLOB_DIR)/glob64.c $(MISC_GLOB_DIR)/glob.c
+$(MISC_GLOB_OUT)/glob64.o: $(MISC_GLOB_DIR)/glob64.c $(MISC_GLOB_DIR)/glob.c
+
+$(MISC_GLOB_OUT)/glob64.os: $(MISC_GLOB_DIR)/glob64.c $(MISC_GLOB_DIR)/glob.c
libc-a-$(UCLIBC_HAS_GLOB)+=$(MISC_GLOB_OBJ)
-libc-a-pic-$(UCLIBC_HAS_GLOB)+=$(MISC_GLOB_OBJ:.o=.os)
libc-so-$(UCLIBC_HAS_GLOB)+=$(MISC_GLOB_OBJ:.o=.os)
# glob has to be rewritten to allow multi
diff --git a/libc/misc/gnu/Makefile.in b/libc/misc/gnu/Makefile.in
index 263b45713..d3ba2e549 100644
--- a/libc/misc/gnu/Makefile.in
+++ b/libc/misc/gnu/Makefile.in
@@ -15,7 +15,6 @@ MISC_GNU_SRC:=$(MISC_GNU_DIR)/obstack.c
MISC_GNU_OBJ:=$(MISC_GNU_OUT)/obstack.o
libc-a-y+=$(MISC_GNU_OBJ)
-libc-a-pic-y+=$(MISC_GNU_OBJ:.o=.os)
libc-so-y+=$(MISC_GNU_OBJ:.o=.os)
libc-multi-y+=$(MISC_GNU_SRC)
diff --git a/libc/misc/internals/Makefile.in b/libc/misc/internals/Makefile.in
index c6be32a30..2916475ec 100644
--- a/libc/misc/internals/Makefile.in
+++ b/libc/misc/internals/Makefile.in
@@ -19,12 +19,12 @@ MISC_INTERNALS_OBJ:=$(patsubst %.c,$(MISC_INTERNALS_OUT)/%.o,$(CSRC))
STATIC_SRC:=__uClibc_main.c
$(MISC_INTERNALS_OUT)/interp.c: $(MISC_INTERNALS_DIR)/Makefile.in
- echo "/* Force shared libraries to know about the correct library loader */" > $@
- echo "#include <features.h>" >> $@
- echo "#ifdef __HAVE_ELF__" >> $@
- echo "const char __dl_ldso__[] __attribute__ ((section " \
+ $(Q)echo "/* Force shared libraries to know about the correct library loader */" > $@
+ $(Q)echo "#include <features.h>" >> $@
+ $(Q)echo "#ifdef __HAVE_ELF__" >> $@
+ $(Q)echo "const char __dl_ldso__[] __attribute__ ((section " \
"(\".interp\"))) =\""$(SHARED_LIB_LOADER_PREFIX)/$(UCLIBC_LDSO)"\";" >> $@
- echo "#endif" >> $@
+ $(Q)echo "#endif" >> $@
libc-a-y+=$(MISC_INTERNALS_OBJ)
libc-so-y+=$(MISC_INTERNALS_OBJ:.o=.os)
diff --git a/libc/misc/intl/Makefile.in b/libc/misc/intl/Makefile.in
index 40eadfa1b..6daa22dd9 100644
--- a/libc/misc/intl/Makefile.in
+++ b/libc/misc/intl/Makefile.in
@@ -17,11 +17,13 @@ MISC_INTL_MSRC:=$(MISC_INTL_DIR)/$(MSRC)
MISC_INTL_MOBJ:=$(patsubst %.o,$(MISC_INTL_OUT)/%.o,$(MOBJ))
MISC_INTL_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_INTL_MOBJ))))
-$(MISC_INTL_MOBJ) $(MISC_INTL_MOBJ:.o=.os): $(MISC_INTL_MSRC)
+$(MISC_INTL_MOBJ): $(MISC_INTL_MSRC)
+ $(compile.m)
+
+$(MISC_INTL_MOBJ:.o=.os): $(MISC_INTL_MSRC)
$(compile.m)
libc-a-$(UCLIBC_HAS_GETTEXT_AWARENESS)+=$(MISC_INTL_MOBJ)
-libc-a-pic-$(UCLIBC_HAS_GETTEXT_AWARENESS)+=$(MISC_INTL_MOBJ:.o=.os)
libc-so-$(UCLIBC_HAS_GETTEXT_AWARENESS)+=$(MISC_INTL_MOBJ:.o=.os)
CFLAGS-multi-$(UCLIBC_HAS_GETTEXT_AWARENESS)+=$(MISC_INTL_DEF)
diff --git a/libc/misc/locale/Makefile.in b/libc/misc/locale/Makefile.in
index bdf42204d..9d0074521 100644
--- a/libc/misc/locale/Makefile.in
+++ b/libc/misc/locale/Makefile.in
@@ -8,38 +8,49 @@
MSRC:=locale.c
MOBJ:=setlocale.o localeconv.o _locale_init.o nl_langinfo.o
-MOBJx=
+MOBJx:=
ifeq ($(UCLIBC_HAS_LOCALE),y)
MOBJ+=newlocale.o __locale_mbrtowc_l.o
endif
ifeq ($(UCLIBC_HAS_XLOCALE),y)
-MOBJx+=nl_langinfo_l.o duplocale.o freelocale.o uselocale.o __curlocale.o
+MOBJx:=nl_langinfo_l.o duplocale.o freelocale.o uselocale.o __curlocale.o
endif
-DATA=
+DATA:=
ifeq ($(UCLIBC_HAS_LOCALE),y)
DATA:=locale_data.o
endif
+MISC_LOCALE_NO_MULTI=localeconv.o
+
MISC_LOCALE_DIR:=$(top_srcdir)libc/misc/locale
MISC_LOCALE_OUT:=$(top_builddir)libc/misc/locale
MISC_LOCALE_MSRC:=$(MISC_LOCALE_DIR)/$(MSRC)
MISC_LOCALE_MOBJ:=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(MOBJ))
-MISC_LOCALE_MOBJx=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(MOBJx))
-MISC_LOCALE_DATA=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(DATA))
+MISC_LOCALE_MOBJx:=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(MOBJx))
+MISC_LOCALE_DATA:=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(DATA))
+
+MISC_LOCALE_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(filter-out $(MISC_LOCALE_NO_MULTI),$(notdir $(MISC_LOCALE_MOBJ)))))
-MISC_LOCALE_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_LOCALE_MOBJ))))
+$(MISC_LOCALE_MOBJ): $(MISC_LOCALE_MSRC)
+ $(compile.m)
-$(MISC_LOCALE_MOBJ) $(MISC_LOCALE_MOBJ:.o=.os): $(MISC_LOCALE_MSRC)
+$(MISC_LOCALE_MOBJ:.o=.os): $(MISC_LOCALE_MSRC)
$(compile.m)
-$(MISC_LOCALE_MOBJx) $(MISC_LOCALE_MOBJx:.o=.os): $(MISC_LOCALE_MSRC)
+$(MISC_LOCALE_MOBJx): $(MISC_LOCALE_MSRC)
$(compile.m) -D__UCLIBC_DO_XLOCALE
-$(MISC_LOCALE_DATA) $(MISC_LOCALE_DATA:.o=.os): $(top_builddir)extra/locale/$(notdir $(MISC_LOCALE_DATA:.o=.c))
+$(MISC_LOCALE_MOBJx:.o=.os): $(MISC_LOCALE_MSRC)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(MISC_LOCALE_DATA): $(top_builddir)extra/locale/$(notdir $(MISC_LOCALE_DATA:.o=.c))
+ $(compile.c) -D__WCHAR_ENABLED -I$(dir $<)
+
+$(MISC_LOCALE_DATA:.o=.os): $(top_builddir)extra/locale/$(notdir $(MISC_LOCALE_DATA:.o=.c))
$(compile.c) -D__WCHAR_ENABLED -I$(dir $<)
libc-a-y+=$(MISC_LOCALE_MOBJ)
@@ -49,9 +60,9 @@ libc-so-y+=$(MISC_LOCALE_MOBJ:.o=.os)
libc-so-$(UCLIBC_HAS_LOCALE)+=$(MISC_LOCALE_DATA:.o=.os)
libc-so-$(UCLIBC_HAS_XLOCALE)+=$(MISC_LOCALE_MOBJx:.o=.os)
-#CFLAGS-multi-y+=$(MISC_LOCALE_DEF)
-#libc-multi-y+=$(MISC_LOCALE_MSRC)
-libc-nomulti-y+=$(MISC_LOCALE_MOBJ)
+CFLAGS-multi-y+=$(MISC_LOCALE_DEF)
+libc-multi-y+=$(MISC_LOCALE_MSRC)
+libc-nomulti-y+=$(patsubst %.o,$(MISC_LOCALE_OUT)/%.o,$(MISC_LOCALE_NO_MULTI))
libc-nomulti-$(UCLIBC_HAS_LOCALE)+=$(MISC_LOCALE_DATA)
libc-nomulti-$(UCLIBC_HAS_XLOCALE)+=$(MISC_LOCALE_MOBJx)
diff --git a/libc/misc/mntent/Makefile.in b/libc/misc/mntent/Makefile.in
index cdb8acd5e..c1674f494 100644
--- a/libc/misc/mntent/Makefile.in
+++ b/libc/misc/mntent/Makefile.in
@@ -15,7 +15,6 @@ MISC_MNTENT_SRC:=$(MISC_MNTENT_DIR)/mntent.c
MISC_MNTENT_OBJ:=$(MISC_MNTENT_OUT)/mntent.o
libc-a-y+=$(MISC_MNTENT_OBJ)
-libc-a-pic-y+=$(MISC_MNTENT_OBJ:.o=.os)
libc-so-y+=$(MISC_MNTENT_OBJ:.o=.os)
libc-multi-y+=$(MISC_MNTENT_SRC)
diff --git a/libc/misc/pthread/Makefile.in b/libc/misc/pthread/Makefile.in
index 0bcb1496b..0bbe0fd36 100644
--- a/libc/misc/pthread/Makefile.in
+++ b/libc/misc/pthread/Makefile.in
@@ -14,11 +14,10 @@ MISC_PTHREAD_SRC:=$(patsubst %.c,$(MISC_PTHREAD_DIR)/%.c,$(CSRC))
MISC_PTHREAD_OBJ:=$(patsubst %.c,$(MISC_PTHREAD_OUT)/%.o,$(CSRC))
libc-a-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_OBJ)
-libc-a-pic-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_OBJ:.o=.os)
libc-so-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_OBJ:.o=.os)
-#libc-multi-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_SRC)
-libc-nomulti-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_OBJ)
+libc-multi-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_DIR)/no-tsd.c
+libc-nomulti-$(UCLIBC_HAS_THREADS)+=$(MISC_PTHREAD_OUT)/weaks.o
objclean-y+=misc_pthread_objclean
diff --git a/libc/misc/regex/Makefile.in b/libc/misc/regex/Makefile.in
index 6909e6246..50d2c2d06 100644
--- a/libc/misc/regex/Makefile.in
+++ b/libc/misc/regex/Makefile.in
@@ -15,7 +15,6 @@ MISC_REGEX_SRC:=$(patsubst %.c,$(MISC_REGEX_DIR)/%.c,$(CSRC))
MISC_REGEX_OBJ:=$(patsubst %.c,$(MISC_REGEX_OUT)/%.o,$(CSRC))
libc-a-$(UCLIBC_HAS_REGEX)+=$(MISC_REGEX_OBJ)
-libc-a-pic-$(UCLIBC_HAS_REGEX)+=$(MISC_REGEX_OBJ:.o=.os)
libc-so-$(UCLIBC_HAS_REGEX)+=$(MISC_REGEX_OBJ:.o=.os)
libc-multi-$(UCLIBC_HAS_REGEX)+=$(MISC_REGEX_SRC)
diff --git a/libc/misc/search/Makefile.in b/libc/misc/search/Makefile.in
index b762db6e0..943ef34d0 100644
--- a/libc/misc/search/Makefile.in
+++ b/libc/misc/search/Makefile.in
@@ -41,20 +41,31 @@ MISC_SEARCH_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_SEARCH_MOBJ))))
MISC_SEARCH_OBJS:=$(MISC_SEARCH_OBJ) $(MISC_SEARCH_MOBJ)
-$(MISC_SEARCH_MOBJ1) $(MISC_SEARCH_MOBJ1:.o=.os): $(MISC_SEARCH_MSRC1)
+$(MISC_SEARCH_MOBJ1): $(MISC_SEARCH_MSRC1)
$(compile.m)
-$(MISC_SEARCH_MOBJ2) $(MISC_SEARCH_MOBJ2:.o=.os): $(MISC_SEARCH_MSRC2)
+$(MISC_SEARCH_MOBJ1:.o=.os): $(MISC_SEARCH_MSRC1)
$(compile.m)
-$(MISC_SEARCH_MOBJ3) $(MISC_SEARCH_MOBJ3:.o=.os): $(MISC_SEARCH_MSRC3)
+$(MISC_SEARCH_MOBJ2): $(MISC_SEARCH_MSRC2)
$(compile.m)
-$(MISC_SEARCH_MOBJ4) $(MISC_SEARCH_MOBJ4:.o=.os): $(MISC_SEARCH_MSRC4)
+$(MISC_SEARCH_MOBJ2:.o=.os): $(MISC_SEARCH_MSRC2)
+ $(compile.m)
+
+$(MISC_SEARCH_MOBJ3): $(MISC_SEARCH_MSRC3)
+ $(compile.m)
+
+$(MISC_SEARCH_MOBJ3:.o=.os): $(MISC_SEARCH_MSRC3)
+ $(compile.m)
+
+$(MISC_SEARCH_MOBJ4): $(MISC_SEARCH_MSRC4)
+ $(compile.m)
+
+$(MISC_SEARCH_MOBJ4:.o=.os): $(MISC_SEARCH_MSRC4)
$(compile.m)
libc-a-y+=$(MISC_SEARCH_OBJS)
-libc-a-pic-y+=$(MISC_SEARCH_OBJS:.o=.os)
libc-so-y+=$(MISC_SEARCH_OBJS:.o=.os)
CFLAGS-multi-y+=$(MISC_SEARCH_DEF)
diff --git a/libc/misc/statfs/Makefile.in b/libc/misc/statfs/Makefile.in
index 2adb20f1d..9350e221e 100644
--- a/libc/misc/statfs/Makefile.in
+++ b/libc/misc/statfs/Makefile.in
@@ -17,7 +17,6 @@ MISC_STATFS_SRC:=$(patsubst %.c,$(MISC_STATFS_DIR)/%.c,$(CSRC))
MISC_STATFS_OBJ:=$(patsubst %.c,$(MISC_STATFS_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_STATFS_OBJ)
-libc-a-pic-y+=$(MISC_STATFS_OBJ:.o=.os)
libc-so-y+=$(MISC_STATFS_OBJ:.o=.os)
libc-multi-y+=$(MISC_STATFS_SRC)
diff --git a/libc/misc/syslog/Makefile.in b/libc/misc/syslog/Makefile.in
index bc6cb0710..c1cd2ee18 100644
--- a/libc/misc/syslog/Makefile.in
+++ b/libc/misc/syslog/Makefile.in
@@ -15,7 +15,6 @@ MISC_SYSLOG_SRC:=$(patsubst %.c,$(MISC_SYSLOG_DIR)/%.c,$(CSRC))
MISC_SYSLOG_OBJ:=$(patsubst %.c,$(MISC_SYSLOG_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_SYSLOG_OBJ)
-libc-a-pic-y+=$(MISC_SYSLOG_OBJ:.o=.os)
libc-so-y+=$(MISC_SYSLOG_OBJ:.o=.os)
libc-multi-y+=$(MISC_SYSLOG_SRC)
diff --git a/libc/misc/sysvipc/Makefile.in b/libc/misc/sysvipc/Makefile.in
index 73cc932aa..9a4446cb3 100644
--- a/libc/misc/sysvipc/Makefile.in
+++ b/libc/misc/sysvipc/Makefile.in
@@ -34,27 +34,34 @@ MISC_SYSVIPC_MOBJ3:=$(patsubst %.o,$(MISC_SYSVIPC_OUT)/%.o,$(MOBJ3))
MISC_SYSVIPC_MSRC:=$(MISC_SYSVIPC_MSRC1) $(MISC_SYSVIPC_MSRC2) $(MISC_SYSVIPC_MSRC3)
MISC_SYSVIPC_MOBJ:=$(MISC_SYSVIPC_MOBJ1) $(MISC_SYSVIPC_MOBJ2) $(MISC_SYSVIPC_MOBJ3)
-# only MSRC2
-MISC_SYSVIPC_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_SYSVIPC_MOBJ2))))
+
+MISC_SYSVIPC_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_SYSVIPC_MOBJ))))
MISC_SYSVIPC_OBJS:=$(MISC_SYSVIPC_OBJ) $(MISC_SYSVIPC_MOBJ)
-$(MISC_SYSVIPC_MOBJ1) $(MISC_SYSVIPC_MOBJ1:.o=.os): $(MISC_SYSVIPC_MSRC1)
+$(MISC_SYSVIPC_MOBJ1): $(MISC_SYSVIPC_MSRC1)
+ $(compile.m)
+
+$(MISC_SYSVIPC_MOBJ1:.o=.os): $(MISC_SYSVIPC_MSRC1)
+ $(compile.m)
+
+$(MISC_SYSVIPC_MOBJ2): $(MISC_SYSVIPC_MSRC2)
+ $(compile.m)
+
+$(MISC_SYSVIPC_MOBJ2:.o=.os): $(MISC_SYSVIPC_MSRC2)
$(compile.m)
-$(MISC_SYSVIPC_MOBJ2) $(MISC_SYSVIPC_MOBJ2:.o=.os): $(MISC_SYSVIPC_MSRC2)
+$(MISC_SYSVIPC_MOBJ3): $(MISC_SYSVIPC_MSRC3)
$(compile.m)
-$(MISC_SYSVIPC_MOBJ3) $(MISC_SYSVIPC_MOBJ3:.o=.os): $(MISC_SYSVIPC_MSRC3)
+$(MISC_SYSVIPC_MOBJ3:.o=.os): $(MISC_SYSVIPC_MSRC3)
$(compile.m)
libc-a-y+=$(MISC_SYSVIPC_OBJS)
-libc-a-pic-y+=$(MISC_SYSVIPC_OBJS:.o=.os)
libc-so-y+=$(MISC_SYSVIPC_OBJS:.o=.os)
CFLAGS-multi-y+=$(MISC_SYSVIPC_DEF)
-libc-multi-y+=$(MISC_SYSVIPC_SRC) $(MISC_SYSVIPC_MSRC2)
-libc-nomulti-y+=$(MISC_SYSVIPC_MOBJ1) $(MISC_SYSVIPC_MOBJ3)
+libc-multi-y+=$(MISC_SYSVIPC_SRC) $(MISC_SYSVIPC_MSRC)
objclean-y+=misc_sysvipc_objclean
diff --git a/libc/misc/time/Makefile.in b/libc/misc/time/Makefile.in
index 986e5ed29..b62032a25 100644
--- a/libc/misc/time/Makefile.in
+++ b/libc/misc/time/Makefile.in
@@ -11,13 +11,13 @@ MOBJ:= asctime.o asctime_r.o clock.o ctime.o ctime_r.o gmtime.o gmtime_r.o \
localtime.o localtime_r.o mktime.o strftime.o strptime.o tzset.o \
_time_t2tm.o __time_tm.o _time_mktime.o dysize.o timegm.o \
_time_mktime_tzi.o _time_localtime_tzi.o
-MOBJx=
+MOBJx:=
ifeq ($(UCLIBC_HAS_FLOATS),y)
MOBJ+=difftime.o
endif
ifeq ($(UCLIBC_HAS_XLOCALE),y)
-MOBJx+=strftime_l.o strptime_l.o
+MOBJx:=strftime_l.o strptime_l.o
endif
ifeq ($(UCLIBC_HAS_WCHAR),y)
@@ -32,35 +32,39 @@ CSRC:=adjtime.c ftime.c
MISC_TIME_DIR:=$(top_srcdir)libc/misc/time
MISC_TIME_OUT:=$(top_builddir)libc/misc/time
-MISC_TIME_NO_MULTI:=strftime.o
+MISC_TIME_NO_MULTI:=strftime.o mktime.o strptime.o gmtime.o localtime.o asctime.o asctime_r.o gmtime_r.o localtime_r.o
MISC_TIME_SRC:=$(patsubst %.c,$(MISC_TIME_DIR)/%.c,$(CSRC))
MISC_TIME_OBJ:=$(patsubst %.c,$(MISC_TIME_OUT)/%.o,$(CSRC))
MISC_TIME_MSRC:=$(patsubst %.c,$(MISC_TIME_DIR)/%.c,$(MSRC))
MISC_TIME_MOBJ:=$(patsubst %.o,$(MISC_TIME_OUT)/%.o,$(MOBJ))
-MISC_TIME_MOBJx=$(patsubst %.o,$(MISC_TIME_OUT)/%.o,$(MOBJx))
+MISC_TIME_MOBJx:=$(patsubst %.o,$(MISC_TIME_OUT)/%.o,$(MOBJx))
-MISC_TIME_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(filter-out $(MISC_TIME_OUT)/$(MISC_TIME_NO_MULTI),$(MISC_TIME_MOBJ)))))
+MISC_TIME_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(filter-out $(MISC_TIME_NO_MULTI),$(notdir $(MISC_TIME_MOBJ)))))
MISC_TIME_OBJS:=$(MISC_TIME_OBJ) $(MISC_TIME_MOBJ)
-$(MISC_TIME_MOBJ) $(MISC_TIME_MOBJ:.o=.os): $(MISC_TIME_MSRC)
+$(MISC_TIME_MOBJ): $(MISC_TIME_MSRC)
$(compile.m)
-$(MISC_TIME_MOBJx) $(MISC_TIME_MOBJx:.o=.os): $(MISC_TIME_MSRC)
+$(MISC_TIME_MOBJ:.o=.os): $(MISC_TIME_MSRC)
+ $(compile.m)
+
+$(MISC_TIME_MOBJx): $(MISC_TIME_MSRC)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(MISC_TIME_MOBJx:.o=.os): $(MISC_TIME_MSRC)
$(compile.m) -D__UCLIBC_DO_XLOCALE
libc-a-y+=$(MISC_TIME_OBJS)
libc-a-$(UCLIBC_HAS_XLOCALE)+=$(MISC_TIME_MOBJx)
-libc-a-pic-y+=$(MISC_TIME_OBJS:.o=.os)
-libc-a-pic-$(UCLIBC_HAS_XLOCALE)+=$(MISC_TIME_MOBJx:.o=.os)
libc-so-y+=$(MISC_TIME_OBJS:.o=.os)
libc-so-$(UCLIBC_HAS_XLOCALE)+=$(MISC_TIME_MOBJx:.o=.os)
CFLAGS-multi-y+=$(MISC_TIME_DEF)
libc-multi-y+=$(MISC_TIME_MSRC)
-libc-nomulti-y+=$(MISC_TIME_OUT)/$(MISC_TIME_NO_MULTI)
+libc-nomulti-y+=$(patsubst %.o,$(MISC_TIME_OUT)/%.o,$(MISC_TIME_NO_MULTI))
libc-nomulti-$(UCLIBC_HAS_XLOCALE)+=$(MISC_TIME_MOBJx)
objclean-y+=misc_time_objclean
diff --git a/libc/misc/ttyent/Makefile.in b/libc/misc/ttyent/Makefile.in
index e653ef2c1..eff772546 100644
--- a/libc/misc/ttyent/Makefile.in
+++ b/libc/misc/ttyent/Makefile.in
@@ -14,7 +14,6 @@ MISC_TTYENT_SRC:=$(patsubst %.c,$(MISC_TTYENT_DIR)/%.c,$(CSRC))
MISC_TTYENT_OBJ:=$(patsubst %.c,$(MISC_TTYENT_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_TTYENT_OBJ)
-libc-a-pic-y+=$(MISC_TTYENT_OBJ:.o=.os)
libc-so-y+=$(MISC_TTYENT_OBJ:.o=.os)
libc-multi-y+=$(MISC_TTYENT_SRC)
diff --git a/libc/misc/utmp/Makefile.in b/libc/misc/utmp/Makefile.in
index 6240a160d..2a0fe0f13 100644
--- a/libc/misc/utmp/Makefile.in
+++ b/libc/misc/utmp/Makefile.in
@@ -15,7 +15,6 @@ MISC_UTMP_SRC:=$(patsubst %.c,$(MISC_UTMP_DIR)/%.c,$(CSRC))
MISC_UTMP_OBJ:=$(patsubst %.c,$(MISC_UTMP_OUT)/%.o,$(CSRC))
libc-a-y+=$(MISC_UTMP_OBJ)
-libc-a-pic-y+=$(MISC_UTMP_OBJ:.o=.os)
libc-so-y+=$(MISC_UTMP_OBJ:.o=.os)
libc-multi-y+=$(MISC_UTMP_SRC)
diff --git a/libc/misc/wchar/Makefile.in b/libc/misc/wchar/Makefile.in
index 885f2476b..9059d71d8 100644
--- a/libc/misc/wchar/Makefile.in
+++ b/libc/misc/wchar/Makefile.in
@@ -33,11 +33,13 @@ MISC_WCHAR_MSRC:=$(MISC_WCHAR_DIR)/$(MSRC)
MISC_WCHAR_MOBJ:=$(patsubst %.o,$(MISC_WCHAR_OUT)/%.o,$(MOBJ))
MISC_WCHAR_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_WCHAR_MOBJ))))
-$(MISC_WCHAR_MOBJ) $(MISC_WCHAR_MOBJ:.o=.os): $(MISC_WCHAR_MSRC)
+$(MISC_WCHAR_MOBJ): $(MISC_WCHAR_MSRC)
+ $(compile.m)
+
+$(MISC_WCHAR_MOBJ:.o=.os): $(MISC_WCHAR_MSRC)
$(compile.m)
libc-a-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCHAR_MOBJ)
-libc-a-pic-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCHAR_MOBJ:.o=.os)
libc-so-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCHAR_MOBJ:.o=.os)
CFLAGS-multi-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCHAR_DEF)
diff --git a/libc/misc/wctype/Makefile.in b/libc/misc/wctype/Makefile.in
index 1db745223..dc008ec7d 100644
--- a/libc/misc/wctype/Makefile.in
+++ b/libc/misc/wctype/Makefile.in
@@ -12,7 +12,7 @@ MOBJ:= iswalnum.o iswalpha.o iswcntrl.o iswdigit.o iswgraph.o \
iswxdigit.o iswblank.o wctrans.o towctrans.o \
wctype.o iswctype.o towlower.o towupper.o
-MOBJx= iswalnum_l.o iswalpha_l.o iswcntrl_l.o iswdigit_l.o iswgraph_l.o \
+MOBJx:= iswalnum_l.o iswalpha_l.o iswcntrl_l.o iswdigit_l.o iswgraph_l.o \
iswlower_l.o iswprint_l.o iswpunct_l.o iswspace_l.o iswupper_l.o \
iswxdigit_l.o iswblank_l.o \
wctype_l.o iswctype_l.o wctrans_l.o towctrans_l.o towlower_l.o towupper_l.o
@@ -22,21 +22,24 @@ MISC_WCTYPE_OUT:=$(top_builddir)libc/misc/wctype
MISC_WCTYPE_MSRC:=$(MISC_WCTYPE_DIR)/$(MSRC)
MISC_WCTYPE_MOBJ:=$(patsubst %.o,$(MISC_WCTYPE_OUT)/%.o,$(MOBJ))
-MISC_WCTYPE_MOBJx=$(patsubst %.o,$(MISC_WCTYPE_OUT)/%.o,$(MOBJx))
+MISC_WCTYPE_MOBJx:=$(patsubst %.o,$(MISC_WCTYPE_OUT)/%.o,$(MOBJx))
-# adapt this if MOBJx is done for multi
MISC_WCTYPE_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(MISC_WCTYPE_MOBJ))))
-$(MISC_WCTYPE_MOBJ) $(MISC_WCTYPE_MOBJ:.o=.os): $(MISC_WCTYPE_MSRC)
+$(MISC_WCTYPE_MOBJ): $(MISC_WCTYPE_MSRC)
$(compile.m)
-$(MISC_WCTYPE_MOBJx) $(MISC_WCTYPE_MOBJx:.o=.os): $(MISC_WCTYPE_MSRC)
+$(MISC_WCTYPE_MOBJ:.o=.os): $(MISC_WCTYPE_MSRC)
+ $(compile.m)
+
+$(MISC_WCTYPE_MOBJx): $(MISC_WCTYPE_MSRC)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(MISC_WCTYPE_MOBJx:.o=.os): $(MISC_WCTYPE_MSRC)
$(compile.m) -D__UCLIBC_DO_XLOCALE
libc-a-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCTYPE_MOBJ)
libc-a-$(UCLIBC_HAS_XLOCALE)+=$(MISC_WCTYPE_MOBJx)
-libc-a-pic-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCTYPE_MOBJ:.o=.os)
-libc-a-pic-$(UCLIBC_HAS_XLOCALE)+=$(MISC_WCTYPE_MOBJx:.o=.os)
libc-so-$(UCLIBC_HAS_WCHAR)+=$(MISC_WCTYPE_MOBJ:.o=.os)
libc-so-$(UCLIBC_HAS_XLOCALE)+=$(MISC_WCTYPE_MOBJx:.o=.os)
diff --git a/libc/misc/wordexp/Makefile.in b/libc/misc/wordexp/Makefile.in
index c5199fe07..f4094d5c2 100644
--- a/libc/misc/wordexp/Makefile.in
+++ b/libc/misc/wordexp/Makefile.in
@@ -14,7 +14,6 @@ MISC_WORDEXP_SRC:=$(patsubst %.c,$(MISC_WORDEXP_DIR)/%.c,$(CSRC))
MISC_WORDEXP_OBJ:=$(patsubst %.c,$(MISC_WORDEXP_OUT)/%.o,$(CSRC))
libc-a-$(UCLIBC_HAS_WORDEXP)+=$(MISC_WORDEXP_OBJ)
-libc-a-pic-$(UCLIBC_HAS_WORDEXP)+=$(MISC_WORDEXP_OBJ:.o=.os)
libc-so-$(UCLIBC_HAS_WORDEXP)+=$(MISC_WORDEXP_OBJ:.o=.os)
libc-multi-$(UCLIBC_HAS_WORDEXP)+=$(MISC_WORDEXP_SRC)
diff --git a/libc/pwd_grp/Makefile.in b/libc/pwd_grp/Makefile.in
index 991f38872..3475d2331 100644
--- a/libc/pwd_grp/Makefile.in
+++ b/libc/pwd_grp/Makefile.in
@@ -28,13 +28,14 @@ PWDGRP_MOBJ:=$(patsubst %.o,$(PWDGRP_OUT)/%.o,$(MOBJ))
PWDGRP_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(PWDGRP_MOBJ))))
-$(PWDGRP_MOBJ) $(PWDGRP_MOBJ:.o=.os): $(PWDGRP_MSRC)
+$(PWDGRP_MOBJ): $(PWDGRP_MSRC)
+ $(compile.m)
+
+$(PWDGRP_MOBJ:.o=.os): $(PWDGRP_MSRC)
$(compile.m)
libc-a-y+=$(PWDGRP_MOBJ)
libc-a-$(HAS_SHADOW)+=$(PWDGRP_OUT)/lckpwdf.o
-libc-a-pic-y+=$(PWDGRP_MOBJ:.o=.os)
-libc-a-pic-$(HAS_SHADOW)+=$(PWDGRP_OUT)/lckpwdf.os
libc-so-y+=$(PWDGRP_MOBJ:.o=.os)
libc-so-$(HAS_SHADOW)+=$(PWDGRP_OUT)/lckpwdf.os
diff --git a/libc/signal/Makefile.in b/libc/signal/Makefile.in
index 22c9f35ea..26a8f0c56 100644
--- a/libc/signal/Makefile.in
+++ b/libc/signal/Makefile.in
@@ -23,12 +23,9 @@ SIGNAL_SRC:=$(patsubst %.c,$(SIGNAL_DIR)/%.c,$(CSRC))
SIGNAL_OBJ:=$(patsubst $(SIGNAL_DIR)/%.c,$(SIGNAL_OUT)/%.o,$(SIGNAL_SRC))
libc-a-y+=$(SIGNAL_OBJ)
-libc-a-pic-y+=$(SIGNAL_OBJ:.o=.os)
libc-so-y+=$(SIGNAL_OBJ:.o=.os)
-# either sigaction or allocrtsig have to be removed
-#libc-multi-y+=$(SIGNAL_SRC)
-libc-nomulti-y+=$(SIGNAL_OBJ)
+libc-multi-y+=$(SIGNAL_SRC)
objclean-y+=signal_objclean
diff --git a/libc/stdio/Makefile.in b/libc/stdio/Makefile.in
index 9a98afe8a..a928e0872 100644
--- a/libc/stdio/Makefile.in
+++ b/libc/stdio/Makefile.in
@@ -83,6 +83,14 @@ endif
CSRC+=$(CUSRC) $(CWSRC)
+ifneq ($(DOMULTI),n)
+STDIO_CSRC_NO_MULTI:=fwrite.c fputc.c fputs.c fprintf.c _fpmaxtostr.c
+CSRC:=$(filter-out $(STDIO_CSRC_NO_MULTI),$(CSRC))
+endif
+STDIO_MOBJ1_NO_MULTI:=vfprintf.o vfwprintf.o register_printf_function.o
+STDIO_MOBJ2_NO_MULTI:=vfscanf.o vfwscanf.o fscanf.o
+STDIO_MOBJ_NO_MULTI:=$(STDIO_MOBJ1_NO_MULTI) $(STDIO_MOBJ2_NO_MULTI)
+
STDIO_DIR:=$(top_srcdir)libc/stdio
STDIO_OUT:=$(top_builddir)libc/stdio
@@ -101,20 +109,23 @@ STDIO_MOBJ2:=$(patsubst %.o,$(STDIO_OUT)/%.o,$(MOBJ2))
STDIO_MSRC:=$(STDIO_MSRC1) $(STDIO_MSRC2)
STDIO_MOBJ:=$(STDIO_MOBJ1) $(STDIO_MOBJ2)
-#STDIO_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STDIO_MOBJ))))
+STDIO_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(filter-out $(STDIO_MOBJ_NO_MULTI),$(notdir $(STDIO_MOBJ)))))
STDIO_OBJS:=$(STDIO_OBJ) $(STDIO_MOBJ) $(STDIO_CUOBJ) $(STDIO_CLOBJ)
-#STDIO_NO_MULTI:=$(STDIO_CUOBJ) $(STDIO_CLOBJ)
+STDIO_NO_MULTI:=$(STDIO_CUOBJ) $(STDIO_CLOBJ)
# these need special handling or rewrite to support multi-build
# CUOBJ
-%_unlocked.o %_unlocked.os: %.c
+%_unlocked.o: %.c
+ $(compile.c) -D__DO_UNLOCKED
+
+%_unlocked.os: %.c
$(compile.c) -D__DO_UNLOCKED
# need this, else the other %64 files will get false rules
$(STDIO_CLSRC): $(STDIO_OUT)/%64.c : $(STDIO_DIR)/%.c
- cp $< $@
+ @cp $< $@
$(STDIO_CLOBJ): %.o : %.c
$(compile.c) -D__DO_LARGEFILE
@@ -122,22 +133,28 @@ $(STDIO_CLOBJ): %.o : %.c
$(STDIO_CLOBJ:.o=.os): %.os : %.c
$(compile.c) -D__DO_LARGEFILE
-$(STDIO_MOBJ1) $(STDIO_MOBJ1:.o=.os): $(STDIO_MSRC1)
+$(STDIO_MOBJ1): $(STDIO_MSRC1)
+ $(compile.m)
+
+$(STDIO_MOBJ1:.o=.os): $(STDIO_MSRC1)
+ $(compile.m)
+
+$(STDIO_MOBJ2): $(STDIO_MSRC2)
$(compile.m)
-$(STDIO_MOBJ2) $(STDIO_MOBJ2:.o=.os): $(STDIO_MSRC2)
+$(STDIO_MOBJ2:.o=.os): $(STDIO_MSRC2)
$(compile.m)
libc-a-y+=$(STDIO_OBJS)
-libc-a-pic-y+=$(STDIO_OBJS:.o=.os)
libc-so-y+=$(STDIO_OBJS:.o=.os)
-#CFLAGS-multi-y+=$(STDIO_DEF)
-#libc-multi-y+=$(STDIO_SRC) $(STDIO_MSRC)
-#libc-nomulti-y+=$(STDIO_NO_MULTI)
-libc-nomulti-y+=$(STDIO_OBJS)
+CFLAGS-multi-y+=$(STDIO_DEF)
+libc-multi-y+=$(STDIO_SRC) $(STDIO_MSRC)
+libc-nomulti-y+=$(STDIO_NO_MULTI)
+libc-nomulti-y+=$(patsubst %.c,$(STDIO_OUT)/%.o,$(STDIO_CSRC_NO_MULTI))
+libc-nomulti-y+=$(patsubst %.o,$(STDIO_OUT)/%.o,$(STDIO_MOBJ_NO_MULTI))
objclean-y+=stdio_objclean
stdio_objclean:
- $(RM) $(STDIO_OUT)/*.{o,os}
+ $(RM) $(STDIO_OUT)/*.{o,os} $(STDIO_OUT)/*64.c
diff --git a/libc/stdlib/Makefile.in b/libc/stdlib/Makefile.in
index 236d20cda..52527e1e5 100644
--- a/libc/stdlib/Makefile.in
+++ b/libc/stdlib/Makefile.in
@@ -67,6 +67,10 @@ ifeq ($(UCLIBC_HAS_FLOATS),y)
CSRC+=drand48.c drand48_r.c erand48.c erand48_r.c
endif
+STDLIB_MOBJ1_NO_MULTI:=_stdlib_strto_l.o _stdlib_strto_ll.o
+STDLIB_MOBJ2_NO_MULTI:=strtod.o strtof.o __strtofpmax.o
+STDLIB_MOBJ_NO_MULTI:=$(STDLIB_MOBJ1_NO_MULTI) $(STDLIB_MOBJ2_NO_MULTI)
+
STDLIB_DIR:=$(top_srcdir)libc/stdlib
STDLIB_OUT:=$(top_builddir)libc/stdlib
@@ -85,25 +89,40 @@ STDLIB_MOBJ2x:=$(patsubst %.o,$(STDLIB_OUT)/%.o,$(MOBJ2x))
STDLIB_MSRC:=$(STDLIB_MSRC1) $(STDLIB_MSRC2) $(STDLIB_MSRC3)
STDLIB_MOBJ:=$(STDLIB_MOBJ1) $(STDLIB_MOBJ2) $(STDLIB_MOBJ3)
-STDLIB_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STDLIB_MOBJ))))
+STDLIB_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(filter-out $(STDLIB_MOBJ_NO_MULTI),$(notdir $(STDLIB_MOBJ)))))
STDLIB_MOBJx:=$(STDLIB_MOBJ1x) $(STDLIB_MOBJ2x)
STDLIB_OBJS:=$(STDLIB_OBJ) $(STDLIB_MOBJ) $(STDLIB_MOBJx)
-$(STDLIB_MOBJ1) $(STDLIB_MOBJ1:.o=.os): $(STDLIB_MSRC1)
+$(STDLIB_MOBJ1): $(STDLIB_MSRC1)
+ $(compile.m)
+
+$(STDLIB_MOBJ1:.o=.os): $(STDLIB_MSRC1)
$(compile.m)
-$(STDLIB_MOBJ2) $(STDLIB_MOBJ2:.o=.os): $(STDLIB_MSRC2)
+$(STDLIB_MOBJ2): $(STDLIB_MSRC2)
$(compile.m)
-$(STDLIB_MOBJ3) $(STDLIB_MOBJ3:.o=.os) $(STDLIB_OUT)/atexit.os: $(STDLIB_MSRC3)
+$(STDLIB_MOBJ2:.o=.os): $(STDLIB_MSRC2)
$(compile.m)
-$(STDLIB_MOBJ1x) $(STDLIB_MOBJ1x:.o=.os): $(STDLIB_MSRC1)
+$(STDLIB_MOBJ3): $(STDLIB_MSRC3)
+ $(compile.m)
+
+$(STDLIB_MOBJ3:.o=.os) $(STDLIB_OUT)/atexit.os: $(STDLIB_MSRC3)
+ $(compile.m)
+
+$(STDLIB_MOBJ1x): $(STDLIB_MSRC1)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(STDLIB_MOBJ1x:.o=.os): $(STDLIB_MSRC1)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(STDLIB_MOBJ2x): $(STDLIB_MSRC2)
$(compile.m) -D__UCLIBC_DO_XLOCALE
-$(STDLIB_MOBJ2x) $(STDLIB_MOBJ2x:.o=.os): $(STDLIB_MSRC2)
+$(STDLIB_MOBJ2x:.o=.os): $(STDLIB_MSRC2)
$(compile.m) -D__UCLIBC_DO_XLOCALE
libc-a-y+=$(STDLIB_OBJS)
@@ -112,12 +131,10 @@ libc-so-y+=$(STDLIB_OBJS:.o=.os)
# this should always be the PIC version, because it could be used in shared libs
libc-nonshared-y+=$(STDLIB_OUT)/atexit.os
-#CFLAGS-multi-y+=$(STDLIB_DEF)
-#libc-multi-y+=$(STDLIB_SRC) $(STDLIB_MSRC)
-#libc-nomulti-y+=$(STDLIB_MOBJx)
-#libc-multi-y+=$(STDLIB_MSRC)
-#libc-nomulti-y+=$(STDLIB_OBJ) $(STDLIB_MOBJx)
-libc-nomulti-y+=$(STDLIB_OBJS)
+CFLAGS-multi-y+=$(STDLIB_DEF)
+libc-multi-y+=$(STDLIB_SRC) $(STDLIB_MSRC)
+libc-nomulti-y+=$(patsubst %.o,$(STDLIB_OUT)/%.o,$(STDLIB_MOBJ_NO_MULTI))
+libc-nomulti-$(UCLIBC_HAS_XLOCALE)+=$(STDLIB_MOBJx)
objclean-y+=stdlib_objclean
diff --git a/libc/stdlib/malloc-simple/Makefile.in b/libc/stdlib/malloc-simple/Makefile.in
index 42b302071..7add9deaa 100644
--- a/libc/stdlib/malloc-simple/Makefile.in
+++ b/libc/stdlib/malloc-simple/Makefile.in
@@ -16,13 +16,15 @@ STDLIB_MALLOC_SIMPLE_MOBJ:=$(patsubst %.o,$(STDLIB_MALLOC_SIMPLE_OUT)/%.o,$(MOBJ
STDLIB_MALLOC_SIMPLE_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STDLIB_MALLOC_SIMPLE_MOBJ))))
libc-a-$(MALLOC_SIMPLE)+=$(STDLIB_MALLOC_SIMPLE_MOBJ)
-libc-a-pic-$(MALLOC_SIMPLE)+=$(STDLIB_MALLOC_SIMPLE_MOBJ:.o=.os)
libc-so-$(MALLOC_SIMPLE)+=$(STDLIB_MALLOC_SIMPLE_MOBJ:.o=.os)
CFLAGS-multi-$(MALLOC_SIMPLE)+=$(STDLIB_MALLOC_SIMPLE_DEF)
libc-multi-$(MALLOC_SIMPLE)+=$(STDLIB_MALLOC_SIMPLE_MSRC)
-$(STDLIB_MALLOC_SIMPLE_MOBJ) $(STDLIB_MALLOC_SIMPLE_MOBJ:.o=.os): $(STDLIB_MALLOC_SIMPLE_MSRC)
+$(STDLIB_MALLOC_SIMPLE_MOBJ): $(STDLIB_MALLOC_SIMPLE_MSRC)
+ $(compile.m)
+
+$(STDLIB_MALLOC_SIMPLE_MOBJ:.o=.os): $(STDLIB_MALLOC_SIMPLE_MSRC)
$(compile.m)
objclean-y+=stdlib_malloc_simple_objclean
diff --git a/libc/stdlib/malloc-standard/Makefile.in b/libc/stdlib/malloc-standard/Makefile.in
index e8c34b544..e566dad8c 100644
--- a/libc/stdlib/malloc-standard/Makefile.in
+++ b/libc/stdlib/malloc-standard/Makefile.in
@@ -22,7 +22,6 @@ STDLIB_MALLOC_STANDARD_SRC:=$(patsubst %.c,$(STDLIB_MALLOC_STANDARD_DIR)/%.c,$(C
STDLIB_MALLOC_STANDARD_OBJ:=$(patsubst %.c,$(STDLIB_MALLOC_STANDARD_OUT)/%.o,$(CSRC))
libc-a-$(MALLOC_STANDARD)+=$(STDLIB_MALLOC_STANDARD_OBJ)
-libc-a-pic-$(MALLOC_STANDARD)+=$(STDLIB_MALLOC_STANDARD_OBJ:.o=.os)
libc-so-$(MALLOC_STANDARD)+=$(STDLIB_MALLOC_STANDARD_OBJ:.o=.os)
libc-multi-$(MALLOC_STANDARD)+=$(STDLIB_MALLOC_STANDARD_SRC)
diff --git a/libc/stdlib/malloc/Makefile.in b/libc/stdlib/malloc/Makefile.in
index 6a0e3cee3..cf61011a4 100644
--- a/libc/stdlib/malloc/Makefile.in
+++ b/libc/stdlib/malloc/Makefile.in
@@ -26,11 +26,9 @@ STDLIB_MALLOC_SRC:=$(patsubst %.c,$(STDLIB_MALLOC_DIR)/%.c,$(CSRC))
STDLIB_MALLOC_OBJ:=$(patsubst %.c,$(STDLIB_MALLOC_OUT)/%.o,$(CSRC))
libc-a-$(MALLOC)+=$(STDLIB_MALLOC_OBJ)
-libc-a-pic-$(MALLOC)+=$(STDLIB_MALLOC_OBJ:.o=.os)
libc-so-$(MALLOC)+=$(STDLIB_MALLOC_OBJ:.o=.os)
-#libc-multi-$(MALLOC)+=$(STDLIB_MALLOC_SRC)
-libc-nomulti-$(MALLOC)+=$(STDLIB_MALLOC_OBJ)
+libc-multi-$(MALLOC)+=$(STDLIB_MALLOC_SRC)
objclean-y+=stdlib_malloc_objclean
diff --git a/libc/string/Makefile.in b/libc/string/Makefile.in
index 820baec1c..0adcaee39 100644
--- a/libc/string/Makefile.in
+++ b/libc/string/Makefile.in
@@ -10,32 +10,26 @@
include $(top_srcdir)libc/string/generic/Makefile.in
MSRC:=wstring.c
-MOBJ:= basename.o bcopy.o bzero.o dirname.o ffs.o memccpy.o memchr.o memcmp.o \
- memcpy.o memmove.o mempcpy.o memrchr.o memset.o rawmemchr.o stpcpy.o \
- stpncpy.o strcasecmp.o strcasestr.o strcat.o strchrnul.o strchr.o \
- strcmp.o strcpy.o strcspn.o strdup.o strlen.o strncasecmp.o strncat.o \
- strncmp.o strncpy.o strndup.o strnlen.o strpbrk.o strrchr.o strsep.o \
- strspn.o strstr.o strtok.o strtok_r.o strerror.o __xpg_strerror_r.o \
+MOBJ:= basename.o bcopy.o bzero.o dirname.o ffs.o memccpy.o \
+ memrchr.o rawmemchr.o strcasecmp.o strcasestr.o \
+ strncasecmp.o strndup.o strsep.o \
+ strtok.o strerror.o __xpg_strerror_r.o \
_string_syserrmsgs.o __glibc_strerror_r.o \
_string_syssigmsgs.o sys_siglist.o strsignal.o psignal.o \
- __xpg_basename.o strlcat.o strlcpy.o sys_errlist.o memmem.o
+ __xpg_basename.o strlcat.o sys_errlist.o memmem.o
-MOBJW=
+MOBJW:=
ifeq ($(UCLIBC_HAS_WCHAR),y)
-MOBJW= wcscasecmp.o wcscat.o wcschrnul.o wcschr.o wcscmp.o wcscpy.o wcscspn.o \
- wcsdup.o wcslen.o wcsncasecmp.o wcsncat.o wcsncmp.o wcsncpy.o \
- wcsnlen.o wcspbrk.o wcsrchr.o wcsspn.o wcsstr.o wcstok.o wmemchr.o \
- wmemcmp.o wmemcpy.o wmemmove.o wmempcpy.o wmemset.o wcpcpy.o wcpncpy.o \
- __wcslcpy.o \
+MOBJW:= wcscasecmp.o wcsncasecmp.o \
wcsxfrm.o strxfrm.o # wcscoll strcoll.o
endif
-MOBJx=
-MOBJWx=
+MOBJx:=
+MOBJWx:=
ifeq ($(UCLIBC_HAS_XLOCALE),y)
-MOBJx+=strcasecmp_l.o strncasecmp_l.o
+MOBJx:=strcasecmp_l.o strncasecmp_l.o
ifeq ($(UCLIBC_HAS_WCHAR),y)
-MOBJWx+=wcscasecmp_l.o wcsncasecmp_l.o wcsxfrm_l.o strxfrm_l.o
+MOBJWx:=wcscasecmp_l.o wcsncasecmp_l.o wcsxfrm_l.o strxfrm_l.o
endif
endif
@@ -56,38 +50,71 @@ endif
STRING_DIR:=$(top_srcdir)libc/string
STRING_OUT:=$(top_builddir)libc/string
+STRING_WSRC:=$(filter-out $(STRING_DIR)/wstring.c,$(wildcard $(STRING_DIR)/w*.c))
+STRING_CSRC:=$(filter-out $(STRING_DIR)/wstring.c $(STRING_WSRC),$(wildcard $(STRING_DIR)/*.c))
+
+ifeq ($(UCLIBC_HAS_STRING_ARCH_OPT),y)
+ifneq ($(strip $(STRING_ARCH_OBJS)),)
+MOBJ:=$(filter-out $(notdir $(STRING_ARCH_OBJS)),$(MOBJ))
+STRING_CSRC:=$(filter-out $(patsubst %.o,$(STRING_DIR)/%.c,$(notdir $(STRING_ARCH_OBJS))),$(STRING_CSRC))
+STRING_WSRC:=$(filter-out $(patsubst %.o,$(STRING_DIR)/%.c,$(notdir $(STRING_ARCH_OBJS))),$(STRING_WSRC))
+endif
+endif
+
+ifeq ($(UCLIBC_HAS_STRING_GENERIC_OPT),y)
+ifneq ($(strip $(STRING_GENERIC_OBJS)),)
+MOBJ:=$(filter-out $(notdir $(STRING_GENERIC_OBJS)),$(MOBJ))
+STRING_CSRC:=$(filter-out $(patsubst %.o,$(STRING_DIR)/%.c,$(notdir $(STRING_GENERIC_OBJS))),$(STRING_CSRC))
+STRING_WSRC:=$(filter-out $(patsubst %.o,$(STRING_DIR)/%.c,$(notdir $(STRING_GENERIC_OBJS))),$(STRING_WSRC))
+endif
+endif
+
+
+STRING_COBJ:=$(patsubst $(STRING_DIR)/%.c,$(STRING_OUT)/%.o,$(STRING_CSRC))
+ifeq ($(UCLIBC_HAS_WCHAR),y)
+STRING_WOBJ:=$(patsubst $(STRING_DIR)/%.c,$(STRING_OUT)/%.o,$(STRING_WSRC))
+endif
STRING_MSRC:=$(patsubst %.c,$(STRING_DIR)/%.c,$(MSRC))
STRING_MOBJ:=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJ))
-STRING_MOBJW=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJW))
-STRING_MOBJx=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJx))
-STRING_MOBJWx=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJWx))
+STRING_MOBJW:=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJW))
+STRING_MOBJx:=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJx))
+STRING_MOBJWx:=$(patsubst %.o,$(STRING_OUT)/%.o,$(MOBJWx))
+
+STRING_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STRING_MOBJ))))
-#STRING_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STRING_MOBJ))))
+STRING_Wx:=$(STRING_MOBJW) $(STRING_MOBJx) $(STRING_MOBJWx)
+STRING_OBJS:=$(STRING_COBJ) $(STRING_WOBJ) $(STRING_MOBJ) $(STRING_Wx)
-STRING_Wx=$(STRING_MOBJW) $(STRING_MOBJx) $(STRING_MOBJWx)
-STRING_OBJS:=$(STRING_MOBJ) $(STRING_Wx)
+$(STRING_MOBJ): $(STRING_MSRC)
+ $(compile.m)
-$(STRING_MOBJ) $(STRING_MOBJ:.o=.os): $(STRING_MSRC)
+$(STRING_MOBJ:.o=.os): $(STRING_MSRC)
$(compile.m)
-$(STRING_MOBJW) $(STRING_MOBJW:.o=.os): $(STRING_MSRC)
+$(STRING_MOBJW): $(STRING_MSRC)
$(compile.m) -DWANT_WIDE
-$(STRING_MOBJx) $(STRING_MOBJx:.o=.os): $(STRING_MSRC)
+$(STRING_MOBJW:.o=.os): $(STRING_MSRC)
+ $(compile.m) -DWANT_WIDE
+
+$(STRING_MOBJx): $(STRING_MSRC)
+ $(compile.m) -D__UCLIBC_DO_XLOCALE
+
+$(STRING_MOBJx:.o=.os): $(STRING_MSRC)
$(compile.m) -D__UCLIBC_DO_XLOCALE
-$(STRING_MOBJWx) $(STRING_MOBJWx:.o=.os): $(STRING_MSRC)
+$(STRING_MOBJWx): $(STRING_MSRC)
+ $(compile.m) -DWANT_WIDE -D__UCLIBC_DO_XLOCALE
+
+$(STRING_MOBJWx:.o=.os): $(STRING_MSRC)
$(compile.m) -DWANT_WIDE -D__UCLIBC_DO_XLOCALE
libc-a-y+=$(STRING_OBJS)
-libc-a-pic-y+=$(STRING_OBJS:.o=.os)
libc-so-y+=$(STRING_OBJS:.o=.os)
-# multi does not work here, because arch/Makefile.in uses the same L_* defines
-#CFLAGS-multi-y+=$(STRING_DEF)
-#libc-multi-y+=$(STRING_MSRC)
-#libc-nomulti-y+=$(STRING_Wx)
-libc-nomulti-y+=$(STRING_OBJS)
+CFLAGS-multi-y+=$(STRING_DEF)
+libc-multi-y+=$(STRING_MSRC) $(STRING_CSRC) $(STRING_WSRC)
+libc-nomulti-y+=$(STRING_Wx)
objclean-y+=string_objclean
diff --git a/libc/string/arm/Makefile.arch b/libc/string/arm/Makefile.arch
index f4069d9d1..4b2550ee2 100644
--- a/libc/string/arm/Makefile.arch
+++ b/libc/string/arm/Makefile.arch
@@ -19,7 +19,7 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
objclean-y+=string_arch_objclean
diff --git a/libc/string/frv/Makefile.arch b/libc/string/frv/Makefile.arch
index 5b5230088..a864e8d1a 100644
--- a/libc/string/frv/Makefile.arch
+++ b/libc/string/frv/Makefile.arch
@@ -19,7 +19,7 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
objclean-y+=string_arch_objclean
diff --git a/libc/string/generic/Makefile.in b/libc/string/generic/Makefile.in
index 2273181d5..82910172a 100644
--- a/libc/string/generic/Makefile.in
+++ b/libc/string/generic/Makefile.in
@@ -9,23 +9,19 @@ STRING_GENERIC_DIR:=$(top_srcdir)libc/string/generic
STRING_GENERIC_OUT:=$(top_builddir)libc/string/generic
STRING_GENERIC_SRC:=$(wildcard $(STRING_GENERIC_DIR)/*.c)
-MOBJ:=$(patsubst $(STRING_GENERIC_DIR)/%.c,%.o,$(STRING_GENERIC_SRC))
ifeq ($(UCLIBC_HAS_STRING_ARCH_OPT),y)
ifneq ($(strip $(STRING_ARCH_OBJS)),)
-MOBJ:=$(filter-out $(notdir $(STRING_ARCH_OBJS)),$(MOBJ))
+STRING_GENERIC_SRC:=$(filter-out $(patsubst %.o,$(STRING_GENERIC_DIR)/%.c,$(notdir $(STRING_ARCH_OBJS))),$(STRING_GENERIC_SRC))
endif
endif
-STRING_GENERIC_OBJ:=$(patsubst %.o,$(STRING_GENERIC_OUT)/%.o,$(MOBJ))
-
-STRING_GENERIC_OBJS:=$(STRING_GENERIC_OBJ)
+STRING_GENERIC_OBJS:=$(patsubst $(STRING_GENERIC_DIR)/%.c,$(STRING_GENERIC_OUT)/%.o,$(STRING_GENERIC_SRC))
libc-a-$(UCLIBC_HAS_STRING_GENERIC_OPT)+=$(STRING_GENERIC_OBJS)
libc-so-$(UCLIBC_HAS_STRING_GENERIC_OPT)+=$(STRING_GENERIC_OBJS:.o=.os)
-#libc-multi-$(UCLIBC_HAS_STRING_GENERIC_OPT)+=$(STRING_GENERIC_SRC)
-libc-nomulti-$(UCLIBC_HAS_STRING_GENERIC_OPT)+=$(STRING_GENERIC_OBJS)
+libc-multi-$(UCLIBC_HAS_STRING_GENERIC_OPT)+=$(STRING_GENERIC_SRC)
objclean-y+=string_generic_objclean
diff --git a/libc/string/i386/Makefile.arch b/libc/string/i386/Makefile.arch
index 65f461cbb..27a29dd16 100644
--- a/libc/string/i386/Makefile.arch
+++ b/libc/string/i386/Makefile.arch
@@ -5,29 +5,18 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-MSRC:=string.c
-MOBJ:= strcpy.o strncpy.o strcat.o strncat.o strcmp.o \
- strncmp.o strchr.o strrchr.o strlen.o strnlen.o \
- memcpy.o memmove.o memchr.o memset.o
-
STRING_ARCH_DIR:=$(top_srcdir)libc/string/i386
STRING_ARCH_OUT:=$(top_builddir)libc/string/i386
-STRING_ARCH_MSRC:=$(patsubst %.c,$(STRING_ARCH_DIR)/%.c,$(MSRC))
-STRING_ARCH_MOBJ:=$(patsubst %.o,$(STRING_ARCH_OUT)/%.o,$(MOBJ))
-
-STRING_ARCH_OBJS:=$(STRING_ARCH_MOBJ)
-
-STRING_ARCH_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STRING_ARCH_OBJS))))
+STRING_ARCH_CSRC:=$(wildcard $(STRING_ARCH_DIR)/*.c)
+STRING_ARCH_COBJ:=$(patsubst $(STRING_ARCH_DIR)/%.c,$(STRING_ARCH_OUT)/%.o,$(STRING_ARCH_CSRC))
-$(STRING_ARCH_MOBJ) $(STRING_ARCH_MOBJ:.o=.os): $(STRING_ARCH_MSRC)
- $(compile.m)
+STRING_ARCH_OBJS:=$(STRING_ARCH_COBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-CFLAGS-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_DEF)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_MSRC)
+libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_CSRC)
objclean-y+=string_arch_objclean
diff --git a/libc/string/mips/Makefile.arch b/libc/string/mips/Makefile.arch
index 8aebbe27b..a110c291e 100644
--- a/libc/string/mips/Makefile.arch
+++ b/libc/string/mips/Makefile.arch
@@ -18,7 +18,7 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
objclean-y+=string_arch_objclean
diff --git a/libc/string/powerpc/Makefile.arch b/libc/string/powerpc/Makefile.arch
index 97ae14e7f..47a8dac1d 100644
--- a/libc/string/powerpc/Makefile.arch
+++ b/libc/string/powerpc/Makefile.arch
@@ -5,27 +5,18 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-MSRC:=string.c
-MOBJ:=memcpy.o memmove.o memset.o bzero.o
-
STRING_ARCH_DIR:=$(top_srcdir)libc/string/powerpc
STRING_ARCH_OUT:=$(top_builddir)libc/string/powerpc
-STRING_ARCH_MSRC:=$(patsubst %.c,$(STRING_ARCH_DIR)/%.c,$(MSRC))
-STRING_ARCH_MOBJ:=$(patsubst %.o,$(STRING_ARCH_OUT)/%.o,$(MOBJ))
-
-STRING_ARCH_OBJS:=$(STRING_ARCH_MOBJ)
-
-STRING_ARCH_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(STRING_ARCH_MOBJ))))
+STRING_ARCH_CSRC:=$(wildcard $(STRING_ARCH_DIR)/*.c)
+STRING_ARCH_COBJ:=$(patsubst $(STRING_ARCH_DIR)/%.c,$(STRING_ARCH_OUT)/%.o,$(STRING_ARCH_CSRC))
-$(STRING_ARCH_MOBJ) $(STRING_ARCH_MOBJ:.o=.os): $(STRING_ARCH_MSRC)
- $(compile.m)
+STRING_ARCH_OBJS:=$(STRING_ARCH_COBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-CFLAGS-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_DEF)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_MSRC)
+libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_CSRC)
objclean-y+=string_arch_objclean
diff --git a/libc/string/sh64/Makefile.arch b/libc/string/sh64/Makefile.arch
index b691ae1d7..f246864f6 100644
--- a/libc/string/sh64/Makefile.arch
+++ b/libc/string/sh64/Makefile.arch
@@ -19,7 +19,7 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
objclean-y+=string_arch_objclean
diff --git a/libc/string/sh64/memcpy.S b/libc/string/sh64/memcpy.S
index 361e050db..0ee386a96 100644
--- a/libc/string/sh64/memcpy.S
+++ b/libc/string/sh64/memcpy.S
@@ -38,10 +38,13 @@
.section .text..SHmedia32,"ax"
.globl memcpy
- .type memcpy, @function
+ .set memcpy,__memcpy
+ .globl __memcpy
+ .hidden __memcpy
+ .type __memcpy, @function
.align 5
-memcpy:
+__memcpy:
#define LDUAQ(P,O,D0,D1) ldlo.q P,O,D0; ldhi.q P,O+7,D1
#define STUAQ(P,O,D0,D1) stlo.q P,O,D0; sthi.q P,O+7,D1
@@ -198,5 +201,4 @@ Loop_ua:
stlo.q r5, 8, r1
blink tr1, r63
- .size memcpy, . - memcpy
-
+ .size __memcpy,.-__memcpy
diff --git a/libc/string/sh64/memset.S b/libc/string/sh64/memset.S
index 714fa3fb3..e1679230b 100644
--- a/libc/string/sh64/memset.S
+++ b/libc/string/sh64/memset.S
@@ -19,11 +19,14 @@
.section .text..SHmedia32,"ax"
.globl memset
- .type memset, @function
+ .set memset,__memset
+ .globl __memset
+ .hidden __memset
+ .type __memset, @function
.align 5
-memset:
+__memset:
pta/l multiquad, tr0
andi r2, 7, r22
ptabs r18, tr2
@@ -88,5 +91,4 @@ loop:
sthi.q r5, -1, r3
blink tr2,r63
- .size memset, . - memset
-
+ .size __memset,.-__memset
diff --git a/libc/string/sh64/strcpy.S b/libc/string/sh64/strcpy.S
index 273e9147c..faa071c50 100644
--- a/libc/string/sh64/strcpy.S
+++ b/libc/string/sh64/strcpy.S
@@ -16,10 +16,13 @@
.section .text..SHmedia32,"ax"
.globl strcpy
- .type strcpy, @function
+ .set strcpy,__strcpy
+ .globl __strcpy
+ .hidden __strcpy
+ .type __strcpy, @function
.align 5
-strcpy:
+__strcpy:
pta/l shortstring,tr1
ldlo.q r3,0,r4
@@ -94,5 +97,4 @@ loop:
addi r0, 8, r0
blink tr1, r63 // shortstring
- .size strcpy, . - strcpy
-
+ .size __strcpy,.-__strcpy
diff --git a/libc/string/sh64/strlen.S b/libc/string/sh64/strlen.S
index 57d15a29a..0f99488d5 100644
--- a/libc/string/sh64/strlen.S
+++ b/libc/string/sh64/strlen.S
@@ -32,10 +32,13 @@
.section .text..SHmedia32,"ax"
.globl strlen
- .type strlen,@function
+ .set strlen,__strlen
+ .globl __strlen
+ .hidden __strlen
+ .type __strlen,@function
.balign 16
-strlen:
+__strlen:
ptabs r18, tr4
/*
@@ -56,5 +59,4 @@ loop:
or r0, r63, r2
blink tr4, r63
- .size strlen, . - strlen
-
+ .size __strlen,.-__strlen
diff --git a/libc/string/sparc/Makefile.arch b/libc/string/sparc/Makefile.arch
index 726140c1b..1acd93ad9 100644
--- a/libc/string/sparc/Makefile.arch
+++ b/libc/string/sparc/Makefile.arch
@@ -19,7 +19,8 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ) $(STRING_ARCH_SOBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC) $(STRING_ARCH_SSRC)
+libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SOBJ)
objclean-y+=string_arch_objclean
diff --git a/libc/string/sparc/sparc32/memchr.S b/libc/string/sparc/sparc32/memchr.S
index c00df2427..e8f44f176 100644
--- a/libc/string/sparc/sparc32/memchr.S
+++ b/libc/string/sparc/sparc32/memchr.S
@@ -63,6 +63,9 @@
1: retl
sub %o0, 1, %o0
+.globl memchr
+.set memchr,__memchr
+.hidden __memchr
ENTRY(__memchr)
andcc %o1, 0xff, %o1
sll %o1, 8, %g6
@@ -138,7 +141,6 @@ ENTRY(__memchr)
sub %o0, 4, %o0
END(__memchr)
-weak_alias (__memchr, memchr)
#if !__BOUNDED_POINTERS__
weak_alias (__memchr, __ubp_memchr)
#endif
diff --git a/libc/string/sparc/sparc32/memcpy.S b/libc/string/sparc/sparc32/memcpy.S
index d0a80887b..b2a9b1602 100644
--- a/libc/string/sparc/sparc32/memcpy.S
+++ b/libc/string/sparc/sparc32/memcpy.S
@@ -161,12 +161,19 @@
b 3f
sub %o0, 2, %o0
-ENTRY(bcopy)
+.globl bcopy
+.set bcopy,__bcopy
+.hidden __bcopy
+ENTRY(__bcopy)
mov %o0, %o3
mov %o1, %o0
mov %o3, %o1
-END(bcopy)
-ENTRY(memmove)
+END(__bcopy)
+
+.globl memmove
+.set memmove,__memmove
+.hidden __memmove
+ENTRY(__memmove)
cmp %o0, %o1
st %o0, [%sp + 64]
bleu 9f
@@ -446,9 +453,12 @@ ENTRY(memmove)
sub %o2, 2, %o2
b 3f
add %o0, 2, %o0
-END(memmove)
+END(__memmove)
-ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
+.globl memcpy
+.set memcpy,__memcpy
+.hidden __memcpy
+ENTRY(__memcpy) /* %o0=dst %o1=src %o2=len */
sub %o0, %o1, %o4
st %o0, [%sp + 64]
9: andcc %o4, 3, %o5
@@ -963,4 +973,4 @@ ENTRY(memcpy) /* %o0=dst %o1=src %o2=len */
sub %o7, %o4, %o5
110: retl
sub %o7, %g6, %o5
-END(memcpy)
+END(__memcpy)
diff --git a/libc/string/sparc/sparc32/memset.S b/libc/string/sparc/sparc32/memset.S
index 02cebb791..ef8a5b634 100644
--- a/libc/string/sparc/sparc32/memset.S
+++ b/libc/string/sparc/sparc32/memset.S
@@ -62,7 +62,10 @@ ENTRY(__bzero)
sub %o0, %o2, %o0
END(__bzero)
-ENTRY(memset)
+.globl memset
+.set memset,__memset
+.hidden __memset
+ENTRY(__memset)
and %o1, 0xff, %g3
sll %g3, 8, %g2
or %g3, %g2, %g3
@@ -147,6 +150,6 @@ ENTRY(memset)
stb %g3, [%o0 + 6]
0: retl
nop
-END(memset)
+END(__memset)
weak_alias (__bzero, bzero)
diff --git a/libc/string/sparc/sparc32/stpcpy.S b/libc/string/sparc/sparc32/stpcpy.S
index b7e7a00f8..97a5dce0e 100644
--- a/libc/string/sparc/sparc32/stpcpy.S
+++ b/libc/string/sparc/sparc32/stpcpy.S
@@ -65,6 +65,9 @@
1: retl
add %o0, -1, %o0
+.globl stpcpy
+.set stpcpy,__stpcpy
+.hidden __stpcpy
ENTRY(__stpcpy)
andcc %o1, 3, %g0
bne 10b
@@ -157,5 +160,3 @@ ENTRY(__stpcpy)
19: retl
nop
END(__stpcpy)
-
-weak_alias (__stpcpy, stpcpy)
diff --git a/libc/string/sparc/sparc32/strcat.S b/libc/string/sparc/sparc32/strcat.S
index e4ff21d01..8efe6aebf 100644
--- a/libc/string/sparc/sparc32/strcat.S
+++ b/libc/string/sparc/sparc32/strcat.S
@@ -91,7 +91,10 @@
b 3f
sub %o0, 1, %o0
-ENTRY(strcat)
+.globl strcat
+.set strcat,__strcat
+.hidden __strcat
+ENTRY(__strcat)
mov %o0, %g2
andcc %o0, 3, %g0
bne 11b
@@ -343,4 +346,4 @@ ENTRY(strcat)
srl %o5, 16, %o4
retl
mov %g2, %o0
-END(strcat)
+END(__strcat)
diff --git a/libc/string/sparc/sparc32/strchr.S b/libc/string/sparc/sparc32/strchr.S
index f18a8abc7..450b4ffe6 100644
--- a/libc/string/sparc/sparc32/strchr.S
+++ b/libc/string/sparc/sparc32/strchr.S
@@ -67,7 +67,10 @@
1: retl
sub %o0, 1, %o0
-ENTRY(strchr)
+.globl strchr
+.set strchr,__strchr
+.hidden __strchr
+ENTRY(__strchr)
andcc %o1, 0xff, %o1
be 12f
sll %o1, 8, %o2
@@ -215,9 +218,12 @@ ENTRY(strchr)
1: or %o4, %lo(0x01010101), %o2
b 7f
ld [%o0], %g4
-END(strchr)
+END(__strchr)
-ENTRY(strrchr)
+.globl strrchr
+.set strrchr,__strrchr
+.hidden __strrchr
+ENTRY(__strrchr)
andcc %o1, 0xff, %o1
clr %o5
be 12b
@@ -274,7 +280,7 @@ ENTRY(strrchr)
ld [%o0], %g4
9: retl
mov %o5, %o0
-END(strrchr)
+END(__strrchr)
weak_alias (strchr, index)
weak_alias (strrchr, rindex)
diff --git a/libc/string/sparc/sparc32/strcmp.S b/libc/string/sparc/sparc32/strcmp.S
index d6cf9e7d3..2ae1b2ef4 100644
--- a/libc/string/sparc/sparc32/strcmp.S
+++ b/libc/string/sparc/sparc32/strcmp.S
@@ -74,7 +74,10 @@
2: retl
mov %o4, %o0
-ENTRY(strcmp)
+.globl strcmp
+.set strcmp,__strcmp
+.hidden __strcmp
+ENTRY(__strcmp)
andcc %o0, 3, %g0
bne 10b
sethi %hi(0x80808080), %g1
@@ -252,4 +255,4 @@ ENTRY(strcmp)
ld [%i0], %i4
jmpl %i7 + 8, %g0
restore %g4, %g0, %o0
-END(strcmp)
+END(__strcmp)
diff --git a/libc/string/sparc/sparc32/strcpy.S b/libc/string/sparc/sparc32/strcpy.S
index c368580ba..6dc3517b5 100644
--- a/libc/string/sparc/sparc32/strcpy.S
+++ b/libc/string/sparc/sparc32/strcpy.S
@@ -63,7 +63,10 @@
b 6f
andcc %o0, 3, %g3
-ENTRY(strcpy)
+.globl strcpy
+.set strcpy,__strcpy
+.hidden __strcpy
+ENTRY(__strcpy)
mov %o0, %g2
andcc %o1, 3, %g0
bne 1b
@@ -269,4 +272,4 @@ ENTRY(strcpy)
srl %o5, 16, %o4
retl
mov %g2, %o0
-END(strcpy)
+END(__strcpy)
diff --git a/libc/string/sparc/sparc32/strlen.S b/libc/string/sparc/sparc32/strlen.S
index cc455ac89..116700e24 100644
--- a/libc/string/sparc/sparc32/strlen.S
+++ b/libc/string/sparc/sparc32/strlen.S
@@ -63,7 +63,10 @@
3: retl
mov 2, %o0
-ENTRY(strlen)
+.globl strlen
+.set strlen,__strlen
+.hidden __strlen
+ENTRY(__strlen)
mov %o0, %o1
andcc %o0, 3, %g0
bne 10b
@@ -98,4 +101,4 @@ ENTRY(strlen)
add %o4, 1, %o4
13: retl
sub %o4, %o1, %o0
-END(strlen)
+END(__strlen)
diff --git a/libc/string/sparc/sparc64/memcpy.S b/libc/string/sparc/sparc64/memcpy.S
index 660fae6b2..47f812a1e 100644
--- a/libc/string/sparc/sparc64/memcpy.S
+++ b/libc/string/sparc/sparc64/memcpy.S
@@ -191,7 +191,10 @@
.text
.align 32
-ENTRY(bcopy)
+.globl bcopy
+.set bcopy,__bcopy
+.hidden __bcopy
+ENTRY(__bcopy)
sub %o1, %o0, %o4 /* IEU0 Group */
mov %o0, %g3 /* IEU1 */
cmp %o4, %o2 /* IEU1 Group */
@@ -205,7 +208,7 @@ ENTRY(bcopy)
add %o0, %o2, %o0 /* IEU0 */
retl
nop
-END(bcopy)
+END(__bcopy)
.align 32
200: be,pt %xcc, 201f /* CTI */
@@ -503,7 +506,10 @@ END(__align_cpy_16)
#endif
.align 32
-ENTRY(memcpy)
+.globl memcpy
+.set memcpy,__memcpy
+.hidden __memcpy
+ENTRY(__memcpy)
210:
#ifndef USE_BPR
srl %o2, 0, %o2 /* IEU1 Group */
@@ -694,7 +700,7 @@ ENTRY(memcpy)
214: wr %g0, FPRS_FEF, %fprs
retl
mov %g4, %o0
-END(memcpy)
+END(__memcpy)
.align 32
228: andcc %o2, 1, %g0 /* IEU1 Group */
@@ -719,7 +725,10 @@ END(memcpy)
nop
.align 32
-ENTRY(memmove)
+.globl memmove
+.set memmove,__memmove
+.hidden __memmove
+ENTRY(__memmove)
#ifndef USE_BPR
srl %o2, 0, %o2 /* IEU1 Group */
#endif
@@ -910,7 +919,7 @@ ENTRY(memmove)
234: wr %g0, FPRS_FEF, %fprs
retl
mov %g4, %o0
-END(memmove)
+END(__memmove)
#ifdef USE_BPR
weak_alias (memcpy, __align_cpy_1)
diff --git a/libc/string/sparc/sparc64/memset.S b/libc/string/sparc/sparc64/memset.S
index 2e23f92a8..5d2911451 100644
--- a/libc/string/sparc/sparc64/memset.S
+++ b/libc/string/sparc/sparc64/memset.S
@@ -36,7 +36,10 @@
/* Well, memset is a lot easier to get right than bcopy... */
.text
.align 32
-ENTRY(memset)
+.globl memset
+.set memset,__memset
+.hidden __memset
+ENTRY(__memset)
andcc %o1, 0xff, %o1
mov %o0, %o5
be,a,pt %icc, 50f
@@ -176,7 +179,7 @@ ENTRY(memset)
nop
ba,pt %xcc, 18b
ldd [%o0], %f0
-END(memset)
+END(__memset)
#define ZERO_BLOCKS(base, offset, source) \
stx source, [base - offset - 0x38]; \
diff --git a/libc/string/sparc/sparc64/sparcv9b/memcpy.S b/libc/string/sparc/sparc64/sparcv9b/memcpy.S
index 7f36b7c2c..91e74d438 100644
--- a/libc/string/sparc/sparc64/sparcv9b/memcpy.S
+++ b/libc/string/sparc/sparc64/sparcv9b/memcpy.S
@@ -36,7 +36,10 @@
.text
.align 32
-ENTRY(bcopy)
+.globl bcopy
+.set bcopy,__bcopy
+.hidden __bcopy
+ENTRY(__bcopy)
sub %o1, %o0, %o4
mov %o0, %g4
cmp %o4, %o2
@@ -50,7 +53,7 @@ ENTRY(bcopy)
add %o0, %o2, %o0
retl
nop
-END(bcopy)
+END(__bcopy)
/* Special/non-trivial issues of this code:
*
@@ -67,7 +70,10 @@ END(bcopy)
* of up to 2.4GB per second.
*/
.align 32
-ENTRY(memcpy)
+.globl memcpy
+.set memcpy,__memcpy
+.hidden __memcpy
+ENTRY(__memcpy)
100: /* %o0=dst, %o1=src, %o2=len */
mov %o0, %g5
@@ -328,7 +334,7 @@ small_copy_unaligned:
retl
mov %g5, %o0
-END(memcpy)
+END(__memcpy)
#define RMOVE_BIGCHUNK(src, dst, offset, t0, t1, t2, t3) \
ldx [%src - offset - 0x20], %t0; \
@@ -403,7 +409,10 @@ END(memcpy)
mov %g4, %o0
.align 32
-ENTRY(memmove)
+.globl memmove
+.set memmove,__memmove
+.hidden __memmove
+ENTRY(__memmove)
mov %o0, %g5
#ifndef USE_BPR
srl %o2, 0, %o2 /* IEU1 Group */
@@ -595,7 +604,7 @@ ENTRY(memmove)
234: wr %g0, FPRS_FEF, %fprs
retl
mov %g4, %o0
-END(memmove)
+END(__memmove)
#ifdef USE_BPR
weak_alias (memcpy, __align_cpy_1)
diff --git a/libc/string/sparc/sparc64/strcat.S b/libc/string/sparc/sparc64/strcat.S
index 21ff119c4..3b81e59e6 100644
--- a/libc/string/sparc/sparc64/strcat.S
+++ b/libc/string/sparc/sparc64/strcat.S
@@ -47,7 +47,10 @@
.text
.align 32
-ENTRY(strcat)
+.globl strcat
+.set strcat,__strcat
+.hidden __strcat
+ENTRY(__strcat)
sethi %hi(0x01010101), %g1 /* IEU0 Group */
ldub [%o0], %o3 /* Load */
or %g1, %lo(0x01010101), %g1 /* IEU0 Group */
@@ -335,4 +338,4 @@ ENTRY(strcat)
stb %o4, [%o0 - 8] /* Store */
retl /* CTI+IEU1 Group */
mov %g6, %o0 /* IEU0 */
-END(strcat)
+END(__strcat)
diff --git a/libc/string/sparc/sparc64/strchr.S b/libc/string/sparc/sparc64/strchr.S
index 784b7fe4d..6943e8b96 100644
--- a/libc/string/sparc/sparc64/strchr.S
+++ b/libc/string/sparc/sparc64/strchr.S
@@ -47,7 +47,10 @@
.text
.align 32
-ENTRY(strchr)
+.globl strchr
+.set strchr,__strchr
+.hidden __strchr
+ENTRY(__strchr)
andcc %o1, 0xff, %o1 /* IEU1 Group */
be,pn %icc, 17f /* CTI */
sllx %o1, 8, %g3 /* IEU0 Group */
@@ -327,10 +330,13 @@ ENTRY(strchr)
lduba [%o0] ASI_PNF, %o3 /* Load */
retl /* CTI+IEU1 Group */
add %o0, -1, %o0 /* IEU0 */
-END(strchr)
+END(__strchr)
.align 32
-ENTRY(strrchr)
+.globl strrchr
+.set strrchr,__strrchr
+.hidden __strrchr
+ENTRY(__strrchr)
andcc %o1, 0xff, %o1 /* IEU1 Group */
be,pn %icc, 17b /* CTI */
clr %g4 /* IEU0 */
@@ -474,7 +480,7 @@ ENTRY(strrchr)
ba,pt %xcc, 1b /* CTI Group */
ldx [%o0], %o3 /* Load */
-END(strrchr)
+END(__strrchr)
weak_alias (strchr, index)
weak_alias (strrchr, rindex)
diff --git a/libc/string/sparc/sparc64/strcmp.S b/libc/string/sparc/sparc64/strcmp.S
index 5866778d3..a4eb36632 100644
--- a/libc/string/sparc/sparc64/strcmp.S
+++ b/libc/string/sparc/sparc64/strcmp.S
@@ -45,7 +45,10 @@
.text
.align 32
-ENTRY(strcmp)
+.globl strcmp
+.set strcmp,__strcmp
+.hidden __strcmp
+ENTRY(__strcmp)
sethi %hi(0x01010101), %g1 /* IEU0 Group */
andcc %o0, 7, %g0 /* IEU1 */
bne,pn %icc, 7f /* CTI */
@@ -275,4 +278,4 @@ ENTRY(strcmp)
ba,pt %xcc, 11b /* CTI Group */
ldxa [%o1 + %o0] ASI_PNF, %g6 /* Load */
-END(strcmp)
+END(__strcmp)
diff --git a/libc/string/sparc/sparc64/strcpy.S b/libc/string/sparc/sparc64/strcpy.S
index aa5d2aee3..cc906bae7 100644
--- a/libc/string/sparc/sparc64/strcpy.S
+++ b/libc/string/sparc/sparc64/strcpy.S
@@ -45,7 +45,10 @@
.text
.align 32
-ENTRY(strcpy)
+.globl strcpy
+.set strcpy,__strcpy
+.hidden __strcpy
+ENTRY(__strcpy)
sethi %hi(0x01010101), %g1 /* IEU0 Group */
mov %o0, %g6 /* IEU1 */
or %g1, %lo(0x01010101), %g1 /* IEU0 Group */
@@ -240,4 +243,4 @@ ENTRY(strcpy)
stb %o4, [%o0 - 8] /* Store */
retl /* CTI+IEU1 Group */
mov %g6, %o0 /* IEU0 */
-END(strcpy)
+END(__strcpy)
diff --git a/libc/string/sparc/sparc64/strlen.S b/libc/string/sparc/sparc64/strlen.S
index 5167ad5ba..9f48fe6a1 100644
--- a/libc/string/sparc/sparc64/strlen.S
+++ b/libc/string/sparc/sparc64/strlen.S
@@ -39,7 +39,10 @@
.text
.align 32
-ENTRY(strlen)
+.globl strlen
+.set strlen,__strlen
+.hidden __strlen
+ENTRY(__strlen)
sethi %hi(0x01010101), %g1 /* IEU0 Group */
ldub [%o0], %o3 /* Load */
or %g1, %lo(0x01010101), %g1 /* IEU0 Group */
@@ -169,4 +172,4 @@ ENTRY(strlen)
add %o0, -1, %o0 /* IEU0 Group */
retl /* CTI+IEU1 Group */
sub %o0, %o1, %o0 /* IEU0 */
-END(strlen)
+END(__strlen)
diff --git a/libc/string/x86_64/Makefile.arch b/libc/string/x86_64/Makefile.arch
index 914eab55c..56e5a5165 100644
--- a/libc/string/x86_64/Makefile.arch
+++ b/libc/string/x86_64/Makefile.arch
@@ -19,7 +19,8 @@ STRING_ARCH_OBJS:=$(STRING_ARCH_OBJ) $(STRING_ARCH_SOBJ)
libc-a-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS)
libc-so-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_OBJS:.o=.os)
-libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC) $(STRING_ARCH_SSRC)
+libc-multi-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SRC)
+libc-nomulti-$(UCLIBC_HAS_STRING_ARCH_OPT)+=$(STRING_ARCH_SOBJ)
objclean-y+=string_x86_64_objclean
diff --git a/libc/string/x86_64/memcpy.S b/libc/string/x86_64/memcpy.S
index 4fa38a640..c375bf3fb 100644
--- a/libc/string/x86_64/memcpy.S
+++ b/libc/string/x86_64/memcpy.S
@@ -32,7 +32,10 @@ ENTRY (__memcpy_chk)
jb HIDDEN_JUMPTARGET (__chk_fail)
END (__memcpy_chk)
#endif
-ENTRY (BP_SYM (memcpy))
+.global memcpy
+.set memcpy,__memcpy
+.hidden __memcpy
+ENTRY (BP_SYM (__memcpy))
/* Cutoff for the big loop is a size of 32 bytes since otherwise
the loop will never be entered. */
cmpq $32, %rdx
@@ -92,4 +95,4 @@ ENTRY (BP_SYM (memcpy))
#endif
ret
-END (BP_SYM (memcpy))
+END (BP_SYM (__memcpy))
diff --git a/libc/string/x86_64/memset.S b/libc/string/x86_64/memset.S
index d74ec8ccb..d66195580 100644
--- a/libc/string/x86_64/memset.S
+++ b/libc/string/x86_64/memset.S
@@ -35,7 +35,10 @@ ENTRY (__memset_chk)
jb HIDDEN_JUMPTARGET (__chk_fail)
END (__memset_chk)
#endif
-ENTRY (memset)
+.global memset
+.set memset,__memset
+.hidden __memset
+ENTRY (__memset)
#if BZERO_P
mov %rsi,%rdx /* Adjust parameter. */
xorl %esi,%esi /* Fill with 0s. */
@@ -131,7 +134,7 @@ ENTRY (memset)
jne 11b
jmp 4b
-END (memset)
+END (__memset)
#if !BZERO_P && defined PIC && !defined NOT_IN_libc
strong_alias (__memset_chk, __memset_zero_constant_len_parameter)
diff --git a/libc/string/x86_64/strcat.S b/libc/string/x86_64/strcat.S
index 1106cb4ed..9ee10b202 100644
--- a/libc/string/x86_64/strcat.S
+++ b/libc/string/x86_64/strcat.S
@@ -23,7 +23,10 @@
.text
-ENTRY (BP_SYM (strcat))
+.global strcat
+.set strcat,__strcat
+.hidden __strcat
+ENTRY (BP_SYM (__strcat))
movq %rdi, %rcx /* Dest. register. */
andl $7, %ecx /* mask alignment bits */
movq %rdi, %rax /* Duplicate destination pointer. */
@@ -253,4 +256,4 @@ ENTRY (BP_SYM (strcat))
24:
movq %rdi, %rax /* Source is return value. */
retq
-END (BP_SYM (strcat))
+END (BP_SYM (__strcat))
diff --git a/libc/string/x86_64/strchr.S b/libc/string/x86_64/strchr.S
index b84b012b2..04d365a82 100644
--- a/libc/string/x86_64/strchr.S
+++ b/libc/string/x86_64/strchr.S
@@ -22,7 +22,10 @@
.text
-ENTRY (BP_SYM (strchr))
+.globl strchr
+.set strchr,__strchr
+.hidden __strchr
+ENTRY (BP_SYM (__strchr))
/* Before we start with the main loop we process single bytes
until the source pointer is aligned. This has two reasons:
@@ -282,6 +285,6 @@ ENTRY (BP_SYM (strchr))
6:
nop
retq
-END (BP_SYM (strchr))
+END (BP_SYM (__strchr))
weak_alias (BP_SYM (strchr), BP_SYM (index))
diff --git a/libc/string/x86_64/strcmp.S b/libc/string/x86_64/strcmp.S
index 0b401a773..f933c1156 100644
--- a/libc/string/x86_64/strcmp.S
+++ b/libc/string/x86_64/strcmp.S
@@ -22,7 +22,10 @@
#include "_glibc_inc.h"
.text
-ENTRY (BP_SYM (strcmp))
+.global strcmp
+.set strcmp,__strcmp
+.hidden __strcmp
+ENTRY (BP_SYM (__strcmp))
L(oop): movb (%rdi), %al
cmpb (%rsi), %al
jne L(neq)
@@ -38,4 +41,4 @@ L(neq): movl $1, %eax
movl $-1, %ecx
cmovbl %ecx, %eax
ret
-END (BP_SYM (strcmp))
+END (BP_SYM (__strcmp))
diff --git a/libc/string/x86_64/strcpy.S b/libc/string/x86_64/strcpy.S
index 0847e2b7c..1a64d2745 100644
--- a/libc/string/x86_64/strcpy.S
+++ b/libc/string/x86_64/strcpy.S
@@ -21,7 +21,10 @@
#include "_glibc_inc.h"
#ifndef USE_AS_STPCPY
-# define STRCPY strcpy
+# define STRCPY __strcpy
+.global strcpy
+.set strcpy,__strcpy
+.hidden __strcpy
#endif
.text
diff --git a/libc/string/x86_64/strcspn.S b/libc/string/x86_64/strcspn.S
index e1a22e4f1..e25100bc1 100644
--- a/libc/string/x86_64/strcspn.S
+++ b/libc/string/x86_64/strcspn.S
@@ -26,10 +26,16 @@
#include "_glibc_inc.h"
/* BEWARE: `#ifdef strcspn' means that strcspn is redefined as `strpbrk' */
-#define STRPBRK_P (defined strcspn)
+#define STRPBRK_P (defined __strcspn)
.text
-ENTRY (strcspn)
+#if STRPBRK_P
+#else
+.global strcspn
+.set strcspn,__strcspn
+.hidden __strcspn
+#endif
+ENTRY (__strcspn)
movq %rdi, %rdx /* Save SRC. */
@@ -120,4 +126,4 @@ L(4): addq $256, %rsp /* remove skipset */
non-valid character */
#endif
ret
-END (strcspn)
+END (__strcspn)
diff --git a/libc/string/x86_64/strlen.S b/libc/string/x86_64/strlen.S
index 36b63031e..ab25515f8 100644
--- a/libc/string/x86_64/strlen.S
+++ b/libc/string/x86_64/strlen.S
@@ -22,7 +22,10 @@
.text
-ENTRY (strlen)
+.global strlen
+.set strlen,__strlen
+.hidden __strlen
+ENTRY (__strlen)
movq %rdi, %rcx /* Duplicate source pointer. */
andl $7, %ecx /* mask alignment bits */
movq %rdi, %rax /* duplicate destination. */
@@ -132,4 +135,4 @@ ENTRY (strlen)
2:
subq %rdi, %rax /* compute difference to string start */
ret
-END (strlen)
+END (__strlen)
diff --git a/libc/string/x86_64/strpbrk.S b/libc/string/x86_64/strpbrk.S
index c49cd2c06..c37befe72 100644
--- a/libc/string/x86_64/strpbrk.S
+++ b/libc/string/x86_64/strpbrk.S
@@ -1,2 +1,5 @@
-#define strcspn strpbrk
+#define __strcspn __strpbrk
+.global strpbrk
+.set strpbrk,__strpbrk
+.hidden __strpbrk
#include "strcspn.S"
diff --git a/libc/string/x86_64/strspn.S b/libc/string/x86_64/strspn.S
index 245d8e699..8d5903c1b 100644
--- a/libc/string/x86_64/strspn.S
+++ b/libc/string/x86_64/strspn.S
@@ -26,7 +26,10 @@
#include "_glibc_inc.h"
.text
-ENTRY (strspn)
+.global strspn
+.set strspn,__strspn
+.hidden __strspn
+ENTRY (__strspn)
movq %rdi, %rdx /* Save SRC. */
@@ -111,4 +114,4 @@ L(4): addq $256, %rsp /* remove stopset */
characters, so compute distance to first
non-valid character */
ret
-END (strspn)
+END (__strspn)
diff --git a/libc/sysdeps/linux/Makefile.arch b/libc/sysdeps/linux/Makefile.arch
index a2d675294..5feffe8d6 100644
--- a/libc/sysdeps/linux/Makefile.arch
+++ b/libc/sysdeps/linux/Makefile.arch
@@ -5,17 +5,13 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-ifeq ($(TARGET_ARCH),)
-$(error TARGET_ARCH is not set, no .config exists in topdir)
-endif
-
ARCH_DIR := $(top_srcdir)libc/sysdeps/linux/$(TARGET_ARCH)
ARCH_OUT := $(top_builddir)libc/sysdeps/linux/$(TARGET_ARCH)
ARCH_CSRC := $(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
ARCH_COBJ := $(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC := $(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ := $(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
+ARCH_SSRC := $(patsubst %.s,$(ARCH_DIR)/%.s,$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC)))
+ARCH_SOBJ := $(patsubst %.s,$(ARCH_OUT)/%.o,$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC)))
ARCH_OBJS := $(ARCH_COBJ) $(ARCH_SOBJ)
diff --git a/libc/sysdeps/linux/alpha/Makefile b/libc/sysdeps/linux/alpha/Makefile
index ed354d3dc..b1bf1ef10 100644
--- a/libc/sysdeps/linux/alpha/Makefile
+++ b/libc/sysdeps/linux/alpha/Makefile
@@ -1,72 +1,15 @@
# Makefile for uClibc
#
-# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Library General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your option) any
-# later version.
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Library General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
TOPDIR=../../../../
-include $(TOPDIR)Rules.mak
-
-CRT_SRC := crt1.S
-CRT_OBJ := crt1.o
-CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
-
-SSRC := __longjmp.S brk.S bsd-_setjmp.S bsd-setjmp.S clone.S \
- setjmp.S divl.S reml.S remq.S divq.S
-SOBJ := $(patsubst %.S,%.o, $(SSRC))
-
-CSRC := sysdep.c #brk.c
-COBJ := $(patsubst %.c,%.o, $(CSRC))
-
-OBJS := $(SOBJ) $(COBJ)
-
-OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
-
-all: $(OBJ_LIST) $(CTOR_TARGETS)
-
-$(OBJ_LIST): $(OBJS) $(CRT_OBJ)
- $(STRIPTOOL) -x -R .note -R .comment $^
- $(INSTALL) -d $(TOPDIR)lib/
- cp $(CRT_OBJ) $(TOPDIR)lib/
- echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $@
-
-$(CRT_OBJ): $(CRT_SRC)
- $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o
-
-$(SOBJ): %.o : %.S
- $(CC) $(ASFLAGS) -c $< -o $@
-
-$(COBJ): %.o : %.c
- $(CC) $(CFLAGS) -c $< -o $@
-
-ifeq ($(UCLIBC_CTOR_DTOR),y)
-$(TOPDIR)lib/crti.o: crti.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-
-$(TOPDIR)lib/crtn.o: crtn.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-else
-$(CTOR_TARGETS):
- $(INSTALL) -d $(TOPDIR)lib/
- $(AR) $(ARFLAGS) $@
-endif
-
-headers:
- $(LN) -fs ../libc/sysdeps/linux/alpha/fpu_control.h $(TOPDIR)/include/
-clean:
- $(RM) *.o *~ core
+top_srcdir=$(TOPDIR)
+top_builddir=../../../../
+all: objs
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
diff --git a/libc/sysdeps/linux/arm/Makefile.arch b/libc/sysdeps/linux/arm/Makefile.arch
index e44b145f9..c6edc12a1 100644
--- a/libc/sysdeps/linux/arm/Makefile.arch
+++ b/libc/sysdeps/linux/arm/Makefile.arch
@@ -5,28 +5,10 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-CSRC:=brk.c syscall.c ioperm.c iopl.c sigaction.c __syscall_error.c
-SSRC:= __longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \
- bsd-_setjmp.S sigrestorer.S mmap64.S
-
-ARCH_DIR:=$(top_srcdir)libc/sysdeps/linux/arm
-ARCH_OUT:=$(top_builddir)libc/sysdeps/linux/arm
-
-ARCH_CSRC:=$(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
-ARCH_COBJ:=$(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC:=$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ:=$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
-
-ARCH_OBJS:=$(ARCH_COBJ) $(ARCH_SOBJ)
+CSRC := brk.c syscall.c ioperm.c iopl.c sigaction.c __syscall_error.c
-crt-y:=create
-libc-a-y+=$(ARCH_OBJS)
-libc-so-y+=$(ARCH_OBJS:.o=.os)
-
-#libc-multi-y+=$(ARCH_CSRC)
-libc-nomulti-y+=$(ARCH_OBJS)
-
-objclean-y+=arch_objclean
+SSRC := \
+ __longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \
+ bsd-_setjmp.S sigrestorer.S mmap64.S
-arch_objclean:
- $(RM) $(ARCH_OUT)/*.{o,os}
+include $(top_srcdir)libc/sysdeps/linux/Makefile.arch
diff --git a/libc/sysdeps/linux/arm/__longjmp.S b/libc/sysdeps/linux/arm/__longjmp.S
index 44837911b..822e15a69 100644
--- a/libc/sysdeps/linux/arm/__longjmp.S
+++ b/libc/sysdeps/linux/arm/__longjmp.S
@@ -33,9 +33,28 @@ __longjmp:
moveq r0, #1 /* can't let setjmp() return zero! */
#if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
+# ifdef __MAVERICK__
+ cfldrd mvd4, [ip], #8 ; nop
+ cfldrd mvd5, [ip], #8 ; nop
+ cfldrd mvd6, [ip], #8 ; nop
+ cfldrd mvd7, [ip], #8 ; nop
+ cfldrd mvd8, [ip], #8 ; nop
+ cfldrd mvd9, [ip], #8 ; nop
+ cfldrd mvd10, [ip], #8 ; nop
+ cfldrd mvd11, [ip], #8 ; nop
+ cfldrd mvd12, [ip], #8 ; nop
+ cfldrd mvd13, [ip], #8 ; nop
+ cfldrd mvd14, [ip], #8 ; nop
+ cfldrd mvd15, [ip], #8
+# else
lfmfd f4, 4, [ip] ! /* load the floating point regs */
+# endif
#else
+# ifdef __MAVERICK__
+ add ip, ip, #96 /* skip the FP registers */
+# else
add ip, ip, #48 /* skip the FP registers */
+# endif
#endif
ldmia ip , {v1-v6, sl, fp, sp, pc}
diff --git a/libc/sysdeps/linux/arm/bits/endian.h b/libc/sysdeps/linux/arm/bits/endian.h
index 1476881cb..27946cdee 100644
--- a/libc/sysdeps/linux/arm/bits/endian.h
+++ b/libc/sysdeps/linux/arm/bits/endian.h
@@ -1,19 +1,18 @@
-/* ARM is (usually) little-endian.
- * Older FPU style (FPA) is always big-endian.
- * Newer FPU style (VFP) is same as host byte-order.
- */
-
#ifndef _ENDIAN_H
# error "Never use <bits/endian.h> directly; include <endian.h> instead."
#endif
+/* ARM can be either big or little endian. */
#ifdef __ARMEB__
# define __BYTE_ORDER __BIG_ENDIAN
#else
# define __BYTE_ORDER __LITTLE_ENDIAN
#endif
-#ifdef __VFP_FP__
+/* FPA floating point units are always big-endian, irrespective of the
+ CPU endianness. VFP floating point units use the same endianness
+ as the rest of the system. */
+#if defined __VFP_FP__ || defined __MAVERICK__
# define __FLOAT_WORD_ORDER __BYTE_ORDER
#else
# define __FLOAT_WORD_ORDER __BIG_ENDIAN
diff --git a/libc/sysdeps/linux/arm/bits/fenv.h b/libc/sysdeps/linux/arm/bits/fenv.h
index 7bd242385..3764d7749 100644
--- a/libc/sysdeps/linux/arm/bits/fenv.h
+++ b/libc/sysdeps/linux/arm/bits/fenv.h
@@ -20,6 +20,45 @@
# error "Never use <bits/fenv.h> directly; include <fenv.h> instead."
#endif
+#ifdef __MAVERICK__
+
+/* Define bits representing exceptions in the FPU status word. */
+enum
+ {
+ FE_INVALID = 1,
+#define FE_INVALID FE_INVALID
+ FE_OVERFLOW = 4,
+#define FE_OVERFLOW FE_OVERFLOW
+ FE_UNDERFLOW = 8,
+#define FE_UNDERFLOW FE_UNDERFLOW
+ FE_INEXACT = 16,
+#define FE_INEXACT FE_INEXACT
+ };
+
+/* Amount to shift by to convert an exception to a mask bit. */
+#define FE_EXCEPT_SHIFT 5
+
+/* All supported exceptions. */
+#define FE_ALL_EXCEPT \
+ (FE_INVALID | FE_OVERFLOW | FE_UNDERFLOW | FE_INEXACT)
+
+/* IEEE rounding modes. */
+enum
+ {
+ FE_TONEAREST = 0,
+#define FE_TONEAREST FE_TONEAREST
+ FE_TOWARDZERO = 0x400,
+#define FE_TOWARDZERO FE_TOWARDZERO
+ FE_DOWNWARD = 0x800,
+#define FE_DOWNWARD FE_DOWNWARD
+ FE_UPWARD = 0xc00,
+#define FE_UPWARD FE_UPWARD
+ };
+
+#define FE_ROUND_MASK (FE_UPWARD)
+
+#else /* !__MAVERICK__ */
+
/* Define bits representing exceptions in the FPU status word. */
enum
{
@@ -44,6 +83,8 @@ enum
modes exist, but you have to encode them in the actual instruction. */
#define FE_TONEAREST 0
+#endif /* __MAVERICK__ */
+
/* Type representing exception flags. */
typedef unsigned long int fexcept_t;
diff --git a/libc/sysdeps/linux/arm/bits/setjmp.h b/libc/sysdeps/linux/arm/bits/setjmp.h
index dd8524303..ad42f96cd 100644
--- a/libc/sysdeps/linux/arm/bits/setjmp.h
+++ b/libc/sysdeps/linux/arm/bits/setjmp.h
@@ -17,16 +17,22 @@
02111-1307 USA. */
/* Define the machine-dependent type `jmp_buf'. ARM version. */
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H 1
-#ifndef _SETJMP_H
+#if !defined _SETJMP_H && !defined _PTHREAD_H
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
#ifndef _ASM
/* Jump buffer contains v1-v6, sl, fp, sp and pc. Other registers are not
saved. */
+#ifdef __MAVERICK__
+typedef int __jmp_buf[34];
+#else
typedef int __jmp_buf[22];
#endif
+#endif
#define __JMP_BUF_SP 20
@@ -34,3 +40,5 @@ typedef int __jmp_buf[22];
containing a local variable at ADDRESS. */
#define _JMPBUF_UNWINDS(jmpbuf, address) \
((void *) (address) < (void *) (jmpbuf[__JMP_BUF_SP]))
+
+#endif /* bits/setjmp.h */
diff --git a/libc/sysdeps/linux/arm/crt1.S b/libc/sysdeps/linux/arm/crt1.S
index 26146ba86..7470715a1 100644
--- a/libc/sysdeps/linux/arm/crt1.S
+++ b/libc/sysdeps/linux/arm/crt1.S
@@ -1,5 +1,6 @@
/* Startup code for ARM & ELF
- Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002, 2005
+ Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -148,10 +149,14 @@ _start:
ldr a4, =_init
/* __uClibc_main (main, argc, argv, init, fini, rtld_fini, stack_end) */
+
/* Let the libc call main and exit with its return code. */
b __uClibc_main
#endif
+ /* should never get here....*/
+ bl abort
+
#ifdef __PIC__
.L_GOT:
.word _GLOBAL_OFFSET_TABLE_-(.L_GOT_OFF+8)
diff --git a/libc/sysdeps/linux/arm/fpu_control.h b/libc/sysdeps/linux/arm/fpu_control.h
index 65912e496..8c13ca3a3 100644
--- a/libc/sysdeps/linux/arm/fpu_control.h
+++ b/libc/sysdeps/linux/arm/fpu_control.h
@@ -20,6 +20,76 @@
#ifndef _FPU_CONTROL_H
#define _FPU_CONTROL_H
+#ifdef __MAVERICK__
+
+/* DSPSC register: (from EP9312 User's Guide)
+ *
+ * bits 31..29 - DAID
+ * bits 28..26 - HVID
+ * bits 25..24 - RSVD
+ * bit 23 - ISAT
+ * bit 22 - UI
+ * bit 21 - INT
+ * bit 20 - AEXC
+ * bits 19..18 - SAT
+ * bits 17..16 - FCC
+ * bit 15 - V
+ * bit 14 - FWDEN
+ * bit 13 - Invalid
+ * bit 12 - Denorm
+ * bits 11..10 - RM
+ * bits 9..5 - IXE, UFE, OFE, RSVD, IOE
+ * bits 4..0 - IX, UF, OF, RSVD, IO
+ */
+
+/* masking of interrupts */
+#define _FPU_MASK_IM (1 << 5) /* invalid operation */
+#define _FPU_MASK_ZM 0 /* divide by zero */
+#define _FPU_MASK_OM (1 << 7) /* overflow */
+#define _FPU_MASK_UM (1 << 8) /* underflow */
+#define _FPU_MASK_PM (1 << 9) /* inexact */
+#define _FPU_MASK_DM 0 /* denormalized operation */
+
+#define _FPU_RESERVED 0xfffff000 /* These bits are reserved. */
+
+#define _FPU_DEFAULT 0x00b00000 /* Default value. */
+#define _FPU_IEEE 0x00b003a0 /* Default + exceptions enabled. */
+
+/* Type of the control word. */
+typedef unsigned int fpu_control_t;
+
+/* Macros for accessing the hardware control word. */
+#define _FPU_GETCW(cw) ({ \
+ register int __t1, __t2; \
+ \
+ __asm__ volatile ( \
+ "cfmvr64l %1, mvdx0\n\t" \
+ "cfmvr64h %2, mvdx0\n\t" \
+ "cfmv32sc mvdx0, dspsc\n\t" \
+ "cfmvr64l %0, mvdx0\n\t" \
+ "cfmv64lr mvdx0, %1\n\t" \
+ "cfmv64hr mvdx0, %2" \
+ : "=r" (cw), "=r" (__t1), "=r" (__t2) \
+ ); \
+})
+
+#define _FPU_SETCW(cw) ({ \
+ register int __t0, __t1, __t2; \
+ \
+ __asm__ volatile ( \
+ "cfmvr64l %1, mvdx0\n\t" \
+ "cfmvr64h %2, mvdx0\n\t" \
+ "cfmv64lr mvdx0, %0\n\t" \
+ "cfmvsc32 dspsc, mvdx0\n\t" \
+ "cfmv64lr mvdx0, %1\n\t" \
+ "cfmv64hr mvdx0, %2" \
+ : "=r" (__t0), "=r" (__t1), "=r" (__t2) \
+ : "0" (cw) \
+ ); \
+})
+
+#else /* !__MAVERICK__ */
+
/* We have a slight terminology confusion here. On the ARM, the register
* we're interested in is actually the FPU status word - the FPU control
* word is something different (which is implementation-defined and only
@@ -96,6 +166,8 @@ typedef unsigned int fpu_control_t;
#define _FPU_GETCW(cw) __asm__ ("rfs %0" : "=r" (cw))
#define _FPU_SETCW(cw) __asm__ ("wfs %0" : : "r" (cw))
+#endif /* __MAVERICK__ */
+
/* Default control word set at startup. */
extern fpu_control_t __fpu_control;
diff --git a/libc/sysdeps/linux/arm/setjmp.S b/libc/sysdeps/linux/arm/setjmp.S
index 62d038cc5..4048d7934 100644
--- a/libc/sysdeps/linux/arm/setjmp.S
+++ b/libc/sysdeps/linux/arm/setjmp.S
@@ -3,19 +3,19 @@
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
- modify it under the terms of the GNU Library General Public License as
- published by the Free Software Foundation; either version 2 of the
- License, or (at your option) any later version.
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- Library General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU Library General Public
- License along with the GNU C Library; see the file COPYING.LIB. If not,
- write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
- Boston, MA 02111-1307, USA. */
+ You should have received a copy of the GNU Lesser General Public
+ License along with the GNU C Library; if not, write to the Free
+ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307 USA. */
#include <features.h>
#define _SETJMP_H
@@ -28,14 +28,37 @@
__sigsetjmp:
/* Save registers */
#if defined __UCLIBC_HAS_FLOATS__ && ! defined __UCLIBC_HAS_SOFT_FLOAT__
+# ifdef __MAVERICK__
+ cfstrd mvd4, [r0], #8 ; nop
+ cfstrd mvd5, [r0], #8 ; nop
+ cfstrd mvd6, [r0], #8 ; nop
+ cfstrd mvd7, [r0], #8 ; nop
+ cfstrd mvd8, [r0], #8 ; nop
+ cfstrd mvd9, [r0], #8 ; nop
+ cfstrd mvd10, [r0], #8 ; nop
+ cfstrd mvd11, [r0], #8 ; nop
+ cfstrd mvd12, [r0], #8 ; nop
+ cfstrd mvd13, [r0], #8 ; nop
+ cfstrd mvd14, [r0], #8 ; nop
+ cfstrd mvd15, [r0], #8
+# else
sfmea f4, 4, [r0]!
+# endif
#else
+# ifdef __MAVERICK__
+ add r0, r0, #96 /* skip the FP registers */
+# else
add r0, r0, #48 /* skip the FP registers */
+# endif
#endif
stmia r0, {v1-v6, sl, fp, sp, lr}
/* Restore pointer to jmp_buf */
+#ifdef __MAVERICK__
+ sub r0, r0, #96
+#else
sub r0, r0, #48
+#endif
/* Make a tail call to __sigjmp_save; it takes the same args. */
#ifdef __PIC__
diff --git a/libc/sysdeps/linux/arm/sigaction.c b/libc/sysdeps/linux/arm/sigaction.c
index df9ea4c35..5fbb7fbf1 100644
--- a/libc/sysdeps/linux/arm/sigaction.c
+++ b/libc/sysdeps/linux/arm/sigaction.c
@@ -132,7 +132,5 @@ int __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oa
}
#endif
-
-#ifndef LIBC_SIGACTION
weak_alias(__libc_sigaction, sigaction)
-#endir
+
diff --git a/libc/sysdeps/linux/arm/syscall.c b/libc/sysdeps/linux/arm/syscall.c
index 195c31c74..33d9f5fea 100644
--- a/libc/sysdeps/linux/arm/syscall.c
+++ b/libc/sysdeps/linux/arm/syscall.c
@@ -3,19 +3,7 @@
*
* Copyright (C) 2002 by Erik Andersen <andersen@uclibc.org>
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
#include <features.h>
diff --git a/libc/sysdeps/linux/arm/vfork.S b/libc/sysdeps/linux/arm/vfork.S
index cf9d3d8d6..530bba07c 100644
--- a/libc/sysdeps/linux/arm/vfork.S
+++ b/libc/sysdeps/linux/arm/vfork.S
@@ -5,19 +5,7 @@
* Copyright (C) 2000,2001 by Erik Andersen <andersen@uclibc.org>
* Written by Erik Andersen <andersen@uclibc.org>
*
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Library General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License
- * for more details.
- *
- * You should have received a copy of the GNU Library General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
*/
#define _ERRNO_H
diff --git a/libc/sysdeps/linux/common/Makefile.in b/libc/sysdeps/linux/common/Makefile.in
index 2ddb9128a..b287d5de9 100644
--- a/libc/sysdeps/linux/common/Makefile.in
+++ b/libc/sysdeps/linux/common/Makefile.in
@@ -14,9 +14,19 @@ ifeq ($(EXCLUDE_BRK),y)
CSRC:=$(filter-out sbrk.c,$(CSRC))
endif
-CSRC:=$(filter-out ssp-local.c,$(CSRC))
+COMMON_SSP:=ssp.c ssp-local.c
+
+# full list
+#COMMON_NO_MULTI:=getcwd.c getrlimit.c getrlimit64.c setrlimit.c setrlimit64.c getpriority.c getpriority64.c setpriority.c getrusage.c wait4.c getitimer.c setitimer.c open.c open64.c uname.c __syscall_fcntl.c __syscall_fcntl64.c
+COMMON_NO_MULTI:=getrlimit.c getrlimit64.c setrlimit.c setrlimit64.c getpriority.c setpriority.c getrusage.c getitimer.c setitimer.c uname.c __syscall_rt_sigaction.c
+
ifneq ($(UCLIBC_HAS_SSP),y)
-CSRC:=$(filter-out ssp.c,$(CSRC))
+CSRC:=$(filter-out $(COMMON_SSP),$(CSRC))
+endif
+
+ifneq ($(DOMULTI),n)
+CSRC:=$(filter-out $(COMMON_NO_MULTI),$(CSRC))
+CSRC:=$(filter-out $(COMMON_SSP),$(CSRC))
endif
# fails for some reason
@@ -31,13 +41,12 @@ COMMON_SRC:=$(patsubst %.c,$(COMMON_DIR)/%.c,$(CSRC))
COMMON_OBJ:=$(patsubst %.c,$(COMMON_OUT)/%.o,$(CSRC))
libc-a-y+=$(COMMON_OBJ)
-libc-a-static-$(UCLIBC_HAS_SSP)+=$(COMMON_OUT)/ssp-local.o
libc-so-y+=$(COMMON_OBJ:.o=.os)
libc-nonshared-$(UCLIBC_HAS_SSP)+=$(COMMON_OUT)/ssp-local.os
-#libc-multi-y+=$(filter-out $(COMMON_DIR)/ssp.c,$(COMMON_SRC))
-#libc-nomulti-$(UCLIBC_HAS_SSP)+=$(COMMON_OUT)/ssp.o
-libc-nomulti-y+=$(COMMON_OBJ)
+libc-multi-y+=$(COMMON_SRC)
+libc-nomulti-y+=$(patsubst %.c,$(COMMON_OUT)/%.o,$(COMMON_NO_MULTI))
+libc-nomulti-$(UCLIBC_HAS_SSP)+=$(patsubst %.c,$(COMMON_OUT)/%.o,$(COMMON_SSP))
objclean-y+=common_objclean
diff --git a/libc/sysdeps/linux/cris/Makefile b/libc/sysdeps/linux/cris/Makefile
index 3c60e01ca..b1bf1ef10 100644
--- a/libc/sysdeps/linux/cris/Makefile
+++ b/libc/sysdeps/linux/cris/Makefile
@@ -1,73 +1,15 @@
# Makefile for uClibc
#
-# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Library General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your option) any
-# later version.
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Library General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
TOPDIR=../../../../
-include $(TOPDIR)Rules.mak
-
-CRT_SRC := crt0.c
-CRT_OBJ := crt0.o crt1.o
-CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
-
-SSRC = setjmp.S __longjmp.S clone.S sysdep.S syscall.S
-ifeq ($(UNIFIED_SYSCALL),y)
-SSRC += __uClibc_syscall.S
-endif
-SOBJ := $(patsubst %.S,%.o, $(SSRC))
-
-CSRC := __init_brk.c brk.c sbrk.c
-COBJ := $(patsubst %.c,%.o, $(CSRC))
-
-OBJS := $(SOBJ) $(COBJ)
-
-OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
-
-all: $(OBJ_LIST) $(CTOR_TARGETS)
-
-$(OBJ_LIST): $(OBJS) $(CRT_OBJ)
- $(STRIPTOOL) -x -R .note -R .comment $^
- $(INSTALL) -d $(TOPDIR)lib/
- cp $(CRT_OBJ) $(TOPDIR)lib/
- echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $@
-
-$(CRT_OBJ): $(CRT_SRC)
- $(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
-
-$(SOBJ): %.o : %.S
- $(CC) $(ASFLAGS) -c $< -o $@
-
-$(COBJ): %.o : %.c
- $(CC) $(CFLAGS) -c $< -o $@
-
-ifeq ($(UCLIBC_CTOR_DTOR),y)
-$(TOPDIR)lib/crti.o: crti.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-
-$(TOPDIR)lib/crtn.o: crtn.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-else
-$(CTOR_TARGETS):
- $(INSTALL) -d $(TOPDIR)lib/
- $(AR) $(ARFLAGS) $@
-endif
-
-headers:
-clean:
- $(RM) *.o *~ core
+top_srcdir=$(TOPDIR)
+top_builddir=../../../../
+all: objs
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
diff --git a/libc/sysdeps/linux/i386/Makefile.arch b/libc/sysdeps/linux/i386/Makefile.arch
index 3ced8debd..c0f4f2f40 100644
--- a/libc/sysdeps/linux/i386/Makefile.arch
+++ b/libc/sysdeps/linux/i386/Makefile.arch
@@ -5,29 +5,10 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-CSRC:=brk.c sigaction.c __syscall_error.c
+CSRC := brk.c sigaction.c __syscall_error.c
-SSRC:= __longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \
+SSRC := \
+ __longjmp.S vfork.S clone.S setjmp.S bsd-setjmp.S \
bsd-_setjmp.S syscall.S mmap.S mmap64.S
-ARCH_DIR:=$(top_srcdir)libc/sysdeps/linux/i386
-ARCH_OUT:=$(top_builddir)libc/sysdeps/linux/i386
-
-ARCH_CSRC:=$(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
-ARCH_COBJ:=$(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC:=$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ:=$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
-
-ARCH_OBJS:=$(ARCH_COBJ) $(ARCH_SOBJ)
-
-crt-y:=create
-libc-a-y+=$(ARCH_OBJS)
-libc-so-y+=$(ARCH_OBJS:.o=.os)
-
-#libc-multi-y+=$(ARCH_CSRC)
-libc-nomulti-y+=$(ARCH_OBJS)
-
-objclean-y+=arch_objclean
-
-arch_objclean:
- $(RM) $(ARCH_OUT)/*.{o,os}
+include $(top_srcdir)libc/sysdeps/linux/Makefile.arch
diff --git a/libc/sysdeps/linux/i386/bits/syscalls.h b/libc/sysdeps/linux/i386/bits/syscalls.h
index 944fb734a..df3b0b429 100644
--- a/libc/sysdeps/linux/i386/bits/syscalls.h
+++ b/libc/sysdeps/linux/i386/bits/syscalls.h
@@ -4,15 +4,13 @@
# error "Never use <bits/syscalls.h> directly; include <sys/syscall.h> instead."
#endif
+#include <errno.h>
+
/* This includes the `__NR_<name>' syscall numbers taken from the Linux kernel
* header files. It also defines the traditional `SYS_<name>' macros for older
* programs. */
#include <bits/sysnum.h>
-#ifndef __set_errno
-# define __set_errno(val) (*__errno_location ()) = (val)
-#endif
-
/*
Some of the sneaky macros in the code were taken from
glibc-2.2.5/sysdeps/unix/sysv/linux/i386/sysdep.h
@@ -30,6 +28,8 @@ asm (".L__X'%ebx = 1\n\t"
".L__X'%edi = 3\n\t"
".L__X'%ebp = 3\n\t"
".L__X'%esp = 3\n\t"
+ ".ifndef _BITS_SYSCALLS_ASM\n\t"
+ ".set _BITS_SYSCALLS_ASM,1\n\t"
".macro bpushl name reg\n\t"
".if 1 - \\name\n\t"
".if 2 - \\name\n\t"
@@ -54,7 +54,8 @@ asm (".L__X'%ebx = 1\n\t"
"movl \\reg, %ebx\n\t"
".endif\n\t"
".endif\n\t"
- ".endm\n\t");
+ ".endm\n\t"
+ ".endif\n\t");
#undef _syscall0
@@ -146,6 +147,5 @@ return (type) (INLINE_SYSCALL(name, 5, arg1, arg2, arg3, arg4, arg5)); \
#define ASMFMT_5(arg1, arg2, arg3, arg4, arg5) \
, "a" (arg1), "c" (arg2), "d" (arg3), "S" (arg4), "D" (arg5)
-
#endif /* __ASSEMBLER__ */
#endif /* _BITS_SYSCALLS_H */
diff --git a/libc/sysdeps/linux/mips/Makefile.arch b/libc/sysdeps/linux/mips/Makefile.arch
index 5878aa708..f88e99686 100644
--- a/libc/sysdeps/linux/mips/Makefile.arch
+++ b/libc/sysdeps/linux/mips/Makefile.arch
@@ -5,42 +5,13 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-CSRC:= __longjmp.c brk.c setjmp_aux.c mmap.c __syscall_error.c \
+CSRC := \
+ __longjmp.c brk.c setjmp_aux.c mmap.c __syscall_error.c \
cacheflush.c pread_write.c sysmips.c _test_and_set.c sigaction.c
-SSRC:=bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S syscall.S pipe.S
+SSRC := bsd-_setjmp.S bsd-setjmp.S setjmp.S clone.S syscall.S pipe.S
+ARCH_HEADERS := sgidefs.h
+# regdef.h
-ARCH_DIR:=$(top_srcdir)libc/sysdeps/linux/mips
-ARCH_OUT:=$(top_builddir)libc/sysdeps/linux/mips
-
-ARCH_CSRC:=$(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
-ARCH_COBJ:=$(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC:=$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ:=$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
-
-ARCH_OBJS:=$(ARCH_COBJ) $(ARCH_SOBJ)
-
-crt-y:=create
-libc-a-y+=$(ARCH_OBJS)
-libc-so-y+=$(ARCH_OBJS:.o=.os)
-
-#libc-multi-y+=$(ARCH_CSRC)
-libc-nomulti-y+=$(ARCH_OBJS)
-
-objclean-y+=arch_objclean
-
-arch_objclean:
- $(RM) $(ARCH_OUT)/*.{o,os}
-
-headers_clean-y+=arch_headers_clean
-
-arch_headers_clean:
- $(RM) $(top_builddir)include/sgidefs.h
- #$(RM) $(top_builddir)include/regdef.h
-
-headers-y+=arch_headers
-
-arch_headers:
- $(LN) -fs ../libc/sysdeps/linux/mips/sgidefs.h $(top_builddir)include/
-# $(LN) -fs ../libc/sysdeps/linux/mips/regdef.h $(top_builddir)include/
+include $(top_srcdir)libc/sysdeps/linux/Makefile.arch
diff --git a/libc/sysdeps/linux/powerpc/Makefile.arch b/libc/sysdeps/linux/powerpc/Makefile.arch
index f0c5d9f02..125ebc397 100644
--- a/libc/sysdeps/linux/powerpc/Makefile.arch
+++ b/libc/sysdeps/linux/powerpc/Makefile.arch
@@ -5,28 +5,10 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-CSRC:=mmap.c __syscall_error.c pread_write.c ioctl.c
-SSRC:= __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \
- clone.S __uClibc_syscall.S syscall.S vfork.S
-
-ARCH_DIR:=$(top_srcdir)libc/sysdeps/linux/powerpc
-ARCH_OUT:=$(top_builddir)libc/sysdeps/linux/powerpc
-
-ARCH_CSRC:=$(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
-ARCH_COBJ:=$(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC:=$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ:=$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
-
-ARCH_OBJS:=$(ARCH_COBJ) $(ARCH_SOBJ)
+CSRC := mmap.c __syscall_error.c pread_write.c ioctl.c
-crt-y:=create
-libc-a-y+=$(ARCH_OBJS)
-libc-so-y+=$(ARCH_OBJS:.o=.os)
-
-#libc-multi-y+=$(ARCH_CSRC)
-libc-nomulti-y+=$(ARCH_OBJS)
-
-objclean-y+=arch_objclean
+SSRC := \
+ __longjmp.S setjmp.S bsd-setjmp.S bsd-_setjmp.S brk.S \
+ clone.S __uClibc_syscall.S syscall.S vfork.S
-arch_objclean:
- $(RM) $(ARCH_OUT)/*.{o,os}
+include $(top_srcdir)libc/sysdeps/linux/Makefile.arch
diff --git a/libc/sysdeps/linux/sh/Makefile b/libc/sysdeps/linux/sh/Makefile
index 00ccb06af..b1bf1ef10 100644
--- a/libc/sysdeps/linux/sh/Makefile
+++ b/libc/sysdeps/linux/sh/Makefile
@@ -1,76 +1,15 @@
# Makefile for uClibc
#
-# Copyright (C) 2001 by Hewlett-Packard Australia
-# Copyright (C) 2000-2004 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Library General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your option) any
-# later version.
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Library General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
TOPDIR=../../../../
-include $(TOPDIR)Rules.mak
-
-CRT_SRC := crt1.S
-CRT_OBJ := crt1.o
-SCRT_OBJ := Scrt1.o
-CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
-
-SSRC := setjmp.S __longjmp.S vfork.S clone.S ___fpscr_values.S
-SOBJ := $(patsubst %.S,%.o, $(SSRC))
-
-CSRC := mmap.c longjmp.c pipe.c __init_brk.c brk.c sbrk.c syscall.c pread_write.c
-COBJ := $(patsubst %.c,%.o, $(CSRC))
-
-OBJS := $(SOBJ) $(COBJ)
-
-OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
-
-all: $(OBJ_LIST) $(CTOR_TARGETS)
-
-$(OBJ_LIST): $(OBJS) $(CRT_OBJ) $(SCRT_OBJ)
- $(STRIPTOOL) -x -R .note -R .comment $^
- $(INSTALL) -d $(TOPDIR)lib/
- cp $(CRT_OBJ) $(SCRT_OBJ) $(TOPDIR)lib/
- echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $@
-
-$(CRT_OBJ): $(CRT_SRC)
- $(CC) $(ASFLAGS) -DL_$* $< -c -o $*.o
-
-$(SCRT_OBJ): $(CRT_SRC)
- $(CC) $(ASFLAGS) $(PIEFLAG) -DL_$* $< -c -o $*.o
-
-$(SOBJ): %.o : %.S
- $(CC) $(ASFLAGS) -c $< -o $@
-
-$(COBJ): %.o : %.c
- $(CC) $(CFLAGS) -c $< -o $@
-
-ifeq ($(UCLIBC_CTOR_DTOR),y)
-$(TOPDIR)lib/crti.o: crti.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-
-$(TOPDIR)lib/crtn.o: crtn.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-else
-$(CTOR_TARGETS):
- $(INSTALL) -d $(TOPDIR)lib/
- $(AR) $(ARFLAGS) $@
-endif
-
-headers:
- $(LN) -fs ../libc/sysdeps/linux/sh/fpu_control.h $(TOPDIR)/include/
-clean:
- $(RM) *.o *~ core
+top_srcdir=$(TOPDIR)
+top_builddir=../../../../
+all: objs
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
diff --git a/libc/sysdeps/linux/sh/bits/setjmp.h b/libc/sysdeps/linux/sh/bits/setjmp.h
index 5182300f3..c9d7d8fcd 100644
--- a/libc/sysdeps/linux/sh/bits/setjmp.h
+++ b/libc/sysdeps/linux/sh/bits/setjmp.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1999, 2000 Free Software Foundation, Inc.
+/* Copyright (C) 1999, 2000, 2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@@ -17,8 +17,10 @@
02111-1307 USA. */
/* Define the machine-dependent type `jmp_buf'. SH version. */
+#ifndef _BITS_SETJMP_H
+#define _BITS_SETJMP_H 1
-#ifndef _SETJMP_H
+#if !defined _SETJMP_H && !defined _PTHREAD_H
# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead."
#endif
@@ -42,9 +44,13 @@ typedef struct
} __jmp_buf[1];
#endif
-#define JB_SIZE (4 * 15)
+#if defined __USE_MISC || defined _ASM
+# define JB_SIZE (4 * 15)
+#endif
/* Test if longjmp to JMPBUF would unwind the frame
containing a local variable at ADDRESS. */
#define _JMPBUF_UNWINDS(jmpbuf, address) \
- ((void *) (address) < &(jmpbuf)[0].__regs[7])
+ ((void *) (address) < (void *) &(jmpbuf)[0].__regs[7])
+
+#endif /* bits/setjmp.h */
diff --git a/libc/sysdeps/linux/sparc/Makefile b/libc/sysdeps/linux/sparc/Makefile
index 579140f08..b1bf1ef10 100644
--- a/libc/sysdeps/linux/sparc/Makefile
+++ b/libc/sysdeps/linux/sparc/Makefile
@@ -1,75 +1,15 @@
# Makefile for uClibc
#
-# Copyright (C) 2000-2003 Erik Andersen <andersen@uclibc.org>
+# Copyright (C) 2000-2005 Erik Andersen <andersen@uclibc.org>
#
-# This program is free software; you can redistribute it and/or modify it under
-# the terms of the GNU Library General Public License as published by the Free
-# Software Foundation; either version 2 of the License, or (at your option) any
-# later version.
+# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-# This program is distributed in the hope that it will be useful, but WITHOUT
-# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
-# FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more
-# details.
-#
-# You should have received a copy of the GNU Library General Public License
-# along with this program; if not, write to the Free Software Foundation, Inc.,
-# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
TOPDIR=../../../../
-include $(TOPDIR)Rules.mak
-
-CRT_SRC := crt1.S
-CRT_OBJ := crt1.o
-CTOR_TARGETS := $(TOPDIR)lib/crti.o $(TOPDIR)lib/crtn.o
-
-SSRC := __longjmp.S fork.S vfork.S clone.S setjmp.S bsd-setjmp.S bsd-_setjmp.S \
- urem.S udiv.S umul.S sdiv.S rem.S
-SOBJ := $(patsubst %.S,%.o, $(SSRC))
-
-CSRC := brk.c __syscall_error.c
-COBJ := $(patsubst %.c,%.o, $(CSRC))
-
-OBJS := $(SOBJ) $(COBJ)
-
-OBJ_LIST := ../../../obj.sysdeps.$(TARGET_ARCH)
-
-all: $(OBJ_LIST) $(CTOR_TARGETS)
-
-$(OBJ_LIST): $(OBJS) $(CRT_OBJ)
- $(STRIPTOOL) -x -R .note -R .comment $^
- $(INSTALL) -d $(TOPDIR)lib/
- cp $(CRT_OBJ) $(TOPDIR)lib/
- echo $(patsubst %, sysdeps/linux/$(TARGET_ARCH)/%, $(OBJS)) > $@
-
-$(CRT_OBJ): $(CRT_SRC)
- $(CC) $(CFLAGS) -DL_$* $< -c -o $*.o
-
-$(SOBJ): %.o : %.S
- $(CC) $(ASFLAGS) -c $< -o $@
-
-$(COBJ): %.o : %.c
- $(CC) $(CFLAGS) -c $< -o $@
-
-ifeq ($(UCLIBC_CTOR_DTOR),y)
-$(TOPDIR)lib/crti.o: crti.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-
-crtn.o: crtn.S
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c crtn.S -o crtn.o
-
-$(TOPDIR)lib/crtn.o: crtn.S
- $(INSTALL) -d $(TOPDIR)lib/
- $(CC) $(ASFLAGS) $(SSP_DISABLE_FLAGS) -c $< -o $@
-else
-$(CTOR_TARGETS):
- $(INSTALL) -d $(TOPDIR)lib/
- $(AR) $(ARFLAGS) $@
-endif
-
-headers:
- $(LN) -fs ../libc/sysdeps/linux/sparc/fpu_control.h $(TOPDIR)/include/
-clean:
- $(RM) *.o *~ core
+top_srcdir=$(TOPDIR)
+top_builddir=../../../../
+all: objs
+include $(top_builddir)Rules.mak
+include Makefile.arch
+include $(top_srcdir)Makerules
diff --git a/libc/sysdeps/linux/x86_64/Makefile.arch b/libc/sysdeps/linux/x86_64/Makefile.arch
index 6752c275d..2cd9b2389 100644
--- a/libc/sysdeps/linux/x86_64/Makefile.arch
+++ b/libc/sysdeps/linux/x86_64/Makefile.arch
@@ -5,28 +5,9 @@
# Licensed under the LGPL v2.1, see the file COPYING.LIB in this tarball.
#
-CSRC:=brk.c sigaction.c __syscall_error.c mmap.c
+CSRC := brk.c sigaction.c __syscall_error.c mmap.c
-SSRC:=__longjmp.S vfork.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S clone.S
+SSRC := \
+ __longjmp.S vfork.S setjmp.S syscall.S bsd-setjmp.S bsd-_setjmp.S clone.S
-ARCH_DIR:=$(top_srcdir)libc/sysdeps/linux/x86_64
-ARCH_OUT:=$(top_builddir)libc/sysdeps/linux/x86_64
-
-ARCH_CSRC:=$(patsubst %.c,$(ARCH_DIR)/%.c,$(CSRC))
-ARCH_COBJ:=$(patsubst %.c,$(ARCH_OUT)/%.o,$(CSRC))
-ARCH_SSRC:=$(patsubst %.S,$(ARCH_DIR)/%.S,$(SSRC))
-ARCH_SOBJ:=$(patsubst %.S,$(ARCH_OUT)/%.o,$(SSRC))
-
-ARCH_OBJS:=$(ARCH_COBJ) $(ARCH_SOBJ)
-
-crt-y:=create
-libc-a-y+=$(ARCH_OBJS)
-libc-so-y+=$(ARCH_OBJS:.o=.os)
-
-#libc-multi-y+=$(ARCH_CSRC)
-libc-nomulti-y+=$(ARCH_OBJS)
-
-objclean-y+=arch_objclean
-
-arch_objclean:
- $(RM) $(ARCH_OUT)/*.{o,os}
+include $(top_srcdir)libc/sysdeps/linux/Makefile.arch
diff --git a/libc/termios/Makefile.in b/libc/termios/Makefile.in
index 8e32e1ae6..415f32192 100644
--- a/libc/termios/Makefile.in
+++ b/libc/termios/Makefile.in
@@ -25,11 +25,13 @@ TERMIOS_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(TERMIOS_MOBJ))))
TERMIOS_OBJS:=$(TERMIOS_OBJ) $(TERMIOS_MOBJ)
-$(TERMIOS_MOBJ) $(TERMIOS_MOBJ:.o=.os): $(TERMIOS_MSRC)
+$(TERMIOS_MOBJ): $(TERMIOS_MSRC)
+ $(compile.m)
+
+$(TERMIOS_MOBJ:.o=.os): $(TERMIOS_MSRC)
$(compile.m)
libc-a-y+=$(TERMIOS_OBJS)
-libc-a-pic-y+=$(TERMIOS_OBJS:.o=.os)
libc-so-y+=$(TERMIOS_OBJS:.o=.os)
CFLAGS-multi-y+=$(TERMIOS_DEF)
diff --git a/libc/unistd/Makefile.in b/libc/unistd/Makefile.in
index a72b2d9ed..1bc052749 100644
--- a/libc/unistd/Makefile.in
+++ b/libc/unistd/Makefile.in
@@ -35,11 +35,13 @@ UNISTD_DEF:=$(patsubst %,-DL_%,$(subst .o,,$(notdir $(UNISTD_MOBJ))))
UNISTD_OBJS:=$(UNISTD_OBJ) $(UNISTD_MOBJ)
-$(UNISTD_MOBJ) $(UNISTD_MOBJ:.o=.os): $(UNISTD_MSRC)
+$(UNISTD_MOBJ): $(UNISTD_MSRC)
+ $(compile.m)
+
+$(UNISTD_MOBJ:.o=.os): $(UNISTD_MSRC)
$(compile.m)
libc-a-y+=$(UNISTD_OBJS)
-libc-a-pic-y+=$(UNISTD_OBJS:.o=.os)
libc-so-y+=$(UNISTD_OBJS:.o=.os)
CFLAGS-multi-y+=$(UNISTD_DEF)