diff options
author | Andrew Cagney <cagney@redhat.com> | 2004-06-09 20:03:33 +0000 |
---|---|---|
committer | Andrew Cagney <cagney@redhat.com> | 2004-06-09 20:03:33 +0000 |
commit | 567c8c68418a25659fdc39e131a9169f59edf339 (patch) | |
tree | e244d3e89ed9d8e746e68f7af66a8a34a793fab0 /gdb/solib-svr4.c | |
parent | 9ff1fa76c22f08b45be9a03879608539e4923a5d (diff) | |
download | gdb-567c8c68418a25659fdc39e131a9169f59edf339.tar.gz |
2004-06-09 Andrew Cagney <cagney@gnu.org>
* solib-svr4.c [HANDLE_SVR4_EXEC_EMULATORS]: Delete #ifdef code.
Diffstat (limited to 'gdb/solib-svr4.c')
-rw-r--r-- | gdb/solib-svr4.c | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index abf2948a1f7..7976e6707f2 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -272,133 +272,6 @@ bfd_lookup_symbol (bfd *abfd, char *symname, flagword sect_flags) return symaddr; } -#ifdef HANDLE_SVR4_EXEC_EMULATORS - -/* - Solaris BCP (the part of Solaris which allows it to run SunOS4 - a.out files) throws in another wrinkle. Solaris does not fill - in the usual a.out link map structures when running BCP programs, - the only way to get at them is via groping around in the dynamic - linker. - The dynamic linker and it's structures are located in the shared - C library, which gets run as the executable's "interpreter" by - the kernel. - - Note that we can assume nothing about the process state at the time - we need to find these structures. We may be stopped on the first - instruction of the interpreter (C shared library), the first - instruction of the executable itself, or somewhere else entirely - (if we attached to the process for example). - */ - -static char *debug_base_symbols[] = -{ - "r_debug", /* Solaris 2.3 */ - "_r_debug", /* Solaris 2.1, 2.2 */ - NULL -}; - -static int look_for_base (int, CORE_ADDR); - -/* - - LOCAL FUNCTION - - look_for_base -- examine file for each mapped address segment - - SYNOPSYS - - static int look_for_base (int fd, CORE_ADDR baseaddr) - - DESCRIPTION - - This function is passed to proc_iterate_over_mappings, which - causes it to get called once for each mapped address space, with - an open file descriptor for the file mapped to that space, and the - base address of that mapped space. - - Our job is to find the debug base symbol in the file that this - fd is open on, if it exists, and if so, initialize the dynamic - linker structure base address debug_base. - - Note that this is a computationally expensive proposition, since - we basically have to open a bfd on every call, so we specifically - avoid opening the exec file. - */ - -static int -look_for_base (int fd, CORE_ADDR baseaddr) -{ - bfd *interp_bfd; - CORE_ADDR address = 0; - char **symbolp; - - /* If the fd is -1, then there is no file that corresponds to this - mapped memory segment, so skip it. Also, if the fd corresponds - to the exec file, skip it as well. */ - - if (fd == -1 - || (exec_bfd != NULL - && fdmatch (fileno ((FILE *) (exec_bfd->iostream)), fd))) - { - return (0); - } - - /* Try to open whatever random file this fd corresponds to. Note that - we have no way currently to find the filename. Don't gripe about - any problems we might have, just fail. */ - - if ((interp_bfd = bfd_fdopenr ("unnamed", gnutarget, fd)) == NULL) - { - return (0); - } - if (!bfd_check_format (interp_bfd, bfd_object)) - { - /* FIXME-leak: on failure, might not free all memory associated with - interp_bfd. */ - bfd_close (interp_bfd); - return (0); - } - - /* Now try to find our debug base symbol in this file, which we at - least know to be a valid ELF executable or shared library. */ - - for (symbolp = debug_base_symbols; *symbolp != NULL; symbolp++) - { - address = bfd_lookup_symbol (interp_bfd, *symbolp, 0); - if (address != 0) - { - break; - } - } - if (address == 0) - { - /* FIXME-leak: on failure, might not free all memory associated with - interp_bfd. */ - bfd_close (interp_bfd); - return (0); - } - - /* Eureka! We found the symbol. But now we may need to relocate it - by the base address. If the symbol's value is less than the base - address of the shared library, then it hasn't yet been relocated - by the dynamic linker, and we have to do it ourself. FIXME: Note - that we make the assumption that the first segment that corresponds - to the shared library has the base address to which the library - was relocated. */ - - if (address < baseaddr) - { - address += baseaddr; - } - debug_base = address; - /* FIXME-leak: on failure, might not free all memory associated with - interp_bfd. */ - bfd_close (interp_bfd); - return (1); -} -#endif /* HANDLE_SVR4_EXEC_EMULATORS */ - /* LOCAL FUNCTION @@ -579,11 +452,6 @@ locate_base (void) if (exec_bfd != NULL && bfd_get_flavour (exec_bfd) == bfd_target_elf_flavour) debug_base = elf_locate_base (); -#ifdef HANDLE_SVR4_EXEC_EMULATORS - /* Try it the hard way for emulated executables. */ - else if (!ptid_equal (inferior_ptid, null_ptid) && target_has_execution) - proc_iterate_over_mappings (look_for_base); -#endif } return (debug_base); } |