mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-19 13:40:59 +08: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:
parent
d0501bfbe2
commit
b937534868
47
ChangeLog
47
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.
|
||||
|
4
NEWS
4
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).
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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 ? ": " : "",
|
||||
|
@ -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. */
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
@ -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");
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
13
elf/rtld.c
13
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);
|
||||
}
|
||||
|
||||
|
24
elf/tst-null-argv-lib.c
Normal file
24
elf/tst-null-argv-lib.c
Normal 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
35
elf/tst-null-argv.c
Normal 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>
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
|
@ -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)):
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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. */
|
||||
}
|
||||
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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)
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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. */
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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));
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user