diff --git a/ChangeLog b/ChangeLog index d2d72db499..394789a143 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,23 @@ 2002-08-29 Roland McGrath + * sysdeps/mach/_strerror.c (__strerror_r): Add libc_hidden_def. + + * sysdeps/mach/hurd/pwrite64.c: No libc_hidden_def (__libc_pwrite64). + + * sysdeps/mach/hurd/dl-sysdep.c (__GI_abort): Define alias for abort. + + * include/assert.h (__assert_perror_fail): Declare it, do hidden_proto. + * assert/assert-perr.c: Add libc_hidden_def. + * elf/dl-minimal.c [! NDEBUG] (__assert_perror_fail): New function. + + * sysdeps/gnu/errlist-compat.awk: Don't fail if there are no versions + found at all. + * sysdeps/gnu/Versions: File removed. Moved all #errlist-compat + sys_errlist stuff to ... + * sysdeps/unix/sysv/linux/Versions: ... here. + + * mach/mach.h: Include . + * elf/dl-runtime.c (IN_DL_RUNTIME): Define this macro first thing. * sysdeps/i386/dl-machine.h: Only declare fixup, profile_fixup and define ELF_MACHINE_RUNTIME_TRAMPOLINE under #ifdef IN_DL_RUNTIME. diff --git a/assert/assert-perr.c b/assert/assert-perr.c index 1144530640..3017c9fd9c 100644 --- a/assert/assert-perr.c +++ b/assert/assert-perr.c @@ -83,3 +83,4 @@ __assert_perror_fail (int errnum, abort (); } +libc_hidden_def (__assert_perror_fail) diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 893a3b1f2e..f4b7e28782 100644 --- a/elf/dl-minimal.c +++ b/elf/dl-minimal.c @@ -209,6 +209,19 @@ Inconsistency detected by ld.so: %s: %u: %s%sAssertion `%s' failed!\n", } rtld_hidden_weak(__assert_fail) +void weak_function +__assert_perror_fail (int errnum, + const char *file, unsigned int line, + const char *function) +{ + char errbuf[400]; + _dl_fatal_printf ("\ +Inconsistency detected by ld.so: %s: %u: %s%sUnexpected error: %s.\n", + file, line, function ?: "", function ? ": " : "", + __strerror_r (errnum, errbuf, sizeof errbuf)); + +} +rtld_hidden_weak (__assert_perror_fail) #endif unsigned long int weak_function diff --git a/include/assert.h b/include/assert.h index 780d7ae373..b53313de8f 100644 --- a/include/assert.h +++ b/include/assert.h @@ -7,6 +7,13 @@ extern void __assert_fail (__const char *__assertion, __const char *__file, unsigned int __line, __const char *__function) __THROW __attribute__ ((__noreturn__)); +/* Likewise, but prints the error text for ERRNUM. */ +extern void __assert_perror_fail (int __errnum, __const char *__file, + unsigned int __line, + __const char *__function) + __THROW __attribute__ ((__noreturn__)); + #if !defined NOT_IN_libc || defined IS_IN_rtld hidden_proto (__assert_fail) +hidden_proto (__assert_perror_fail) #endif diff --git a/mach/mach.h b/mach/mach.h index 819c75561b..f8fd44bb00 100644 --- a/mach/mach.h +++ b/mach/mach.h @@ -1,5 +1,5 @@ /* Standard header for all Mach programs. - Copyright (C) 1993, 1994, 1996, 1997 Free Software Foundation, Inc. + Copyright (C) 1993,94,96,97,2002 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -21,6 +21,10 @@ #define _MACH_H 1 +/* We must include this before using __need_FILE with below. */ +#include + + /* Get the basic types used by Mach. */ #include diff --git a/sysdeps/gnu/Versions b/sysdeps/gnu/Versions deleted file mode 100644 index 145dd0acae..0000000000 --- a/sysdeps/gnu/Versions +++ /dev/null @@ -1,19 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.0 { - #errlist-compat 123 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.1 { - #errlist-compat 125 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.3 { - #errlist-compat 126 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } -} diff --git a/sysdeps/gnu/errlist-compat.awk b/sysdeps/gnu/errlist-compat.awk index c9a7a9cc44..4ab9786e63 100644 --- a/sysdeps/gnu/errlist-compat.awk +++ b/sysdeps/gnu/errlist-compat.awk @@ -52,6 +52,11 @@ $1 == "#errlist-compat" { } END { + if (! highest_version) { + print "/* No sys_errlist/sys_nerr symbols defined on this platform. */"; + exit 0; + } + count = maxerr + 1; if (highest != count) { diff --git a/sysdeps/mach/_strerror.c b/sysdeps/mach/_strerror.c index f96ac15116..a67bbb9625 100644 --- a/sysdeps/mach/_strerror.c +++ b/sysdeps/mach/_strerror.c @@ -1,5 +1,4 @@ -/* Copyright (C) 1993, 1995, 1996, 1997, 1998, 2000 - Free Software Foundation, Inc. +/* Copyright (C) 1993,95,96,97,98,2000,02 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -118,4 +117,5 @@ __strerror_r (int errnum, char *buf, size_t buflen) return (char *) _(es->subsystem[sub].codes[code]); } +libc_hidden_def (__strerror_r) weak_alias (__strerror_r, strerror_r) diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 12591167a3..e0e182c208 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -602,6 +602,10 @@ abort (void) /* Try for ever and ever. */ ABORT_INSTRUCTION; } + +/* We need this alias to satisfy references from libc_pic.a objects + that were affected by the libc_hidden_proto declaration for abort. */ +strong_alias (abort, __GI_abort) /* This function is called by interruptible RPC stubs. For initial dynamic linking, just use the normal mach_msg. Since this defn is diff --git a/sysdeps/mach/hurd/pwrite64.c b/sysdeps/mach/hurd/pwrite64.c index ec29032977..2637003ca8 100644 --- a/sysdeps/mach/hurd/pwrite64.c +++ b/sysdeps/mach/hurd/pwrite64.c @@ -34,7 +34,6 @@ __libc_pwrite64 (int fd, const void *buf, size_t nbytes, off64_t offset) } #ifndef __libc_pwrite64 -libc_hidden_def (__libc_pwrite64) weak_alias (__libc_pwrite64, __pwrite64) libc_hidden_weak (__pwrite64) weak_alias (__libc_pwrite64, pwrite64) diff --git a/sysdeps/unix/sysv/linux/Versions b/sysdeps/unix/sysv/linux/Versions index 53cd880425..9dd6b2a275 100644 --- a/sysdeps/unix/sysv/linux/Versions +++ b/sysdeps/unix/sysv/linux/Versions @@ -1,4 +1,9 @@ libc { + # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. + # When you get an error from errlist-compat.awk, you need to add a new + # version here. Don't do this blindly, since this means changing the ABI + # for all GNU/Linux configurations. + GLIBC_2.0 { # functions used in inline functions or macros __cmsg_nxthdr; @@ -50,6 +55,9 @@ libc { # u* umount; uselib; + + #errlist-compat 123 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; } GLIBC_2.1 { # functions used in inline functions or macros @@ -75,6 +83,9 @@ libc { # u* umount2; + + #errlist-compat 125 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; } GLIBC_2.2 { # needed in other libraries. @@ -90,6 +101,9 @@ libc { GLIBC_2.3 { # r* readahead; + + #errlist-compat 126 + _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; } GLIBC_PRIVATE { # needed by libpthread.