From patchwork Tue Oct 20 18:10:49 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aleksandar Ristovski X-Patchwork-Id: 9277 Received: (qmail 95163 invoked by alias); 20 Oct 2015 18:11:31 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 95053 invoked by uid 89); 20 Oct 2015 18:11:30 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_LOW, SPF_SOFTFAIL autolearn=no version=3.3.2 X-HELO: smtp-a02.blackberry.com Received: from smtp-a02.blackberry.com (HELO smtp-a02.blackberry.com) (208.65.78.91) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 20 Oct 2015 18:11:24 +0000 Received: from mhs103cnc.rim.net ([10.65.141.77]) by mhs215cnc-app.rim.net with ESMTP; 20 Oct 2015 14:11:20 -0400 Received: from unknown (HELO qnxws9580.ott.qnx.com) ([10.65.140.253]) by mhs103cnc.rim.net with ESMTP; 20 Oct 2015 18:11:18 +0000 From: Aleksandar Ristovski To: gdb-patches@sourceware.org Cc: palves@redhat.com, Aleksandar Ristovski Subject: [PATCH 2/2] [nto] Improve ABI sniffing. Date: Tue, 20 Oct 2015 14:10:49 -0400 Message-Id: <1445364649-12175-3-git-send-email-aristovski@qnx.com> In-Reply-To: <1445364649-12175-1-git-send-email-aristovski@qnx.com> References: <5621218D.6070801@redhat.com> <1445364649-12175-1-git-send-email-aristovski@qnx.com> Use qnx specific notes to figure out the OS. gdb/ChangeLog: * gdb/nto-tdep.c (QNX_NOTE_NAME, QNX_INFO_SECT_NAME): New defines. (nto_sniff_abi_note_section): New function. (nto_elf_osabi_sniffer): Use new function to recognize nto specific binary. --- gdb/nto-tdep.c | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/gdb/nto-tdep.c b/gdb/nto-tdep.c index e50d302..48826cb 100644 --- a/gdb/nto-tdep.c +++ b/gdb/nto-tdep.c @@ -32,6 +32,9 @@ #include "gdbcore.h" #include "objfiles.h" +#define QNX_NOTE_NAME "QNX" +#define QNX_INFO_SECT_NAME "QNX_info" + #ifdef __CYGWIN__ #include #endif @@ -332,12 +335,51 @@ nto_dummy_supply_regset (struct regcache *regcache, char *regs) /* Do nothing. */ } +static void +nto_sniff_abi_note_section (bfd *abfd, asection *sect, void *obj) +{ + const char *sectname; + unsigned int sectsize; + char *note; // buffer holding the section contents + unsigned int namelen; + const char *name; + + sectname = bfd_get_section_name (abfd, sect); + sectsize = bfd_section_size (abfd, sect); + + /* TODO: limit the note size here, for now limit is 128 bytes + (enough to check the name and type). */ + if (sectsize > 128) + sectsize = 128; + + if (sectname && strstr (sectname, QNX_INFO_SECT_NAME) != NULL) + *(enum gdb_osabi *) obj = GDB_OSABI_QNXNTO; + + if (sectname && strstr (sectname, "note") != NULL) + { + note = alloca (sectsize); + bfd_get_section_contents (abfd, sect, note, 0, sectsize); + namelen = (unsigned int) bfd_h_get_32 (abfd, note); + name = note + 12; + + if (namelen > 0 + && (0 == strcmp (name, QNX_NOTE_NAME))) + *(enum gdb_osabi *) obj = GDB_OSABI_QNXNTO; + } +} + enum gdb_osabi nto_elf_osabi_sniffer (bfd *abfd) { - if (nto_is_nto_target) + enum gdb_osabi osabi = GDB_OSABI_UNKNOWN; + + bfd_map_over_sections (abfd, + nto_sniff_abi_note_section, + &osabi); + + if (osabi == GDB_OSABI_UNKNOWN && nto_is_nto_target) return nto_is_nto_target (abfd); - return GDB_OSABI_UNKNOWN; + return osabi; } static const char *nto_thread_state_str[] =