Browse Source
* minsyms.c (lookup_minimal_symbol_by_pc_section): Handle nested symbols. * gdb.arch/i386-size-overlap.c, gdb.arch/i386-size-overlap.exp: New.drow-reverse-20070409-branch
5 changed files with 154 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||
/* Overlapping symbol sizes test program.
|
|||
|
|||
Copyright 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 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. */ |
|||
|
|||
#ifdef SYMBOL_PREFIX |
|||
#define SYMBOL(str) SYMBOL_PREFIX #str |
|||
#else |
|||
#define SYMBOL(str) #str |
|||
#endif |
|||
|
|||
void |
|||
trap (void) |
|||
{ |
|||
asm ("int $0x03"); |
|||
} |
|||
|
|||
/* Jump from a function with its symbol size set, to a function
|
|||
named by a local label. GDB should report the `main' function |
|||
even for the rest, after the global `inner' ends. */ |
|||
|
|||
asm(".text\n" |
|||
" .align 8\n" |
|||
" .globl " SYMBOL (main) "\n" |
|||
SYMBOL (main) ":\n" |
|||
" pushl %ebp\n" |
|||
" mov %esp, %ebp\n" |
|||
" call .Lfunc\n" |
|||
" ret\n" |
|||
SYMBOL (inner) ":\n" |
|||
" ret\n" |
|||
" .size " SYMBOL (inner) ", .-" SYMBOL (inner) "\n" |
|||
".Lfunc:\n" |
|||
" pushl %ebp\n" |
|||
" mov %esp, %ebp\n" |
|||
" call " SYMBOL (trap) "\n" |
|||
" .size " SYMBOL (main) ", .-" SYMBOL (main) "\n"); |
|||
@ -0,0 +1,76 @@ |
|||
# Copyright 2007 Free Software Foundation, Inc. |
|||
|
|||
# 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. |
|||
|
|||
# This file is part of the gdb testsuite. |
|||
|
|||
if $tracelevel { |
|||
strace $tracelevel |
|||
} |
|||
|
|||
# Test that GDB can handle overlapping sizes of symbols. |
|||
|
|||
if ![istarget "i?86-*-*"] then { |
|||
verbose "Skipping i386 unwinder tests." |
|||
return |
|||
} |
|||
|
|||
set testfile "i386-size-overlap" |
|||
set srcfile ${testfile}.c |
|||
set binfile ${objdir}/${subdir}/${testfile} |
|||
|
|||
# some targets have leading underscores on assembly symbols. |
|||
# TODO: detect this automatically |
|||
set additional_flags "" |
|||
if [istarget "i?86-*-cygwin*"] then { |
|||
set additional_flags "additional_flags=-DSYMBOL_PREFIX=\"_\"" |
|||
} |
|||
|
|||
if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" \ |
|||
executable [list debug $additional_flags]] != "" } { |
|||
untested "i386-size" |
|||
return -1 |
|||
} |
|||
|
|||
gdb_exit |
|||
gdb_start |
|||
gdb_reinitialize_dir $srcdir/$subdir |
|||
gdb_load ${binfile} |
|||
|
|||
# We use gdb_run_cmd so this stands a chance to work for remote |
|||
# targets too. |
|||
gdb_run_cmd |
|||
|
|||
gdb_expect { |
|||
-re "Program received signal SIGTRAP.*$gdb_prompt $" { |
|||
pass "run past main" |
|||
} |
|||
-re ".*$gdb_prompt $" { |
|||
fail "run past main" |
|||
} |
|||
timeout { |
|||
fail "run past main (timeout)" |
|||
} |
|||
} |
|||
|
|||
set message "backtrace shows the outer function" |
|||
gdb_test_multiple "backtrace 10" $message { |
|||
-re "#1\[ \t]*$hex in inner.*$gdb_prompt $" { |
|||
fail $message |
|||
} |
|||
-re "#1\[ \t]*$hex in main.*$gdb_prompt $" { |
|||
pass $message |
|||
} |
|||
} |
|||
Loading…
Reference in new issue