1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00

Avoid crashing in LD_DEBUG when program name is unavailable

Resolves: #15465

The program name may be unavailable if the user application tampers
with argc and argv[].  Some parts of the dynamic linker caters for
this while others don't, so this patch consolidates the check and
fallback into a single macro and updates all users.
This commit is contained in:
Siddhesh Poyarekar
2013-05-29 21:30:20 +05:30
parent d0501bfbe2
commit b937534868
41 changed files with 220 additions and 103 deletions

View File

@ -1,3 +1,50 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* elf/Makefile (tests): Add tst-null-argv.
(modules-names): Add tst-null-argv-lib.
($(objpfx)tst-null-argv): Depend on tst-null-argv-lib.so.
(tst-null-argv-ENV): Set environment for tst-null-argv.
* sysdeps/generic/ldsodefs.h (DSO_FILENAME): New macro.
(RTLD_PROGNAME): New macro.
* elf/tst-null-argv.c: New test case.
* elf/tst-null-argv-lib.c: Library for test case.
* elf/dl-conflict.c (_dl_resolve_conflicts): Use DSO_FILENAME.
* elf/dl-deps.c (_dl_map_object_deps): Likewise.
* elf/dl-error.c (_dl_signal_error): Use RTLD_PROGNAME.
* elf/dl-fini.c (_dl_fini): Use DSO_FILENAME.
* elf/dl-init.c (call_init): Likewise.
(_dl_init): Likewise.
* elf/dl-load.c (print_search_path): Likewise.
(_dl_map_object): Likewise.
* elf/dl-lookup.c (do_lookup_x): Likewise.
(add_dependency): Likewise.
(_dl_lookup_symbol_x): Likewise.
(_dl_debug_bindings): Likewise.
* elf/dl-open.c (_dl_show_scope): Likewise.
* elf/dl-reloc.c (_dl_relocate_object): Likewise.
* elf/dl-version.c (match_symbol): Likewise.
(_dl_check_map_versions): Likewise.
* elf/rtld.c (dl_main): Likewise.
(print_unresolved): Use RTLD_PROGNAME.
(print_missing_version): Likewise.
* sysdeps/i386/dl-machine.h (elf_machine_rel): Likewise.
(elf_machine_rela): Likewise.
* sysdeps/powerpc/powerpc32/dl-machine.c
(__process_machine_rela): Likewise.
* sysdeps/powerpc/powerpc64/dl-machine.h (elf_machine_rela):
Likewise.
* sysdeps/s390/s390-32/dl-machine.h (elf_machine_rela):
Likewise.
* sysdeps/s390/s390-64/dl-machine.h (elf_machine_rela):
Likewise.
* sysdeps/sh/dl-machine.h (elf_machine_rela): Likewise.
* sysdeps/sparc/sparc32/dl-machine.h (elf_machine_rela):
Likewise.
* sysdeps/sparc/sparc64/dl-machine.h (elf_machine_rela):
Likewise.
* sysdeps/x86_64/dl-machine.h (elf_machine_rela): Likewise.
2013-05-28 Carlos O'Donell <carlos@redhat.com> 2013-05-28 Carlos O'Donell <carlos@redhat.com>
* po/be.po: Add descriptive title. * po/be.po: Add descriptive title.

4
NEWS
View File

@ -18,8 +18,8 @@ Version 2.18
15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337, 15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337,
15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381, 15394, 15395, 15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381, 15394, 15395,
15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426, 15429, 15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426, 15429,
15441, 15442, 15448, 15480, 15485, 15488, 15490, 15493, 15497, 15506, 15441, 15442, 15448, 15465, 15480, 15485, 15488, 15490, 15493, 15497,
15529. 15506, 15529.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla * CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078). #15078).

View File

