aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog47
-rw-r--r--NEWS4
-rw-r--r--elf/Makefile6
-rw-r--r--elf/dl-conflict.c3
-rw-r--r--elf/dl-deps.c6
-rw-r--r--elf/dl-error.c2
-rw-r--r--elf/dl-fini.c2
-rw-r--r--elf/dl-init.c5
-rw-r--r--elf/dl-load.c5
-rw-r--r--elf/dl-lookup.c22
-rw-r--r--elf/dl-open.c4
-rw-r--r--elf/dl-reloc.c5
-rw-r--r--elf/dl-version.c9
-rw-r--r--elf/rtld.c13
-rw-r--r--elf/tst-null-argv-lib.c24
-rw-r--r--elf/tst-null-argv.c35
-rw-r--r--ports/ChangeLog.aarch646
-rw-r--r--ports/ChangeLog.arm7
-rw-r--r--ports/ChangeLog.hppa7
-rw-r--r--ports/ChangeLog.m68k6
-rw-r--r--ports/ChangeLog.microblaze6
-rw-r--r--ports/ChangeLog.mips10
-rw-r--r--ports/ChangeLog.tile6
-rw-r--r--ports/sysdeps/aarch64/dl-machine.h3
-rw-r--r--ports/sysdeps/arm/dl-machine.h6
-rw-r--r--ports/sysdeps/hppa/dl-machine.h5
-rw-r--r--ports/sysdeps/m68k/dl-machine.h3
-rw-r--r--ports/sysdeps/microblaze/dl-machine.h3
-rw-r--r--ports/sysdeps/mips/dl-lookup.c21
-rw-r--r--ports/sysdeps/mips/dl-machine.h3
-rw-r--r--ports/sysdeps/tile/dl-machine.h3
-rw-r--r--sysdeps/generic/ldsodefs.h5
-rw-r--r--sysdeps/i386/dl-machine.h6
-rw-r--r--sysdeps/powerpc/powerpc32/dl-machine.c3
-rw-r--r--sysdeps/powerpc/powerpc64/dl-machine.h3
-rw-r--r--sysdeps/s390/s390-32/dl-machine.h3
-rw-r--r--sysdeps/s390/s390-64/dl-machine.h3
-rw-r--r--sysdeps/sh/dl-machine.h3
-rw-r--r--sysdeps/sparc/sparc32/dl-machine.h3
-rw-r--r--sysdeps/sparc/sparc64/dl-machine.h3
-rw-r--r--sysdeps/x86_64/dl-machine.h4
41 files changed, 220 insertions, 103 deletions
diff --git a/ChangeLog b/ChangeLog
index 7cd9634..1d7b555 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -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>
* po/be.po: Add descriptive title.
diff --git a/NEWS b/NEWS
index c25b62e..4a1f83d 100644
--- a/NEWS
+++ b/NEWS
@@ -18,8 +18,8 @@ Version 2.18
15287, 15304, 15305, 15307, 15309, 15327, 15330, 15335, 15336, 15337,
15339, 15342, 15346, 15359, 15361, 15366, 15380, 15381, 15394, 15395,
15405, 15406, 15409, 15416, 15418, 15419, 15423, 15424, 15426, 15429,
- 15441, 15442, 15448, 15480, 15485, 15488, 15490, 15493, 15497, 15506,
- 15529.
+ 15441, 15442, 15448, 15465, 15480, 15485, 15488, 15490, 15493, 15497,
+ 15506, 15529.
* CVE-2013-0242 Buffer overrun in regexp matcher has been fixed (Bugzilla
#15078).
diff --git a/elf/Makefile b/elf/Makefile
index c01ca9e..6f40414 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -145,7 +145,7 @@ tests += loadtest restest1 preloadtest loadfail multiload origtest resolvfail \
tst-audit1 tst-audit2 tst-audit8 \
tst-stackguard1 tst-addr1 tst-thrlock \
tst-unique1 tst-unique2 tst-unique3 tst-unique4 \
- tst-initorder tst-initorder2 tst-relsort1
+ tst-initorder tst-initorder2 tst-relsort1 tst-null-argv
# reldep9
test-srcs = tst-pathopt
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-initorder2d \
tst-relsort1mod1 tst-relsort1mod2 tst-array2dep \
- tst-array5dep
+ tst-array5dep tst-null-argv-lib
ifeq (yesyes,$(have-fpie)$(build-shared))
modules-names += tst-piemod1
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-initordera4.so: $(objpfx)tst-initordera3.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-reldepmod5.so = $(no-as-needed)
LDFLAGS-reldep6mod1.so = $(no-as-needed)
diff --git a/elf/dl-conflict.c b/elf/dl-conflict.c
index d63086d..11e3cd8 100644
--- a/elf/dl-conflict.c
+++ b/elf/dl-conflict.c
@@ -33,8 +33,7 @@ _dl_resolve_conflicts (struct link_map *l, ElfW(Rela) *conflict,
{
#if ! ELF_MACHINE_NO_RELA
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_RELOC, 0))
- _dl_debug_printf ("\nconflict processing: %s\n",
- l->l_name[0] ? l->l_name : rtld_progname);
+ _dl_debug_printf ("\nconflict processing: %s\n", DSO_FILENAME (l->l_name));
{
/* Do the conflict relocation of the object and library GOT and other
diff --git a/elf/dl-deps.c b/elf/dl-deps.c
index cd1c236..1c36f50 100644
--- a/elf/dl-deps.c
+++ b/elf/dl-deps.c
@@ -310,8 +310,7 @@ _dl_map_object_deps (struct link_map *map,
_dl_debug_printf ("load auxiliary object=%s"
" requested by file=%s\n",
name,
- l->l_name[0]
- ? l->l_name : rtld_progname);
+ DSO_FILENAME (l->l_name));
/* We must be prepared that the addressed shared
object is not available. */
@@ -337,8 +336,7 @@ _dl_map_object_deps (struct link_map *map,
_dl_debug_printf ("load filtered object=%s"
" requested by file=%s\n",
name,
- l->l_name[0]
- ? l->l_name : rtld_progname);
+ DSO_FILENAME (l->l_name));
/* For filter objects the dependency must be available. */
bool malloced;
diff --git a/elf/dl-error.c b/elf/dl-error.c
index 7987845..8257c17 100644
--- a/elf/dl-error.c
+++ b/elf/dl-error.c
@@ -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. */
char buffer[1024];
_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"),
objname, *objname ? ": " : "",
errstring, errcode ? ": " : "",
diff --git a/elf/dl-fini.c b/elf/dl-fini.c
index c5d1674..6b245f0 100644
--- a/elf/dl-fini.c
+++ b/elf/dl-fini.c
@@ -237,7 +237,7 @@ _dl_fini (void)
if (__builtin_expect (GLRO(dl_debug_mask)
& DL_DEBUG_IMPCALLS, 0))
_dl_debug_printf ("\ncalling fini: %s [%lu]\n\n",
- l->l_name[0] ? l->l_name : rtld_progname,
+ DSO_FILENAME (l->l_name),
ns);
/* First see whether an array is given. */
diff --git a/elf/dl-init.c b/elf/dl-init.c
index fe4d2a0..a657eb6 100644
--- a/elf/dl-init.c
+++ b/elf/dl-init.c
@@ -54,7 +54,7 @@ call_init (struct link_map *l, int argc, char **argv, char **env)
/* Print a debug message if wanted. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_IMPCALLS, 0))
_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:
- 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))
_dl_debug_printf ("\ncalling preinit: %s\n\n",
- main_map->l_name[0]
- ? main_map->l_name : rtld_progname);
+ DSO_FILENAME (main_map->l_name));
addrs = (ElfW(Addr) *) (preinit_array->d_un.d_ptr + main_map->l_addr);
for (cnt = 0; cnt < i; ++cnt)
diff --git a/elf/dl-load.c b/elf/dl-load.c
index dd182c9..757b6ec 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1651,7 +1651,7 @@ print_search_path (struct r_search_path_elem **list,
if (name != NULL)
_dl_debug_printf_c ("\t\t(%s from file %s)\n", what,
- name[0] ? name : rtld_progname);
+ DSO_FILENAME (name));
else
_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
? "\nfile=%s [%lu]; needed by %s [%lu]\n"
: "\nfile=%s [%lu]; dynamically loaded by %s [%lu]\n",
- name, nsid, loader->l_name[0]
- ? loader->l_name : rtld_progname, loader->l_ns);
+ name, nsid, DSO_FILENAME (loader->l_name), loader->l_ns);
#ifdef SHARED
/* Give the auditing libraries a chance to change the name before we
diff --git a/elf/dl-lookup.c b/elf/dl-lookup.c
index 68f8dac..39f463e 100644
--- a/elf/dl-lookup.c
+++ b/elf/dl-lookup.c
@@ -112,8 +112,7 @@ do_lookup_x (const char *undef_name, uint_fast32_t new_hash,
/* Print some debugging info if wanted. */
if (__builtin_expect (GLRO(dl_debug_mask) & DL_DEBUG_SYMBOLS, 0))
_dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n",
- undef_name,
- map->l_name[0] ? map->l_name : rtld_progname,
+ undef_name, DSO_FILENAME (map->l_name),
map->l_ns);
/* 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))
_dl_debug_printf ("\
\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,
- undef_map->l_name[0]
- ? undef_map->l_name : rtld_progname,
+ DSO_FILENAME (undef_map->l_name),
undef_map->l_ns);
}
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;
/* XXX We cannot translate the message. */
- _dl_signal_cerror (0, (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ _dl_signal_cerror (0, DSO_FILENAME (reference_name),
N_("relocation error"),
make_string ("symbol ", undef_name, ", version ",
version->name,
@@ -780,9 +776,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
? version->name : "");
/* XXX We cannot translate the message. */
- _dl_signal_cerror (0, (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ _dl_signal_cerror (0, DSO_FILENAME (reference_name),
N_("symbol lookup error"),
make_string (undefined_msg, undef_name,
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)
{
_dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'",
- (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ DSO_FILENAME (reference_name),
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,
protected ? "protected" : "normal", undef_name);
if (version)
diff --git a/elf/dl-open.c b/elf/dl-open.c
index 92fae7f..0f054bf 100644
--- a/elf/dl-open.c
+++ b/elf/dl-open.c
@@ -733,7 +733,7 @@ void
_dl_show_scope (struct link_map *l, int from)
{
_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)
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",
l->l_scope[scope_cnt]->r_list[cnt]->l_name);
else
- _dl_debug_printf_c (" %s", rtld_progname);
+ _dl_debug_printf_c (" %s", RTLD_PROGNAME);
_dl_debug_printf_c ("\n");
}
diff --git a/elf/dl-reloc.c b/elf/dl-reloc.c
index 73d98f8..5c54310 100644
--- a/elf/dl-reloc.c
+++ b/elf/dl-reloc.c
@@ -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))
_dl_debug_printf ("\nrelocation processing: %s%s\n",
- l->l_name[0] ? l->l_name : rtld_progname,
- lazy ? " (lazy)" : "");
+ DSO_FILENAME (l->l_name), lazy ? " (lazy)" : "");
/* 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
@@ -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");
fatal:
_dl_fatal_printf (errstring,
- rtld_progname ?: "<program name unknown>",
+ RTLD_PROGNAME,
l->l_name);
}
diff --git a/elf/dl-version.c b/elf/dl-version.c
index c02baa0..62be4ae 100644
--- a/elf/dl-version.c
+++ b/elf/dl-version.c
@@ -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))
_dl_debug_printf ("\
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);
if (__builtin_expect (map->l_info[VERSYMIDX (DT_VERDEF)] == NULL, 0))
@@ -162,7 +162,7 @@ no version information available (required by ", name, ")");
name, ")");
result = 1;
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);
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),
" of Verneed record\n");
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);
}
@@ -234,8 +234,7 @@ _dl_check_map_versions (struct link_map *map, int verbose, int trace_mode)
while (1)
{
/* Match the symbol. */
- result |= match_symbol ((*map->l_name
- ? map->l_name : rtld_progname),
+ result |= match_symbol (DSO_FILENAME (map->l_name),
map->l_ns, aux->vna_hash,
strtab + aux->vna_name,
needed->l_real, verbose,
diff --git a/elf/rtld.c b/elf/rtld.c
index 23238ad..91da88c 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -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))
GLRO(dl_trace_prelink_map) = l;
_dl_printf ("\t%s => %s (0x%0*Zx, 0x%0*Zx)",
- l->l_libname->name[0] ? l->l_libname->name
- : rtld_progname ?: "<main program>",
- l->l_name[0] ? l->l_name
- : rtld_progname ?: "<main program>",
+ DSO_FILENAME (l->l_libname->name),
+ DSO_FILENAME (l->l_name),
(int) sizeof l->l_map_start * 2,
(size_t) l->l_map_start,
(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;
}
- _dl_printf ("\t%s:\n",
- map->l_name[0] ? map->l_name : rtld_progname);
+ _dl_printf ("\t%s:\n", DSO_FILENAME (map->l_name));
while (1)
{
@@ -2324,7 +2321,7 @@ print_unresolved (int errcode __attribute__ ((unused)), const char *objname,
const char *errstring)
{
if (objname[0] == '\0')
- objname = rtld_progname ?: "<main program>";
+ objname = RTLD_PROGNAME;
_dl_error_printf ("%s (%s)\n", errstring, objname);
}
@@ -2334,7 +2331,7 @@ static void
print_missing_version (int errcode __attribute__ ((unused)),
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);
}
diff --git a/elf/tst-null-argv-lib.c b/elf/tst-null-argv-lib.c
new file mode 100644
index 0000000..e754299
--- /dev/null
+++ b/elf/tst-null-argv-lib.c
@@ -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;
+}
diff --git a/elf/tst-null-argv.c b/elf/tst-null-argv.c
new file mode 100644
index 0000000..dc242e4
--- /dev/null
+++ b/elf/tst-null-argv.c
@@ -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>
diff --git a/ports/ChangeLog.aarch64 b/ports/ChangeLog.aarch64
index aed68ef..46def45 100644
--- a/ports/ChangeLog.aarch64
+++ b/ports/ChangeLog.aarch64
@@ -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>
* sysdeps/aarch64/machine-gmon.h: Remove.
diff --git a/ports/ChangeLog.arm b/ports/ChangeLog.arm
index dcf3605..b1f14df 100644
--- a/ports/ChangeLog.arm
+++ b/ports/ChangeLog.arm
@@ -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>
* sysdeps/arm/libm-test-ulps: Update test names.
diff --git a/ports/ChangeLog.hppa b/ports/ChangeLog.hppa
index 6a1cf1d..f31de9a 100644
--- a/ports/ChangeLog.hppa
+++ b/ports/ChangeLog.hppa
@@ -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>
* sysdeps/hppa/fpu/libm-test-ulps: Update test names.
diff --git a/ports/ChangeLog.m68k b/ports/ChangeLog.m68k
index 479f5e0..b5a0c6d 100644
--- a/ports/ChangeLog.m68k
+++ b/ports/ChangeLog.m68k
@@ -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>
* sysdeps/m68k/coldfire/fpu/libm-test-ulps: Update test names.
diff --git a/ports/ChangeLog.microblaze b/ports/ChangeLog.microblaze
index f183b9c..32fcfbc 100644
--- a/ports/ChangeLog.microblaze
+++ b/ports/ChangeLog.microblaze
@@ -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>
* sysdeps/microblaze/libm-test-ulps: Update test names.
diff --git a/ports/ChangeLog.mips b/ports/ChangeLog.mips
index aff0572..a509992 100644
--- a/ports/ChangeLog.mips
+++ b/ports/ChangeLog.mips
@@ -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>
* sysdeps/unix/sysv/linux/mips/bits/siginfo.h (siginfo_t): Add
diff --git a/ports/ChangeLog.tile b/ports/ChangeLog.tile
index 33ffa71..dcfe00e 100644
--- a/ports/ChangeLog.tile
+++ b/ports/ChangeLog.tile
@@ -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>
* sysdeps/tile/tilegx/Makefile ($(cflags-mcmodel-large)):
diff --git a/ports/sysdeps/aarch64/dl-machine.h b/ports/sysdeps/aarch64/dl-machine.h
index 702a7c0..c91b0c4 100644
--- a/ports/sysdeps/aarch64/dl-machine.h
+++ b/ports/sysdeps/aarch64/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/ports/sysdeps/arm/dl-machine.h b/ports/sysdeps/arm/dl-machine.h
index 6e09aa1..4cf87a9 100644
--- a/ports/sysdeps/arm/dl-machine.h
+++ b/ports/sysdeps/arm/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/ports/sysdeps/hppa/dl-machine.h b/ports/sysdeps/hppa/dl-machine.h
index a66be7b..d2411a6 100644
--- a/ports/sysdeps/hppa/dl-machine.h
+++ b/ports/sysdeps/hppa/dl-machine.h
@@ -673,8 +673,7 @@ elf_machine_rela (struct link_map *map,
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("%s: Symbol `%s' has different size in shared object, "
"consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
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){
_dl_error_printf ("%s: In elf_machine_rela_relative "
"ELF32_R_SYM (reloc->r_info) != 0. Aborting.",
- rtld_progname ?: "<program name unknown>");
+ RTLD_PROGNAME);
ABORT_INSTRUCTION; /* Crash. */
}
diff --git a/ports/sysdeps/m68k/dl-machine.h b/ports/sysdeps/m68k/dl-machine.h
index b2ead16..acaabc1 100644
--- a/ports/sysdeps/m68k/dl-machine.h
+++ b/ports/sysdeps/m68k/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/ports/sysdeps/microblaze/dl-machine.h b/ports/sysdeps/microblaze/dl-machine.h
index 7471bdd..ad1fc3e 100644
--- a/ports/sysdeps/microblaze/dl-machine.h
+++ b/ports/sysdeps/microblaze/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/ports/sysdeps/mips/dl-lookup.c b/ports/sysdeps/mips/dl-lookup.c
index 02090e5..6d8f744 100644
--- a/ports/sysdeps/mips/dl-lookup.c
+++ b/ports/sysdeps/mips/dl-lookup.c
@@ -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))
_dl_debug_printf ("symbol=%s; lookup in file=%s [%lu]\n",
undef_name,
- map->l_name[0] ? map->l_name : rtld_progname,
+ DSO_FILENAME (map->l_name),
map->l_ns);
/* 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))
_dl_debug_printf ("\
\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,
- undef_map->l_name[0]
- ? undef_map->l_name : rtld_progname,
+ DSO_FILENAME (undef_map->l_name),
undef_map->l_ns);
}
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;
/* XXX We cannot translate the message. */
- _dl_signal_cerror (0, (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ _dl_signal_cerror (0, DSO_FILENAME (reference_name),
N_("relocation error"),
make_string ("symbol ", undef_name, ", version ",
version->name,
@@ -797,9 +794,7 @@ _dl_lookup_symbol_x (const char *undef_name, struct link_map *undef_map,
? version->name : "");
/* XXX We cannot translate the message. */
- _dl_signal_cerror (0, (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ _dl_signal_cerror (0, DSO_FILENAME (reference_name),
N_("symbol lookup error"),
make_string (undefined_msg, undef_name,
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)
{
_dl_debug_printf ("binding file %s [%lu] to %s [%lu]: %s symbol `%s'",
- (reference_name[0]
- ? reference_name
- : (rtld_progname ?: "<main program>")),
+ DSO_FILENAME (reference_name),
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,
protected ? "protected" : "normal", undef_name);
if (version)
diff --git a/ports/sysdeps/mips/dl-machine.h b/ports/sysdeps/mips/dl-machine.h
index a7c784f..dae938f 100644
--- a/ports/sysdeps/mips/dl-machine.h
+++ b/ports/sysdeps/mips/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/ports/sysdeps/tile/dl-machine.h b/ports/sysdeps/tile/dl-machine.h
index 4e78bb8..05aa2d8 100644
--- a/ports/sysdeps/tile/dl-machine.h
+++ b/ports/sysdeps/tile/dl-machine.h
@@ -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]);
_dl_error_printf ("%s: Symbol `%s' has different size in shared"
" object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
index 3f44809..cb17204 100644
--- a/sysdeps/generic/ldsodefs.h
+++ b/sysdeps/generic/ldsodefs.h
@@ -128,6 +128,11 @@ typedef struct link_map *lookup_t;
| ((PROT_WRITE | PROT_EXEC) << (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
hash values. */
diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h
index 0b4c467..b6fc805 100644
--- a/sysdeps/i386/dl-machine.h
+++ b/sysdeps/i386/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/powerpc/powerpc32/dl-machine.c b/sysdeps/powerpc/powerpc32/dl-machine.c
index bd42fdf..c75c173 100644
--- a/sysdeps/powerpc/powerpc32/dl-machine.c
+++ b/sysdeps/powerpc/powerpc32/dl-machine.c
@@ -510,8 +510,7 @@ __process_machine_rela (struct link_map *map,
strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr, (char *) finaladdr, MIN (sym->st_size,
refsym->st_size));
diff --git a/sysdeps/powerpc/powerpc64/dl-machine.h b/sysdeps/powerpc/powerpc64/dl-machine.h
index 14ade21..059fdaf 100644
--- a/sysdeps/powerpc/powerpc64/dl-machine.h
+++ b/sysdeps/powerpc/powerpc64/dl-machine.h
@@ -734,8 +734,7 @@ elf_machine_rela (struct link_map *map,
_dl_error_printf ("%s: Symbol `%s' has different size" \
" in shared object," \
" consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (char *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/s390/s390-32/dl-machine.h b/sysdeps/s390/s390-32/dl-machine.h
index 544f843..aa8f1a5 100644
--- a/sysdeps/s390/s390-32/dl-machine.h
+++ b/sysdeps/s390/s390-32/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/s390/s390-64/dl-machine.h b/sysdeps/s390/s390-64/dl-machine.h
index 0504eb6..32f7a2c 100644
--- a/sysdeps/s390/s390-64/dl-machine.h
+++ b/sysdeps/s390/s390-64/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/sh/dl-machine.h b/sysdeps/sh/dl-machine.h
index 25cd52a..da7b9c1 100644
--- a/sysdeps/sh/dl-machine.h
+++ b/sysdeps/sh/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/sparc/sparc32/dl-machine.h b/sysdeps/sparc/sparc32/dl-machine.h
index 71e120f..30f9246 100644
--- a/sysdeps/sparc/sparc32/dl-machine.h
+++ b/sysdeps/sparc/sparc32/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/sparc/sparc64/dl-machine.h b/sysdeps/sparc/sparc64/dl-machine.h
index d6d20c7..3bce5d1 100644
--- a/sysdeps/sparc/sparc64/dl-machine.h
+++ b/sysdeps/sparc/sparc64/dl-machine.h
@@ -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]);
_dl_error_printf ("\
%s: Symbol `%s' has different size in shared object, consider re-linking\n",
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ RTLD_PROGNAME, strtab + refsym->st_name);
}
memcpy (reloc_addr_arg, (void *) value,
MIN (sym->st_size, refsym->st_size));
diff --git a/sysdeps/x86_64/dl-machine.h b/sysdeps/x86_64/dl-machine.h
index 4768c69..116fed1 100644
--- a/sysdeps/x86_64/dl-machine.h
+++ b/sysdeps/x86_64/dl-machine.h
@@ -430,9 +430,7 @@ elf_machine_rela (struct link_map *map, const ElfW(Rela) *reloc,
# endif
strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]);
- _dl_error_printf (fmt,
- rtld_progname ?: "<program name unknown>",
- strtab + refsym->st_name);
+ _dl_error_printf (fmt, RTLD_PROGNAME, strtab + refsym->st_name);
}
break;
# ifndef RESOLVE_CONFLICT_FIND_MAP