diff options
-rw-r--r-- | trunk/ChangeLog.cross | 6 | ||||
-rw-r--r-- | trunk/src/arch-mips.c | 1 | ||||
-rw-r--r-- | trunk/src/ld-libs.c | 12 |
3 files changed, 17 insertions, 2 deletions
diff --git a/trunk/ChangeLog.cross b/trunk/ChangeLog.cross index 8201d0d..2257aa7 100644 --- a/trunk/ChangeLog.cross +++ b/trunk/ChangeLog.cross @@ -1,3 +1,9 @@ +2007-08-08 Mark Hatle <mark.hatle@windriver.com> + + * src/arch-mips.c: add /lib32/ld.so.1 as an alternative 32-bit linker + * src/ld-libs.c: add a check for MIPS n32, and adjust ld_dirs as + necessary + 2007-10-11 Richard Sandiford <richard@codesourcery.com> * src/space.c (find_readonly_space): If a new PT_LOAD header is needed, diff --git a/trunk/src/arch-mips.c b/trunk/src/arch-mips.c index f5a2361..a57b6c8 100644 --- a/trunk/src/arch-mips.c +++ b/trunk/src/arch-mips.c @@ -992,6 +992,7 @@ PL_ARCH = { .machine = EM_MIPS, .max_reloc_size = 4, .dynamic_linker = "/lib/ld.so.1", + .dynamic_linker_alt = "/lib32/ld.so.1", /* MIPS does not use COPY relocs or jump slots. Pick a value outside the ELF32_R_TYPE range. */ .R_COPY = ~0U, diff --git a/trunk/src/ld-libs.c b/trunk/src/ld-libs.c index d14b7b7..f36eee1 100644 --- a/trunk/src/ld-libs.c +++ b/trunk/src/ld-libs.c @@ -302,7 +302,7 @@ free_path (struct search_path *path) } void -load_ld_so_conf (int use_64bit) +load_ld_so_conf (int use_64bit, int use_mipsn32) { int fd; FILE *conf; @@ -319,6 +319,13 @@ load_ld_so_conf (int use_64bit) add_dir (&ld_dirs, "/usr/lib64/tls", strlen ("/usr/lib64/tls")); add_dir (&ld_dirs, "/usr/lib64", strlen ("/usr/lib64")); } + else if (use_mipsn32) + { + add_dir (&ld_dirs, "/lib32/tls", strlen ("/lib32/tls")); + add_dir (&ld_dirs, "/lib32", strlen ("/lib32")); + add_dir (&ld_dirs, "/usr/lib32/tls", strlen ("/usr/lib32/tls")); + add_dir (&ld_dirs, "/usr/lib32", strlen ("/usr/lib32")); + } else { add_dir (&ld_dirs, "/lib/tls", strlen ("/lib/tls")); @@ -1235,7 +1242,8 @@ main(int argc, char **argv) if (dso == NULL) error (1, errno, "Could not open %s", argv[remaining]); - load_ld_so_conf (gelf_getclass (dso->elf) == ELFCLASS64); + load_ld_so_conf (gelf_getclass (dso->elf) == ELFCLASS64, + ( dso->ehdr.e_machine == EM_MIPS) && ( dso->ehdr.e_flags & EF_MIPS_ABI2 ) ); if (multiple) printf ("%s:\n", argv[remaining]); |