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 7cd9634526..1d7b555902 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 c25b62ee4c..4a1f83d173 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 c01ca9ef68..6f40414cbe 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 d63086d99c..11e3cd8773 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 cd1c236b2e..1c36f501bc 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 798784543b..8257c17030 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 c5d1674aa4..6b245f0022 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 fe4d2a07da..a657eb6c40 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 dd182c9155..757b6ec56b 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 68f8daccb9..39f463eae1 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 92fae7f59b..0f054bfca2 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 73d98f8c2e..5c5431098c 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 c02baa0600..62be4aef75 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 23238ad3fc..91da88cdd1 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -1840,10 +1840,8 @@ ERROR: ld.so: object