fix dwz.exp on 32-bit targets
authorTom Tromey <tromey@redhat.com>
Thu, 22 Aug 2013 14:01:04 +0000 (14:01 +0000)
committerTom Tromey <tromey@redhat.com>
Thu, 22 Aug 2013 14:01:04 +0000 (14:01 +0000)
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
gdb/testsuite/lib/dwarf.exp
gdb/testsuite/lib/gdb.exp

index fc21eacf5b96583a959ddc69229040eb3900a931..8d2605f29f2287cc4b275b9b756b6abc24073fe2 100644 (file)
@@ -1,3 +1,9 @@
+2013-08-22  Tom Tromey  <tromey@redhat.com>
+
+       * 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  <tromey@redhat.com>
 
        * lib/gdb.exp (skip_btrace_tests): Use gdb_caching_proc and
index 5b19bb8d297a5ab80a43bfee74b4d4e9af897eeb..1d3eb03d8db5c52efe14343922dda1efe4d9fea9 100644 (file)
@@ -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"
index 7be4f9dff32b43543e271175e982406847637105..f1f56a6fcfa76c5e3a45fd0147e38f29fe10b4c1 100644 (file)
@@ -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.
This page took 0.03987 seconds and 4 git commands to generate.