From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7329 invoked by alias); 5 Oct 2007 18:06:33 -0000 Received: (qmail 7316 invoked by uid 22791); 5 Oct 2007 18:06:29 -0000 X-Spam-Check-By: sourceware.org Received: from mtagate4.de.ibm.com (HELO mtagate4.de.ibm.com) (195.212.29.153) by sourceware.org (qpsmtpd/0.31) with ESMTP; Fri, 05 Oct 2007 18:06:24 +0000 Received: from d12nrmr1607.megacenter.de.ibm.com (d12nrmr1607.megacenter.de.ibm.com [9.149.167.49]) by mtagate4.de.ibm.com (8.13.8/8.13.8) with ESMTP id l95I6KWf126416 for ; Fri, 5 Oct 2007 18:06:20 GMT Received: from d12av02.megacenter.de.ibm.com (d12av02.megacenter.de.ibm.com [9.149.165.228]) by d12nrmr1607.megacenter.de.ibm.com (8.13.8/8.13.8/NCO v8.5) with ESMTP id l95I6KHk2203874 for ; Fri, 5 Oct 2007 20:06:20 +0200 Received: from d12av02.megacenter.de.ibm.com (loopback [127.0.0.1]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.13.3) with ESMTP id l95I6KmC030032 for ; Fri, 5 Oct 2007 20:06:20 +0200 Received: from tuxmaker.boeblingen.de.ibm.com (tuxmaker.boeblingen.de.ibm.com [9.152.85.9]) by d12av02.megacenter.de.ibm.com (8.12.11.20060308/8.12.11) with SMTP id l95I6K3k030029 for ; Fri, 5 Oct 2007 20:06:20 +0200 Message-Id: <200710051806.l95I6K3k030029@d12av02.megacenter.de.ibm.com> Received: by tuxmaker.boeblingen.de.ibm.com (sSMTP sendmail emulation); Fri, 5 Oct 2007 20:06:20 +0200 Subject: [rfc/rft] [3/3] Remove stabs target macros: SOFUN_ADDRESS_MAYBE_MISSING To: gdb-patches@sourceware.org Date: Fri, 05 Oct 2007 18:06:00 -0000 From: "Ulrich Weigand" X-Mailer: ELM [version 2.5 PL2] MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit 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: 2007-10/txt/msg00069.txt.bz2 Hello, this removes the SOFUN_ADDRESS_MAYBE_MISSING target macro. There are two main parts to this: - struct minimal_symbol used to have the member "filename" present only when SOFUN_ADDRESS_MAYBE_MISSING was true. The patch changes this to make the member always available. Code used to initialize and use those filenames is now also enabled unconditionally. (This should not actually change the behaviour of GDB on any target.) - Instead of the SOFUN_ADDRESS_MAYBE_MISSING macro, a new gdbarch variable gdbarch_sofun_address_maybe_missing is introduces. All places where GDB behaviour depended on SOFUN_ADDRESS_MAYBE_MISSING now look at that gdbarch variable instead. Bye, Ulrich ChangeLog: * gdbarch.sh (sofun_address_maybe_missing): New gdbarch variable. * gdbarch.c, gdbarch.h: Regenerate. * dbxread.c (find_stab_function_addr): Define unconditionally. (read_dbx_symtab): Use gdbarch_sofun_address_maybe_missing instead of SOFUN_ADDRESS_MAYBE_MISSING. (end_psymtab): Likewise. (process_one_symbol): Likewise. * mdebugread.c (parse_partial_symbols): Likewise. * symtab.h (struct minimal_symbol): Always define "filename" member. * elfread.c (elf_symtab_read): Use msym->filename unconditionally. * minsyms.c (lookup_minimal_symbol): Likewise. * symmisc.c (dump_msymbols): Likewise. * config/i386/i386sol2.mt (DEPRECATED_TM_FILE): Remove. * config/i386/linux.mt (DEPRECATED_TM_FILE): Remove. * config/i386/tm-i386sol2.h: Remove file. * config/i386/tm-linux.h: Remove file. * i386-linux-tdep.c (i386_linux_init_abi): Add call to set_gdbarch_sofun_address_maybe_missing. * i386-sol2-tdep.c (i386_sol2_init_abi): Likewise. * config/powerpc/linux.mt (DEPRECATED_TM_FILE): Remove. * config/powerpc/nbsd.mt (DEPRECATED_TM_FILE): Remove. * config/powerpc/obsd.mt (DEPRECATED_TM_FILE): Remove. * config/powerpc/ppc-eabi.mt (DEPRECATED_TM_FILE): Remove. * config/powerpc/ppc-sim.mt (DEPRECATED_TM_FILE): Remove. * config/powerpc/tm-ppc-eabi.h: Remove file. * rs6000-tdep.c (rs6000_gdbarch_init): Add call to set_gdbarch_sofun_address_maybe_missing. * config/sparc/sol2-64.mt (DEPRECATED_TM_FILE): Remove. * config/sparc/sol2.mt (DEPRECATED_TM_FILE): Remove. * config/sparc/tm-sol2.h: Remove file. * sparc64-sol2-tdep.c (sparc64_sol2_init_abi): Add call to set_gdbarch_sofun_address_maybe_missing. * sparc-sol2-tdep.c (sparc32_sol2_init_abi): Likewise. doc/ChangeLog: * gdbint.texinfo: Document gdbarch_sofun_address_maybe_missing instead of SOFUN_ADDRESS_MAYBE_MISSING. diff -urNp gdb-orig/gdb/config/i386/i386sol2.mt gdb-head/gdb/config/i386/i386sol2.mt --- gdb-orig/gdb/config/i386/i386sol2.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/i386/i386sol2.mt 2007-10-05 17:55:13.498978656 +0200 @@ -1,4 +1,3 @@ # Target: Solaris x86 TDEPFILES= i386-tdep.o i387-tdep.o i386-sol2-tdep.o sol2-tdep.o \ corelow.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-i386sol2.h diff -urNp gdb-orig/gdb/config/i386/linux.mt gdb-head/gdb/config/i386/linux.mt --- gdb-orig/gdb/config/i386/linux.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/i386/linux.mt 2007-10-05 17:55:13.502978080 +0200 @@ -1,4 +1,3 @@ # Target: Intel 386 running GNU/Linux TDEPFILES= i386-tdep.o i386-linux-tdep.o glibc-tdep.o i387-tdep.o \ solib.o solib-svr4.o symfile-mem.o corelow.o -DEPRECATED_TM_FILE= tm-linux.h diff -urNp gdb-orig/gdb/config/i386/tm-i386sol2.h gdb-head/gdb/config/i386/tm-i386sol2.h --- gdb-orig/gdb/config/i386/tm-i386sol2.h 2007-10-05 17:55:07.749008957 +0200 +++ gdb-head/gdb/config/i386/tm-i386sol2.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -/* Macro definitions for GDB on an Intel i386 running Solaris 2. - - Copyright 1998, 1999, 2000, 2004, 2007 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 3 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, see . */ - -#ifndef TM_I386SOL2_H -#define TM_I386SOL2_H 1 - -/* The SunPRO compiler puts out 0 instead of the address in N_SO symbols, - and for SunPRO 3.0, N_FUN symbols too. */ -#define SOFUN_ADDRESS_MAYBE_MISSING - -#endif /* tm-i386sol2.h */ diff -urNp gdb-orig/gdb/config/i386/tm-linux.h gdb-head/gdb/config/i386/tm-linux.h --- gdb-orig/gdb/config/i386/tm-linux.h 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/i386/tm-linux.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -/* Definitions to target GDB to GNU/Linux on 386. - - Copyright 1992, 1993, 1995, 1996, 1998, 1999, 2000, 2001, 2002, 2004, 2007 - 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 3 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, see . */ - -#ifndef TM_LINUX_H -#define TM_LINUX_H - -/* N_FUN symbols in shared libaries have 0 for their values and need - to be relocated. */ -#define SOFUN_ADDRESS_MAYBE_MISSING - -#endif /* #ifndef TM_LINUX_H */ diff -urNp gdb-orig/gdb/config/powerpc/linux.mt gdb-head/gdb/config/powerpc/linux.mt --- gdb-orig/gdb/config/powerpc/linux.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/linux.mt 2007-10-05 17:55:13.536973183 +0200 @@ -1,7 +1,6 @@ # Target: Motorola PPC on Linux TDEPFILES= rs6000-tdep.o ppc-linux-tdep.o ppc-sysv-tdep.o solib.o \ solib-svr4.o solib-legacy.o corelow.o symfile-mem.o -DEPRECATED_TM_FILE= tm-ppc-eabi.h SIM_OBS = remote-sim.o SIM = ../sim/ppc/libsim.a diff -urNp gdb-orig/gdb/config/powerpc/nbsd.mt gdb-head/gdb/config/powerpc/nbsd.mt --- gdb-orig/gdb/config/powerpc/nbsd.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/nbsd.mt 2007-10-05 17:55:13.540972606 +0200 @@ -1,7 +1,6 @@ # Target: NetBSD/powerpc TDEPFILES= rs6000-tdep.o ppc-sysv-tdep.o ppcnbsd-tdep.o \ corelow.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-ppc-eabi.h SIM_OBS = remote-sim.o SIM = ../sim/ppc/libsim.a diff -urNp gdb-orig/gdb/config/powerpc/obsd.mt gdb-head/gdb/config/powerpc/obsd.mt --- gdb-orig/gdb/config/powerpc/obsd.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/obsd.mt 2007-10-05 17:55:13.544972030 +0200 @@ -1,4 +1,3 @@ # Target: OpenBSD/powerpc TDEPFILES= rs6000-tdep.o ppc-sysv-tdep.o ppcobsd-tdep.o \ corelow.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-ppc-eabi.h diff -urNp gdb-orig/gdb/config/powerpc/ppc-eabi.mt gdb-head/gdb/config/powerpc/ppc-eabi.mt --- gdb-orig/gdb/config/powerpc/ppc-eabi.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/ppc-eabi.mt 2007-10-05 17:55:13.547971598 +0200 @@ -1,3 +1,2 @@ # Target: PowerPC running eabi TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-sysv-tdep.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-ppc-eabi.h diff -urNp gdb-orig/gdb/config/powerpc/ppc-sim.mt gdb-head/gdb/config/powerpc/ppc-sim.mt --- gdb-orig/gdb/config/powerpc/ppc-sim.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/ppc-sim.mt 2007-10-05 17:55:13.556970302 +0200 @@ -1,6 +1,5 @@ # Target: PowerPC running eabi and including the simulator TDEPFILES= rs6000-tdep.o monitor.o dsrec.o ppcbug-rom.o dink32-rom.o ppc-sysv-tdep.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-ppc-eabi.h SIM_OBS = remote-sim.o SIM = ../sim/ppc/libsim.a diff -urNp gdb-orig/gdb/config/powerpc/tm-ppc-eabi.h gdb-head/gdb/config/powerpc/tm-ppc-eabi.h --- gdb-orig/gdb/config/powerpc/tm-ppc-eabi.h 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/powerpc/tm-ppc-eabi.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,27 +0,0 @@ -/* Macro definitions for Power PC running embedded ABI. - Copyright 1995, 1996, 1997, 1998, 1999, 2000, 2007 - 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 3 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, see . */ - -#ifndef TM_PPC_EABI_H -#define TM_PPC_EABI_H - -/* The value of symbols of type N_SO and N_FUN maybe null when - it shouldn't be. */ -#define SOFUN_ADDRESS_MAYBE_MISSING - -#endif /* TM_PPC_EABI_H */ diff -urNp gdb-orig/gdb/config/sparc/sol2-64.mt gdb-head/gdb/config/sparc/sol2-64.mt --- gdb-orig/gdb/config/sparc/sol2-64.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/sparc/sol2-64.mt 2007-10-05 17:55:13.569968429 +0200 @@ -1,4 +1,3 @@ # Target: Solaris UltraSPARC TDEPFILES= sparc64-tdep.o sparc64-sol2-tdep.o sparc-tdep.o sparc-sol2-tdep.o \ sol2-tdep.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-sol2.h diff -urNp gdb-orig/gdb/config/sparc/sol2.mt gdb-head/gdb/config/sparc/sol2.mt --- gdb-orig/gdb/config/sparc/sol2.mt 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/config/sparc/sol2.mt 2007-10-05 17:55:13.572967997 +0200 @@ -1,3 +1,2 @@ # Target: Solaris SPARC TDEPFILES= sparc-tdep.o sparc-sol2-tdep.o sol2-tdep.o solib.o solib-svr4.o -DEPRECATED_TM_FILE= tm-sol2.h diff -urNp gdb-orig/gdb/config/sparc/tm-sol2.h gdb-head/gdb/config/sparc/tm-sol2.h --- gdb-orig/gdb/config/sparc/tm-sol2.h 2007-10-05 17:55:07.753008381 +0200 +++ gdb-head/gdb/config/sparc/tm-sol2.h 1970-01-01 01:00:00.000000000 +0100 @@ -1,29 +0,0 @@ -/* Target-dependent definitions for Solaris SPARC. - - Copyright 2003, 2004, 2007 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 3 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, see . */ - -#ifndef TM_SOL2_H -#define TM_SOL2_H - -/* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, - SunPRO) compiler puts out 0 instead of the address in N_SO stabs. - Starting with SunPRO 3.0, the compiler does this for N_FUN stabs - too. */ -#define SOFUN_ADDRESS_MAYBE_MISSING - -#endif /* tm-sol2.h */ diff -urNp gdb-orig/gdb/dbxread.c gdb-head/gdb/dbxread.c --- gdb-orig/gdb/dbxread.c 2007-10-05 17:55:07.764006796 +0200 +++ gdb-head/gdb/dbxread.c 2007-10-05 17:55:13.586965980 +0200 @@ -1116,7 +1116,6 @@ read_dbx_dynamic_symtab (struct objfile do_cleanups (back_to); } -#ifdef SOFUN_ADDRESS_MAYBE_MISSING static CORE_ADDR find_stab_function_addr (char *namestring, char *filename, struct objfile *objfile) @@ -1160,7 +1159,6 @@ find_stab_function_addr (char *namestrin return msym == NULL ? 0 : SYMBOL_VALUE_ADDRESS (msym); } -#endif /* SOFUN_ADDRESS_MAYBE_MISSING */ static void function_outside_compilation_unit_complaint (const char *arg1) @@ -1463,21 +1461,19 @@ read_dbx_symtab (struct objfile *objfile prev_textlow_not_set = textlow_not_set; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* A zero value is probably an indication for the SunPRO 3.0 compiler. end_psymtab explicitly tests for zero, so don't relocate it. */ - if (nlist.n_value == 0) + if (nlist.n_value == 0 + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { textlow_not_set = 1; valu = 0; } else textlow_not_set = 0; -#else - textlow_not_set = 0; -#endif + past_first_source_file = 1; if (prev_so_symnum != symnum - 1) @@ -1832,11 +1828,11 @@ read_dbx_symtab (struct objfile *objfile SECT_OFF_TEXT (objfile)); /* Kludges for ELF/STABS with Sun ACC */ last_function_name = namestring; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit value for the bottom of the text seg in those cases. */ if (nlist.n_value == ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile))) + SECT_OFF_TEXT (objfile)) + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { CORE_ADDR minsym_valu = find_stab_function_addr (namestring, @@ -1850,12 +1846,12 @@ read_dbx_symtab (struct objfile *objfile if (minsym_valu != 0) nlist.n_value = minsym_valu; } - if (pst && textlow_not_set) + if (pst && textlow_not_set + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { pst->textlow = nlist.n_value; textlow_not_set = 0; } -#endif /* End kludge. */ /* Keep track of the start of the last function so we @@ -1900,11 +1896,11 @@ read_dbx_symtab (struct objfile *objfile SECT_OFF_TEXT (objfile)); /* Kludges for ELF/STABS with Sun ACC */ last_function_name = namestring; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Do not fix textlow==0 for .o or NLM files, as 0 is a legit value for the bottom of the text seg in those cases. */ if (nlist.n_value == ANOFFSET (objfile->section_offsets, - SECT_OFF_TEXT (objfile))) + SECT_OFF_TEXT (objfile)) + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { CORE_ADDR minsym_valu = find_stab_function_addr (namestring, @@ -1918,12 +1914,12 @@ read_dbx_symtab (struct objfile *objfile if (minsym_valu != 0) nlist.n_value = minsym_valu; } - if (pst && textlow_not_set) + if (pst && textlow_not_set + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { pst->textlow = nlist.n_value; textlow_not_set = 0; } -#endif /* End kludge. */ /* Keep track of the start of the last function so we @@ -2049,12 +2045,11 @@ read_dbx_symtab (struct objfile *objfile continue; case N_ENDM: -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Solaris 2 end of module, finish current partial symbol table. end_psymtab will set pst->texthigh to the proper value, which is necessary if a module compiled without debugging info follows this module. */ - if (pst) + if (pst && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { end_psymtab (pst, psymtab_include_list, includes_used, symnum * symbol_size, @@ -2064,7 +2059,6 @@ read_dbx_symtab (struct objfile *objfile includes_used = 0; dependencies_used = 0; } -#endif continue; case N_RBRAC: @@ -2186,7 +2180,6 @@ end_psymtab (struct partial_symtab *pst, LDSYMLEN (pst) = capping_symbol_offset - LDSYMOFF (pst); pst->texthigh = capping_text; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Under Solaris, the N_SO symbols always have a value of 0, instead of the usual address of the .o file. Therefore, we have to do some tricks to fill in texthigh and textlow. @@ -2202,7 +2195,8 @@ end_psymtab (struct partial_symtab *pst, a reliable texthigh by taking the address plus size of the last function in the file. */ - if (pst->texthigh == 0 && last_function_name) + if (pst->texthigh == 0 && last_function_name + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { char *p; int n; @@ -2233,8 +2227,10 @@ end_psymtab (struct partial_symtab *pst, last_function_name = NULL; } + if (!gdbarch_sofun_address_maybe_missing (current_gdbarch)) + ; /* this test will be true if the last .o file is only data */ - if (textlow_not_set) + else if (textlow_not_set) pst->textlow = pst->texthigh; else { @@ -2259,7 +2255,6 @@ end_psymtab (struct partial_symtab *pst, } /* End of kludge for patching Solaris textlow and texthigh. */ -#endif /* SOFUN_ADDRESS_MAYBE_MISSING. */ pst->n_global_syms = objfile->global_psymbols.next - (objfile->global_psymbols.list + pst->globals_offset); @@ -3107,12 +3102,12 @@ no enclosing block")); case 'F': function_stab_type = type; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Deal with the SunPRO 3.0 compiler which omits the address from N_FUN symbols. */ if (type == N_FUN && valu == ANOFFSET (section_offsets, - SECT_OFF_TEXT (objfile))) + SECT_OFF_TEXT (objfile)) + && gdbarch_sofun_address_maybe_missing (current_gdbarch)) { CORE_ADDR minsym_valu = find_stab_function_addr (name, last_source_file, objfile); @@ -3126,7 +3121,6 @@ no enclosing block")); if (minsym_valu != 0) valu = minsym_valu; } -#endif if (block_address_function_relative) /* For Solaris 2 compilers, the block addresses and diff -urNp gdb-orig/gdb/doc/gdbint.texinfo gdb-head/gdb/doc/gdbint.texinfo --- gdb-orig/gdb/doc/gdbint.texinfo 2007-10-05 17:52:44.557830426 +0200 +++ gdb-head/gdb/doc/gdbint.texinfo 2007-10-05 17:55:13.642090238 +0200 @@ -3847,21 +3847,21 @@ A function that inserts or removes (depe the next instruction. See @file{sparc-tdep.c} and @file{rs6000-tdep.c} for examples. -@item SOFUN_ADDRESS_MAYBE_MISSING -@findex SOFUN_ADDRESS_MAYBE_MISSING +@item int gdbarch_sofun_address_maybe_missing +@findex gdbarch_sofun_address_maybe_missing Somebody clever observed that, the more actual addresses you have in the debug information, the more time the linker has to spend relocating them. So whenever there's some other way the debugger could find the address it needs, you should omit it from the debug info, to make linking faster. -@code{SOFUN_ADDRESS_MAYBE_MISSING} indicates that a particular set of +@code{gdbarch_sofun_address_maybe_missing} indicates that a particular set of hacks of this sort are in use, affecting @code{N_SO} and @code{N_FUN} entries in stabs-format debugging information. @code{N_SO} stabs mark the beginning and ending addresses of compilation units in the text segment. @code{N_FUN} stabs mark the starts and ends of functions. -@code{SOFUN_ADDRESS_MAYBE_MISSING} means two things: +@code{gdbarch_sofun_address_maybe_missing} means two things: @itemize @bullet @item diff -urNp gdb-orig/gdb/elfread.c gdb-head/gdb/elfread.c --- gdb-orig/gdb/elfread.c 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/elfread.c 2007-10-05 17:55:13.683084333 +0200 @@ -213,10 +213,8 @@ elf_symtab_read (struct objfile *objfile /* If filesym is nonzero, it points to a file symbol, but we haven't seen any section info for it yet. */ asymbol *filesym = 0; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Name of filesym, as saved on the objfile_obstack. */ char *filesymname = obsavestring ("", 0, &objfile->objfile_obstack); -#endif struct dbx_symfile_info *dbx = objfile->deprecated_sym_stab_info; int stripped = (bfd_get_symcount (objfile->obfd) == 0); @@ -258,10 +256,8 @@ elf_symtab_read (struct objfile *objfile msym = record_minimal_symbol ((char *) sym->name, symaddr, mst_solib_trampoline, sym->section, objfile); -#ifdef SOFUN_ADDRESS_MAYBE_MISSING if (msym != NULL) msym->filename = filesymname; -#endif continue; } @@ -281,11 +277,9 @@ elf_symtab_read (struct objfile *objfile sectinfo = NULL; } filesym = sym; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING filesymname = obsavestring ((char *) filesym->name, strlen (filesym->name), &objfile->objfile_obstack); -#endif } else if (sym->flags & BSF_SECTION_SYM) continue; @@ -476,10 +470,8 @@ elf_symtab_read (struct objfile *objfile unsigned long size = ((elf_symbol_type *) sym)->internal_elf_sym.st_size; MSYMBOL_SIZE(msym) = size; } -#ifdef SOFUN_ADDRESS_MAYBE_MISSING if (msym != NULL) msym->filename = filesymname; -#endif gdbarch_elf_make_msymbol_special (current_gdbarch, sym, msym); } } diff -urNp gdb-orig/gdb/gdbarch.c gdb-head/gdb/gdbarch.c --- gdb-orig/gdb/gdbarch.c 2007-10-05 17:55:07.811999882 +0200 +++ gdb-head/gdb/gdbarch.c 2007-10-05 17:55:13.694082748 +0200 @@ -233,6 +233,7 @@ struct gdbarch gdbarch_core_read_description_ftype *core_read_description; gdbarch_variables_inside_block_ftype *variables_inside_block; gdbarch_static_transform_name_ftype *static_transform_name; + int sofun_address_maybe_missing; }; @@ -358,6 +359,7 @@ struct gdbarch startup_gdbarch = 0, /* core_read_description */ 0, /* variables_inside_block */ 0, /* static_transform_name */ + 0, /* sofun_address_maybe_missing */ /* startup_gdbarch() */ }; @@ -608,6 +610,7 @@ verify_gdbarch (struct gdbarch *current_ /* Skip verify of core_read_description, has predicate */ /* Skip verify of variables_inside_block, has predicate */ /* Skip verify of static_transform_name, has predicate */ + /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */ buf = ui_file_xstrdup (log, &dummy); make_cleanup (xfree, buf); if (strlen (buf) > 0) @@ -1005,6 +1008,9 @@ gdbarch_dump (struct gdbarch *current_gd "gdbarch_dump: software_single_step = <0x%lx>\n", (long) current_gdbarch->software_single_step); fprintf_unfiltered (file, + "gdbarch_dump: sofun_address_maybe_missing = %s\n", + paddr_d (current_gdbarch->sofun_address_maybe_missing)); + fprintf_unfiltered (file, "gdbarch_dump: sp_regnum = %s\n", paddr_d (current_gdbarch->sp_regnum)); fprintf_unfiltered (file, @@ -3100,6 +3106,23 @@ set_gdbarch_static_transform_name (struc gdbarch->static_transform_name = static_transform_name; } +int +gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch) +{ + gdb_assert (gdbarch != NULL); + /* Skip verify of sofun_address_maybe_missing, invalid_p == 0 */ + if (gdbarch_debug >= 2) + fprintf_unfiltered (gdb_stdlog, "gdbarch_sofun_address_maybe_missing called\n"); + return gdbarch->sofun_address_maybe_missing; +} + +void +set_gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch, + int sofun_address_maybe_missing) +{ + gdbarch->sofun_address_maybe_missing = sofun_address_maybe_missing; +} + /* Keep a registry of per-architecture data-pointers required by GDB modules. */ diff -urNp gdb-orig/gdb/gdbarch.h gdb-head/gdb/gdbarch.h --- gdb-orig/gdb/gdbarch.h 2007-10-05 17:55:07.855993545 +0200 +++ gdb-head/gdb/gdbarch.h 2007-10-05 17:55:13.735076842 +0200 @@ -711,6 +711,11 @@ typedef char * (gdbarch_static_transform extern char * gdbarch_static_transform_name (struct gdbarch *gdbarch, char *name); extern void set_gdbarch_static_transform_name (struct gdbarch *gdbarch, gdbarch_static_transform_name_ftype *static_transform_name); +/* Set if the address in N_SO or N_FUN stabs may be zero. */ + +extern int gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch); +extern void set_gdbarch_sofun_address_maybe_missing (struct gdbarch *gdbarch, int sofun_address_maybe_missing); + extern struct gdbarch_tdep *gdbarch_tdep (struct gdbarch *gdbarch); diff -urNp gdb-orig/gdb/gdbarch.sh gdb-head/gdb/gdbarch.sh --- gdb-orig/gdb/gdbarch.sh 2007-10-05 17:55:07.899987207 +0200 +++ gdb-head/gdb/gdbarch.sh 2007-10-05 17:55:13.759073385 +0200 @@ -661,6 +661,8 @@ M::const struct target_desc *:core_read_ F::int:variables_inside_block:int desc, int gcc_p:desc, gcc_p # Handle special encoding of static variables in stabs debug info. F::char *:static_transform_name:char *name:name +# Set if the address in N_SO or N_FUN stabs may be zero. +v::int:sofun_address_maybe_missing:::0:0::0 EOF } diff -urNp gdb-orig/gdb/i386-linux-tdep.c gdb-head/gdb/i386-linux-tdep.c --- gdb-orig/gdb/i386-linux-tdep.c 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/i386-linux-tdep.c 2007-10-05 17:55:13.802067192 +0200 @@ -429,6 +429,10 @@ i386_linux_init_abi (struct gdbarch_info tdep->sc_reg_offset = i386_linux_sc_reg_offset; tdep->sc_num_regs = ARRAY_SIZE (i386_linux_sc_reg_offset); + /* N_FUN symbols in shared libaries have 0 for their values and need + to be relocated. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + /* GNU/Linux uses SVR4-style shared libraries. */ set_gdbarch_skip_trampoline_code (gdbarch, find_solib_trampoline_target); set_solib_svr4_fetch_link_map_offsets diff -urNp gdb-orig/gdb/i386-sol2-tdep.c gdb-head/gdb/i386-sol2-tdep.c --- gdb-orig/gdb/i386-sol2-tdep.c 2007-10-05 17:55:07.940981301 +0200 +++ gdb-head/gdb/i386-sol2-tdep.c 2007-10-05 17:55:13.806066615 +0200 @@ -109,6 +109,10 @@ i386_sol2_init_abi (struct gdbarch_info /* Solaris is SVR4-based. */ i386_svr4_init_abi (info, gdbarch); + /* The SunPRO compiler puts out 0 instead of the address in N_SO symbols, + and for SunPRO 3.0, N_FUN symbols too. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + /* Handle SunPRO encoding of static symbols. */ set_gdbarch_static_transform_name (gdbarch, i386_sol2_static_transform_name); diff -urNp gdb-orig/gdb/mdebugread.c gdb-head/gdb/mdebugread.c --- gdb-orig/gdb/mdebugread.c 2007-10-05 17:55:07.996973235 +0200 +++ gdb-head/gdb/mdebugread.c 2007-10-05 17:55:13.828063447 +0200 @@ -2844,21 +2844,20 @@ parse_partial_symbols (struct objfile *o prev_textlow_not_set = textlow_not_set; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* A zero value is probably an indication for the SunPRO 3.0 compiler. end_psymtab explicitly tests for zero, so don't relocate it. */ - if (sh.value == 0) + if (sh.value == 0 + && gdbarch_sofun_address_maybe_missing + (current_gdbarch)) { textlow_not_set = 1; valu = 0; } else textlow_not_set = 0; -#else - textlow_not_set = 0; -#endif + past_first_source_file = 1; if (prev_so_symnum != symnum - 1) @@ -3225,19 +3224,19 @@ parse_partial_symbols (struct objfile *o continue; case N_ENDM: -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Solaris 2 end of module, finish current partial symbol table. END_PSYMTAB will set pst->texthigh to the proper value, which is necessary if a module compiled without debugging info follows this module. */ - if (pst) + if (pst + && gdbarch_sofun_address_maybe_missing + (current_gdbarch)) { pst = (struct partial_symtab *) 0; includes_used = 0; dependencies_used = 0; } -#endif continue; case N_RBRAC: diff -urNp gdb-orig/gdb/minsyms.c gdb-head/gdb/minsyms.c --- gdb-orig/gdb/minsyms.c 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/minsyms.c 2007-10-05 17:55:13.871057253 +0200 @@ -165,14 +165,12 @@ lookup_minimal_symbol (const char *name, unsigned int hash = msymbol_hash (name) % MINIMAL_SYMBOL_HASH_SIZE; unsigned int dem_hash = msymbol_hash_iw (name) % MINIMAL_SYMBOL_HASH_SIZE; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING if (sfile != NULL) { char *p = strrchr (sfile, '/'); if (p != NULL) sfile = p + 1; } -#endif for (objfile = object_files; objfile != NULL && found_symbol == NULL; @@ -209,18 +207,9 @@ lookup_minimal_symbol (const char *name, case mst_file_text: case mst_file_data: case mst_file_bss: -#ifdef SOFUN_ADDRESS_MAYBE_MISSING if (sfile == NULL || strcmp (msymbol->filename, sfile) == 0) found_file_symbol = msymbol; -#else - /* We have neither the ability nor the need to - deal with the SFILE parameter. If we find - more than one symbol, just return the latest - one (the user can't expect useful behavior in - that case). */ - found_file_symbol = msymbol; -#endif break; case mst_solib_trampoline: diff -urNp gdb-orig/gdb/rs6000-tdep.c gdb-head/gdb/rs6000-tdep.c --- gdb-orig/gdb/rs6000-tdep.c 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/rs6000-tdep.c 2007-10-05 17:55:13.882055668 +0200 @@ -3739,6 +3739,10 @@ rs6000_gdbarch_init (struct gdbarch_info set_gdbarch_inner_than (gdbarch, core_addr_lessthan); set_gdbarch_breakpoint_from_pc (gdbarch, rs6000_breakpoint_from_pc); + /* The value of symbols of type N_SO and N_FUN maybe null when + it shouldn't be. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + /* Handles single stepping of atomic sequences. */ set_gdbarch_software_single_step (gdbarch, deal_with_atomic_sequence); diff -urNp gdb-orig/gdb/sparc64-sol2-tdep.c gdb-head/gdb/sparc64-sol2-tdep.c --- gdb-orig/gdb/sparc64-sol2-tdep.c 2007-10-05 17:55:08.036967473 +0200 +++ gdb-head/gdb/sparc64-sol2-tdep.c 2007-10-05 17:55:13.921050051 +0200 @@ -157,6 +157,11 @@ sparc64_sol2_init_abi (struct gdbarch_in sparc64_init_abi (info, gdbarch); + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) + compiler puts out 0 instead of the address in N_SO stabs. Starting with + SunPRO 3.0, the compiler does this for N_FUN stabs too. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + /* The Sun compilers also do "globalization"; see the comment in sparc_sol2_static_transform_name for more information. */ set_gdbarch_static_transform_name diff -urNp gdb-orig/gdb/sparc-sol2-tdep.c gdb-head/gdb/sparc-sol2-tdep.c --- gdb-orig/gdb/sparc-sol2-tdep.c 2007-10-05 17:55:08.041966753 +0200 +++ gdb-head/gdb/sparc-sol2-tdep.c 2007-10-05 17:55:13.925049475 +0200 @@ -206,6 +206,11 @@ sparc32_sol2_init_abi (struct gdbarch_in { struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); + /* The Sun compilers (Sun ONE Studio, Forte Developer, Sun WorkShop, SunPRO) + compiler puts out 0 instead of the address in N_SO stabs. Starting with + SunPRO 3.0, the compiler does this for N_FUN stabs too. */ + set_gdbarch_sofun_address_maybe_missing (gdbarch, 1); + /* The Sun compilers also do "globalization"; see the comment in sparc_sol2_static_transform_name for more information. */ set_gdbarch_static_transform_name diff -urNp gdb-orig/gdb/symmisc.c gdb-head/gdb/symmisc.c --- gdb-orig/gdb/symmisc.c 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/symmisc.c 2007-10-05 17:55:13.931048610 +0200 @@ -356,10 +356,8 @@ dump_msymbols (struct objfile *objfile, { fprintf_filtered (outfile, " %s", SYMBOL_DEMANGLED_NAME (msymbol)); } -#ifdef SOFUN_ADDRESS_MAYBE_MISSING if (msymbol->filename) fprintf_filtered (outfile, " %s", msymbol->filename); -#endif fputs_filtered ("\n", outfile); } if (objfile->minimal_symbol_count != index) diff -urNp gdb-orig/gdb/symtab.h gdb-head/gdb/symtab.h --- gdb-orig/gdb/symtab.h 2007-10-05 14:54:47.000000000 +0200 +++ gdb-head/gdb/symtab.h 2007-10-05 17:55:13.937047746 +0200 @@ -345,10 +345,8 @@ struct minimal_symbol unsigned long size; -#ifdef SOFUN_ADDRESS_MAYBE_MISSING /* Which source file is this symbol in? Only relevant for mst_file_*. */ char *filename; -#endif /* Classification type for this minimal symbol. */ -- Dr. Ulrich Weigand GNU Toolchain for Linux on System z and Cell BE Ulrich.Weigand@de.ibm.com