aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--elf/Versions2
-rw-r--r--elf/dl-misc.c31
-rw-r--r--sysdeps/generic/ldsodefs.h19
-rw-r--r--sysdeps/mach/hurd/i386/localplt.data1
4 files changed, 40 insertions, 13 deletions
diff --git a/elf/Versions b/elf/Versions
index 3be879c..be88c48 100644
--- a/elf/Versions
+++ b/elf/Versions
@@ -58,7 +58,7 @@ ld {
_dl_allocate_tls; _dl_allocate_tls_init;
_dl_argv; _dl_find_dso_for_object; _dl_get_tls_static_info;
_dl_deallocate_tls; _dl_make_stack_executable;
- _dl_rtld_di_serinfo; _dl_starting_up;
+ _dl_rtld_di_serinfo; _dl_starting_up; _dl_fatal_printf;
_rtld_global; _rtld_global_ro;
# Only here for gdb while a better method is developed.
diff --git a/elf/dl-misc.c b/elf/dl-misc.c
index e6cf247..ab70481 100644
--- a/elf/dl-misc.c
+++ b/elf/dl-misc.c
@@ -275,6 +275,37 @@ _dl_dprintf (int fd, const char *fmt, ...)
va_end (arg);
}
+void
+_dl_printf (const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ _dl_debug_vdprintf (STDOUT_FILENO, 0, fmt, arg);
+ va_end (arg);
+}
+
+void
+_dl_error_printf (const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
+ va_end (arg);
+}
+
+void
+_dl_fatal_printf (const char *fmt, ...)
+{
+ va_list arg;
+
+ va_start (arg, fmt);
+ _dl_debug_vdprintf (STDERR_FILENO, 0, fmt, arg);
+ va_end (arg);
+ _exit (127);
+}
+rtld_hidden_def (_dl_fatal_printf)
/* Test whether given NAME matches any of the names of the given object. */
int
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 5ff4a28..d08b97a 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -751,24 +751,19 @@ _dl_dprintf (int fd, const char *fmt, ...)
/* Write a message on the specified descriptor standard output. The
parameters are interpreted as for a `printf' call. */
-#define _dl_printf(fmt, args...) \
- _dl_dprintf (STDOUT_FILENO, fmt, ##args)
+void _dl_printf (const char *fmt, ...)
+ attribute_hidden __attribute__ ((__format__ (__printf__, 1, 2)));
/* Write a message on the specified descriptor standard error. The
parameters are interpreted as for a `printf' call. */
-#define _dl_error_printf(fmt, args...) \
- _dl_dprintf (STDERR_FILENO, fmt, ##args)
+void _dl_error_printf (const char *fmt, ...)
+ attribute_hidden __attribute__ ((__format__ (__printf__, 1, 2)));
/* Write a message on the specified descriptor standard error and exit
the program. The parameters are interpreted as for a `printf' call. */
-#define _dl_fatal_printf(fmt, args...) \
- do \
- { \
- _dl_dprintf (STDERR_FILENO, fmt, ##args); \
- _exit (127); \
- } \
- while (1)
-
+void _dl_fatal_printf (const char *fmt, ...)
+ __attribute__ ((__format__ (__printf__, 1, 2), __noreturn__));
+rtld_hidden_proto (_dl_fatal_printf)
/* An exception raised by the _dl_signal_error function family and
caught by _dl_catch_error function family. Exceptions themselves
diff --git a/sysdeps/mach/hurd/i386/localplt.data b/sysdeps/mach/hurd/i386/localplt.data
index 102323e..541c3f3 100644
--- a/sysdeps/mach/hurd/i386/localplt.data
+++ b/sysdeps/mach/hurd/i386/localplt.data
@@ -43,6 +43,7 @@ ld.so: _dl_allocate_tls_init
ld.so: _dl_exception_create
ld.so: _dl_exception_create_format
ld.so: _dl_exception_free
+ld.so: _dl_fatal_printf
ld.so: _dl_find_dso_for_object
ld.so: _dl_init_first
ld.so: _dl_mcount