@ -145,7 +145,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
tst-audit1 tst-audit2 tst-audit8 \ tst-audit1 tst-audit2 tst-audit8 \
tst-stackguard1 tst-addr1 tst-thrlock \ tst-stackguard1 tst-addr1 tst-thrlock \
tst-unique1 tst-unique2 tst-unique3 tst-unique4 \ tst-unique1 tst-unique2 tst-unique3 tst-unique4 \
tst-initorder tst-initorder2 tst-relsort1 tst-initorder tst-initorder2 tst-relsort1 tst-null-argv
# reldep9 # reldep9
test-srcs = tst-pathopt test-srcs = tst-pathopt
selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null) selinux-enabled := $(shell cat /selinux/enforce 2> /dev/null)
@ -208,7 +208,7 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
tst-initorder2a tst-initorder2b tst-initorder2c \ tst-initorder2a tst-initorder2b tst-initorder2c \
tst-initorder2d \ tst-initorder2d \
tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \ tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
tst-array5dep tst-array5dep tst-null-argv-lib
ifeq (yesyes,$(have-fpie)$(build-shared)) ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1 modules-names += tst-piemod1
tests += tst-pie1 tests += tst-pie1
@ -494,7 +494,9 @@ $(objpfx)tst-initorderb2.so: $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera
$(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so $(objpfx)tst-initordera3.so: $(objpfx)tst-initorderb2.so $(objpfx)tst-initorderb1.so
$(objpfx)tst-initordera4.so: $(objpfx)tst-initordera3.so $(objpfx)tst-initordera4.so: $(objpfx)tst-initordera3.so
$(objpfx)tst-initorder: $(objpfx)tst-initordera4.so $(objpfx)tst-initordera1.so $(objpfx)tst-initorderb2.so $(objpfx)tst-initorder: $(objpfx)tst-initordera4.so $(objpfx)tst-initordera1.so $(objpfx)tst-initorderb2.so
$(objpfx)tst-null-argv: $(objpfx)tst-null-argv-lib.so
tst-null-argv-ENV = LD_DEBUG=all LD_DEBUG_OUTPUT=$(objpfx)tst-null-argv.debug.out
LDFLAGS-nodel2mod3.so = $(no-as-needed) LDFLAGS-nodel2mod3.so = $(no-as-needed)
LDFLAGS-reldepmod5.so = $(no-as-needed) LDFLAGS-reldepmod5.so = $(no-as-needed)
LDFLAGS-reldep6mod1.so = $(no-as-needed) LDFLAGS-reldep6mod1.so = $(no-as-needed)

View File

@ -33,8 +33,7 @@ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
{ {
#if ! ELF_MACHINE_NO_RELA #if ! ELF_MACHINE_NO_RELA
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
_dl_debug_printf ("\nconflict processing: %s\n", _dl_debug_printf ("\nconflict processing: %s\n", DSO_FILENAME (l->l_name));
l->l_name[0] ? l->l_name : rtld_progname);
{ {
/* Do the conflict relocation of the object and library GOT and other /* Do the conflict relocation of the object and library GOT and other

View File

@ -310,8 +310,7 @@ _dl_map_object_deps (struct link_map *map,
_dl_debug_printf ("load auxiliary object=%s" _dl_debug_printf ("load auxiliary object=%s"
" requested by file=%s\n", " requested by file=%s\n",
name, name,
l->l_name[0] DSO_FILENAME (l->l_name));
? l->l_name : rtld_progname);
/* We must be prepared that the addressed shared /* We must be prepared that the addressed shared
object is not available. */ object is not available. */
@ -337,8 +336,7 @@ _dl_map_object_deps (struct link_map *map,
_dl_debug_printf ("load filtered object=%s" _dl_debug_printf ("load filtered object=%s"
" requested by file=%s\n", " requested by file=%s\n",
name, name,
l->l_name[0] DSO_FILENAME (l->l_name));
? l->l_name : rtld_progname);
/* For filter objects the dependency must be available. */ /* For filter objects the dependency must be available. */
bool malloced; bool malloced;

View File

@ -119,7 +119,7 @@ _dl_signal_error (int errcode, const char *objname, const char *occation,
/* Lossage while resolving the program's own symbols is always fatal. */ /* Lossage while resolving the program's own symbols is always fatal. */
char buffer[1024]; char buffer[1024];
_dl_fatal_printf ("%s: %s: %s%s%s%s%s\n", _dl_fatal_printf ("%s: %s: %s%s%s%s%s\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME,
occation ?: N_("error while loading shared libraries"), occation ?: N_("error while loading shared libraries"),
objname, *objname ? ": " : "", objname, *objname ? ": " : "",
errstring, errcode ? ": " : "", errstring, errcode ? ": " : "",

View File

@ -237,7 +237,7 @@ _dl_fini (void)
if (__builtin_expect (GLRO(dl_debug_mask) if (__builtin_expect (GLRO(dl_debug_mask)
& DL_DEBUG_IMPCALLS, 0)) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ncalling fini: %s [%lu]\n\n", _dl_debug_printf ("\ncalling fini: %s [%lu]\n\n",
l->l_name[0] ? l->l_name : rtld_progname, DSO_FILENAME (l->l_name),
ns); ns);
/* First see whether an array is given. */ /* First see whether an array is given. */

View File

@ -54,7 +54,7 @@ call_init (struct link_map *l, int argc, char **argv, char **env)
/* Print a debug message if wanted. */ /* Print a debug message if wanted. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ncalling init: %s\n\n", _dl_debug_printf ("\ncalling init: %s\n\n",
l->l_name[0] ? l->l_name : rtld_progname); DSO_FILENAME (l->l_name));
/* Now run the local constructors. There are two forms of them: /* Now run the local constructors. There are two forms of them:
- the one named by DT_INIT - the one named by DT_INIT
@ -110,8 +110,7 @@ _dl_init (struct link_map *main_map, int argc, char **argv, char **env)
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ncalling preinit: %s\n\n", _dl_debug_printf ("\ncalling preinit: %s\n\n",
main_map->l_name[0] DSO_FILENAME (main_map->l_name));
? main_map->l_name : rtld_progname);
addrs = (ElfW(Addr) *) (preinit_array->d_un.d_ptr + main_map->l_addr); addrs = (ElfW(Addr) *) (preinit_array->d_un.d_ptr + main_map->l_addr);
for (cnt = 0; cnt < i; ++cnt) for (cnt = 0; cnt < i; ++cnt)

View File

@ -1651,7 +1651,7 @@ print_search_path (struct r_search_path_elem **list,
if (name != NULL) if (name != NULL)
_dl_debug_printf_c ("\t\t(%s from file %s)\n", what, _dl_debug_printf_c ("\t\t(%s from file %s)\n", what,
name[0] ? name : rtld_progname); DSO_FILENAME (name));
else else
_dl_debug_printf_c ("\t\t(%s)\n", what); _dl_debug_printf_c ("\t\t(%s)\n", what);
} }
@ -2124,8 +2124,7 @@ _dl_map_object (struct link_map *loader, const char *name,
_dl_debug_printf ((mode & __RTLD_CALLMAP) == 0 _dl_debug_printf ((mode & __RTLD_CALLMAP) == 0
? "\nfile=%s [%lu]; needed by %s [%lu]\n" ? "\nfile=%s [%lu]; needed by %s [%lu]\n"
: "\nfile=%s [%lu]; dynamically loaded by %s [%lu]\n", : "\nfile=%s [%lu]; dynamically loaded by %s [%lu]\n",
name, nsid, loader->l_name[0] name, nsid, DSO_FILENAME (loader->l_name), loader->l_ns);
? loader->l_name : rtld_progname, loader->l_ns);
#ifdef SHARED #ifdef SHARED
/* Give the auditing libraries a chance to change the name before we /* Give the auditing libraries a chance to change the name before we

View File

@ -112,8 +112,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
/* Print some debugging info if wanted. */ /* Print some debugging info if wanted. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0))
_dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n", _dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n",
undef_name, undef_name, DSO_FILENAME (map->l_name),
map->l_name[0] ? map->l_name : rtld_progname,
map->l_ns); map->l_ns);
/* If the hash table is empty there is nothing to do here. */ /* If the hash table is empty there is nothing to do here. */
@ -667,10 +666,9 @@ add_dependency (struct link_map *undef_map, struct link_map *map, int flags)
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
_dl_debug_printf ("\ _dl_debug_printf ("\
\nfile=%s [%lu]; needed by %s [%lu] (relocation dependency)\n\n", \nfile=%s [%lu]; needed by %s [%lu] (relocation dependency)\n\n",
map->l_name[0] ? map->l_name : rtld_progname, DSO_FILENAME (map->l_name),
map->l_ns, map->l_ns,
undef_map->l_name[0] DSO_FILENAME (undef_map->l_name),
? undef_map->l_name : rtld_progname,
undef_map->l_ns); undef_map->l_ns);
} }
else else
@ -751,9 +749,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
const char *reference_name = undef_map ? undef_map->l_name : NULL; const char *reference_name = undef_map ? undef_map->l_name : NULL;
/* XXX We cannot translate the message. */ /* XXX We cannot translate the message. */
_dl_signal_cerror (0, (reference_name[0] _dl_signal_cerror (0, DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
N_("relocation error"), N_("relocation error"),
make_string ("symbol ", undef_name, ", version ", make_string ("symbol ", undef_name, ", version ",
version->name, version->name,
@ -780,9 +776,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
? version->name : ""); ? version->name : "");
/* XXX We cannot translate the message. */ /* XXX We cannot translate the message. */
_dl_signal_cerror (0, (reference_name[0] _dl_signal_cerror (0, DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
N_("symbol lookup error"), N_("symbol lookup error"),
make_string (undefined_msg, undef_name, make_string (undefined_msg, undef_name,
versionstr, versionname)); versionstr, versionname));
@ -912,11 +906,9 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS) if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS)
{ {
_dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'", _dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'",
(reference_name[0] DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
undef_map->l_ns, undef_map->l_ns,
value->m->l_name[0] ? value->m->l_name : rtld_progname, DSO_FILENAME (value->m->l_name),
value->m->l_ns, value->m->l_ns,
protected ? "protected" : "normal", undef_name); protected ? "protected" : "normal", undef_name);
if (version) if (version)

View File

@ -733,7 +733,7 @@ void
_dl_show_scope (struct link_map *l, int from) _dl_show_scope (struct link_map *l, int from)
{ {
_dl_debug_printf ("object=%s [%lu]\n", _dl_debug_printf ("object=%s [%lu]\n",
*l->l_name ? l->l_name : rtld_progname, l->l_ns); DSO_FILENAME (l->l_name), l->l_ns);
if (l->l_scope != NULL) if (l->l_scope != NULL)
for (int scope_cnt = from; l->l_scope[scope_cnt] != NULL; ++scope_cnt) for (int scope_cnt = from; l->l_scope[scope_cnt] != NULL; ++scope_cnt)
{ {
@ -744,7 +744,7 @@ _dl_show_scope (struct link_map *l, int from)
_dl_debug_printf_c (" %s", _dl_debug_printf_c (" %s",
l->l_scope[scope_cnt]->r_list[cnt]->l_name); l->l_scope[scope_cnt]->r_list[cnt]->l_name);
else else
_dl_debug_printf_c (" %s", rtld_progname); _dl_debug_printf_c (" %s", RTLD_PROGNAME);
_dl_debug_printf_c ("\n"); _dl_debug_printf_c ("\n");
} }

View File

@ -185,8 +185,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
_dl_debug_printf ("\nrelocation processing: %s%s\n", _dl_debug_printf ("\nrelocation processing: %s%s\n",
l->l_name[0] ? l->l_name : rtld_progname, DSO_FILENAME (l->l_name), lazy ? " (lazy)" : "");
lazy ? " (lazy)" : "");
/* DT_TEXTREL is now in level 2 and might phase out at some time. /* DT_TEXTREL is now in level 2 and might phase out at some time.
But we rewrite the DT_FLAGS entry to a DT_TEXTREL entry to make But we rewrite the DT_FLAGS entry to a DT_TEXTREL entry to make
@ -276,7 +275,7 @@ _dl_relocate_object (struct link_map *l, struct r_scope_elem *scope[],
errstring = N_("%s: no PLTREL found in object %s\n"); errstring = N_("%s: no PLTREL found in object %s\n");
fatal: fatal:
_dl_fatal_printf (errstring, _dl_fatal_printf (errstring,
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME,
l->l_name); l->l_name);
} }

View File

@ -85,7 +85,7 @@ match_symbol (const char *name, Lmid_t ns, ElfW(Word) hash, const char *string,
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_VERSIONS, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_VERSIONS, 0))
_dl_debug_printf ("\ _dl_debug_printf ("\
checking for version `%s' in file %s [%lu] required by file %s [%lu]\n", checking for version `%s' in file %s [%lu] required by file %s [%lu]\n",
string, map->l_name[0] ? map->l_name : rtld_progname, string, DSO_FILENAME (map->l_name),
map->l_ns, name, ns); map->l_ns, name, ns);
if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0)) if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0))
@ -162,7 +162,7 @@ no version information available (required by ", name, ")");
name, ")"); name, ")");
result = 1; result = 1;
call_cerror: call_cerror:
_dl_signal_cerror (0, map->l_name[0] ? map->l_name : rtld_progname, _dl_signal_cerror (0, DSO_FILENAME (map->l_name),
N_("version lookup error"), errstring); N_("version lookup error"), errstring);
return result; return result;
} }
@ -210,7 +210,7 @@ _dl_check_map_versions (struct link_map *map, int verbose, int trace_mode)
&buf[sizeof (buf) - 1], 10, 0), &buf[sizeof (buf) - 1], 10, 0),
" of Verneed record\n"); " of Verneed record\n");
call_error: call_error:
_dl_signal_error (errval, *map->l_name ? map->l_name : rtld_progname, _dl_signal_error (errval, DSO_FILENAME (map->l_name),
NULL, errstring); NULL, errstring);
} }
@ -234,8 +234,7 @@ _dl_check_map_versions (struct link_map *map, int verbose, int trace_mode)
while (1) while (1)
{ {
/* Match the symbol. */ /* Match the symbol. */
result |= match_symbol ((*map->l_name result |= match_symbol (DSO_FILENAME (map->l_name),
? map->l_name : rtld_progname),
map->l_ns, aux->vna_hash, map->l_ns, aux->vna_hash,
strtab + aux->vna_name, strtab + aux->vna_name,
needed->l_real, verbose, needed->l_real, verbose,

View File

@ -1840,10 +1840,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
if (_dl_name_match_p (GLRO(dl_trace_prelink), l)) if (_dl_name_match_p (GLRO(dl_trace_prelink), l))
GLRO(dl_trace_prelink_map) = l; GLRO(dl_trace_prelink_map) = l;
_dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)", _dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
l->l_libname->name[0] ? l->l_libname->name DSO_FILENAME (l->l_libname->name),
: rtld_progname ?: "<main program>", DSO_FILENAME (l->l_name),
l->l_name[0] ? l->l_name
: rtld_progname ?: "<main program>",
(int) sizeof l->l_map_start * 2, (int) sizeof l->l_map_start * 2,
(size_t) l->l_map_start, (size_t) l->l_map_start,
(int) sizeof l->l_addr * 2, (int) sizeof l->l_addr * 2,
@ -2000,8 +1998,7 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
first = 0; first = 0;
} }
_dl_printf ("\t%s:\n", _dl_printf ("\t%s:\n", DSO_FILENAME (map->l_name));
map->l_name[0] ? map->l_name : rtld_progname);
while (1) while (1)
{ {
@ -2324,7 +2321,7 @@ print_unresolved (int errcode __attribute__ ((unused)), const char *objname,
const char *errstring) const char *errstring)
{ {
if (objname[0] == '\0') if (objname[0] == '\0')
objname = rtld_progname ?: "<main program>"; objname = RTLD_PROGNAME;
_dl_error_printf ("%s (%s)\n", errstring, objname); _dl_error_printf ("%s (%s)\n", errstring, objname);
} }
@ -2334,7 +2331,7 @@ static void
print_missing_version (int errcode __attribute__ ((unused)), print_missing_version (int errcode __attribute__ ((unused)),
const char *objname, const char *errstring) const char *objname, const char *errstring)
{ {
_dl_error_printf ("%s: %s: %s\n", rtld_progname ?: "<program name unknown>", _dl_error_printf ("%s: %s: %s\n", RTLD_PROGNAME,
objname, errstring); objname, errstring);
} }

24
elf/tst-null-argv-lib.c Normal file
View File

@ -0,0 +1,24 @@
/* Verify that program does not crash when LD_DEBUG is set and the program name
is not available. This is the library.
Copyright (C) 2013 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
void
foo (void)
{
return;
}

35
elf/tst-null-argv.c Normal file
View File

@ -0,0 +1,35 @@
/* Verify that program does not crash when LD_DEBUG is set and the program name
is not available.
Copyright (C) 2013 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
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<http://www.gnu.org/licenses/>. */
extern void foo (void);
int
do_test (int argc, char **argv)
{
argv[0] = argv[1];
argc--;
/* This should result in a symbol lookup, causing a volley of debug output
when LD_DEBUG=symbols. */
foo ();
return 0;
}
#include <test-skeleton.c>

View File

@ -1,3 +1,9 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/aarch64/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-23 Venkataranmanan Kumar <venkataramanan.kumar@linaro.org> 2013-05-23 Venkataranmanan Kumar <venkataramanan.kumar@linaro.org>
* sysdeps/aarch64/machine-gmon.h: Remove. * sysdeps/aarch64/machine-gmon.h: Remove.

View File

@ -1,3 +1,10 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/arm/dl-machine.h (elf_machine_rel): Use
RTLD_PROGNAME.
(elf_machine_rela): Likewise.
2013-05-22 Joseph Myers <joseph@codesourcery.com> 2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/arm/libm-test-ulps: Update test names. * sysdeps/arm/libm-test-ulps: Update test names.

View File

@ -1,3 +1,10 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/hppa/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
(elf_machine_rela_relative): Likewise.
2013-05-22 Joseph Myers <joseph@codesourcery.com> 2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/hppa/fpu/libm-test-ulps: Update test names. * sysdeps/hppa/fpu/libm-test-ulps: Update test names.

View File

@ -1,3 +1,9 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/m68k/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-22 Joseph Myers <joseph@codesourcery.com> 2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/m68k/coldfire/fpu/libm-test-ulps: Update test names. * sysdeps/m68k/coldfire/fpu/libm-test-ulps: Update test names.

View File

@ -1,3 +1,9 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/microblaze/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-22 Joseph Myers <joseph@codesourcery.com> 2013-05-22 Joseph Myers <joseph@codesourcery.com>
* sysdeps/microblaze/libm-test-ulps: Update test names. * sysdeps/microblaze/libm-test-ulps: Update test names.

View File

@ -1,3 +1,13 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/mips/dl-lookup.c (do_lookup_x): Use DSO_FILENAME.
(add_dependency): Likewise.
(_dl_lookup_symbol_x): Likewise.
(_dl_debug_bindings): Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_reloc): Use
RTLD_PROGNAME.
2013-05-22 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com> 2013-05-22 Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
* sysdeps/unix/sysv/linux/mips/bits/siginfo.h (siginfo_t): Add * sysdeps/unix/sysv/linux/mips/bits/siginfo.h (siginfo_t): Add

View File

@ -1,3 +1,9 @@
2013-05-29 Siddhesh Poyarekar <siddhesh@redhat.com>
[BZ #15465]
* sysdeps/tile/dl-machine.h (elf_machine_rela): Use
RTLD_PROGNAME.
2013-05-23 Chris Metcalf <cmetcalf@tilera.com> 2013-05-23 Chris Metcalf <cmetcalf@tilera.com>
* sysdeps/tile/tilegx/Makefile ($(cflags-mcmodel-large)): * sysdeps/tile/tilegx/Makefile ($(cflags-mcmodel-large)):

View File

@ -257,8 +257,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -398,8 +398,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));
@ -560,8 +559,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -673,8 +673,7 @@ elf_machine_rela (struct link_map *map,
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("%s: Symbol `%s' has different size in shared object, " _dl_error_printf ("%s: Symbol `%s' has different size in shared object, "
"consider re-linking\n", "consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));
@ -730,7 +729,7 @@ elf_machine_rela_relative (Elf32_Addr l_addr,
if (ELF32_R_SYM (reloc->r_info) != 0){ if (ELF32_R_SYM (reloc->r_info) != 0){
_dl_error_printf ("%s: In elf_machine_rela_relative " _dl_error_printf ("%s: In elf_machine_rela_relative "
"ELF32_R_SYM (reloc->r_info) != 0. Aborting.", "ELF32_R_SYM (reloc->r_info) != 0. Aborting.",
rtld_progname ?: "<program name unknown>"); RTLD_PROGNAME);
ABORT_INSTRUCTION; /* Crash. */ ABORT_INSTRUCTION; /* Crash. */
} }

View File

@ -238,8 +238,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -240,8 +240,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -114,7 +114,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0))
_dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n", _dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n",
undef_name, undef_name,
map->l_name[0] ? map->l_name : rtld_progname, DSO_FILENAME (map->l_name),
map->l_ns); map->l_ns);
/* If the hash table is empty there is nothing to do here. */ /* If the hash table is empty there is nothing to do here. */
@ -684,10 +684,9 @@ add_dependency (struct link_map *undef_map, struct link_map *map, int flags)
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0)) if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_FILES, 0))
_dl_debug_printf ("\ _dl_debug_printf ("\
\nfile=%s [%lu]; needed by %s [%lu] (relocation dependency)\n\n", \nfile=%s [%lu]; needed by %s [%lu] (relocation dependency)\n\n",
map->l_name[0] ? map->l_name : rtld_progname, DSO_FILENAME (map->l_name),
map->l_ns, map->l_ns,
undef_map->l_name[0] DSO_FILENAME (undef_map->l_name),
? undef_map->l_name : rtld_progname,
undef_map->l_ns); undef_map->l_ns);
} }
else else
@ -768,9 +767,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
const char *reference_name = undef_map ? undef_map->l_name : NULL; const char *reference_name = undef_map ? undef_map->l_name : NULL;
/* XXX We cannot translate the message. */ /* XXX We cannot translate the message. */
_dl_signal_cerror (0, (reference_name[0] _dl_signal_cerror (0, DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
N_("relocation error"), N_("relocation error"),
make_string ("symbol ", undef_name, ", version ", make_string ("symbol ", undef_name, ", version ",
version->name, version->name,
@ -797,9 +794,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
? version->name : ""); ? version->name : "");
/* XXX We cannot translate the message. */ /* XXX We cannot translate the message. */
_dl_signal_cerror (0, (reference_name[0] _dl_signal_cerror (0, DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
N_("symbol lookup error"), N_("symbol lookup error"),
make_string (undefined_msg, undef_name, make_string (undefined_msg, undef_name,
versionstr, versionname)); versionstr, versionname));
@ -929,11 +924,9 @@ _dl_debug_bindings (const char *undef_name, struct link_map *undef_map,
if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS) if (GLRO(dl_debug_mask) & DL_DEBUG_BINDINGS)
{ {
_dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'", _dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'",
(reference_name[0] DSO_FILENAME (reference_name),
? reference_name
: (rtld_progname ?: "<main program>")),
undef_map->l_ns, undef_map->l_ns,
value->m->l_name[0] ? value->m->l_name : rtld_progname, DSO_FILENAME (value->m->l_name),
value->m->l_ns, value->m->l_ns,
protected ? "protected" : "normal", undef_name); protected ? "protected" : "normal", undef_name);
if (version) if (version)

View File

@ -635,8 +635,7 @@ elf_machine_reloc (struct link_map *map, ElfW(Addr) r_info,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr, (void *) value, memcpy (reloc_addr, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -624,8 +624,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]);
_dl_error_printf ("%s: Symbol `%s' has different size in shared" _dl_error_printf ("%s: Symbol `%s' has different size in shared"
" object, consider re-linking\n", " object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -128,6 +128,11 @@ typedef struct link_map *lookup_t;
| ((PROT_WRITE | PROT_EXEC) << (PF_W | PF_X) * 4) \ | ((PROT_WRITE | PROT_EXEC) << (PF_W | PF_X) * 4) \
| ((PROT_READ | PROT_WRITE | PROT_EXEC) << ((PF_R | PF_W | PF_X) * 4))) | ((PROT_READ | PROT_WRITE | PROT_EXEC) << ((PF_R | PF_W | PF_X) * 4)))
/* The filename itself, or the main program name, if available. */
#define DSO_FILENAME(name) ((name)[0] ? (name) \
: (rtld_progname ?: "<main program>"))
#define RTLD_PROGNAME (rtld_progname ?: "<program name unknown>")
/* For the version handling we need an array with only names and their /* For the version handling we need an array with only names and their
hash values. */ hash values. */

View File

@ -464,8 +464,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc,
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));
@ -610,8 +609,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -510,8 +510,7 @@ __process_machine_rela (struct link_map *map,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size, memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size,
refsym->st_size)); refsym->st_size));

