1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-28 00:21:52 +03:00
2005-01-09  Ulrich Drepper  <drepper@redhat.com>

	* elf/dl-debug.c (_dl_debug_initialize): Take extra parameter and
	use it to select the r_debug structure for that namespace.
	* elf/dl-close.c (_dl_close): Adjust call to _dl_debug_initialize.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
	* elf/dl-open.c (_dl_open): Likewise.
	* elf/rtld.c (dl_main): Likewise.
	* sysdeps/generic/ldsodefs.h (struct link_namespaces): Add _ns_debug
	member.
	(_dl_debug_initialize): Add new parameter in declaration.

	* elf/dl-close.c (_dl_close): Make sure auditing callbacks are not
	called for the auditing objects themselves.
	* elf/dl-load.c (_dl_map_object_from_fd): Likewise.
This commit is contained in:
Ulrich Drepper
2005-01-09 08:29:25 +00:00
parent 4e2d549137
commit 29f976542b
7 changed files with 58 additions and 30 deletions

View File

@ -1,5 +1,5 @@
/* Communicate dynamic linker state to the debugger at runtime.
Copyright (C) 1996, 1998, 2000, 2002, 2004 Free Software Foundation, Inc.
Copyright (C) 1996, 1998,2000,2002,2004,2005 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
@ -32,20 +32,25 @@ struct r_debug _r_debug;
struct r_debug *
internal_function
_dl_debug_initialize (ElfW(Addr) ldbase)
_dl_debug_initialize (ElfW(Addr) ldbase, Lmid_t ns)
{
if (_r_debug.r_brk == 0 || ldbase != 0)
struct r_debug *r;
if (ns == LM_ID_BASE)
r = &_r_debug;
else
r = &GL(dl_ns)[ns]._ns_debug;
if (r->r_brk == 0 || ldbase != 0)
{
/* Tell the debugger where to find the map of loaded objects. */
_r_debug.r_version = 1 /* R_DEBUG_VERSION XXX */;
_r_debug.r_ldbase = ldbase;
// XXX This is problematic. It means we cannot tell the debugger
// XXX about namespaces other than the main one.
_r_debug.r_map = GL(dl_ns)[LM_ID_BASE]._ns_loaded;
_r_debug.r_brk = (ElfW(Addr)) &_dl_debug_state;
r->r_version = 1 /* R_DEBUG_VERSION XXX */;
r->r_ldbase = ldbase ?: _r_debug.r_ldbase;
r->r_map = GL(dl_ns)[ns]._ns_loaded;
r->r_brk = (ElfW(Addr)) &_dl_debug_state;
}
return &_r_debug;
return r;
}