diff --git a/Makefile b/Makefile index 8db0fae7..44d11930 100644 --- a/Makefile +++ b/Makefile @@ -160,28 +160,46 @@ PICODIR = pic-$(ARCH) mkdir $* @touch $@ +ifneq ($(V),1) +CROSSLD = @echo "CCLD $@" && $(LD_UNSET) $(CROSS)$(CC) -Wl,--hash-style=sysv +CROSSCC = @echo "CC $@" && $(CROSS)$(CC) +CROSSAR = @echo "AR $@" && $(CROSS)ar +CROSSSTRIP = @echo "STRIP $@" && $(CROSS)strip +CROSSDIET = @echo "DIET $@" && bin-$(MYARCH)/diet $(CROSS)$(CC) +else +CROSSLD = $(LD_UNSET) $(CROSS)$(CC) -Wl,--hash-style=sysv +CROSSCC = $(CROSS)$(CC) +CROSSAR = $(CROSS)ar +CROSSSTRIP = $(CROSS)strip +CROSSDIET = bin-$(MYARCH)/diet $(CROSS)$(CC) +endif + +ifneq ($(DEBUG),) +CROSSSTRIP = @true +endif + ifeq ($(CC),tcc) $(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h $(OBJDIR)/.dirstamp $(CROSS)cpp $(INC) $< | $(CROSS)as -o $@ $(OBJDIR)/%.o: %.c $(OBJDIR)/.dirstamp tcc -I. -Iinclude -c $< -o $@ - $(COMMENT) -$(STRIP) -x -R .comment -R .note $@ + $(CROSSSTRIP) -x -R .comment -R .note $@ else $(OBJDIR)/pstart.o: start.S $(OBJDIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -DPROFILING -c $< -o $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -DPROFILING -c $< -o $@ $(OBJDIR)/%.o: %.S $(ARCH)/syscalls.h $(OBJDIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ $(OBJDIR)/pthread_%.o: libpthread/pthread_%.c $(OBJDIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ - $(COMMENT) -$(STRIP) -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ + $(CROSSSTRIP) -x -R .comment -R .note $@ $(OBJDIR)/stack_smash_handler2.o: XCFLAGS:=-fno-omit-frame-pointer $(OBJDIR)/%.o: %.c $(OBJDIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ -D__dietlibc__ - $(COMMENT) -$(STRIP) -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -c $< -o $@ -D__dietlibc__ + $(CROSSSTRIP) -x -R .comment -R .note $@ $(addprefix $(OBJDIR)/,$(NO_STACK_PROTECTOR)): XCFLAGS+=-fno-stack-protector endif @@ -197,7 +215,7 @@ endif CC+=-D__dietlibc__ $(OBJDIR)/crypt.o: libcrypt/crypt.c $(OBJDIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(SAFER_CFLAGS) $(XCFLAGS) -c $< -o $@ + $(CROSSCC) $(INC) $(SAFER_CFLAGS) $(XCFLAGS) -c $< -o $@ DIETLIBC_OBJ = $(OBJDIR)/unified.o \ $(SYSCALLOBJ) $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \ @@ -206,34 +224,34 @@ $(OBJDIR)/__longjmp.o $(OBJDIR)/setjmp.o \ $(OBJDIR)/clone.o $(OBJDIR)/dietlibc.a: $(DIETLIBC_OBJ) $(OBJDIR)/start.o - $(CROSS)ar cru $@ $(DIETLIBC_OBJ) + $(CROSSAR) cru $@ $(DIETLIBC_OBJ) $(OBJDIR)/librpc.a: $(LIBRPCOBJ) - $(CROSS)ar cru $@ $(LIBRPCOBJ) + $(CROSSAR) cru $@ $(LIBRPCOBJ) $(OBJDIR)/libcrypt.a: $(OBJDIR)/.dirstamp touch dummy.c - $(CROSS)$(CC) -c dummy.c - $(CROSS)ar cru $@ dummy.o + $(CROSSCC) -c dummy.c + $(CROSSAR) cru $@ dummy.o rm -f dummy.c dummy.o dummy.o: LIBLATIN1_OBJS=$(patsubst liblatin1/%.c,$(OBJDIR)/%.o,$(wildcard liblatin1/*.c)) $(OBJDIR)/liblatin1.a: $(LIBLATIN1_OBJS) - $(CROSS)ar cru $@ $^ + $(CROSSAR) cru $@ $^ $(OBJDIR)/libgmon.a: $(LIBGMON_OBJS) - $(CROSS)ar cru $@ $^ + $(CROSSAR) cru $@ $^ $(OBJDIR)/libpthread.a: $(LIBPTHREAD_OBJS) dietfeatures.h - $(CROSS)ar cru $@ $(LIBPTHREAD_OBJS) + $(CROSSAR) cru $@ $(LIBPTHREAD_OBJS) $(OBJDIR)/libcompat.a: $(LIBCOMPATOBJ) - $(CROSS)ar cru $@ $(LIBCOMPATOBJ) + $(CROSSAR) cru $@ $(LIBCOMPATOBJ) $(OBJDIR)/libm.a: $(LIBMATHOBJ) - $(CROSS)ar cru $@ $(LIBMATHOBJ) + $(CROSSAR) cru $@ $(LIBMATHOBJ) LD_UNSET = env -u LD_RUN_PATH @@ -241,7 +259,7 @@ dyn: dyn_lib # added dynamic linker $(OBJDIR)/libdl.a: $(LIBDLOBJ) - $(CROSS)ar cru $@ $(LIBDLOBJ) + $(CROSSAR) cru $@ $(LIBDLOBJ) dyn_lib: $(PICODIR)/libc.so $(PICODIR)/dstart.o \ $(PICODIR)/dyn_so_start.o $(PICODIR)/dyn_start.o $(PICODIR)/dyn_stop.o \ @@ -249,22 +267,22 @@ dyn_lib: $(PICODIR)/libc.so $(PICODIR)/dstart.o \ $(PICODIR)/libm.so $(PICODIR)/diet-dyn $(PICODIR)/diet-dyn-i $(PICODIR)/%.o: %.S $(ARCH)/syscalls.h $(PICODIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ $(PICODIR)/pthread_%.o: libpthread/pthread_%.c $(PICODIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ - $(COMMENT) $(STRIP) -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ + $(CROSSSTRIP) -x -R .comment -R .note $@ $(PICODIR)/%.o: %.c $(PICODIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ - $(COMMENT) $(STRIP) -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ + $(CROSSSTRIP) -x -R .comment -R .note $@ $(PICODIR)/dstart.o: start.S $(PICODIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -c $< -o $@ $(PICODIR)/dyn_so_start.o: dyn_start.c $(PICODIR)/.dirstamp - $(CROSS)$(CC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@ - $(COMMENT) $(STRIP) -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) $(XCFLAGS) -fPIC -D__DYN_LIB -D__DYN_LIB_SHARED -c $< -o $@ + $(CROSSSTRIP) -x -R .comment -R .note $@ DYN_LIBC_PIC = $(LIBOBJ) $(LIBSTDIOOBJ) $(LIBUGLYOBJ) \ $(LIBCRUFTOBJ) $(LIBCRYPTOBJ) $(LIBSHELLOBJ) $(LIBREGEXOBJ) @@ -281,13 +299,13 @@ DYN_LIBCOMPAT_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBCOMPATOBJ)) DYN_LIBMATH_OBJS = $(patsubst $(OBJDIR)/%.o,$(PICODIR)/%.o,$(LIBMATHOBJ)) $(PICODIR)/libc.so: $(DYN_LIBC_OBJ) - $(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBC_OBJ) -lgcc -Wl,-soname=libc.so + $(CROSSLD) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBC_OBJ) -lgcc -Wl,-soname=libc.so $(PICODIR)/libpthread.so: $(DYN_PTHREAD_OBJS) dietfeatures.h - $(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_PTHREAD_OBJS) -L$(PICODIR) -lc -Wl,-soname=libpthread.so + $(CROSSLD) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_PTHREAD_OBJS) -L$(PICODIR) -lc -Wl,-soname=libpthread.so $(PICODIR)/libdl.so: libdl/_dl_main.c dietfeatures.h $(PICODIR)/.dirstamp - $(LD_UNSET) $(CROSS)$(CC) -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -nostdlib -shared -Bsymbolic -Wl,-Bsymbolic \ + $(CROSSLD) -D__OD_CLEAN_ROOM -DNODIETREF -fPIC -nostdlib -shared -Bsymbolic -Wl,-Bsymbolic \ -o $@ $(SAFE_CFLAGS) $(INC) libdl/_dl_main.c -Wl,-soname=libdl.so $(OBJDIR)/pthread_create.o $(PICODIR)/pthread_create.o: dietfeatures.h @@ -297,38 +315,38 @@ $(OBJDIR)/pthread_internal.o $(PICODIR)/pthread_internal.o: dietfeatures.h # $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBDL_OBJS) -L$(PICODIR) -ldietc -Wl,-soname=libdl.so $(PICODIR)/libcompat.so: $(DYN_LIBCOMPAT_OBJS) dietfeatures.h - $(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBCOMPAT_OBJS) -L$(PICODIR) -lc -Wl,-soname=libcompat.so + $(CROSSLD) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBCOMPAT_OBJS) -L$(PICODIR) -lc -Wl,-soname=libcompat.so $(PICODIR)/libm.so: $(DYN_LIBMATH_OBJS) dietfeatures.h - $(LD_UNSET) $(CROSS)$(CC) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBMATH_OBJS) -L$(PICODIR) -lc -Wl,-soname=libm.so + $(CROSSLD) -nostdlib -shared -o $@ $(CFLAGS) -fPIC $(DYN_LIBMATH_OBJS) -L$(PICODIR) -lc -Wl,-soname=libm.so $(SYSCALLOBJ): syscalls.h $(OBJDIR)/elftrunc: $(OBJDIR)/diet contrib/elftrunc.c - bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/elftrunc.c + $(CROSSDIET) $(CFLAGS) -o $@ contrib/elftrunc.c $(OBJDIR)/dnsd: $(OBJDIR)/diet contrib/dnsd.c - bin-$(MYARCH)/diet $(CROSS)$(CC) $(CFLAGS) -o $@ contrib/dnsd.c + $(CROSSDIET) $(CFLAGS) -o $@ contrib/dnsd.c VERSION=dietlibc-$(shell head -n 1 CHANGES|sed 's/://') CURNAME=$(notdir $(shell pwd)) $(OBJDIR)/diet: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o - $(CROSS)$(CC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc - $(STRIP) -R .comment -R .note $@ + $(CROSSCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -DVERSION=\"$(VERSION)\" -lgcc + $(CROSSSTRIP) -R .comment -R .note $@ $(OBJDIR)/diet-i: $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o diet.c $(OBJDIR)/dietlibc.a $(OBJDIR)/dyn_stop.o - $(CROSS)$(CC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -DVERSION=\"$(VERSION)\" -DINSTALLVERSION -lgcc - $(STRIP) -R .comment -R .note $@ + $(CROSSCC) -isystem include $(CFLAGS) -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -DVERSION=\"$(VERSION)\" -DINSTALLVERSION -lgcc + $(CROSSSTRIP) -R .comment -R .note $@ $(PICODIR)/diet-dyn: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c - $(LD_UNSET) $(CROSS)$(CC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so - $(STRIP) -R .command -R .note $@ + $(CROSSLD) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(HOME)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(HOME)/$(PICODIR)/libdl.so + $(CROSSSTRIP) -R .command -R .note $@ $(PICODIR)/diet-dyn-i: $(PICODIR)/start.o $(PICODIR)/dyn_start.o diet.c - $(LD_UNSET) $(CROSS)$(CC) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(ILIBDIR)/libdl.so -DINSTALLVERSION - $(STRIP) -R .command -R .note $@ + $(CROSSLD) -isystem include $(CFLAGS) -fPIC -nostdlib -o $@ $^ -DDIETHOME=\"$(prefix)\" -D__DYN_LIB -DVERSION=\"$(VERSION)\" -L$(PICODIR) -lc -lgcc $(PICODIR)/dyn_stop.o -Wl,-dynamic-linker=$(ILIBDIR)/libdl.so -DINSTALLVERSION + $(CROSSSTRIP) -R .command -R .note $@ $(OBJDIR)/djb: $(OBJDIR)/compile $(OBJDIR)/load @@ -358,10 +376,10 @@ $(OBJDIR)/exports: $(OBJDIR)/dietlibc.a .PHONY: t t1 t: - $(CROSS)$(CC) -g $(CFLAGS) -fno-builtin -nostdlib -isystem include -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dietlibc.a -lgcc $(OBJDIR)/dyn_stop.o -Wl,-Map,mapfile + $(CROSSCC) -g $(CFLAGS) -fno-builtin -nostdlib -isystem include -o t t.c $(OBJDIR)/start.o $(OBJDIR)/dyn_start.o $(OBJDIR)/dietlibc.a -lgcc $(OBJDIR)/dyn_stop.o -Wl,-Map,mapfile t1: - $(CROSS)$(CC) -g -o t1 t.c + $(CROSSCC) -g -o t1 t.c install-bin: $(OBJDIR)/start.o $(OBJDIR)/dietlibc.a $(OBJDIR)/librpc.a $(OBJDIR)/liblatin1.a $(OBJDIR)/libcompat.a $(OBJDIR)/elftrunc $(OBJDIR)/diet-i $(INSTALL) -d $(DESTDIR)$(ILIBDIR) $(DESTDIR)$(MAN1DIR) $(DESTDIR)$(BINDIR) @@ -532,8 +550,8 @@ $(OBJDIR)/fcntl64.o: dietfeatures.h # WANT_SSP # This facepalm brought to you by: Ubuntu! $(OBJDIR)/stackgap.o: dietfeatures.h - $(CROSS)$(CC) $(INC) $(CFLAGS) -c lib/stackgap.c -o $@ -D__dietlibc__ -fno-stack-protector - $(COMMENT) -$(CROSS)strip -x -R .comment -R .note $@ + $(CROSSCC) $(INC) $(CFLAGS) -c lib/stackgap.c -o $@ -D__dietlibc__ -fno-stack-protector + $(CROSSSTRIP) -x -R .comment -R .note $@ # WANT_MALLOC_ZERO $(OBJDIR)/strndup.o: dietfeatures.h diff --git a/include/elf.h b/include/elf.h index 51975484..f0cc794f 100644 --- a/include/elf.h +++ b/include/elf.h @@ -692,9 +692,9 @@ typedef struct If any adjustment is made to the ELF object after it has been built these entries will need to be adjusted. */ #define DT_ADDRRNGLO 0x6ffffe00 -#define DT_GNU_HASH 0x6ffffe05 #define DT_TLSDESC_PLT 0x6ffffe06 #define DT_TLSDESC_GOT 0x6ffffe07 +#define DT_GNU_HASH 0x6ffffef5 #define DT_GNU_CONFLICT 0x6ffffef8 /* Start of conflict section */ #define DT_GNU_LIBLIST 0x6ffffef9 /* Library list */ #define DT_CONFIG 0x6ffffefa /* Configuration information. */ diff --git a/include/stdio.h b/include/stdio.h index 7c9cee6e..6337fcd2 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -21,7 +21,7 @@ int printf(const char *format, ...) __THROW __attribute__((__format__(__printf__ int fprintf(FILE *stream, const char *format, ...) __THROW __attribute__((__format__(__printf__,2,3))); int sprintf(char *str, const char *format, ...) __THROW __attribute__((__format__(__printf__,2,3))); int snprintf(char *str, size_t size, const char *format, ...) __THROW __attribute__((__format__(__printf__,3,4))); -int asprintf(char **ptr, const char* format, ...) __THROW __attribute_malloc__ __attribute__((__format__(__printf__,2,3))); +int asprintf(char **ptr, const char* format, ...) __THROW __attribute__((__format__(__printf__,2,3))); int scanf(const char *format, ...) __THROW __attribute__((__format__(__scanf__,1,2))); int fscanf(FILE *stream, const char *format, ...) __THROW __attribute__((__format__(__scanf__,2,3))); diff --git a/include/sys/socket.h b/include/sys/socket.h index ebd42501..60280dc6 100644 --- a/include/sys/socket.h +++ b/include/sys/socket.h @@ -379,12 +379,12 @@ int socket(int domain, int type, int protocol) __THROW; int accept(int s, struct sockaddr *addr, socklen_t *addrlen) __THROW; int connect(int sockfd, const struct sockaddr *serv_addr, socklen_t addrlen) __THROW; int bind(int sockfd, const struct sockaddr *my_addr, socklen_t addrlen) __THROW; -int recv(int s, void *buf, size_t len, int flags) __THROW; -int recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) __THROW; -int recvmsg(int s, struct msghdr *msg, int flags) __THROW; -int send(int s, const void *msg, size_t len, int flags) __THROW; -int sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) __THROW; -int sendmsg(int s, const struct msghdr *msg, int flags) __THROW; +ssize_t recv(int s, void *buf, size_t len, int flags) __THROW; +ssize_t recvfrom(int s, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen) __THROW; +ssize_t recvmsg(int s, struct msghdr *msg, int flags) __THROW; +ssize_t send(int s, const void *msg, size_t len, int flags) __THROW; +ssize_t sendto(int s, const void *msg, size_t len, int flags, const struct sockaddr *to, socklen_t tolen) __THROW; +ssize_t sendmsg(int s, const struct msghdr *msg, int flags) __THROW; int getpeername(int s, struct sockaddr *name, socklen_t *namelen) __THROW; int getsockname(int s , struct sockaddr * name , socklen_t * namelen) __THROW; diff --git a/lib/alloc.c b/lib/alloc.c index 3f0cedb9..35a121aa 100644 --- a/lib/alloc.c +++ b/lib/alloc.c @@ -239,9 +239,7 @@ void* __libc_realloc(void* ptr, size_t _size) { } } else { /* ptr==0 */ - if (size) { - ptr=_alloc_libc_malloc(size); - } + ptr=_alloc_libc_malloc(size); } return ptr; } diff --git a/lib/recv.c b/lib/recv.c index 6cf7b83f..c0d9ad46 100644 --- a/lib/recv.c +++ b/lib/recv.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_recv(int a, const void * b, size_t c, int flags); -int __libc_recv(int a, const void * b, size_t c, int flags) { +ssize_t __libc_recv(int a, const void * b, size_t c, int flags); +ssize_t __libc_recv(int a, const void * b, size_t c, int flags) { long args[] = { a, (long) b, c, flags }; return socketcall(SYS_RECV, args); } -int recv(int a, const void * b, size_t c, int flags) +ssize_t recv(int a, const void * b, size_t c, int flags) __attribute__ ((weak, alias("__libc_recv"))); #endif diff --git a/lib/recvfrom.c b/lib/recvfrom.c index 8afe79cd..90714aeb 100644 --- a/lib/recvfrom.c +++ b/lib/recvfrom.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen); -int __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen) { +ssize_t __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen); +ssize_t __libc_recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen) { long args[] = { a, (long) b, c, flags, (long) to, (long) tolen }; return socketcall(SYS_RECVFROM, args); } -int recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen) +ssize_t recvfrom(int a, const void * b, size_t c, int flags, void *to, void *tolen) __attribute__ ((weak,alias("__libc_recvfrom"))) ; #endif diff --git a/lib/recvmsg.c b/lib/recvmsg.c index 0155994e..e1c19cc9 100644 --- a/lib/recvmsg.c +++ b/lib/recvmsg.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_recvmsg(int a, struct msghdr* msg, int flags); -int __libc_recvmsg(int a, struct msghdr* msg, int flags) { +ssize_t __libc_recvmsg(int a, struct msghdr* msg, int flags); +ssize_t __libc_recvmsg(int a, struct msghdr* msg, int flags) { long args[] = { a, (long) msg, flags }; return socketcall(SYS_RECVMSG, args); } -int recvmsg(int a, struct msghdr *msg, int flags) +ssize_t recvmsg(int a, struct msghdr *msg, int flags) __attribute__ ((weak,alias("__libc_recvmsg"))) ; #endif diff --git a/lib/send.c b/lib/send.c index be768b3b..dee9a3df 100644 --- a/lib/send.c +++ b/lib/send.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_send(int a, const void * b, size_t c, int flags); -int __libc_send(int a, const void * b, size_t c, int flags) { +ssize_t __libc_send(int a, const void * b, size_t c, int flags); +ssize_t __libc_send(int a, const void * b, size_t c, int flags) { long args[] = { a, (long) b, c, flags }; return socketcall(SYS_SEND, args); } -int send(int a, const void * b, size_t c, int flags) +ssize_t send(int a, const void * b, size_t c, int flags) __attribute__ ((weak, alias("__libc_send"))); #endif diff --git a/lib/sendmsg.c b/lib/sendmsg.c index 00d9f491..1df9e578 100644 --- a/lib/sendmsg.c +++ b/lib/sendmsg.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_sendmsg(int a, const struct msghdr* msg, int flags); -int __libc_sendmsg(int a, const struct msghdr* msg, int flags) { +ssize_t __libc_sendmsg(int a, const struct msghdr* msg, int flags); +ssize_t __libc_sendmsg(int a, const struct msghdr* msg, int flags) { long args[] = { a, (long) msg, flags }; return socketcall(SYS_SENDMSG, args); } -int sendmsg(int a, const struct msghdr *msg, int flags) +ssize_t sendmsg(int a, const struct msghdr *msg, int flags) __attribute__ ((weak,alias("__libc_sendmsg"))) ; #endif diff --git a/lib/sendto.c b/lib/sendto.c index 091070b5..d0449fc8 100644 --- a/lib/sendto.c +++ b/lib/sendto.c @@ -6,13 +6,13 @@ extern int socketcall(int callno,long* args); -int __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen); -int __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen) { +ssize_t __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen); +ssize_t __libc_sendto(int a, const void * b, size_t c, int flags, void *to, int tolen) { long args[] = { a, (long) b, c, flags, (long) to, tolen }; return socketcall(SYS_SENDTO, args); } -int sendto(int a, const void * b, size_t c, int flags, const struct sockaddr* to, socklen_t tolen) +ssize_t sendto(int a, const void * b, size_t c, int flags, const struct sockaddr* to, socklen_t tolen) __attribute__ ((weak, alias("__libc_sendto"))); #endif diff --git a/libugly/asctime_r.c b/libugly/asctime_r.c index 43c5e2cb..9859f5fd 100644 --- a/libugly/asctime_r.c +++ b/libugly/asctime_r.c @@ -9,7 +9,7 @@ static void num2str(char *c,int i) { } char *asctime_r(const struct tm *t, char *buf) { - /* "Wed Jun 30 21:49:08 1993\n" */ + /* "Wed Jun 30 21:49:08 1993\n\0" */ *(int*)buf=*(int*)(days+(t->tm_wday<<2)); *(int*)(buf+4)=*(int*)(months+(t->tm_mon<<2)); num2str(buf+8,t->tm_mday); @@ -25,5 +25,6 @@ char *asctime_r(const struct tm *t, char *buf) { num2str(buf+20,(t->tm_year+1900)/100); num2str(buf+22,(t->tm_year+1900)%100); buf[24]='\n'; + buf[25]='\0'; return buf; } diff --git a/x86_64/dyn_syscalls.S b/x86_64/dyn_syscalls.S index 31741253..5a3b333d 100644 --- a/x86_64/dyn_syscalls.S +++ b/x86_64/dyn_syscalls.S @@ -8,21 +8,28 @@ //#include "unified.S" .text +.global __unified_syscall_16bit +.type __unified_syscall_16bit,@function +__unified_syscall_16bit: + movzwl %ax, %eax + jmp 1f +.size __unified_syscall_16bit,.-__unified_syscall_16bit + .weak exit exit: .global _exit +.type _exit,@function _exit: __exit: movb $__NR_exit,%al .global __unified_syscall -.global __unified_syscall_16bit +.type __unified_syscall,@function __unified_syscall: _unified_syscall: - mov $0, %al -__unified_syscall_16bit: - movzwl %ax, %eax - mov %rcx, %r10 + movzbl %al, %eax +1: + movq %rcx, %r10 syscall __error_unified_syscall: cmpq $-132, %rax @@ -39,6 +46,8 @@ __error_unified_syscall: #include "dietuglyweaks.h" ret +.size __unified_syscall,.-__unified_syscall +.size _exit,.-_exit #define __unified_syscall _unified_syscall @@ -130,6 +139,7 @@ __error_unified_syscall: #include "../syscalls.s/mmap.S" #include "../syscalls.s/mmap2.S" #include "../syscalls.s/mount.S" +#include "../syscalls.s/umount2.S" #include "../syscalls.s/mprotect.S" #include "../syscalls.s/mremap.S" #include "../syscalls.s/msync.S" @@ -212,7 +222,6 @@ __error_unified_syscall: #include "../syscalls.s/sysfs.S" #include "../syscalls.s/sysinfo.S" #include "../syscalls.s/syslog.S" -#include "../syscalls.s/time.S" #include "../syscalls.s/timer_create.S" #include "../syscalls.s/timer_delete.S" #include "../syscalls.s/timer_getoverrun.S" @@ -298,6 +307,23 @@ __error_unified_syscall: #include "../syscalls.s/fallocate.S" #include "../syscalls.s/utimes.S" +#include "../syscalls.s/__accept.S" +#include "../syscalls.s/__bind.S" +#include "../syscalls.s/__connect.S" +#include "../syscalls.s/__getpeername.S" +#include "../syscalls.s/__getsockname.S" +#include "../syscalls.s/__getsockopt.S" +#include "../syscalls.s/__listen.S" +#include "../syscalls.s/__recvfrom.S" +#include "../syscalls.s/__recvmsg.S" +#include "../syscalls.s/__recv.S" +#include "../syscalls.s/__sendmsg.S" +#include "../syscalls.s/__send.S" +#include "../syscalls.s/__sendto.S" +#include "../syscalls.s/__setsockopt.S" +#include "../syscalls.s/__shutdown.S" +#include "../syscalls.s/__socketpair.S" +#include "../syscalls.s/__socket.S" #define _exit __exit #include "clone.S" @@ -307,6 +333,6 @@ __error_unified_syscall: #include "setjmp.S" #define __errno_location __errno_location@PLT -#include "x86_64/gettimeofday.S" +#include "gettimeofday.S" #include "syscalls.s/__guard.S" diff --git a/x86_64/recv.c b/x86_64/recv.c index 3b76c071..303642b0 100644 --- a/x86_64/recv.c +++ b/x86_64/recv.c @@ -2,12 +2,12 @@ #include #include -int __libc_recv(int fd, void * buf, size_t n, int flags); +ssize_t __libc_recv(int fd, void * buf, size_t n, int flags); /* shut up gcc warning about missing prototype */ -int __libc_recv(int fd, void * buf, size_t n, int flags) { +ssize_t __libc_recv(int fd, void * buf, size_t n, int flags) { return recvfrom(fd, buf, n, flags, 0, 0); } -int recv(int a, void * b, size_t c, int flags) +ssize_t recv(int a, void * b, size_t c, int flags) __attribute__ ((weak, alias("__libc_recv"))); diff --git a/x86_64/send.c b/x86_64/send.c index bdeb1d31..a6f66174 100644 --- a/x86_64/send.c +++ b/x86_64/send.c @@ -1,13 +1,12 @@ #include #include #include - -int __libc_send(int fd, const void * buf, size_t n, int flags); +ssize_t __libc_send(int fd, const void * buf, size_t n, int flags); /* shut up gcc warning about missing prototype */ -int __libc_send(int fd, const void * buf, size_t n, int flags) { +ssize_t __libc_send(int fd, const void * buf, size_t n, int flags) { return sendto(fd, buf, n, flags, NULL, 0); } -int send(int a, const void * b, size_t c, int flags) +ssize_t send(int a, const void * b, size_t c, int flags) __attribute__ ((weak, alias("__libc_send"))); diff --git a/x86_64/syscalls.h b/x86_64/syscalls.h index e63028fb..54159f6d 100644 --- a/x86_64/syscalls.h +++ b/x86_64/syscalls.h @@ -360,7 +360,8 @@ wsym: ; \ .global sym; \ sym: \ mov $__NR_##name,%al; \ - jmp __unified_syscall@PLT + jmp __unified_syscall@PLT; \ +.size sym,.-sym #define syscall(name,sym) \ .text; \ @@ -373,7 +374,8 @@ sym: \ .else ; \ mov $__NR_##name,%al; \ jmp __unified_syscall@PLT; \ -.endif +.endif ; \ +.size sym,.-sym #else