View File

@ -734,8 +734,7 @@ elf_machine_rela (struct link_map *map,
_dl_error_printf ("%s: Symbol `%s' has different size" \ _dl_error_printf ("%s: Symbol `%s' has different size" \
" in shared object," \ " in shared object," \
" consider re-linking\n", " consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (char *) value, memcpy (reloc_addr_arg, (char *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -383,8 +383,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]); strtab = (const char *) D_PTR(map,l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -361,8 +361,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map,l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -336,8 +336,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -411,8 +411,7 @@ elf_machine_rela (struct link_map *map, const Elf32_Rela *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -436,8 +436,7 @@ elf_machine_rela (struct link_map *map, const Elf64_Rela *reloc,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\ _dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n", %s: Symbol `%s' has different size in shared object, consider re-linking\n",
rtld_progname ?: "<program name unknown>", RTLD_PROGNAME, strtab + refsym->st_name);
strtab + refsym->st_name);
} }
memcpy (reloc_addr_arg, (void *) value, memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size)); MIN (sym->st_size, refsym->st_size));

View File

@ -430,9 +430,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
# endif # endif
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf (fmt, _dl_error_printf (fmt, RTLD_PROGNAME, strtab + refsym->st_name);
rtld_progname ?: "<program name unknown>",
strtab + refsym->st_name);
} }
break; break;
# ifndef RESOLVE_CONFLICT_FIND_MAP # ifndef RESOLVE_CONFLICT_FIND_MAP