From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 22615 invoked by alias); 6 Jul 2009 09:45:23 -0000 Received: (qmail 22512 invoked by uid 22791); 6 Jul 2009 09:45:15 -0000 X-SWARE-Spam-Status: No, hits=-1.4 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Received: from smtp2-g21.free.fr (HELO smtp2-g21.free.fr) (212.27.42.2) by sourceware.org (qpsmtpd/0.43rc1) with ESMTP; Mon, 06 Jul 2009 09:45:10 +0000 Received: from smtp2-g21.free.fr (localhost [127.0.0.1]) by smtp2-g21.free.fr (Postfix) with ESMTP id B84BD4B01AA for ; Mon, 6 Jul 2009 11:45:02 +0200 (CEST) Received: from Macintosh-2.local (boi78-1-82-232-198-173.fbx.proxad.net [82.232.198.173]) by smtp2-g21.free.fr (Postfix) with ESMTP id B57ED4B01B2 for ; Mon, 6 Jul 2009 11:44:59 +0200 (CEST) Received: by Macintosh-2.local (Postfix, from userid 501) id 3C1A3C17B61; Mon, 6 Jul 2009 09:57:41 +0200 (CEST) Date: Mon, 06 Jul 2009 09:45:00 -0000 From: Tristan Gingold To: gdb-patches@sourceware.org Subject: [RFA Darwin]: Use bfd_mach_o_lookup_command to get interpreter Message-ID: <20090706075741.GA77404@Macintosh-2.local> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.4.2.3i X-IsSubscribed: yes Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org X-SW-Source: 2009-07/txt/msg00130.txt.bz2 Hi, a few weeks ago, I changed the BFD back-end so that the interpreter path is not put anymore into a section. This patch adjust the way gdb retrieve the interpreter: it is now get directly from the corresponding load command. (As a good news this also simplifies the code). (Maybe obvious or Mach-O maintainer ?) Tristan. 2009-07-06 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. Index: solib-darwin.c =================================================================== RCS file: /cvs/src/src/gdb/solib-darwin.c,v retrieving revision 1.6 diff -u -p -r1.6 solib-darwin.c --- solib-darwin.c 2 Jul 2009 17:25:58 -0000 1.6 +++ solib-darwin.c 6 Jul 2009 07:57:13 -0000 @@ -159,27 +159,20 @@ lookup_symbol_from_bfd (bfd *abfd, char } /* 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;