diff options
author | Roland McGrath <roland@hack.frob.com> | 2015-07-09 15:32:32 -0700 |
---|---|---|
committer | Roland McGrath <roland@hack.frob.com> | 2015-07-09 15:32:32 -0700 |
commit | 2193ce8746ec11b2325cc55aa8f338d5872492bf (patch) | |
tree | 3f3ffa2d01ce901913f5df9c38924f0a216ed8d3 | |
parent | af85d409a29ae435949a7fcc7065d88af0233d24 (diff) | |
download | glibc-2193ce8746ec11b2325cc55aa8f338d5872492bf.tar.gz |
Provide __libc_fatal for rtld.
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | elf/dl-minimal.c | 40 | ||||
-rw-r--r-- | include/stdio.h | 1 |
3 files changed, 29 insertions, 17 deletions
@@ -1,5 +1,10 @@ 2015-07-09 Roland McGrath <roland@hack.frob.com> + * include/stdio.h: Add rtld_hidden_proto (__libc_fatal). + * elf/dl-minimal.c: For readability, reorder some definitions and + introduce more page breaks. Include <stdio.h>. + (__libc_fatal): New function. + * include/unistd.h: Add rtld_hidden_proto for _exit. * posix/_exit.c: Add rtld_hidden_def. * sysdeps/mach/hurd/_exit.c: Likewise. diff --git a/elf/dl-minimal.c b/elf/dl-minimal.c index 04f416dced..ec7fe88d30 100644 --- a/elf/dl-minimal.c +++ b/elf/dl-minimal.c @@ -18,6 +18,7 @@ #include <errno.h> #include <limits.h> +#include <stdio.h> #include <string.h> #include <tls.h> #include <unistd.h> @@ -193,8 +194,22 @@ __strerror_r (int errnum, char *buf, size_t buflen) return msg; } -#ifndef NDEBUG +void +__libc_fatal (const char *message) +{ + _dl_fatal_printf ("%s", message); +} +rtld_hidden_def (__libc_fatal) +void +__attribute__ ((noreturn)) +__chk_fail (void) +{ + _exit (127); +} +rtld_hidden_def (__chk_fail) + +#ifndef NDEBUG /* Define (weakly) our own assert failure function which doesn't use stdio. If we are linked into the user program (-ldl), the normal __assert_fail defn can override this one. */ @@ -209,7 +224,7 @@ Inconsistency detected by ld.so: %s: %u: %s%sAssertion `%s' failed!\n", assertion); } -rtld_hidden_weak(__assert_fail) +rtld_hidden_weak (__assert_fail) void weak_function __assert_perror_fail (int errnum, @@ -225,7 +240,7 @@ Inconsistency detected by ld.so: %s: %u: %s%sUnexpected error: %s.\n", } rtld_hidden_weak (__assert_perror_fail) #endif - + unsigned long int weak_function __strtoul_internal (const char *nptr, char **endptr, int base, int group) { @@ -324,7 +339,11 @@ _itoa (value, buflim, base, upper_case) return buflim; } - +/* The '_itoa_lower_digits' variable in libc.so is able to handle bases + up to 36. We don't need this here. */ +const char _itoa_lower_digits[16] = "0123456789abcdef"; +rtld_hidden_data_def (_itoa_lower_digits) + /* The following is not a complete strsep implementation. It cannot handle empty delimiter strings. But this isn't necessary for the execution of ld.so. */ @@ -367,16 +386,3 @@ __strsep (char **stringp, const char *delim) } weak_alias (__strsep, strsep) strong_alias (__strsep, __strsep_g) - -void -__attribute__ ((noreturn)) -__chk_fail (void) -{ - _exit (127); -} -rtld_hidden_def (__chk_fail) - -/* The '_itoa_lower_digits' variable in libc.so is able to handle bases - up to 36. We don't need this here. */ -const char _itoa_lower_digits[16] = "0123456789abcdef"; -rtld_hidden_data_def (_itoa_lower_digits) diff --git a/include/stdio.h b/include/stdio.h index 31718f953d..1ffbc40b3d 100644 --- a/include/stdio.h +++ b/include/stdio.h @@ -172,6 +172,7 @@ libc_hidden_proto (fmemopen) extern FILE *__open_memstream (char **, size_t *) __THROW __wur; libc_hidden_proto (__open_memstream) libc_hidden_proto (__libc_fatal) +rtld_hidden_proto (__libc_fatal) libc_hidden_proto (__vsprintf_chk) libc_hidden_proto (__vsnprintf_chk) libc_hidden_proto (__vfprintf_chk) |