From 4a918ec6ab5e83e51e1fca0b27dcfb4399553074 Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 25 Jul 2011 20:48:49 +0200 Subject: [PATCH 01/10] asctime_r: Add trailing '\0' The asctime() function shall convert the broken-down time in the structure pointed to by timeptr into a string in the form: Sun Sep 16 01:03:52 1973\n\0 See: http://pubs.opengroup.org/onlinepubs/009695399/functions/asctime.html --- libugly/asctime_r.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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; } From 18840864601e029dfd0d187cd0d5c56b227d17e0 Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 25 Jul 2011 21:09:11 +0200 Subject: [PATCH 02/10] stdio.h: remove __attribute_malloc__ from asprintf Remove bogus __attribute_malloc__ declaration from asprintf, since the return type is not a pointer. --- include/stdio.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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))); From 561653b5b70121f2721d81533b28ebc07592f61b Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 25 Jul 2011 21:18:30 +0200 Subject: [PATCH 03/10] alloc.c: call malloc, even if size == 0 From MALLOC(3) If ptr is NULL, then the call is equivalent to malloc(size), for *all* values of size. --- lib/alloc.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) 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; } From b92b4c244fa362ee3d050119a778e440dcf38667 Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 25 Jul 2011 21:40:17 +0200 Subject: [PATCH 04/10] fix return types for recv, send and friends --- include/sys/socket.h | 12 ++++++------ lib/recv.c | 6 +++--- lib/recvfrom.c | 6 +++--- lib/recvmsg.c | 6 +++--- lib/send.c | 6 +++--- lib/sendmsg.c | 6 +++--- lib/sendto.c | 6 +++--- x86_64/recv.c | 6 +++--- x86_64/send.c | 7 +++---- 9 files changed, 30 insertions(+), 31 deletions(-) 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/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/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"))); From 29b73f0f26722885bc1320e360deee34f203581e Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 25 Jul 2011 22:03:57 +0200 Subject: [PATCH 05/10] Silent make; use V=1 to see verbose output --- Makefile | 108 ++++++++++++++++++++++++++++++++----------------------- 1 file changed, 63 insertions(+), 45 deletions(-) diff --git a/Makefile b/Makefile index 8db0fae7..3867c72d 100644 --- a/Makefile +++ b/Makefile @@ -160,28 +160,46 @@ PICODIR = pic-$(ARCH) mkdir $* @touch $@ +ifneq ($(V),1) +CROSSLD = @echo "CCLD $@" && $(LD_UNSET) $(CROSS)$(CC) +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) +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 From 4e1503793bd8bdbb3efec0d1718802f8f86e1451 Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Thu, 28 Jul 2011 23:17:23 +0200 Subject: [PATCH 06/10] fix 'make dyn' for x86_64 * include missing syscalls from ../syscalls.s * remove ../syscalls.s/time.S since x86_64 has its own __time.S * fix location of gettimeofday.S --- x86_64/dyn_syscalls.S | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/x86_64/dyn_syscalls.S b/x86_64/dyn_syscalls.S index 31741253..38d5dee8 100644 --- a/x86_64/dyn_syscalls.S +++ b/x86_64/dyn_syscalls.S @@ -130,6 +130,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 +213,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 +298,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 +324,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" From eaaec1015a8754c36425f36a98133408fb1259ce Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Mon, 15 Aug 2011 23:11:42 +0200 Subject: [PATCH 07/10] elf.h: fix DT_GNU_HASH value This doesn't actually mean that gnuhash is now functional, this fixes just the value of DT_GNU_HASH. --- include/elf.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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. */ From 4147f95864800909d3f594662b1c91fe1f7f1b8b Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Wed, 24 Aug 2011 23:31:02 +0200 Subject: [PATCH 08/10] x86_64: cosmetic; set the size of function symbols --- x86_64/syscalls.h | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) 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 From c8a33d57e7e68bc6193a400ab24a74270f8958ed Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Wed, 24 Aug 2011 23:32:26 +0200 Subject: [PATCH 09/10] x86_64: fix unified_syscall Fix unified_syscall so that dynamix linking produces working binaries. Tested only with 'diet-dyn' so far. --- x86_64/dyn_syscalls.S | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/x86_64/dyn_syscalls.S b/x86_64/dyn_syscalls.S index 38d5dee8..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 From 836b0bffdacc73012b19c44b9bb985e723216e6c Mon Sep 17 00:00:00 2001 From: Gernot Tenchio Date: Wed, 24 Aug 2011 23:33:39 +0200 Subject: [PATCH 10/10] use hash-style=sysv since gnuhash doesn't work (yet) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 3867c72d..44d11930 100644 --- a/Makefile +++ b/Makefile @@ -161,13 +161,13 @@ PICODIR = pic-$(ARCH) @touch $@ ifneq ($(V),1) -CROSSLD = @echo "CCLD $@" && $(LD_UNSET) $(CROSS)$(CC) +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) +CROSSLD = $(LD_UNSET) $(CROSS)$(CC) -Wl,--hash-style=sysv CROSSCC = $(CROSS)$(CC) CROSSAR = $(CROSS)ar CROSSSTRIP = $(CROSS)strip