From e630b97400250f4855a02bc324ad7891c722ea23 Mon Sep 17 00:00:00 2001 From: Tom Tromey Date: Thu, 22 Aug 2013 14:01:04 +0000 Subject: fix dwz.exp on 32-bit targets This fixes dwz.exp on 32-bit targets. It does so by introducing a new "default" setting for the address size in the DWARF assembler. Built and regtested on x86-64 Fedora 18. I also ran the gdb.dwarf2 tests on an x86 machine (gcc45). * lib/dwarf.exp (cu, tu): Handle addr_size of "default". Change default addr_size. * lib/gdb.exp (is_64_target): New gdb_caching_proc. --- gdb/testsuite/ChangeLog | 6 ++++++ gdb/testsuite/lib/dwarf.exp | 26 ++++++++++++++++++++------ gdb/testsuite/lib/gdb.exp | 28 ++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+), 6 deletions(-) (limited to 'gdb/testsuite') diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index fc21eac..8d2605f 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,11 @@ 2013-08-22 Tom Tromey + * lib/dwarf.exp (cu, tu): Handle addr_size of "default". Change + default addr_size. + * lib/gdb.exp (is_64_target): New gdb_caching_proc. + +2013-08-22 Tom Tromey + * lib/gdb.exp (skip_btrace_tests): Use gdb_caching_proc and standard_temp_file. diff --git a/gdb/testsuite/lib/dwarf.exp b/gdb/testsuite/lib/dwarf.exp index 5b19bb8..1d3eb03 100644 --- a/gdb/testsuite/lib/dwarf.exp +++ b/gdb/testsuite/lib/dwarf.exp @@ -684,8 +684,8 @@ namespace eval Dwarf { # default = 0 (32-bit) # version n - DWARF version number to emit # default = 4 - # addr_size n - the size of addresses, 32 or 64 - # default = 64 + # addr_size n - the size of addresses, 32, 64, or default + # default = default # fission 0|1 - boolean indicating if generating Fission debug info # default = 0 # BODY is Tcl code that emits the DIEs which make up the body of @@ -702,7 +702,7 @@ namespace eval Dwarf { # Establish the defaults. set is_64 0 set _cu_version 4 - set _cu_addr_size 8 + set _cu_addr_size default set fission 0 set section ".debug_info" set _abbrev_section ".debug_abbrev" @@ -716,6 +716,13 @@ namespace eval Dwarf { default { error "unknown option $name" } } } + if {$_cu_addr_size == "default"} { + if {[is_64_target]} { + set _cu_addr_size 8 + } else { + set _cu_addr_size 4 + } + } set _cu_offset_size [expr { $is_64 ? 8 : 4 }] if { $fission } { set section ".debug_info.dwo" @@ -767,8 +774,8 @@ namespace eval Dwarf { # default = 0 (32-bit) # version n - DWARF version number to emit # default = 4 - # addr_size n - the size of addresses, 32 or 64 - # default = 64 + # addr_size n - the size of addresses, 32, 64, or default + # default = default # fission 0|1 - boolean indicating if generating Fission debug info # default = 0 # SIGNATURE is the 64-bit signature of the type. @@ -788,7 +795,7 @@ namespace eval Dwarf { # Establish the defaults. set is_64 0 set _cu_version 4 - set _cu_addr_size 8 + set _cu_addr_size default set fission 0 set section ".debug_types" set _abbrev_section ".debug_abbrev" @@ -802,6 +809,13 @@ namespace eval Dwarf { default { error "unknown option $name" } } } + if {$_cu_addr_size == "default"} { + if {[is_64_target]} { + set _cu_addr_size 8 + } else { + set _cu_addr_size 4 + } + } set _cu_offset_size [expr { $is_64 ? 8 : 4 }] if { $fission } { set section ".debug_types.dwo" diff --git a/gdb/testsuite/lib/gdb.exp b/gdb/testsuite/lib/gdb.exp index 7be4f9d..f1f56a6 100644 --- a/gdb/testsuite/lib/gdb.exp +++ b/gdb/testsuite/lib/gdb.exp @@ -1854,6 +1854,34 @@ gdb_caching_proc is_lp64_target { return 1 } +# Return 1 if target has 64 bit addresses. +# This cannot be decided simply from looking at the target string, +# as it might depend on externally passed compiler options like -m64. +gdb_caching_proc is_64_target { + set me "is_64_target" + + set src [standard_temp_file is64[pid].c] + set obj [standard_temp_file is64[pid].o] + + set f [open $src "w"] + puts $f "int function(void) { return 3; }" + puts $f "int dummy\[sizeof (&function) == 8 ? 1 : -1\];" + close $f + + verbose "$me: compiling testfile $src" 2 + set lines [gdb_compile $src $obj object {quiet}] + file delete $src + file delete $obj + + if ![string match "" $lines] then { + verbose "$me: testfile compilation failed, returning 0" 2 + return 0 + } + + verbose "$me: returning 1" 2 + return 1 +} + # Return 1 if target has x86_64 registers - either amd64 or x32. # x32 target identifies as x86_64-*-linux*, therefore it cannot be determined # just from the target string. -- cgit v1.1