Fix resolving of variables at locations lists in prelinked libs (BZ 466901). Index: gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked.exp 2009-09-09 20:10:35.000000000 +0200 @@ -0,0 +1,102 @@ +# Copyright 2008 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. + +# Minimal DWARF-2 unit test + +# This test can only be run on i386/x86_64 targets which support DWARF-2. +# For now pick a sampling of likely targets. +if {(![istarget *-*-linux*] + && ![istarget *-*-gnu*] + && ![istarget *-*-elf*] + && ![istarget *-*-openbsd*]) + || (![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"])} { + return 0 +} + +set testfile "dw2-loclist-prelinked" +set srcfuncfile ${testfile}-func.S +set binsharedfuncfile ${objdir}/${subdir}/${testfile}.so +set srcmainfile ${testfile}-main.c +set binfile ${objdir}/${subdir}/${testfile} + +remote_exec build "rm -f ${binfile}" + +# get the value of gcc_compiled +if [get_compiler_info ${binfile}] { + return -1 +} + +# This test can only be run on gcc as we use additional_flags=FIXME +if {$gcc_compiled == 0} { + return 0 +} + +if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfuncfile}" "${binsharedfuncfile}" {debug additional_flags=-m32}] != "" } { + untested "Couldn't compile test library" + return -1 +} + +# The new separate debug info file will be stored in the .debug subdirectory. + +if [gdb_gnu_strip_debug ${binsharedfuncfile}] { + # check that you have a recent version of strip and objcopy installed + unsupported "cannot produce separate debug info files" + return -1 +} + +if {[catch "system \"/usr/sbin/prelink -qNR --no-exec-shield ${binsharedfuncfile}\""] != 0} { + # Maybe we don't have prelink. + return -1 +} + +if { [gdb_compile "${srcdir}/${subdir}/${srcmainfile}" \ + "${binfile}" executable [list debug additional_flags=-m32 shlib=${binsharedfuncfile}]] != "" } { + return -1 +} + +gdb_exit +gdb_start +gdb_reinitialize_dir $srcdir/$subdir +gdb_load ${binfile} + +gdb_run_cmd + +gdb_test "" "Program received signal SIGABRT, Aborted..*" "Enter abort()" + +# Incorrect: +# #0 0x00110430 in __kernel_vsyscall () +# No symbol table info available. +# #1 0x003d44c0 in raise () from /lib/libc.so.6 +# No symbol table info available. +# #2 0x003d5e88 in abort () from /lib/libc.so.6 +# No symbol table info available. +# #3 0x44f10437 in func () at dw2-loclist-prelinked.c:8 +# i = Could not find the frame base for "func". + +# Correct: +# #0 0x00110430 in __kernel_vsyscall () +# No symbol table info available. +# #1 0x003d44c0 in raise () from /lib/libc.so.6 +# No symbol table info available. +# #2 0x003d5e88 in abort () from /lib/libc.so.6 +# No symbol table info available. +# #3 0x4ae36437 in func () at dw2-loclist-prelinked.c:8 +# i = 3827288 +# #4 0x0804851a in main () at ../../../gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c:24 +# No locals. + +# `abort' can get expressed as `*__GI_abort'. +gdb_test "bt full" "in \[^ \]*abort \\(.*in func \\(.*\r\n\[\t \]+i = -?\[0-9\].*in main \\(.*" "Backtrace after abort()" Index: gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-main.c 2009-09-09 20:10:35.000000000 +0200 @@ -0,0 +1,26 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 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 . */ + +/* dw2-loclist-prelinked-func.S */ +extern void func (void); + +int +main (void) +{ + func (); + return 0; +} Index: gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ gdb-6.8.50.20090909/gdb/testsuite/gdb.dwarf2/dw2-loclist-prelinked-func.S 2009-09-09 20:10:35.000000000 +0200 @@ -0,0 +1,328 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2008 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 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 . */ + +/* +#include + +void +func (void) +{ + int i; + + abort (); +} +*/ + .file "dw2-loclist-prelinked.c" + .section .debug_abbrev,"",@progbits +.Ldebug_abbrev0: + .section .debug_info,"",@progbits +.Ldebug_info0: + .section .debug_line,"",@progbits +.Ldebug_line0: + .text +.Ltext0: +.globl func + .type func, @function +func: +.LFB2: + .file 1 "dw2-loclist-prelinked.c" + .loc 1 5 0 + pushl %ebp +.LCFI0: + movl %esp, %ebp +.LCFI1: + subl $24, %esp +.LCFI2: + .loc 1 8 0 + call abort +.LFE2: + .size func, .-func + .section .debug_frame,"",@progbits +.Lframe0: + .long .LECIE0-.LSCIE0 +.LSCIE0: + .long 0xffffffff + .byte 0x1 + .string "" + .uleb128 0x1 + .sleb128 -4 + .byte 0x8 + .byte 0xc + .uleb128 0x4 + .uleb128 0x4 + .byte 0x88 + .uleb128 0x1 + .align 4 +.LECIE0: +.LSFDE0: + .long .LEFDE0-.LASFDE0 +.LASFDE0: + .long .Lframe0 + .long .LFB2 + .long .LFE2-.LFB2 + .byte 0x4 + .long .LCFI0-.LFB2 + .byte 0xe + .uleb128 0x8 + .byte 0x85 + .uleb128 0x2 + .byte 0x4 + .long .LCFI1-.LCFI0 + .byte 0xd + .uleb128 0x5 + .align 4 +.LEFDE0: + .text +.Letext0: + .section .debug_loc,"",@progbits +.Ldebug_loc0: +.LLST0: + .long .LFB2-.Ltext0 + .long .LCFI0-.Ltext0 + .value 0x2 + .byte 0x74 + .sleb128 4 + .long .LCFI0-.Ltext0 + .long .LCFI1-.Ltext0 + .value 0x2 + .byte 0x74 + .sleb128 8 + .long .LCFI1-.Ltext0 + .long .LFE2-.Ltext0 + .value 0x2 + .byte 0x75 + .sleb128 8 + .long 0x0 + .long 0x0 + .section .debug_info + .long 0x94 + .value 0x2 + .long .Ldebug_abbrev0 + .byte 0x4 + .uleb128 0x1 + .long .LASF10 + .byte 0x1 + .long .LASF11 + .long .LASF12 + .long .Ltext0 + .long .Letext0 + .long .Ldebug_line0 + .uleb128 0x2 + .byte 0x4 + .byte 0x7 + .long .LASF0 + .uleb128 0x3 + .byte 0x4 + .byte 0x5 + .string "int" + .uleb128 0x2 + .byte 0x4 + .byte 0x5 + .long .LASF1 + .uleb128 0x2 + .byte 0x1 + .byte 0x8 + .long .LASF2 + .uleb128 0x2 + .byte 0x2 + .byte 0x7 + .long .LASF3 + .uleb128 0x2 + .byte 0x4 + .byte 0x7 + .long .LASF4 + .uleb128 0x2 + .byte 0x1 + .byte 0x6 + .long .LASF5 + .uleb128 0x2 + .byte 0x2 + .byte 0x5 + .long .LASF6 + .uleb128 0x2 + .byte 0x8 + .byte 0x5 + .long .LASF7 + .uleb128 0x2 + .byte 0x8 + .byte 0x7 + .long .LASF8 + .uleb128 0x4 + .byte 0x4 + .byte 0x7 + .uleb128 0x2 + .byte 0x1 + .byte 0x6 + .long .LASF9 + .uleb128 0x5 + .byte 0x1 + .long .LASF13 + .byte 0x1 + .byte 0x5 + .byte 0x1 + .long .LFB2 + .long .LFE2 + .long .LLST0 + .uleb128 0x6 + .string "i" + .byte 0x1 + .byte 0x6 + .long 0x2c + .byte 0x2 + .byte 0x91 + .sleb128 -12 + .byte 0x0 + .byte 0x0 + .section .debug_abbrev + .uleb128 0x1 + .uleb128 0x11 + .byte 0x1 + .uleb128 0x25 + .uleb128 0xe + .uleb128 0x13 + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x1b + .uleb128 0xe + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x10 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x2 + .uleb128 0x24 + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0xe + .byte 0x0 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x24 + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .uleb128 0x3 + .uleb128 0x8 + .byte 0x0 + .byte 0x0 + .uleb128 0x4 + .uleb128 0x24 + .byte 0x0 + .uleb128 0xb + .uleb128 0xb + .uleb128 0x3e + .uleb128 0xb + .byte 0x0 + .byte 0x0 + .uleb128 0x5 + .uleb128 0x2e + .byte 0x1 + .uleb128 0x3f + .uleb128 0xc + .uleb128 0x3 + .uleb128 0xe + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x27 + .uleb128 0xc + .uleb128 0x11 + .uleb128 0x1 + .uleb128 0x12 + .uleb128 0x1 + .uleb128 0x40 + .uleb128 0x6 + .byte 0x0 + .byte 0x0 + .uleb128 0x6 + .uleb128 0x34 + .byte 0x0 + .uleb128 0x3 + .uleb128 0x8 + .uleb128 0x3a + .uleb128 0xb + .uleb128 0x3b + .uleb128 0xb + .uleb128 0x49 + .uleb128 0x13 + .uleb128 0x2 + .uleb128 0xa + .byte 0x0 + .byte 0x0 + .byte 0x0 + .section .debug_pubnames,"",@progbits + .long 0x17 + .value 0x2 + .long .Ldebug_info0 + .long 0x98 + .long 0x75 + .string "func" + .long 0x0 + .section .debug_aranges,"",@progbits + .long 0x1c + .value 0x2 + .long .Ldebug_info0 + .byte 0x4 + .byte 0x0 + .value 0x0 + .value 0x0 + .long .Ltext0 + .long .Letext0-.Ltext0 + .long 0x0 + .long 0x0 + .section .debug_str,"MS",@progbits,1 +.LASF7: + .string "long long int" +.LASF0: + .string "unsigned int" +.LASF11: + .string "dw2-loclist-prelinked.c" +.LASF12: + .string "gdb-6.8/gdb/testsuite/gdb.dwarf2" +.LASF4: + .string "long unsigned int" +.LASF8: + .string "long long unsigned int" +.LASF2: + .string "unsigned char" +.LASF9: + .string "char" +.LASF1: + .string "long int" +.LASF3: + .string "short unsigned int" +.LASF5: + .string "signed char" +.LASF10: + .string "GNU C 4.3.2 20081007 (Red Hat 4.3.2-6)" +.LASF13: + .string "func" +.LASF6: + .string "short int" + .ident "GCC: (GNU) 4.3.2 20081007 (Red Hat 4.3.2-6)" + .section .note.GNU-stack,"",@progbits