diff options
98 files changed, 203 insertions, 66 deletions
diff --git a/ldso/ldso/dl-elf.c b/ldso/ldso/dl-elf.c index 241d0222a..954f68126 100644 --- a/ldso/ldso/dl-elf.c +++ b/ldso/ldso/dl-elf.c @@ -797,6 +797,7 @@ void _dl_parse_dynamic_info(ElfW(Dyn) *dpnt, unsigned long dynamic_info[], void /* we want this in ldso.so and libdl.a but nowhere else */ #ifdef __USE_GNU #if defined IS_IN_rtld || (defined IS_IN_libdl && ! defined SHARED) +extern __typeof(dl_iterate_phdr) __dl_iterate_phdr; int __dl_iterate_phdr (int (*callback) (struct dl_phdr_info *info, size_t size, void *data), void *data) { diff --git a/ldso/ldso/ldso.c b/ldso/ldso/ldso.c index b1d3d8009..c3538426b 100644 --- a/ldso/ldso/ldso.c +++ b/ldso/ldso/ldso.c @@ -74,7 +74,8 @@ static int _dl_suid_ok(void); * can set an internal breakpoint on it, so that we are notified when the * address mapping is changed in some way. */ -void _dl_debug_state(void) +void _dl_debug_state(void); +void _dl_debug_state() { } diff --git a/ldso/libdl/libdl.c b/ldso/libdl/libdl.c index 37b1c3abd..5c542e8ad 100644 --- a/ldso/libdl/libdl.c +++ b/ldso/libdl/libdl.c @@ -125,7 +125,8 @@ static const char *dl_error_names[] = { "Unable to resolve symbol" }; -void __attribute__ ((destructor)) dl_cleanup(void) +void dl_cleanup(void) __attribute__ ((destructor)); +void dl_cleanup(void) { struct dyn_elf *d; for (d = _dl_handles; d; d = d->next_handle) { diff --git a/libc/inet/ntohl.c b/libc/inet/ntohl.c index 4fbdf7096..87a034bf0 100644 --- a/libc/inet/ntohl.c +++ b/libc/inet/ntohl.c @@ -22,43 +22,48 @@ #include <endian.h> #include <byteswap.h> +uint32_t ntohl (uint32_t x); +uint16_t ntohs (uint16_t x); +uint32_t htonl (uint32_t x); +uint16_t htons (uint16_t x); + #if __BYTE_ORDER == __BIG_ENDIAN -extern uint32_t ntohl (uint32_t x) +uint32_t ntohl (uint32_t x) { return x; } -extern uint16_t ntohs (uint16_t x) +uint16_t ntohs (uint16_t x) { return x; } -extern uint32_t htonl (uint32_t x) +uint32_t htonl (uint32_t x) { return x; } -extern uint16_t htons (uint16_t x) +uint16_t htons (uint16_t x) { return x; } #elif __BYTE_ORDER == __LITTLE_ENDIAN -extern uint32_t ntohl (uint32_t x) +uint32_t ntohl (uint32_t x) { return __bswap_32(x); } -extern uint16_t ntohs (uint16_t x) +uint16_t ntohs (uint16_t x) { return __bswap_16(x); } -extern uint32_t htonl (uint32_t x) +uint32_t htonl (uint32_t x) { return __bswap_32(x); } -extern uint16_t htons (uint16_t x) +uint16_t htons (uint16_t x) { return __bswap_16(x); } diff --git a/libc/inet/opensock.c b/libc/inet/opensock.c index 4db86bd7b..a2c09dcf5 100644 --- a/libc/inet/opensock.c +++ b/libc/inet/opensock.c @@ -29,7 +29,8 @@ libc_hidden_proto(socket) /* Return a socket of any type. The socket can be used in subsequent ioctl calls to talk to the kernel. */ -int attribute_hidden +int __opensock(void) attribute_hidden; +int __opensock (void) { int fd; diff --git a/libc/inet/resolv.c b/libc/inet/resolv.c index 0b479ee20..885413db8 100644 --- a/libc/inet/resolv.c +++ b/libc/inet/resolv.c @@ -600,7 +600,13 @@ int attribute_hidden __decode_answer(unsigned char *message, int offset, #endif #ifdef L_encodep -int attribute_hidden __encode_packet(struct resolv_header *h, +int __encode_packet(struct resolv_header *h, + struct resolv_question **q, + struct resolv_answer **an, + struct resolv_answer **ns, + struct resolv_answer **ar, + unsigned char *dest, int maxlen) attribute_hidden; +int __encode_packet(struct resolv_header *h, struct resolv_question **q, struct resolv_answer **an, struct resolv_answer **ns, @@ -657,13 +663,15 @@ int attribute_hidden __encode_packet(struct resolv_header *h, #endif #ifdef L_decodep -int attribute_hidden __decode_packet(unsigned char *data, struct resolv_header *h) +int __decode_packet(unsigned char *data, struct resolv_header *h) attribute_hidden; +int __decode_packet(unsigned char *data, struct resolv_header *h) { return __decode_header(data, h); } #endif #ifdef L_formquery +int __form_query(int id, const char *name, int type, unsigned char *packet, int maxlen); int __form_query(int id, const char *name, int type, unsigned char *packet, int maxlen) { diff --git a/libc/inet/rpc/create_xid.c b/libc/inet/rpc/create_xid.c index 3527eef17..3b90d7a48 100644 --- a/libc/inet/rpc/create_xid.c +++ b/libc/inet/rpc/create_xid.c @@ -41,7 +41,8 @@ static pthread_mutex_t createxid_lock = PTHREAD_MUTEX_INITIALIZER; static int is_initialized; static struct drand48_data __rpc_lrand48_data; -u_long attribute_hidden _create_xid (void) +u_long _create_xid (void) attribute_hidden; +u_long _create_xid (void) { unsigned long res; diff --git a/libc/inet/rpc/rcmd.c b/libc/inet/rpc/rcmd.c index 1bd511d26..6fcb01738 100644 --- a/libc/inet/rpc/rcmd.c +++ b/libc/inet/rpc/rcmd.c @@ -532,6 +532,7 @@ iruserok2 (raddr, superuser, ruser, luser, rhost) } /* This is the exported version. */ +int iruserok (u_int32_t raddr, int superuser, const char * ruser, const char * luser); int iruserok (u_int32_t raddr, int superuser, const char * ruser, const char * luser) { return iruserok2 (raddr, superuser, ruser, luser, "-"); @@ -550,6 +551,8 @@ int iruserok (u_int32_t raddr, int superuser, const char * ruser, const char * l * Returns 0 if ok, -1 if not ok. */ int +__ivaliduser(FILE *hostf, u_int32_t raddr, const char *luser, const char *ruser); +int __ivaliduser(FILE *hostf, u_int32_t raddr, const char *luser, const char *ruser) { return __ivaliduser2(hostf, raddr, luser, ruser, "-"); diff --git a/libc/inet/rpc/sa_len.c b/libc/inet/rpc/sa_len.c index 21a6417af..3b37eba44 100644 --- a/libc/inet/rpc/sa_len.c +++ b/libc/inet/rpc/sa_len.c @@ -31,7 +31,8 @@ #include <netrose/rose.h> #endif -int attribute_hidden __libc_sa_len (sa_family_t af) +int __libc_sa_len (sa_family_t af) attribute_hidden; +int __libc_sa_len (sa_family_t af) { switch (af) { diff --git a/libc/inet/rpc/svc_authux.c b/libc/inet/rpc/svc_authux.c index 3afcfc5d4..ef8476784 100644 --- a/libc/inet/rpc/svc_authux.c +++ b/libc/inet/rpc/svc_authux.c @@ -54,7 +54,8 @@ libc_hidden_proto(xdr_authunix_parms) /* * Unix longhand authenticator */ -attribute_hidden +enum auth_stat +_svcauth_unix (struct svc_req *rqst, struct rpc_msg *msg) attribute_hidden; enum auth_stat _svcauth_unix (struct svc_req *rqst, struct rpc_msg *msg) { @@ -153,7 +154,8 @@ done: * Looks up longhand in a cache. */ /*ARGSUSED */ -attribute_hidden +enum auth_stat +_svcauth_short (struct svc_req *rqst attribute_unused, struct rpc_msg *msg attribute_unused) attribute_hidden; enum auth_stat _svcauth_short (struct svc_req *rqst attribute_unused, struct rpc_msg *msg attribute_unused) { diff --git a/libc/inet/rpc/svc_simple.c b/libc/inet/rpc/svc_simple.c index a40f2b7b4..075b930b1 100644 --- a/libc/inet/rpc/svc_simple.c +++ b/libc/inet/rpc/svc_simple.c @@ -90,6 +90,8 @@ static void universal (struct svc_req *rqstp, SVCXPRT *transp_s); static SVCXPRT *transp; #endif +int registerrpc (u_long prognum, u_long versnum, u_long procnum, + char *(*progname) (char *), xdrproc_t inproc, xdrproc_t outproc); int registerrpc (u_long prognum, u_long versnum, u_long procnum, char *(*progname) (char *), xdrproc_t inproc, xdrproc_t outproc) diff --git a/libc/inet/rpc/svc_tcp.c b/libc/inet/rpc/svc_tcp.c index 8f2863f76..c94f2de07 100644 --- a/libc/inet/rpc/svc_tcp.c +++ b/libc/inet/rpc/svc_tcp.c @@ -232,6 +232,8 @@ svctcp_create (int sock, u_int sendsize, u_int recvsize) * descriptor as its first input. */ SVCXPRT * +svcfd_create (int fd, u_int sendsize, u_int recvsize); +SVCXPRT * svcfd_create (int fd, u_int sendsize, u_int recvsize) { return makefd_xprt (fd, sendsize, recvsize); diff --git a/libc/inet/rpc/svc_udp.c b/libc/inet/rpc/svc_udp.c index 4be2782fa..53ef7ab35 100644 --- a/libc/inet/rpc/svc_udp.c +++ b/libc/inet/rpc/svc_udp.c @@ -486,6 +486,7 @@ struct udp_cache * Enable use of the cache. * Note: there is no disable. */ +int svcudp_enablecache (SVCXPRT *transp, u_long size); int svcudp_enablecache (SVCXPRT *transp, u_long size) { diff --git a/libc/inet/rpc/svc_unix.c b/libc/inet/rpc/svc_unix.c index 4c538b2f1..d91a9acbb 100644 --- a/libc/inet/rpc/svc_unix.c +++ b/libc/inet/rpc/svc_unix.c @@ -231,6 +231,8 @@ svcunix_create (int sock, u_int sendsize, u_int recvsize, char *path) * descriptor as its first input. */ SVCXPRT * +svcunixfd_create (int fd, u_int sendsize, u_int recvsize); +SVCXPRT * svcunixfd_create (int fd, u_int sendsize, u_int recvsize) { return makefd_xprt (fd, sendsize, recvsize); diff --git a/libc/inet/socketcalls.c b/libc/inet/socketcalls.c index d1bfe4b98..01db8c319 100644 --- a/libc/inet/socketcalls.c +++ b/libc/inet/socketcalls.c @@ -35,6 +35,7 @@ extern int __socketcall(int call, unsigned long *args) attribute_hidden; #ifdef L_accept +extern __typeof(accept) __libc_accept; #ifdef __NR_accept #define __NR___libc_accept __NR_accept _syscall3(int, __libc_accept, int, call, struct sockaddr *, addr, socklen_t *,addrlen); @@ -73,6 +74,7 @@ libc_hidden_def(bind) #endif #ifdef L_connect +extern __typeof(connect) __libc_connect; #ifdef __NR_connect #define __NR___libc_connect __NR_connect _syscall3(int, __libc_connect, int, sockfd, const struct sockaddr *, saddr, socklen_t, addrlen); @@ -163,6 +165,7 @@ libc_hidden_def(listen) #endif #ifdef L_recv +extern __typeof(recv) __libc_recv; #ifdef __NR_recv #define __NR___libc_recv __NR_recv _syscall4(ssize_t, __libc_recv, int, sockfd, __ptr_t, buffer, size_t, len, int, flags); @@ -191,6 +194,7 @@ libc_hidden_def(recv) #endif #ifdef L_recvfrom +extern __typeof(recvfrom) __libc_recvfrom; #ifdef __NR_recvfrom #define __NR___libc_recvfrom __NR_recvfrom _syscall6(ssize_t, __libc_recvfrom, int, sockfd, __ptr_t, buffer, size_t, len, int, flags, @@ -217,6 +221,7 @@ libc_hidden_def(recvfrom) #endif #ifdef L_recvmsg +extern __typeof(recvmsg) __libc_recvmsg; #ifdef __NR_recvmsg #define __NR___libc_recvmsg __NR_recvmsg _syscall3(ssize_t, __libc_recvmsg, int, sockfd, struct msghdr *, msg, int, flags); @@ -237,6 +242,7 @@ libc_hidden_def(recvmsg) #endif #ifdef L_send +extern __typeof(send) __libc_send; #ifdef __NR_send #define __NR___libc_send __NR_send _syscall4(ssize_t, __libc_send, int, sockfd, const void *, buffer, size_t, len, int, flags); @@ -265,6 +271,7 @@ libc_hidden_def(send) #endif #ifdef L_sendmsg +extern __typeof(sendmsg) __libc_sendmsg; #ifdef __NR_sendmsg #define __NR___libc_sendmsg __NR_sendmsg _syscall3(ssize_t, __libc_sendmsg, int, sockfd, const struct msghdr *, msg, int, flags); @@ -285,6 +292,7 @@ libc_hidden_def(sendmsg) #endif #ifdef L_sendto +extern __typeof(sendto) __libc_sendto; #ifdef __NR_sendto #define __NR___libc_sendto __NR_sendto _syscall6(ssize_t, __libc_sendto, int, sockfd, const void *, buffer, size_t, len, diff --git a/libc/misc/error/error.c b/libc/misc/error/error.c index 4eda8defd..7e254ef1b 100644 --- a/libc/misc/error/error.c +++ b/libc/misc/error/error.c @@ -50,8 +50,8 @@ int error_one_per_line; function without parameters instead. */ void (*error_print_progname) (void) = NULL; - -attribute_hidden void __error (int status, int errnum, const char *message, ...) +extern __typeof(error) __error attribute_hidden; +void __error (int status, int errnum, const char *message, ...) { va_list args; @@ -69,7 +69,8 @@ attribute_hidden void __error (int status, int errnum, const char *message, ...) exit (status); } -attribute_hidden void __error_at_line (int status, int errnum, const char *file_name, +extern __typeof(error_at_line) __error_at_line attribute_hidden; +void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; @@ -105,7 +106,6 @@ attribute_hidden void __error_at_line (int status, int errnum, const char *file_ exit (status); } -#undef error -#undef error_at_line -strong_alias(__error,error) +/* psm: keep this weak, to many use this outside of libc */ +weak_alias(__error,error) strong_alias(__error_at_line,error_at_line) diff --git a/libc/misc/sysvipc/ipc.h b/libc/misc/sysvipc/ipc.h index 071e55f44..ffc07daf9 100644 --- a/libc/misc/sysvipc/ipc.h +++ b/libc/misc/sysvipc/ipc.h @@ -12,8 +12,8 @@ #ifdef __NR_ipc /* The actual system call: all functions are multiplexed by this. */ -extern int __syscall_ipc __P((unsigned int __call, int __first, int __second, - int __third, void *__ptr)) attribute_hidden; +extern int __syscall_ipc (unsigned int __call, int __first, int __second, + int __third, void *__ptr) attribute_hidden; /* The codes for the functions to use the multiplexer `__syscall_ipc'. */ diff --git a/libc/pwd_grp/lckpwdf.c b/libc/pwd_grp/lckpwdf.c index 1f1981ac5..69d2c6718 100644 --- a/libc/pwd_grp/lckpwdf.c +++ b/libc/pwd_grp/lckpwdf.c @@ -26,6 +26,7 @@ #include <unistd.h> #include <sys/file.h> #include <paths.h> +#include <shadow.h> libc_hidden_proto(memset) libc_hidden_proto(open) diff --git a/libc/signal/allocrtsig.c b/libc/signal/allocrtsig.c index 0bdbd2842..87fd9a641 100644 --- a/libc/signal/allocrtsig.c +++ b/libc/signal/allocrtsig.c @@ -55,6 +55,7 @@ int __libc_current_sigrtmax (void) /* Allocate real-time signal with highest/lowest available priority. Please note that we don't use a lock since we assume this function to be called at program start. */ +int __libc_allocate_rtsig (int high); int __libc_allocate_rtsig (int high) { if (current_rtmin == -1 || current_rtmin > current_rtmax) diff --git a/libc/signal/raise.c b/libc/signal/raise.c index c092cb12b..9761ac162 100644 --- a/libc/signal/raise.c +++ b/libc/signal/raise.c @@ -12,7 +12,8 @@ libc_hidden_proto(getpid) libc_hidden_proto(kill) -int attribute_hidden __raise(int signo) +int __raise (int signo) attribute_hidden; +int __raise(int signo) { return kill(getpid(), signo); } diff --git a/libc/signal/sigjmp.c b/libc/signal/sigjmp.c index 26eec738f..38892e050 100644 --- a/libc/signal/sigjmp.c +++ b/libc/signal/sigjmp.c @@ -27,7 +27,7 @@ libc_hidden_proto(sigprocmask) before doing a `__setjmp' on ENV[0].__jmpbuf. Always return zero. */ -attribute_hidden +int __sigjmp_save (sigjmp_buf env, int savemask) attribute_hidden; int __sigjmp_save (sigjmp_buf env, int savemask) { env[0].__mask_was_saved = (savemask && diff --git a/libc/signal/signal.c b/libc/signal/signal.c index 6a0beb9f7..991a14f1b 100644 --- a/libc/signal/signal.c +++ b/libc/signal/signal.c @@ -28,6 +28,7 @@ sigset_t _sigintr attribute_hidden; /* Set by siginterrupt. */ /* Set the handler for the signal SIG to HANDLER, returning the old handler, or SIG_ERR on error. */ +extern __typeof(bsd_signal) __bsd_signal; attribute_hidden __sighandler_t __bsd_signal (int sig, __sighandler_t handler) { diff --git a/libc/signal/sigwait.c b/libc/signal/sigwait.c index e309c3e8f..8ff2541a0 100644 --- a/libc/signal/sigwait.c +++ b/libc/signal/sigwait.c @@ -24,7 +24,8 @@ libc_hidden_proto(sigwaitinfo) -int attribute_hidden __sigwait (const sigset_t *set, int *sig) +int __sigwait (const sigset_t *set, int *sig) attribute_hidden; +int __sigwait (const sigset_t *set, int *sig) { int ret = 1; if ((ret = sigwaitinfo(set, NULL)) != -1) { diff --git a/libc/stdio/_fpmaxtostr.c b/libc/stdio/_fpmaxtostr.c index 859d11a54..9b87f64cf 100644 --- a/libc/stdio/_fpmaxtostr.c +++ b/libc/stdio/_fpmaxtostr.c @@ -203,7 +203,9 @@ static const __fpmax_t exp16_table[] = { #define FPO_STR_WIDTH (0x80 | ' '); #define FPO_STR_PREC 'p' -ssize_t attribute_hidden _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info, +ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info, + __fp_outfunc_t fp_outfunc) attribute_hidden; +ssize_t _fpmaxtostr(FILE * fp, __fpmax_t x, struct printf_info *info, __fp_outfunc_t fp_outfunc) { #ifdef __UCLIBC_HAS_HEXADECIMAL_FLOATS__ diff --git a/libc/stdio/_load_inttype.c b/libc/stdio/_load_inttype.c index e4dc61e9c..057f5f256 100644 --- a/libc/stdio/_load_inttype.c +++ b/libc/stdio/_load_inttype.c @@ -8,7 +8,8 @@ #include "_stdio.h" #include <printf.h> -uintmax_t attribute_hidden _load_inttype(int desttype, register const void *src, int uflag) +uintmax_t _load_inttype(int desttype, register const void *src, int uflag) attribute_hidden; +uintmax_t _load_inttype(int desttype, register const void *src, int uflag) { if (uflag >= 0) { /* unsigned */ #if LONG_MAX != INT_MAX diff --git a/libc/stdio/_store_inttype.c b/libc/stdio/_store_inttype.c index 82fb894c6..6eb74fe86 100644 --- a/libc/stdio/_store_inttype.c +++ b/libc/stdio/_store_inttype.c @@ -28,7 +28,8 @@ /* We assume int may be short or long, but short and long are different. */ -void attribute_hidden _store_inttype(register void *dest, int desttype, uintmax_t val) +void _store_inttype(register void *dest, int desttype, uintmax_t val) attribute_hidden; +void _store_inttype(register void *dest, int desttype, uintmax_t val) { if (desttype == __PA_FLAG_CHAR) { /* assume char not int */ *((unsigned char *) dest) = val; diff --git a/libc/stdlib/atexit.c b/libc/stdlib/atexit.c index d6bac6eee..cad25feb1 100644 --- a/libc/stdlib/atexit.c +++ b/libc/stdlib/atexit.c @@ -186,6 +186,7 @@ extern int __cxa_atexit (cxaefuncp func, void *arg, void *dso_handle) * with the same dso handle. Otherwise, if D is NULL, call all of the * registered handlers. */ +void __cxa_finalize (void *dso_handle); void __cxa_finalize (void *dso_handle) { struct exit_function *efp; diff --git a/libc/stdlib/drand48-iter.c b/libc/stdlib/drand48-iter.c index fc2a4ae9e..45aac678e 100644 --- a/libc/stdlib/drand48-iter.c +++ b/libc/stdlib/drand48-iter.c @@ -27,7 +27,8 @@ struct drand48_data __libc_drand48_data attribute_hidden; -int attribute_hidden +int __drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer) attribute_hidden; +int __drand48_iterate (unsigned short int xsubi[3], struct drand48_data *buffer) { uint64_t X; diff --git a/libc/stdlib/realpath.c b/libc/stdlib/realpath.c index f82676709..c3cc517de 100644 --- a/libc/stdlib/realpath.c +++ b/libc/stdlib/realpath.c @@ -18,6 +18,7 @@ #include <limits.h> /* for PATH_MAX */ #include <sys/param.h> /* for MAXPATHLEN */ #include <errno.h> +#include <stdlib.h> #include <sys/stat.h> /* for S_IFLNK */ diff --git a/libc/stdlib/setenv.c b/libc/stdlib/setenv.c index bf154035e..e7dc26053 100644 --- a/libc/stdlib/setenv.c +++ b/libc/stdlib/setenv.c @@ -52,7 +52,9 @@ static char **last_environ; must be used directly. This is all complicated by the fact that we try to reuse values once generated for a `setenv' call since we can never free the strings. */ -int attribute_hidden __add_to_environ (const char *name, const char *value, +int __add_to_environ (const char *name, const char *value, + const char *combined, int replace) attribute_hidden; +int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { register char **ep; diff --git a/libc/stdlib/system.c b/libc/stdlib/system.c index 89168cc73..5f85a0819 100644 --- a/libc/stdlib/system.c +++ b/libc/stdlib/system.c @@ -9,6 +9,7 @@ #include <signal.h> #include <unistd.h> #include <sys/wait.h> +#include <stdlib.h> libc_hidden_proto(_exit) libc_hidden_proto(wait4) @@ -18,12 +19,13 @@ libc_hidden_proto(vfork) /* uClinux-2.0 has vfork, but Linux 2.0 doesn't */ #include <sys/syscall.h> -#if ! defined __NR_vfork -#define vfork fork +#ifndef __NR_vfork +# define vfork fork libc_hidden_proto(fork) #endif -int __libc_system(char *command) +extern __typeof(system) __libc_system; +int __libc_system(const char *command) { int wait_val, pid; __sighandler_t save_quit, save_int, save_chld; diff --git a/libc/string/__xpg_basename.c b/libc/string/__xpg_basename.c index 6281f015c..2449d1d42 100644 --- a/libc/string/__xpg_basename.c +++ b/libc/string/__xpg_basename.c @@ -6,6 +6,7 @@ */ #include "_string.h" +#include <libgen.h> char *__xpg_basename(register char *path) { diff --git a/libc/string/dirname.c b/libc/string/dirname.c index a6242e238..6265e562e 100644 --- a/libc/string/dirname.c +++ b/libc/string/dirname.c @@ -6,6 +6,7 @@ */ #include "_string.h" +#include <libgen.h> char *dirname(char *path) { diff --git a/libc/string/psignal.c b/libc/string/psignal.c index c47277701..a852e6047 100644 --- a/libc/string/psignal.c +++ b/libc/string/psignal.c @@ -8,6 +8,7 @@ #include <features.h> #include <stdio.h> #include <string.h> +#include <signal.h> libc_hidden_proto(fprintf) libc_hidden_proto(strsignal) diff --git a/libc/string/strlcpy.c b/libc/string/strlcpy.c index e4f4c3152..e888b85b2 100644 --- a/libc/string/strlcpy.c +++ b/libc/string/strlcpy.c @@ -22,7 +22,9 @@ libc_hidden_proto(strlcpy) * Returns strlen(src), so truncation occurred if the return value is >= n. */ #ifdef WANT_WIDE -attribute_hidden +size_t Wstrlcpy(register Wchar *__restrict dst, + register const Wchar *__restrict src, + size_t n) attribute_hidden; #endif size_t Wstrlcpy(register Wchar *__restrict dst, register const Wchar *__restrict src, diff --git a/libc/sysdeps/linux/arm/__syscall_error.c b/libc/sysdeps/linux/arm/__syscall_error.c index 32f32e19d..2b642e816 100644 --- a/libc/sysdeps/linux/arm/__syscall_error.c +++ b/libc/sysdeps/linux/arm/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(int err_no) +int __syscall_error(int err_no) attribute_hidden; +int __syscall_error(int err_no) { __set_errno(-err_no); return -1; diff --git a/libc/sysdeps/linux/arm/sigaction.c b/libc/sysdeps/linux/arm/sigaction.c index 90797ba29..07de18420 100644 --- a/libc/sysdeps/linux/arm/sigaction.c +++ b/libc/sysdeps/linux/arm/sigaction.c @@ -29,6 +29,8 @@ extern void __default_sa_restorer(void); extern void __default_rt_sa_restorer(void); +extern __typeof(sigaction) __libc_sigaction; + /* When RT signals are in use we need to use a different return stub. */ #ifdef __NR_rt_sigreturn #define choose_restorer(flags) \ diff --git a/libc/sysdeps/linux/common/__socketcall.c b/libc/sysdeps/linux/common/__socketcall.c index 3e20f54f8..e3807cf06 100644 --- a/libc/sysdeps/linux/common/__socketcall.c +++ b/libc/sysdeps/linux/common/__socketcall.c @@ -10,5 +10,6 @@ #include "syscalls.h" #ifdef __NR_socketcall #define __NR___socketcall __NR_socketcall -attribute_hidden _syscall2(int, __socketcall, int, call, unsigned long *, args); +int __socketcall(int __call, unsigned long *__args) attribute_hidden; +_syscall2(int, __socketcall, int, call, unsigned long *, args); #endif diff --git a/libc/sysdeps/linux/common/__syscall_ipc.c b/libc/sysdeps/linux/common/__syscall_ipc.c index 6d1bb4b80..decc65ae5 100644 --- a/libc/sysdeps/linux/common/__syscall_ipc.c +++ b/libc/sysdeps/linux/common/__syscall_ipc.c @@ -11,6 +11,7 @@ #ifdef __NR_ipc #define __NR___syscall_ipc __NR_ipc -attribute_hidden _syscall5(int, __syscall_ipc, unsigned int, call, int, first, int, second, int, +#include "../../../misc/sysvipc/ipc.h" +_syscall5(int, __syscall_ipc, unsigned int, call, int, first, int, second, int, third, void *, ptr); #endif diff --git a/libc/sysdeps/linux/common/__syscall_rt_sigaction.c b/libc/sysdeps/linux/common/__syscall_rt_sigaction.c index 598761f01..cbf963633 100644 --- a/libc/sysdeps/linux/common/__syscall_rt_sigaction.c +++ b/libc/sysdeps/linux/common/__syscall_rt_sigaction.c @@ -12,9 +12,9 @@ #ifdef __NR_rt_sigaction #include <signal.h> +int __syscall_rt_sigaction (int __signum, const struct sigaction *__act, struct sigaction *__oldact, size_t __size) attribute_hidden; #define __NR___syscall_rt_sigaction __NR_rt_sigaction -#undef sigaction -attribute_hidden _syscall4(int, __syscall_rt_sigaction, int, signum, +_syscall4(int, __syscall_rt_sigaction, int, signum, const struct sigaction *, act, struct sigaction *, oldact, size_t, size); #endif diff --git a/libc/sysdeps/linux/common/__syscall_sigaction.c b/libc/sysdeps/linux/common/__syscall_sigaction.c index bb04b85bb..73d3b645f 100644 --- a/libc/sysdeps/linux/common/__syscall_sigaction.c +++ b/libc/sysdeps/linux/common/__syscall_sigaction.c @@ -12,8 +12,8 @@ #ifndef __NR_rt_sigaction #define __NR___syscall_sigaction __NR_sigaction #include <signal.h> -#undef sigaction -attribute_hidden _syscall3(int, __syscall_sigaction, int, signum, const struct sigaction *, +int __syscall_sigaction (int __signum, const struct sigaction *__act, struct sigaction *__oldact) attribute_hidden; +_syscall3(int, __syscall_sigaction, int, signum, const struct sigaction *, act, struct sigaction *, oldact); #endif diff --git a/libc/sysdeps/linux/common/capget.c b/libc/sysdeps/linux/common/capget.c index 4cdd7c210..8c28e51a5 100644 --- a/libc/sysdeps/linux/common/capget.c +++ b/libc/sysdeps/linux/common/capget.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +int capget(void *header, void *data); #ifdef __NR_capget _syscall2(int, capget, void *, header, void *, data); #else diff --git a/libc/sysdeps/linux/common/capset.c b/libc/sysdeps/linux/common/capset.c index 77b7ad9cb..bee720f92 100644 --- a/libc/sysdeps/linux/common/capset.c +++ b/libc/sysdeps/linux/common/capset.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +int capset(void *header, const void *data); #ifdef __NR_capset _syscall2(int, capset, void *, header, const void *, data); #else diff --git a/libc/sysdeps/linux/common/close.c b/libc/sysdeps/linux/common/close.c index bc4cc7e74..52566acda 100644 --- a/libc/sysdeps/linux/common/close.c +++ b/libc/sysdeps/linux/common/close.c @@ -10,6 +10,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(close) __libc_close; #define __NR___libc_close __NR_close _syscall1(int, __libc_close, int, fd); libc_hidden_proto(close) diff --git a/libc/sysdeps/linux/common/create_module.c b/libc/sysdeps/linux/common/create_module.c index 461ba5bc5..9a5c2d267 100644 --- a/libc/sysdeps/linux/common/create_module.c +++ b/libc/sysdeps/linux/common/create_module.c @@ -13,6 +13,8 @@ #ifdef __NR_create_module +unsigned long create_module(const char *name, size_t size); + #if defined(__UCLIBC_BROKEN_CREATE_MODULE__) # define __NR___create_module __NR_create_module static inline _syscall2(long, __create_module, const char *, name, size_t, size); @@ -46,6 +48,7 @@ _syscall2(unsigned long, create_module, const char *, name, size_t, size); #endif #else /* !__NR_create_module */ +caddr_t create_module(const char *name attribute_unused, size_t size attribute_unused); caddr_t create_module(const char *name attribute_unused, size_t size attribute_unused) { __set_errno(ENOSYS); diff --git a/libc/sysdeps/linux/common/delete_module.c b/libc/sysdeps/linux/common/delete_module.c index 96f5ab492..66a1610d3 100644 --- a/libc/sysdeps/linux/common/delete_module.c +++ b/libc/sysdeps/linux/common/delete_module.c @@ -7,6 +7,7 @@ */ #include "syscalls.h" +int delete_module(const char *name); #ifdef __NR_delete_module _syscall1(int, delete_module, const char *, name); #else diff --git a/libc/sysdeps/linux/common/fork.c b/libc/sysdeps/linux/common/fork.c index eb4001f7e..a4e623900 100644 --- a/libc/sysdeps/linux/common/fork.c +++ b/libc/sysdeps/linux/common/fork.c @@ -12,6 +12,7 @@ #ifdef __ARCH_HAS_MMU__ #ifdef __NR_fork +extern __typeof(fork) __libc_fork; #define __NR___libc_fork __NR_fork _syscall0(pid_t, __libc_fork); libc_hidden_proto(fork) diff --git a/libc/sysdeps/linux/common/fsync.c b/libc/sysdeps/linux/common/fsync.c index 6db63527a..677f3e3d6 100644 --- a/libc/sysdeps/linux/common/fsync.c +++ b/libc/sysdeps/linux/common/fsync.c @@ -10,6 +10,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(fsync) __libc_fsync; #define __NR___libc_fsync __NR_fsync _syscall1(int, __libc_fsync, int, fd); weak_alias(__libc_fsync, fsync) diff --git a/libc/sysdeps/linux/common/get_kernel_syms.c b/libc/sysdeps/linux/common/get_kernel_syms.c index d00152686..2c2d9c028 100644 --- a/libc/sysdeps/linux/common/get_kernel_syms.c +++ b/libc/sysdeps/linux/common/get_kernel_syms.c @@ -10,6 +10,7 @@ #include "syscalls.h" struct kernel_sym; +int get_kernel_syms(struct kernel_sym *table attribute_unused); #ifdef __NR_get_kernel_syms _syscall1(int, get_kernel_syms, struct kernel_sym *, table); #else diff --git a/libc/sysdeps/linux/common/getpagesize.c b/libc/sysdeps/linux/common/getpagesize.c index 1f2937bb6..4a35d0775 100644 --- a/libc/sysdeps/linux/common/getpagesize.c +++ b/libc/sysdeps/linux/common/getpagesize.c @@ -25,6 +25,7 @@ libc_hidden_proto(__pagesize) /* Return the system page size. */ /* couldn't make __getpagesize hidden, because shm.h uses it in a macro */ +extern __typeof(getpagesize) __getpagesize; int __getpagesize(void) { if (__pagesize != 0) diff --git a/libc/sysdeps/linux/common/getpgid.c b/libc/sysdeps/linux/common/getpgid.c index c71be810b..6cdaef172 100644 --- a/libc/sysdeps/linux/common/getpgid.c +++ b/libc/sysdeps/linux/common/getpgid.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +#include <unistd.h> #define __NR___syscall_getpgid __NR_getpgid static inline _syscall1(__kernel_pid_t, __syscall_getpgid, __kernel_pid_t, pid); diff --git a/libc/sysdeps/linux/common/getpid.c b/libc/sysdeps/linux/common/getpid.c index d2e5a33e6..a966a531e 100644 --- a/libc/sysdeps/linux/common/getpid.c +++ b/libc/sysdeps/linux/common/getpid.c @@ -10,6 +10,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(getpid) __libc_getpid; #if defined __NR_getxpid # define __NR_getpid __NR_getxpid #endif diff --git a/libc/sysdeps/linux/common/getresgid.c b/libc/sysdeps/linux/common/getresgid.c index d6ad980a2..b7f1cbc6c 100644 --- a/libc/sysdeps/linux/common/getresgid.c +++ b/libc/sysdeps/linux/common/getresgid.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +#include <unistd.h> #ifdef __NR_getresgid # define __NR___syscall_getresgid __NR_getresgid diff --git a/libc/sysdeps/linux/common/getresuid.c b/libc/sysdeps/linux/common/getresuid.c index 7e087d8dd..37b5191c1 100644 --- a/libc/sysdeps/linux/common/getresuid.c +++ b/libc/sysdeps/linux/common/getresuid.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +#include <unistd.h> #ifdef __NR_getresuid # define __NR___syscall_getresuid __NR_getresuid diff --git a/libc/sysdeps/linux/common/init_module.c b/libc/sysdeps/linux/common/init_module.c index 558a59708..3fb566961 100644 --- a/libc/sysdeps/linux/common/init_module.c +++ b/libc/sysdeps/linux/common/init_module.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +int init_module(void *first, void *second, void *third, void *fourth, void *fifth); #ifdef __NR_init_module /* This may have 5 arguments (for old 2.0 kernels) or 2 arguments * (for 2.2 and 2.4 kernels). Use the greatest common denominator, diff --git a/libc/sysdeps/linux/common/ioperm.c b/libc/sysdeps/linux/common/ioperm.c index 61794bb1b..d4795f526 100644 --- a/libc/sysdeps/linux/common/ioperm.c +++ b/libc/sysdeps/linux/common/ioperm.c @@ -9,5 +9,6 @@ #include "syscalls.h" #if defined __ARCH_HAS_MMU__ && defined __NR_ioperm +#include <sys/perm.h> _syscall3(int, ioperm, unsigned long, from, unsigned long, num, int, turn_on); #endif diff --git a/libc/sysdeps/linux/common/iopl.c b/libc/sysdeps/linux/common/iopl.c index 5d5cffb16..4f21b55f5 100644 --- a/libc/sysdeps/linux/common/iopl.c +++ b/libc/sysdeps/linux/common/iopl.c @@ -10,5 +10,6 @@ #include "syscalls.h" /* Tuns out the m68k unistd.h kernel header is broken */ #if defined __ARCH_HAS_MMU__ && defined __NR_iopl && ( !defined(__mc68000__)) +#include <sys/perm.h> _syscall1(int, iopl, int, level); #endif diff --git a/libc/sysdeps/linux/common/klogctl.c b/libc/sysdeps/linux/common/klogctl.c index a77e4cb96..5e36104f1 100644 --- a/libc/sysdeps/linux/common/klogctl.c +++ b/libc/sysdeps/linux/common/klogctl.c @@ -9,6 +9,7 @@ #include "syscalls.h" #include <unistd.h> +#include <sys/klog.h> #define __NR__syslog __NR_syslog static inline _syscall3(int, _syslog, int, type, char *, buf, int, len); int klogctl(int type, char *buf, int len) diff --git a/libc/sysdeps/linux/common/llseek.c b/libc/sysdeps/linux/common/llseek.c index 429a58212..6a8d000d2 100644 --- a/libc/sysdeps/linux/common/llseek.c +++ b/libc/sysdeps/linux/common/llseek.c @@ -10,6 +10,8 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(lseek64) __libc_lseek64; + #if defined __NR__llseek && defined __UCLIBC_HAS_LFS__ # ifndef INLINE_SYSCALL diff --git a/libc/sysdeps/linux/common/longjmp.c b/libc/sysdeps/linux/common/longjmp.c index c3ed98a7a..a54f01f48 100644 --- a/libc/sysdeps/linux/common/longjmp.c +++ b/libc/sysdeps/linux/common/longjmp.c @@ -25,10 +25,11 @@ libc_hidden_proto(sigprocmask) extern void __longjmp (__jmp_buf __env, int __val) attribute_noreturn; libc_hidden_proto(__longjmp) +extern __typeof(longjmp) __libc_longjmp attribute_noreturn; /* 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 attribute_noreturn __libc_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. */ diff --git a/libc/sysdeps/linux/common/madvise.c b/libc/sysdeps/linux/common/madvise.c index fa4f38046..70ed9c4cb 100644 --- a/libc/sysdeps/linux/common/madvise.c +++ b/libc/sysdeps/linux/common/madvise.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +#include <sys/mman.h> #ifdef __NR_madvise _syscall3(int, madvise, void *, __addr, size_t, __len, int, __advice); #endif diff --git a/libc/sysdeps/linux/common/mincore.c b/libc/sysdeps/linux/common/mincore.c index 530f7b67d..0e3ade1ce 100644 --- a/libc/sysdeps/linux/common/mincore.c +++ b/libc/sysdeps/linux/common/mincore.c @@ -8,6 +8,7 @@ #include "syscalls.h" #include <unistd.h> +#include <sys/mman.h> #ifdef __NR_mincore _syscall3(int, mincore, void *, start, size_t, length, unsigned char *, vec); diff --git a/libc/sysdeps/linux/common/modify_ldt.c b/libc/sysdeps/linux/common/modify_ldt.c index 3df6379b0..9ebb68b3c 100644 --- a/libc/sysdeps/linux/common/modify_ldt.c +++ b/libc/sysdeps/linux/common/modify_ldt.c @@ -9,6 +9,7 @@ #include "syscalls.h" +int modify_ldt (int func, void *ptr, unsigned long bytecount); #ifdef __NR_modify_ldt _syscall3(int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount); #endif diff --git a/libc/sysdeps/linux/common/msync.c b/libc/sysdeps/linux/common/msync.c index d9d733466..494d4afd3 100644 --- a/libc/sysdeps/linux/common/msync.c +++ b/libc/sysdeps/linux/common/msync.c @@ -11,6 +11,7 @@ #include <unistd.h> #include <sys/mman.h> +extern __typeof(msync) __libc_msync; #define __NR___libc_msync __NR_msync _syscall3(int, __libc_msync, void *, addr, size_t, length, int, flags); weak_alias(__libc_msync,msync) diff --git a/libc/sysdeps/linux/common/nanosleep.c b/libc/sysdeps/linux/common/nanosleep.c index e400a06c5..1724540ed 100644 --- a/libc/sysdeps/linux/common/nanosleep.c +++ b/libc/sysdeps/linux/common/nanosleep.c @@ -10,7 +10,7 @@ #include "syscalls.h" #include <time.h> - +extern __typeof(nanosleep) __libc_nanosleep; #define __NR___libc_nanosleep __NR_nanosleep _syscall2(int, __libc_nanosleep, const struct timespec *, req, struct timespec *, rem); diff --git a/libc/sysdeps/linux/common/noophooks.c b/libc/sysdeps/linux/common/noophooks.c index b8c33eeac..a6c9d7673 100644 --- a/libc/sysdeps/linux/common/noophooks.c +++ b/libc/sysdeps/linux/common/noophooks.c @@ -21,6 +21,8 @@ #include <libc-internal.h> void +__cyg_profile_func_enter (attribute_unused void *this_fn, attribute_unused void *call_site); +void __cyg_profile_func_enter (attribute_unused void *this_fn, attribute_unused void *call_site) { } diff --git a/libc/sysdeps/linux/common/open64.c b/libc/sysdeps/linux/common/open64.c index 3fca783cd..cd4ce64ec 100644 --- a/libc/sysdeps/linux/common/open64.c +++ b/libc/sysdeps/linux/common/open64.c @@ -14,6 +14,7 @@ # define O_LARGEFILE 0100000 #endif +extern __typeof(open64) __libc_open64; extern __typeof(open) __libc_open; libc_hidden_proto(__libc_open) diff --git a/libc/sysdeps/linux/common/pause.c b/libc/sysdeps/linux/common/pause.c index ac39105a1..751b6b6a9 100644 --- a/libc/sysdeps/linux/common/pause.c +++ b/libc/sysdeps/linux/common/pause.c @@ -11,6 +11,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(pause) __libc_pause; #ifdef __NR_pause #define __NR___libc_pause __NR_pause _syscall0(int, __libc_pause); diff --git a/libc/sysdeps/linux/common/pivot_root.c b/libc/sysdeps/linux/common/pivot_root.c index a182df9b4..f5d1f1d7f 100644 --- a/libc/sysdeps/linux/common/pivot_root.c +++ b/libc/sysdeps/linux/common/pivot_root.c @@ -9,6 +9,7 @@ #include "syscalls.h" +int pivot_root(const char *new_root, const char *put_old); #ifdef __NR_pivot_root _syscall2(int, pivot_root, const char *, new_root, const char *, put_old); #else diff --git a/libc/sysdeps/linux/common/prctl.c b/libc/sysdeps/linux/common/prctl.c index a75ac2cf5..479c9657a 100644 --- a/libc/sysdeps/linux/common/prctl.c +++ b/libc/sysdeps/linux/common/prctl.c @@ -9,5 +9,6 @@ #include "syscalls.h" #include <stdarg.h> -//#include <sys/prctl.h> +/* psm: including sys/prctl.h would depend on kernel headers */ +extern int prctl (int, int, int, int, int); _syscall5(int, prctl, int, a, int, b, int, c, int, d, int, e); diff --git a/libc/sysdeps/linux/common/pread_write.c b/libc/sysdeps/linux/common/pread_write.c index f1b6cb867..119abe9ea 100644 --- a/libc/sysdeps/linux/common/pread_write.c +++ b/libc/sysdeps/linux/common/pread_write.c @@ -17,6 +17,13 @@ #include <unistd.h> #include <stdint.h> +extern __typeof(pread) __libc_pread; +extern __typeof(pwrite) __libc_pwrite; +#ifdef __UCLIBC_HAS_LFS__ +extern __typeof(pread64) __libc_pread64; +extern __typeof(pwrite64) __libc_pwrite64; +#endif + #ifdef __NR_pread # define __NR___syscall_pread __NR_pread diff --git a/libc/sysdeps/linux/common/query_module.c b/libc/sysdeps/linux/common/query_module.c index e65e32d7f..ac77f7e18 100644 --- a/libc/sysdeps/linux/common/query_module.c +++ b/libc/sysdeps/linux/common/query_module.c @@ -8,6 +8,8 @@ */ #include "syscalls.h" +int query_module(const char *name attribute_unused, int which attribute_unused, + void *buf attribute_unused, size_t bufsize attribute_unused, size_t * ret attribute_unused); #ifdef __NR_query_module _syscall5(int, query_module, const char *, name, int, which, void *, buf, size_t, bufsize, size_t *, ret); diff --git a/libc/sysdeps/linux/common/read.c b/libc/sysdeps/linux/common/read.c index 769814c0c..9dfac1939 100644 --- a/libc/sysdeps/linux/common/read.c +++ b/libc/sysdeps/linux/common/read.c @@ -10,6 +10,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(read) __libc_read; #define __NR___libc_read __NR_read _syscall3(ssize_t, __libc_read, int, fd, __ptr_t, buf, size_t, count); libc_hidden_proto(read) diff --git a/libc/sysdeps/linux/common/reboot.c b/libc/sysdeps/linux/common/reboot.c index 8347ebfe8..a015d40ad 100644 --- a/libc/sysdeps/linux/common/reboot.c +++ b/libc/sysdeps/linux/common/reboot.c @@ -8,6 +8,7 @@ */ #include "syscalls.h" +#include <sys/reboot.h> #define __NR__reboot __NR_reboot static inline _syscall3(int, _reboot, int, magic, int, magic2, int, flag); int reboot(int flag) diff --git a/libc/sysdeps/linux/common/ssp-local.c b/libc/sysdeps/linux/common/ssp-local.c index 091c34c5d..202d956a5 100644 --- a/libc/sysdeps/linux/common/ssp-local.c +++ b/libc/sysdeps/linux/common/ssp-local.c @@ -28,8 +28,8 @@ extern void __stack_chk_fail (void) attribute_noreturn; /* On some architectures, this helps needless PIC pointer setup that would be needed just for the __stack_chk_fail call. */ -void attribute_noreturn attribute_hidden -__stack_chk_fail_local (void) +void __stack_chk_fail_local (void) attribute_noreturn attribute_hidden; +void __stack_chk_fail_local (void) { __stack_chk_fail (); } diff --git a/libc/sysdeps/linux/common/ssp.c b/libc/sysdeps/linux/common/ssp.c index 33d84e5eb..16b9f9c10 100644 --- a/libc/sysdeps/linux/common/ssp.c +++ b/libc/sysdeps/linux/common/ssp.c @@ -80,8 +80,8 @@ static attribute_noreturn void terminate(void) _exit(127); } -void attribute_noreturn __stack_smash_handler(char func[], int damaged __attribute__ ((unused))); -void attribute_noreturn __stack_smash_handler(char func[], int damaged) +void __stack_smash_handler(char func[], int damaged __attribute__ ((unused))) attribute_noreturn; +void __stack_smash_handler(char func[], int damaged) { static const char message[] = ": stack smashing attack in function "; @@ -94,7 +94,8 @@ void attribute_noreturn __stack_smash_handler(char func[], int damaged) terminate(); } -void attribute_noreturn __stack_chk_fail(void) +void __stack_chk_fail(void) attribute_noreturn; +void __stack_chk_fail(void) { static const char msg1[] = "stack smashing detected: "; static const char msg3[] = " terminated"; @@ -109,7 +110,8 @@ void attribute_noreturn __stack_chk_fail(void) } #if 0 -void attribute_noreturn __chk_fail(void) +void __chk_fail(void) attribute_noreturn; +void __chk_fail(void) { static const char msg1[] = "buffer overflow detected: "; static const char msg3[] = " terminated"; diff --git a/libc/sysdeps/linux/common/sysctl.c b/libc/sysdeps/linux/common/sysctl.c index 8359577bc..0d6f49185 100644 --- a/libc/sysdeps/linux/common/sysctl.c +++ b/libc/sysdeps/linux/common/sysctl.c @@ -8,6 +8,10 @@ */ #include "syscalls.h" +/* psm: including sys/sysctl.h would depend on kernel headers */ +extern int sysctl (int *__name, int __nlen, void *__oldval, + size_t *__oldlenp, void *__newval, size_t __newlen) __THROW; + struct __sysctl_args { int *name; int nlen; diff --git a/libc/sysdeps/linux/common/uselib.c b/libc/sysdeps/linux/common/uselib.c index 952169f90..3ccde1de4 100644 --- a/libc/sysdeps/linux/common/uselib.c +++ b/libc/sysdeps/linux/common/uselib.c @@ -10,5 +10,6 @@ #include "syscalls.h" #include <unistd.h> #ifdef __NR_uselib +int uselib (const char *library); _syscall1(int, uselib, const char *, library); #endif diff --git a/libc/sysdeps/linux/common/wait.c b/libc/sysdeps/linux/common/wait.c index 3d30d3d0f..39d0e47b9 100644 --- a/libc/sysdeps/linux/common/wait.c +++ b/libc/sysdeps/linux/common/wait.c @@ -12,6 +12,8 @@ libc_hidden_proto(wait4) +extern __typeof(wait) __libc_wait; + /* 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 __libc_wait (__WAIT_STATUS_DEFN stat_loc) diff --git a/libc/sysdeps/linux/common/waitpid.c b/libc/sysdeps/linux/common/waitpid.c index ae3aa5d34..c9ca97c53 100644 --- a/libc/sysdeps/linux/common/waitpid.c +++ b/libc/sysdeps/linux/common/waitpid.c @@ -11,7 +11,8 @@ #include <sys/resource.h> libc_hidden_proto(wait4) - + +extern __typeof(waitpid) __libc_waitpid; __pid_t __libc_waitpid(__pid_t pid, int *wait_stat, int options) { return wait4(pid, wait_stat, options, NULL); diff --git a/libc/sysdeps/linux/common/write.c b/libc/sysdeps/linux/common/write.c index 67e50cc20..680a5d130 100644 --- a/libc/sysdeps/linux/common/write.c +++ b/libc/sysdeps/linux/common/write.c @@ -10,6 +10,7 @@ #include "syscalls.h" #include <unistd.h> +extern __typeof(write) __libc_write; #define __NR___libc_write __NR_write _syscall3(ssize_t, __libc_write, int, fd, const __ptr_t, buf, size_t, count); libc_hidden_proto(write) diff --git a/libc/sysdeps/linux/common/xattr.c b/libc/sysdeps/linux/common/xattr.c index 259ccc155..6e4e7fa92 100644 --- a/libc/sysdeps/linux/common/xattr.c +++ b/libc/sysdeps/linux/common/xattr.c @@ -23,6 +23,7 @@ #include "syscalls.h" #include <unistd.h> +#include <sys/xattr.h> /* sets */ #ifdef __NR_setxattr @@ -122,7 +123,7 @@ ssize_t llistxattr(__const char *__path, char *__list, size_t __size) #endif #ifdef __NR_flistxattr -_syscall3(size_t, flistxattr, int, filedes, char *, list, size_t, size); +_syscall3(ssize_t, flistxattr, int, filedes, char *, list, size_t, size); #else ssize_t flistxattr(int __fd, char *__list, size_t __size) { diff --git a/libc/sysdeps/linux/hppa/__syscall_error.c b/libc/sysdeps/linux/hppa/__syscall_error.c index 7d24ed233..5e109a83b 100644 --- a/libc/sysdeps/linux/hppa/__syscall_error.c +++ b/libc/sysdeps/linux/hppa/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(int err_no) +int __syscall_error(int err_no) attribute_hidden; +int __syscall_error(int err_no) { __set_errno(err_no); return -1; diff --git a/libc/sysdeps/linux/i386/__syscall_error.c b/libc/sysdeps/linux/i386/__syscall_error.c index 63540540e..7509d4409 100644 --- a/libc/sysdeps/linux/i386/__syscall_error.c +++ b/libc/sysdeps/linux/i386/__syscall_error.c @@ -25,7 +25,8 @@ #include <errno.h> #include <features.h> -int attribute_hidden __syscall_error(void) +int __syscall_error(void) attribute_hidden; +int __syscall_error(void) { register int edx __asm__ ("%edx"); __asm__ ("mov %eax, %edx\n\t" diff --git a/libc/sysdeps/linux/i386/sigaction.c b/libc/sysdeps/linux/i386/sigaction.c index 8d7ba2127..edabe3f9d 100644 --- a/libc/sysdeps/linux/i386/sigaction.c +++ b/libc/sysdeps/linux/i386/sigaction.c @@ -27,6 +27,7 @@ #define SA_RESTORER 0x04000000 +extern __typeof(sigaction) __libc_sigaction; #if defined __NR_rt_sigaction libc_hidden_proto(memcpy) diff --git a/libc/sysdeps/linux/m68k/__syscall_error.c b/libc/sysdeps/linux/m68k/__syscall_error.c index c0aa33b16..5cfdead8b 100644 --- a/libc/sysdeps/linux/m68k/__syscall_error.c +++ b/libc/sysdeps/linux/m68k/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(void) +int __syscall_error(void) attribute_hidden; +int __syscall_error(void) { register int err_no asm("%d0"); __set_errno(-err_no); diff --git a/libc/sysdeps/linux/mips/__longjmp.c b/libc/sysdeps/linux/mips/__longjmp.c index 7366fc22d..ee9c455cc 100644 --- a/libc/sysdeps/linux/mips/__longjmp.c +++ b/libc/sysdeps/linux/mips/__longjmp.c @@ -28,7 +28,7 @@ extern void __longjmp (__jmp_buf __env, int __val) attribute_noreturn; libc_hidden_proto(__longjmp) -void attribute_noreturn __longjmp (__jmp_buf env, int val_arg) +void __longjmp (__jmp_buf env, int val_arg) { /* gcc 1.39.19 miscompiled the longjmp routine (as it did setjmp before the hack around it); force it to use $a1 for the longjmp value. diff --git a/libc/sysdeps/linux/mips/__syscall_error.c b/libc/sysdeps/linux/mips/__syscall_error.c index 7d24ed233..5e109a83b 100644 --- a/libc/sysdeps/linux/mips/__syscall_error.c +++ b/libc/sysdeps/linux/mips/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(int err_no) +int __syscall_error(int err_no) attribute_hidden; +int __syscall_error(int err_no) { __set_errno(err_no); return -1; diff --git a/libc/sysdeps/linux/mips/sigaction.c b/libc/sysdeps/linux/mips/sigaction.c index f881fac5d..85cdabe79 100644 --- a/libc/sysdeps/linux/mips/sigaction.c +++ b/libc/sysdeps/linux/mips/sigaction.c @@ -27,8 +27,9 @@ #define SA_RESTORER 0x04000000 +extern __typeof(sigaction) __libc_sigaction; -#if defined __NR_rt_sigaction +#ifdef __NR_rt_sigaction libc_hidden_proto(memcpy) diff --git a/libc/sysdeps/linux/powerpc/__syscall_error.c b/libc/sysdeps/linux/powerpc/__syscall_error.c index 7d24ed233..5e109a83b 100644 --- a/libc/sysdeps/linux/powerpc/__syscall_error.c +++ b/libc/sysdeps/linux/powerpc/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(int err_no) +int __syscall_error(int err_no) attribute_hidden; +int __syscall_error(int err_no) { __set_errno(err_no); return -1; diff --git a/libc/sysdeps/linux/sparc/__syscall_error.c b/libc/sysdeps/linux/sparc/__syscall_error.c index 7d24ed233..5e109a83b 100644 --- a/libc/sysdeps/linux/sparc/__syscall_error.c +++ b/libc/sysdeps/linux/sparc/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(int err_no) +int __syscall_error(int err_no) attribute_hidden; +int __syscall_error(int err_no) { __set_errno(err_no); return -1; diff --git a/libc/sysdeps/linux/x86_64/__syscall_error.c b/libc/sysdeps/linux/x86_64/__syscall_error.c index 0b82faacb..ff2d9f64c 100644 --- a/libc/sysdeps/linux/x86_64/__syscall_error.c +++ b/libc/sysdeps/linux/x86_64/__syscall_error.c @@ -10,7 +10,8 @@ /* This routine is jumped to by all the syscall handlers, to stash * an error number into errno. */ -int attribute_hidden __syscall_error(void) +int __syscall_error(void) attribute_hidden; +int __syscall_error(void) { register int err_no asm("%rax"); __set_errno(-err_no); diff --git a/libc/sysdeps/linux/x86_64/sigaction.c b/libc/sysdeps/linux/x86_64/sigaction.c index 63d146136..b8d3861a4 100644 --- a/libc/sysdeps/linux/x86_64/sigaction.c +++ b/libc/sysdeps/linux/x86_64/sigaction.c @@ -33,7 +33,9 @@ /* We do not globally define the SA_RESTORER flag so do it here. */ #define SA_RESTORER 0x04000000 -#if defined __NR_rt_sigaction +extern __typeof(sigaction) __libc_sigaction; + +#ifdef __NR_rt_sigaction /* Using the hidden attribute here does not change the code but it helps to avoid warnings. */ extern void restore_rt (void) asm ("__restore_rt") attribute_hidden; diff --git a/libc/termios/tcdrain.c b/libc/termios/tcdrain.c index 839edd81a..a13374cb5 100644 --- a/libc/termios/tcdrain.c +++ b/libc/termios/tcdrain.c @@ -22,6 +22,7 @@ libc_hidden_proto(ioctl) +extern __typeof(tcdrain) __libc_tcdrain; /* Wait for pending output to be written on FD. */ int __libc_tcdrain (int fd) { diff --git a/libc/unistd/getlogin.c b/libc/unistd/getlogin.c index 778b8f1e6..296d8d7fc 100644 --- a/libc/unistd/getlogin.c +++ b/libc/unistd/getlogin.c @@ -23,6 +23,7 @@ #include <stdlib.h> #include <string.h> #include <unistd.h> +#include <stdio.h> libc_hidden_proto(strcpy) libc_hidden_proto(strncpy) diff --git a/libcrypt/des.c b/libcrypt/des.c index 80e513183..3f6b382bb 100644 --- a/libcrypt/des.c +++ b/libcrypt/des.c @@ -638,7 +638,8 @@ encrypt(char *block, int flag) block[(i << 5) | j] = (io[i] & bits32[j]) ? 1 : 0; } -char attribute_hidden * +char *__des_crypt(const char *key, const char *setting) attribute_hidden; +char * __des_crypt(const char *key, const char *setting) { u_int32_t count, salt, l, r0, r1, keybuf[2]; diff --git a/libm/w_gamma_r.c b/libm/w_gamma_r.c index 8dc6cefbb..321e86480 100644 --- a/libm/w_gamma_r.c +++ b/libm/w_gamma_r.c @@ -22,6 +22,7 @@ static char rcsid[] = "$NetBSD: w_gamma_r.c,v 1.7 1995/11/20 22:06:45 jtc Exp $" #include "math_private.h" +double gamma_r(double x, int *signgamp); #ifdef __STDC__ double gamma_r(double x, int *signgamp) /* wrapper lgamma_r */ #else diff --git a/libpthread/linuxthreads.old/internals.h b/libpthread/linuxthreads.old/internals.h index 87ff1c194..bc15bdff5 100644 --- a/libpthread/linuxthreads.old/internals.h +++ b/libpthread/linuxthreads.old/internals.h @@ -470,6 +470,8 @@ void __fresetlockfiles(void); void __pthread_manager_adjust_prio(int thread_prio); void __pthread_initialize_minimal (void); +extern void __pthread_exit (void *retval); + extern int __pthread_attr_setguardsize __P ((pthread_attr_t *__attr, size_t __guardsize)); extern int __pthread_attr_getguardsize __P ((__const pthread_attr_t *__attr, |