From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9714 invoked by alias); 27 Jul 2002 01:32:04 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 9697 invoked from network); 27 Jul 2002 01:32:02 -0000 Received: from unknown (HELO potter.sfbay.redhat.com) (205.180.83.107) by sources.redhat.com with SMTP; 27 Jul 2002 01:32:02 -0000 Received: from romulus.sfbay.redhat.com (IDENT:paN5n9FyNT8zm+MnlTEIjxbNpZJ/aatd@romulus.sfbay.redhat.com [172.16.27.251]) by potter.sfbay.redhat.com (8.11.6/8.11.6) with ESMTP id g6R1WDQ07403 for ; Fri, 26 Jul 2002 18:32:13 -0700 Received: (from kev@localhost) by romulus.sfbay.redhat.com (8.11.6/8.11.6) id g6R1VxT20573 for gdb-patches@sources.redhat.com; Fri, 26 Jul 2002 18:31:59 -0700 Date: Fri, 26 Jul 2002 18:46:00 -0000 From: Kevin Buettner Message-Id: <1020727013159.ZM20572@localhost.localdomain> To: gdb-patches@sources.redhat.com Subject: [PATCH] Irix OSABI support MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii X-SW-Source: 2002-07/txt/msg00542.txt.bz2 I've just committed the patch below. I'll commit the configury changes separately. * osabi.h (gdb_osabi): Add new enum constant GDB_OSABI_IRIX. * osabi.c (gdb_osabi_names): Add corresponding string for Irix. * mips-irix-tdep.c: New file. Index: osabi.h =================================================================== RCS file: /cvs/src/src/gdb/osabi.h,v retrieving revision 1.3 diff -u -p -r1.3 osabi.h --- osabi.h 15 Jun 2002 12:26:31 -0000 1.3 +++ osabi.h 27 Jul 2002 01:24:44 -0000 @@ -39,6 +39,7 @@ enum gdb_osabi GDB_OSABI_WINCE, GDB_OSABI_GO32, GDB_OSABI_NETWARE, + GDB_OSABI_IRIX, GDB_OSABI_LYNXOS, GDB_OSABI_ARM_EABI_V1, Index: osabi.c =================================================================== RCS file: /cvs/src/src/gdb/osabi.c,v retrieving revision 1.4 diff -u -p -r1.4 osabi.c --- osabi.c 4 Jul 2002 15:36:51 -0000 1.4 +++ osabi.c 27 Jul 2002 01:24:44 -0000 @@ -42,6 +42,7 @@ static const char * const gdb_osabi_name "Windows CE", "DJGPP", "NetWare", + "Irix", "LynxOS", "ARM EABI v1", Index: mips-irix-tdep.c =================================================================== RCS file: mips-irix-tdep.c diff -N mips-irix-tdep.c --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ mips-irix-tdep.c 27 Jul 2002 01:24:44 -0000 @@ -0,0 +1,95 @@ +/* Target-dependent code for the MIPS architecture running on IRIX, + for GDB, the GNU Debugger. + + Copyright 2002 Free Software Foundation, Inc. + + This file is part of GDB. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include "defs.h" +#include "osabi.h" + +#include "elf-bfd.h" + +static void +mips_irix_elf_osabi_sniff_abi_tag_sections (bfd *abfd, asection *sect, + void *obj) +{ + enum gdb_osabi *os_ident_ptr = obj; + const char *name; + unsigned int sectsize; + + name = bfd_get_section_name (abfd, sect); + sectsize = bfd_section_size (abfd, sect); + + if (strncmp (name, ".MIPS.", 6) == 0 && sectsize > 0) + { + /* The presence of a section named with a ".MIPS." prefix is + indicative of an IRIX binary. */ + *os_ident_ptr = GDB_OSABI_IRIX; + } +} + +static enum gdb_osabi +mips_irix_elf_osabi_sniffer (bfd *abfd) +{ + unsigned int elfosabi; + enum gdb_osabi osabi = GDB_OSABI_UNKNOWN; + + /* If the generic sniffer gets a hit, return and let other sniffers + get a crack at it. */ + bfd_map_over_sections (abfd, + generic_elf_osabi_sniff_abi_tag_sections, + &osabi); + if (osabi != GDB_OSABI_UNKNOWN) + return GDB_OSABI_UNKNOWN; + + elfosabi = elf_elfheader (abfd)->e_ident[EI_OSABI]; + + if (elfosabi == ELFOSABI_NONE) + { + /* When elfosabi is ELFOSABI_NONE (0), then the ELF structures in the + file are conforming to the base specification for that machine + (there are no OS-specific extensions). In order to determine the + real OS in use we must look for OS notes that have been added. + + For IRIX, we simply look for sections named with .MIPS. as + prefixes. */ + bfd_map_over_sections (abfd, + mips_irix_elf_osabi_sniff_abi_tag_sections, + &osabi); + } + return osabi; +} + +static void +mips_irix_init_abi (struct gdbarch_info info, + struct gdbarch *gdbarch) +{ +} + +void +_initialize_mips_irix_tdep (void) +{ + /* Register an ELF OS ABI sniffer for IRIX binaries. */ + gdbarch_register_osabi_sniffer (bfd_arch_mips, + bfd_target_elf_flavour, + mips_irix_elf_osabi_sniffer); + + gdbarch_register_osabi (bfd_arch_mips, GDB_OSABI_IRIX, + mips_irix_init_abi); +}