* [PATCH] Fix ppc32 (and probably mips) glibc build
@ 2004-10-14 15:28 Jakub Jelinek
0 siblings, 0 replies; only message in thread
From: Jakub Jelinek @ 2004-10-14 15:28 UTC (permalink / raw)
To: Ulrich Drepper; +Cc: Glibc hackers
Hi!
Grep found 3 more occurences of GL(dl_loaded), one of them killed ppc32
build.
2004-10-14 Jakub Jelinek <jakub@redhat.com>
* dlfcn/dlinfo.c (dlinfo_doit): Replace iteration over GL(dl_loaded)
chain with iteration over all namespaces' _ns_loaded chains.
* sysdeps/powerpc/powerpc32/dl-machine.c (__elf_preferred_address):
Likewise.
* sysdeps/mips/dl-machine.h (elf_machine_runtime_link_map): Likewise.
--- libc/dlfcn/dlinfo.c.jj 2004-10-14 07:55:31.000000000 +0200
+++ libc/dlfcn/dlinfo.c 2004-10-14 13:48:14.802418655 +0200
@@ -39,13 +39,15 @@ dlinfo_doit (void *argsblock)
#if 0
if (args->handle == RTLD_SELF)
{
+ Lmid_t nsid;
/* Find the highest-addressed object that CALLER is not below. */
- for (l = GL(dl_loaded); l != NULL; l = l->l_next)
- if (caller >= l->l_map_start && caller < l->l_map_end)
- /* There must be exactly one DSO for the range of the virtual
- memory. Otherwise something is really broken. */
- break;
+ for (nsid = 0; nsid < DL_NNS; ++nsid)
+ for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next)
+ if (caller >= l->l_map_start && caller < l->l_map_end)
+ /* There must be exactly one DSO for the range of the virtual
+ memory. Otherwise something is really broken. */
+ break;
if (l == NULL)
GLRO(dl_signal_error) (0, NULL, NULL, N_("\
--- libc/sysdeps/powerpc/powerpc32/dl-machine.c.jj 2004-03-05 11:23:44.000000000 +0100
+++ libc/sysdeps/powerpc/powerpc32/dl-machine.c 2004-10-14 13:51:26.518237404 +0200
@@ -106,6 +106,7 @@ __elf_preferred_address(struct link_map
{
ElfW(Addr) low, high;
struct link_map *l;
+ Lmid_t nsid;
/* If the object has a preference, load it there! */
if (mapstartpref != 0)
@@ -117,29 +118,30 @@ __elf_preferred_address(struct link_map
be superceded by the program's load address). */
low = 0x0003FFFF;
high = 0x70000000;
- for (l = GL(dl_loaded); l; l = l->l_next)
- {
- ElfW(Addr) mapstart, mapend;
- mapstart = l->l_map_start & ~(GLRO(dl_pagesize) - 1);
- mapend = l->l_map_end | (GLRO(dl_pagesize) - 1);
- assert (mapend > mapstart);
-
- /* Prefer gaps below the main executable, note that l ==
- _dl_loaded does not work for static binaries loading
- e.g. libnss_*.so. */
- if ((mapend >= high || l->l_type == lt_executable)
- && high >= mapstart)
- high = mapstart;
- else if (mapend >= low && low >= mapstart)
- low = mapend;
- else if (high >= mapend && mapstart >= low)
- {
- if (high - mapend >= mapstart - low)
- low = mapend;
- else
- high = mapstart;
- }
- }
+ for (nsid = 0; nsid < DL_NNS; ++nsid)
+ for (l = GL(dl_ns)[nsid]._ns_loaded; l; l = l->l_next)
+ {
+ ElfW(Addr) mapstart, mapend;
+ mapstart = l->l_map_start & ~(GLRO(dl_pagesize) - 1);
+ mapend = l->l_map_end | (GLRO(dl_pagesize) - 1);
+ assert (mapend > mapstart);
+
+ /* Prefer gaps below the main executable, note that l ==
+ _dl_loaded does not work for static binaries loading
+ e.g. libnss_*.so. */
+ if ((mapend >= high || l->l_type == lt_executable)
+ && high >= mapstart)
+ high = mapstart;
+ else if (mapend >= low && low >= mapstart)
+ low = mapend;
+ else if (high >= mapend && mapstart >= low)
+ {
+ if (high - mapend >= mapstart - low)
+ low = mapend;
+ else
+ high = mapstart;
+ }
+ }
high -= 0x10000; /* Allow some room between objects. */
maplength = (maplength | (GLRO(dl_pagesize) - 1)) + 1;
--- libc/sysdeps/mips/dl-machine.h.jj 2004-08-25 07:57:35.000000000 +0200
+++ libc/sysdeps/mips/dl-machine.h 2004-10-14 14:00:13.371350396 +0200
@@ -231,10 +231,11 @@ elf_machine_runtime_link_map (ElfW(Addr)
}
}
- {
- struct link_map *l = GL(dl_loaded);
+ struct link_map *l;
+ Lmid_t nsid;
- while (l)
+ for (nsid = 0; nsid < DL_NNS; ++nsid)
+ for (l = GL(dl_ns)[nsid]._ns_loaded; l != NULL; l = l->l_next)
{
ElfW(Addr) base, limit;
const ElfW(Phdr) *p = l->l_phdr;
@@ -250,9 +251,7 @@ elf_machine_runtime_link_map (ElfW(Addr)
return l;
}
}
- l = l->l_next;
}
- }
_dl_signal_error (0, NULL, NULL, "cannot find runtime link map");
return NULL;
Jakub
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-10-14 15:28 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2004-10-14 15:28 [PATCH] Fix ppc32 (and probably mips) glibc build Jakub Jelinek
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).