From 023e4e81acd973bf79e07681690ca4196bf2e37d Mon Sep 17 00:00:00 2001 From: Tristan Gingold Date: Mon, 10 Aug 2009 09:35:24 +0000 Subject: [PATCH] 2009-08-10 Tristan Gingold * solib-darwin.c (find_program_interpreter): Simplify the code by looking up for the load_dylinker command instead of reading the corresponding (but deprecated) section. (darwin_solib_create_inferior_hook): Adjust: do not free the interpreter path. --- gdb/ChangeLog | 8 ++++++++ gdb/solib-darwin.c | 30 +++++++++--------------------- 2 files changed, 17 insertions(+), 21 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 2d0b1b278d6..6a87a9bc067 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,11 @@ +2009-08-10 Tristan Gingold + + * solib-darwin.c (find_program_interpreter): Simplify the code by + looking up for the load_dylinker command instead of reading the + corresponding (but deprecated) section. + (darwin_solib_create_inferior_hook): Adjust: do not free the + interpreter path. + 2009-08-10 Tristan Gingold * i386-darwin-tdep.c (i386_m128_p): New function. diff --git a/gdb/solib-darwin.c b/gdb/solib-darwin.c index 97cc29c93db..8b96a6f2ca2 100644 --- a/gdb/solib-darwin.c +++ b/gdb/solib-darwin.c @@ -159,27 +159,20 @@ lookup_symbol_from_bfd (bfd *abfd, char *symname) } /* Return program interpreter string. */ + static gdb_byte * find_program_interpreter (void) { gdb_byte *buf = NULL; - /* If we have an exec_bfd, use its section table. */ + /* If we have an exec_bfd, get the interpreter from the load commands. */ if (exec_bfd) { - struct bfd_section *dylinker_sect; + bfd_mach_o_load_command *cmd; - dylinker_sect = bfd_get_section_by_name (exec_bfd, "LC_LOAD_DYLINKER"); - if (dylinker_sect != NULL) - { - int sect_size = bfd_section_size (exec_bfd, dylinker_sect); - - buf = xmalloc (sect_size); - if (bfd_get_section_contents (exec_bfd, dylinker_sect, - buf, 0, sect_size)) - return buf; - xfree (buf); - } + if (bfd_mach_o_lookup_command (exec_bfd, + BFD_MACH_O_LC_LOAD_DYLINKER, &cmd) == 1) + return cmd->command.dylinker.name_str; } /* If we didn't find it, read from memory. @@ -324,11 +317,8 @@ darwin_solib_create_inferior_hook (void) } } if (!dyld_bfd) - { - xfree (interp_name); - return; - } - + return; + if (!inf->attach_flag) { /* We find the dynamic linker's base address by examining @@ -340,9 +330,8 @@ darwin_solib_create_inferior_hook (void) else { /* FIXME: todo. - Get address of __DATA.__dyld in exec_bfd, read address at offset 0 + Get address of __DATA.__dyld in exec_bfd, read address at offset 0. */ - xfree (interp_name); return; } @@ -351,7 +340,6 @@ darwin_solib_create_inferior_hook (void) lookup_symbol_from_bfd (dyld_bfd, "_dyld_all_image_infos"); bfd_close (dyld_bfd); - xfree (interp_name); if (dyld_all_image_addr == 0) return; -- 2.30.2