Explorar o código

A number of naming updates in preparation for adding in
proper threading. Most of this is from Stefan Soucek,
with additions and changes as needed from me.

Eric Andersen %!s(int64=23) %!d(string=hai) anos
pai
achega
3ab0557e5a

+ 41 - 4
include/features.h

@@ -322,6 +322,10 @@
 # include <gnu/stubs.h>
 #endif
 
+/* No C++ */
+#define __BEGIN_DECLS
+#define __END_DECLS
+
 /* Load up the current set of uClibc supported features */
 #define __need_uClibc_config_h
 #include <bits/uClibc_config.h>
@@ -329,22 +333,55 @@
 
 /* Some nice features only work properly with ELF */
 #if defined _LIBC && defined HAVE_ELF	
-#   define link_warning(symbol, msg)					      \
+#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+#  define link_warning(symbol, msg)					      \
 	asm (".section "  ".gnu.warning." #symbol  "\n\t.previous");	      \
 	    static const char __evoke_link_warning_##symbol[]		      \
 	    __attribute__ ((section (".gnu.warning." #symbol "\n\t#"))) = msg;
-#   define weak_alias(name, aliasname)					      \
+#  define _weak_alias(name, aliasname) \
+      extern __typeof (name) aliasname __attribute__ ((weak, alias (#name)));
+/*
+#   define _weak_alias(name, aliasname)					      \
 	asm(".global " C_SYMBOL_PREFIX #name ";"			      \
 	    ".weak " C_SYMBOL_PREFIX #aliasname ";"			      \
 	    C_SYMBOL_PREFIX #aliasname "="  C_SYMBOL_PREFIX #name ";");
+*/
 #   define weak_symbol(name)						      \
 	asm(".weak " C_SYMBOL_PREFIX #name ";");
 #else
-#   define link_warning(symbol, msg) \
+#  define weak_alias(name, aliasname) _weak_alias (name, aliasname)
+#  define link_warning(symbol, msg) \
 	asm (".stabs \"" msg "\",30,0,0,0\n\t" \
 	      ".stabs \"" #symbol "\",1,0,0,0\n");
-#   define weak_alias(name, aliasname) \
+#  define _weak_alias(name, aliasname) \
 	__asm__(".global _" #aliasname "\n.set _" #aliasname ",_" #name);
 #endif
 
+/* --- this is added to integrate linuxthreads */
+
+#define __USE_UNIX98            1
+
+
+#ifndef weak_function
+/* If we do not have the __attribute__ ((weak)) syntax, there is no way we
+   can define functions as weak symbols.  The compiler will emit a `.globl'
+   directive for the function symbol, and a `.weak' directive in addition
+   will produce an error from the assembler.  */ 
+# define weak_function          /* empty */
+# define weak_const_function    /* empty */
+#endif
+
+/* On some platforms we can make internal function calls (i.e., calls of
+   functions not exported) a bit faster by using a different calling
+   convention.  */
+#ifndef internal_function
+# define internal_function      /* empty */
+#endif
+
+/* Prepare for the case that `__builtin_expect' is not available.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+
 #endif	/* features.h  */

+ 16 - 8
libc/inet/socketcalls.c

@@ -28,7 +28,7 @@ extern int socketcall(int call, unsigned long *args);
 
 
 #ifdef L_accept
-int accept(int s, struct sockaddr *addr, socklen_t * addrlen)
+int __libc_accept(int s, struct sockaddr *addr, socklen_t * addrlen)
 {
 	unsigned long args[3];
 
@@ -37,6 +37,7 @@ int accept(int s, struct sockaddr *addr, socklen_t * addrlen)
 	args[2] = (unsigned long) addrlen;
 	return socketcall(SYS_ACCEPT, args);
 }
+weak_alias(__libc_accept, accept);
 #endif
 
 #ifdef L_bind
@@ -52,7 +53,7 @@ int bind(int sockfd, const struct sockaddr *myaddr, socklen_t addrlen)
 #endif
 
 #ifdef L_connect
-int connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
+int __libc_connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
 {
 	unsigned long args[3];
 
@@ -61,6 +62,7 @@ int connect(int sockfd, const struct sockaddr *saddr, socklen_t addrlen)
 	args[2] = addrlen;
 	return socketcall(SYS_CONNECT, args);
 }
+weak_alias(__libc_connect, connect);
 #endif
 
 #ifdef L_getpeername
@@ -115,7 +117,7 @@ int listen(int sockfd, int backlog)
 
 #ifdef L_recv
 /* recv, recvfrom added by bir7@leland.stanford.edu */
-int recv(int sockfd, __ptr_t buffer, size_t len, int flags)
+int __libc_recv(int sockfd, __ptr_t buffer, size_t len, int flags)
 {
 	unsigned long args[4];
 
@@ -125,11 +127,12 @@ int recv(int sockfd, __ptr_t buffer, size_t len, int flags)
 	args[3] = flags;
 	return (socketcall(SYS_RECV, args));
 }
+weak_alias(__libc_recv, recv);
 #endif
 
 #ifdef L_recvfrom
 /* recv, recvfrom added by bir7@leland.stanford.edu */
-int recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
+int __libc_recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
 		 struct sockaddr *to, socklen_t * tolen)
 {
 	unsigned long args[6];
@@ -142,10 +145,11 @@ int recvfrom(int sockfd, __ptr_t buffer, size_t len, int flags,
 	args[5] = (unsigned long) tolen;
 	return (socketcall(SYS_RECVFROM, args));
 }
+weak_alias(__libc_recvfrom, recvfrom);
 #endif
 
 #ifdef L_recvmsg
-int recvmsg(int sockfd, struct msghdr *msg, int flags)
+int __libc_recvmsg(int sockfd, struct msghdr *msg, int flags)
 {
 	unsigned long args[3];
 
@@ -154,11 +158,12 @@ int recvmsg(int sockfd, struct msghdr *msg, int flags)
 	args[2] = flags;
 	return (socketcall(SYS_RECVMSG, args));
 }
+weak_alias(__libc_recvmsg, recvmsg);
 #endif
 
 #ifdef L_send
 /* send, sendto added by bir7@leland.stanford.edu */
-int send(int sockfd, const void *buffer, size_t len, int flags)
+int __libc_send(int sockfd, const void *buffer, size_t len, int flags)
 {
 	unsigned long args[4];
 
@@ -168,10 +173,11 @@ int send(int sockfd, const void *buffer, size_t len, int flags)
 	args[3] = flags;
 	return (socketcall(SYS_SEND, args));
 }
+weak_alias(__libc_send, send);
 #endif
 
 #ifdef L_sendmsg
-int sendmsg(int sockfd, const struct msghdr *msg, int flags)
+int __libc_sendmsg(int sockfd, const struct msghdr *msg, int flags)
 {
 	unsigned long args[3];
 
@@ -180,11 +186,12 @@ int sendmsg(int sockfd, const struct msghdr *msg, int flags)
 	args[2] = flags;
 	return (socketcall(SYS_SENDMSG, args));
 }
+weak_alias(__libc_sendmsg, sendmsg);
 #endif
 
 #ifdef L_sendto
 /* send, sendto added by bir7@leland.stanford.edu */
-int sendto(int sockfd, const void *buffer, size_t len, int flags,
+int __libc_sendto(int sockfd, const void *buffer, size_t len, int flags,
 	   const struct sockaddr *to, socklen_t tolen)
 {
 	unsigned long args[6];
@@ -197,6 +204,7 @@ int sendto(int sockfd, const void *buffer, size_t len, int flags,
 	args[5] = tolen;
 	return (socketcall(SYS_SENDTO, args));
 }
+weak_alias(__libc_sendto, sendto);
 #endif
 
 #ifdef L_setsockopt

+ 5 - 3
libc/signal/sigaction.c

@@ -119,7 +119,7 @@ extern int __rt_sigaction (int, const struct kernel_sigaction *__unbounded,
 
 /* If ACT is not NULL, change the action for SIG to *ACT.
    If OACT is not NULL, put the old action for SIG in *OACT.  */
-int sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+int __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 {
     int result;
     struct kernel_sigaction kact, koact;
@@ -148,7 +148,7 @@ int sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
     }
     return result;
 }
-
+weak_alias(__libc_sigaction, sigaction)
 
 
 
@@ -160,7 +160,7 @@ extern int __sigaction (int, const struct old_kernel_sigaction *__unbounded,
 
 /* If ACT is not NULL, change the action for SIG to *ACT.
    If OACT is not NULL, put the old action for SIG in *OACT.  */
-int sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
+int __libc_sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
 {
     struct old_kernel_sigaction k_sigact, k_osigact;
     int result;
@@ -187,4 +187,6 @@ int sigaction (int sig, const struct sigaction *act, struct sigaction *oact)
     return result;
 }
 
+weak_alias(__libc_sigaction, sigaction)
+
 #endif

+ 1 - 1
libc/signal/sigset.c

@@ -41,7 +41,7 @@ __sighandler_t sigset (int sig, __sighandler_t disp)
 	    return SIG_ERR;
 
 	/* Add the signal set to the current signal mask.  */
-	if (__sigprocmask (SIG_BLOCK, &set, NULL) < 0)
+	if (sigprocmask (SIG_BLOCK, &set, NULL) < 0)
 	    return SIG_ERR;
 
 	return SIG_HOLD;

+ 1 - 1
libc/stdlib/Makefile

@@ -34,7 +34,7 @@ MSRC1=strto_ll.c
 MOBJ1=strtoll.o strtoull.o strto_ll.o atoll.o
 
 MSRC2=atexit.c
-MOBJ2=atexit.o exit.o
+MOBJ2=atexit.o on_exit.o __exit_handler.o exit.o
 
 
 CSRC =	abort.c getenv.c mktemp.c qsort.c realpath.c abs.c bsearch.c \

+ 114 - 23
libc/stdlib/atexit.c

@@ -10,7 +10,7 @@
  *   Removed on_exit since it did not match gnu libc definition.
  *   Combined atexit and __do_exit into one object file.
  *
- * Feb 2000          Manuel Novoa III
+ * Feb 2001          Manuel Novoa III
  *
  *   Reworked file after addition of __uClibc_main.
  *   Changed name of __do_exit to atexit_handler.
@@ -18,58 +18,149 @@
  *   Moved declaration of __uClibc_cleanup to __uClibc_main
  *      where it is initialized with (possibly weak alias)
  *      __stdio_close_all.
+ *
+ * Jul 2001          Steve Thayer
+ * 
+ *   Added an on_exit implementation (that now matches gnu libc definition.)
+ *   Pulled atexit_handler out of the atexit object since it is now required by
+ *   on_exit as well.  Renamed it to __exit_handler.
+ *   Fixed a problem where exit functions stop getting called if one of
+ *   them calls exit().
+ *   As a side effect of these changes, abort() no longer calls the exit
+ *   functions (it now matches the gnu libc definition).
+ *
  */
 
 #include <unistd.h>
 #include <stdlib.h>
 #include <errno.h>
 
-typedef void (*vfuncp) (void);
-extern vfuncp __uClibc_cleanup;
+#define __MAX_EXIT __UCLIBC_MAX_ATEXIT
+
+typedef void (*aefuncp) (void);         /* atexit function pointer */
+typedef void (*oefuncp) (int, void *);  /* on_exit function pointer */
+typedef enum {
+	ef_atexit,
+	ef_on_exit
+} ef_type; /* exit function types */
 
-#ifdef L_atexit
 extern void __stdio_close_all(void);
 
-static vfuncp __atexit_table[__UCLIBC_MAX_ATEXIT];
-static int __atexit_count = 0;
+/* this is in the L_exit object */
+extern void (*__exit_cleanup) (int);
 
-static void atexit_handler(void)
-{
-	int count;
+/* these are in the L___do_exit object */
+extern int __exit_count;
+extern void __exit_handler(int);
+extern struct exit_function {
+	ef_type type;	/* ef_atexit or ef_on_exit */
+	union {
+		aefuncp atexit;
+		struct {
+			oefuncp func;
+			void *arg;
+		} on_exit;
+	} funcs;
+} __exit_function_table[__MAX_EXIT];
 
+#ifdef L_atexit
 	/*
-	 * Guard against more functions being added and againt being reinvoked.
+ * register a function to be called at normal program termination
+ * (the registered function takes no arguments)
 	 */
-	__uClibc_cleanup = 0;
+int atexit(aefuncp func)
+{
+	struct exit_function *efp;
 
-	/* In reverse order */
-	for (count = __atexit_count ; count-- ; ) {
-		(*__atexit_table[count])();
+	if (__exit_count >= __MAX_EXIT) {
+		__set_errno(ENOMEM);
+		return -1;
 	}
-	if (__stdio_close_all)
-	  __stdio_close_all();
+	if (func) {
+		__exit_cleanup = __exit_handler; /* enable cleanup */
+		efp = &__exit_function_table[__exit_count++];
+		efp->type = ef_atexit;
+		efp->funcs.atexit = func;
+	}
+	return 0;
 }
+#endif
 
-int atexit(vfuncp ptr)
+#ifdef L_on_exit
+/*
+ * register a function to be called at normal program termination
+ * the registered function takes two arguments:
+ *     status - the exit status that was passed to the exit() function
+ *     arg - generic argument
+ */
+int on_exit(oefuncp func, void *arg)
 {
-	if ((__uClibc_cleanup == 0) || (__atexit_count >= __UCLIBC_MAX_ATEXIT)) {
+	struct exit_function *efp;
+
+	if (__exit_count >= __MAX_EXIT) {
 		__set_errno(ENOMEM);
 		return -1;
 	}
-	if (ptr) {
-		__uClibc_cleanup = atexit_handler;
-		__atexit_table[__atexit_count++] = ptr;
+	if (func) {
+		__exit_cleanup = __exit_handler; /* enable cleanup */
+		efp = &__exit_function_table[__exit_count++];
+		efp->type = ef_on_exit;
+		efp->funcs.on_exit.func = func;
+		efp->funcs.on_exit.arg = arg;
 	}
 	return 0;
 }
 #endif
 
+#ifdef L___exit_handler
+struct exit_function __exit_function_table[__MAX_EXIT];
+int __exit_count = 0; /* Number of registered exit functions */
+
+/*
+ * Handle the work of executing the registered exit functions
+ */
+void __exit_handler(int status)
+{
+	struct exit_function *efp;
+
+	/* In reverse order */
+	for ( ; __exit_count-- ; ) {
+		efp = &__exit_function_table[__exit_count];
+		switch (efp->type) {
+		case ef_on_exit:
+			if (efp->funcs.on_exit.func) {
+				(efp->funcs.on_exit.func) (status, efp->funcs.on_exit.arg);
+			}
+			break;
+		case ef_atexit:
+			if (efp->funcs.atexit) {
+				(efp->funcs.atexit) ();
+			}
+			break;
+		}
+	}
+	if (__stdio_close_all)
+	  __stdio_close_all();
+}
+#endif
+
 #ifdef L_exit
+extern void (*__uClibc_cleanup) (void);
+void (*__exit_cleanup) (int) = 0;
+
+/*
+ * Normal program termination
+ */
 void exit(int rv)
 {
-	if (__uClibc_cleanup) {		/* Not already executing __uClibc_cleanup. */
-		__uClibc_cleanup();
+	/* Perform exit-specific cleanup (atexit and on_exit) */
+	if (__exit_cleanup) {
+		__exit_cleanup(rv);
 	}
+
+	/* Clean up everything else */
+	__uClibc_cleanup();
+
 	_exit(rv);
 }
 #endif

+ 2 - 1
libc/stdlib/system.c

@@ -4,7 +4,7 @@
 #include <unistd.h>
 #include <sys/wait.h>
 
-int system(command)
+int __libc_system(command)
 char *command;
 {
 	int wait_val, pid;
@@ -47,3 +47,4 @@ char *command;
 	signal(SIGCHLD, save_chld);
 	return wait_val;
 }
+weak_alias(__libc_system, system)

+ 4 - 3
libc/sysdeps/linux/common/longjmp.c

@@ -27,7 +27,7 @@ extern void __longjmp (__jmp_buf __env, int val);
 /* Set the signal mask to the one specified in ENV, and jump
    to the position specified in ENV, causing the setjmp
    call there to return VAL, or 1 if VAL is 0.  */
-void longjmp (sigjmp_buf env, int val)
+void __libc_longjmp (sigjmp_buf env, int val)
 {
 #if 0
   /* Perform any cleanups needed by the frames being unwound.  */
@@ -43,5 +43,6 @@ void longjmp (sigjmp_buf env, int val)
   __longjmp (env[0].__jmpbuf, val ?: 1);
 }
 
-weak_alias (longjmp, _longjmp)
-weak_alias (longjmp, siglongjmp)
+weak_alias (__libc_longjmp, _longjmp)
+weak_alias (__libc_longjmp, siglongjmp)
+weak_alias (__libc_longjmp, __libc_siglongjmp)

+ 48 - 24
libc/sysdeps/linux/common/syscalls.c

@@ -22,8 +22,8 @@
  *
  */
 
-#include <errno.h>
 #include <features.h>
+#include <errno.h>
 #include <sys/types.h>
 #include <sys/syscall.h>
 
@@ -39,10 +39,12 @@ _syscall1(void, _exit, int, status);
 #endif
 
 //#define __NR_fork             2
-#ifdef L_fork
+#ifdef L___libc_fork
 #include <unistd.h>
 #	ifdef __UCLIBC_HAS_MMU__
-		_syscall0(pid_t, fork);
+#define __NR___libc_fork __NR_fork
+		_syscall0(pid_t, __libc_fork);
+		weak_alias (__libc_fork, fork)
 #	else
 		pid_t fork(void)
 		{
@@ -53,16 +55,19 @@ _syscall1(void, _exit, int, status);
 #endif
 
 //#define __NR_read             3
-#ifdef L_read
+#ifdef L___libc_read
 #include <unistd.h>
-_syscall3(ssize_t, read, int, fd, __ptr_t, buf, size_t, count);
+#define __NR___libc_read __NR_read
+_syscall3(ssize_t, __libc_read, int, fd, __ptr_t, buf, size_t, count);
+weak_alias(__libc_read, read)
 #endif
 
 //#define __NR_write            4
-#ifdef L_write
+#ifdef L___libc_write
 #include <unistd.h>
-_syscall3(ssize_t, write, int, fd, const __ptr_t, buf, size_t, count);
-weak_alias(write, __write);
+#define __NR___libc_write __NR_write
+_syscall3(ssize_t, __libc_write, int, fd, const __ptr_t, buf, size_t, count);
+weak_alias(__libc_write, write)
 #endif
 
 //#define __NR_open             5
@@ -75,7 +80,7 @@ weak_alias(write, __write);
 #endif
 _syscall3(int, __open, const char *, fn, int, flags, mode_t, mode);
 
-int open(const char *file, int oflag, ...)
+int __libc_open(const char *file, int oflag, ...)
 {
 	int mode = 0;
 
@@ -90,12 +95,15 @@ int open(const char *file, int oflag, ...)
 
 	return __open(file, oflag, mode);
 }
+weak_alias(__libc_open, open)
 #endif
 
 //#define __NR_close            6
-#ifdef L_close
+#ifdef L___libc_close
 #include <unistd.h>
-_syscall1(int, close, int, fd);
+#define __NR___libc_close __NR_close
+_syscall1(int, __libc_close, int, fd);
+weak_alias(__libc_close, close)
 #endif
 
 //#define __NR_waitpid          7
@@ -182,15 +190,20 @@ _syscall3(int, lchown, const char *, path, uid_t, owner, gid_t, group);
 //#define __NR_oldstat          18
 
 //#define __NR_lseek            19
-#ifdef L_lseek
+#ifdef L___libc_lseek
 #include <unistd.h>
-_syscall3(off_t, lseek, int, fildes, off_t, offset, int, whence);
+#define __NR___libc_lseek __NR_lseek
+_syscall3(off_t, __libc_lseek, int, fildes, off_t, offset, int, whence);
+weak_alias(__libc_lseek, lseek)
 #endif
 
 //#define __NR_getpid           20
-#ifdef L_getpid
+#ifdef L___libc_getpid
 #include <unistd.h>
-_syscall0(pid_t, getpid);
+#define __NR___libc_getpid __NR_getpid
+_syscall0(pid_t, __libc_getpid);
+weak_alias(__libc_getpid, getpid)
+weak_alias(__libc_getpid, __getpid)
 #endif
 
 //#define __NR_mount            21
@@ -256,9 +269,11 @@ _syscall1(unsigned int, alarm, unsigned int, seconds);
 //#define __NR_oldfstat         28
 
 //#define __NR_pause            29
-#ifdef L_pause
+#ifdef L___libc_pause
 #include <unistd.h>
-_syscall0(int, pause);
+#define __NR___libc_pause __NR_pause
+_syscall0(int, __libc_pause);
+weak_alias(__libc_pause, pause)
 #endif
 
 //#define __NR_utime            30
@@ -458,7 +473,7 @@ extern int _fcntl(int fd, int cmd, long arg);
 
 _syscall3(int, _fcntl, int, fd, int, cmd, long, arg);
 
-int fcntl(int fd, int command, ...)
+int __libc_fcntl(int fd, int command, ...)
 {
 	long arg;
 	va_list list;
@@ -469,6 +484,7 @@ int fcntl(int fd, int command, ...)
 	va_end(list);
 	return _fcntl(fd, command, arg);
 }
+weak_alias(__libc_fcntl, fcntl)
 #endif
 
 //#define __NR_mpx              56
@@ -951,9 +967,11 @@ _syscall5(int, __ipc, unsigned int, call, int, first, int, second, int, third, v
 #endif
 
 //#define __NR_fsync            118
-#ifdef L_fsync
+#ifdef L___libc_fsync
 #include <unistd.h>
-_syscall1(int, fsync, int, fd);
+#define __NR___libc_fsync __NR_fsync
+_syscall1(int, __libc_fsync, int, fd);
+weak_alias(__libc_fsync, fsync)
 #endif
 
 //#define __NR_sigreturn        119
@@ -1123,6 +1141,11 @@ _syscall2(int,flock,int,fd, int,operation);
 #endif
 
 //#define __NR_msync            144
+/* If this ever gets implemented, be sure to use the __libc_ convention
+ * so that it can be over-ridden with a cancelable version by linuxthreads.
+ * Also update uClibc/libpthread/linuxthreads/wrapsyscall.c to do the override.
+ */
+
 //#define __NR_readv            145
 
 #ifdef L_readv
@@ -1251,17 +1274,18 @@ _syscall2(int, sched_rr_get_interval, pid_t, pid, struct timespec *, tp);
 #endif
 
 //#define __NR_nanosleep                162
-#ifdef L_nanosleep
+#ifdef L___libc_nanosleep
 #include <time.h>
-_syscall2(int, nanosleep, const struct timespec *, req, struct timespec *, rem);
+#define __NR___libc_nanosleep __NR_nanosleep
+_syscall2(int, __libc_nanosleep, const struct timespec *, req, struct timespec *, rem);
+weak_alias(__libc_nanosleep, nanosleep)
 #endif
 
 //#define __NR_mremap                   163
 #ifdef L_mremap
 #include <unistd.h>
 #include <sys/mman.h>
-_syscall4(__ptr_t, mremap, __ptr_t, old_address, size_t, old_size, size_t,
-		  new_size, int, may_move);
+_syscall4(__ptr_t, mremap, __ptr_t, old_address, size_t, old_size, size_t, new_size, int, may_move);
 #endif
 
 //#define __NR_setresuid                164

+ 2 - 3
libc/sysdeps/linux/common/wait.c

@@ -6,9 +6,8 @@
 
 /* Wait for a child to die.  When one does, put its status in *STAT_LOC
  * and return its process ID.  For errors, return (pid_t) -1.  */
-__pid_t wait (__WAIT_STATUS_DEFN stat_loc)
+__pid_t __libc_wait (__WAIT_STATUS_DEFN stat_loc)
 {
       return wait4 (WAIT_ANY, stat_loc, 0, (struct rusage *) NULL);
 }
-
-
+weak_alias(__libc_wait, wait)

+ 2 - 1
libc/sysdeps/linux/common/waitpid.c

@@ -4,7 +4,8 @@
 #include <sys/wait.h>
 #include <sys/resource.h>
 
-__pid_t waitpid(__pid_t pid, int *wait_stat, int options)
+__pid_t __libc_waitpid(__pid_t pid, int *wait_stat, int options)
 {
     return wait4(pid, wait_stat, options, NULL);
 }
+weak_alias(__libc_waitpid, waitpid)

+ 4 - 5
libc/sysdeps/linux/sh/longjmp.c

@@ -28,8 +28,7 @@
 /* Set the signal mask to the one specified in ENV, and jump
    to the position specified in ENV, causing the setjmp
    call there to return VAL, or 1 if VAL is 0.  */
-void
-__uClibc_siglongjmp (sigjmp_buf env, int val)
+void __libc_siglongjmp (sigjmp_buf env, int val)
 {
   if (env[0].__mask_was_saved)
     /* Restore the saved signal mask.  */
@@ -40,7 +39,7 @@ __uClibc_siglongjmp (sigjmp_buf env, int val)
   __longjmp (env[0].__jmpbuf, val ?: 1);
 }
 
-__asm__(".weak longjmp; longjmp = __uClibc_siglongjmp");
-__asm__(".weak _longjmp; _longjmp = __uClibc_siglongjmp");
-__asm__(".weak siglongjmp; siglongjmp = __uClibc_siglongjmp");
+__asm__(".weak longjmp; longjmp = __libc_siglongjmp");
+__asm__(".weak _longjmp; _longjmp = __libc_siglongjmp");
+__asm__(".weak siglongjmp; siglongjmp = __libc_siglongjmp");
 __asm__(".weak __sigprocmask; __sigprocmask = sigprocmask");

+ 2 - 1
libc/termios/termios.c

@@ -42,11 +42,12 @@ int isatty(int fd)
 
 #ifdef L_tcdrain
 /* Wait for pending output to be written on FD.  */
-int tcdrain (int fd)
+int __libc_tcdrain (int fd)
 {
       /* With an argument of 1, TCSBRK waits for the output to drain.  */
       return ioctl(fd, TCSBRK, 1);
 }
+weak_alias(__libc_tcdrain, tcdrain)
 #endif
 
 #ifdef L_tcflow