Get start and end address of main in dwz.exp
authorYao Qi <yao@codesourcery.com>
Fri, 14 Nov 2014 00:53:08 +0000 (08:53 +0800)
committerYao Qi <yao@codesourcery.com>
Fri, 14 Nov 2014 00:55:06 +0000 (08:55 +0800)
On arm-none-eabi target thumb mode, I see the following fail,

p the_int^M
$2 = 99^M
(gdb) FAIL: gdb.dwarf2/dwz.exp: p the_int

and on powerpc64 target, we even can't get function main from object
file,

disassemble main^M
No function contains specified address.^M
(gdb) FAIL: gdb.dwarf2/dwz.exp: disassemble main

This patch is to use MACRO_AT_func attribute to get the main's start
address and end address correctly, and also remove some code dwz.exp
getting main's length.  This patch fixes fails on both thumb mode and
powerpc64 target.

PASS: gdb.dwarf2/dwz.exp: p other_int
PASS: gdb.dwarf2/dwz.exp: p the_int

gdb/testsuite:

2014-11-14  Yao Qi  <yao@codesourcery.com>

* gdb.dwarf2/dwz.exp: Remove the code to compile main.c to
object and get function length.
(Dwarf::assemble): Replace name, low_pc and high_pc attributes
with MACRO_AT_func.
(top-level): Replace gdb_compile and clean_restart with
prepare_for_testing.
* gdb.dwarf2/main.c (main): Add label main_label.

gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dwz.exp
gdb/testsuite/gdb.dwarf2/main.c

index 59fd16e5e293d0b7ec94164d0543e184ed0ba266..5e9b9dfc398df5e6f7f3a52a40b3f08474ab1c26 100644 (file)
@@ -1,3 +1,13 @@
+2014-11-14  Yao Qi  <yao@codesourcery.com>
+
+       * gdb.dwarf2/dwz.exp: Remove the code to compile main.c to
+       object and get function length.
+       (Dwarf::assemble): Replace name, low_pc and high_pc attributes
+       with MACRO_AT_func.
+       (top-level): Replace gdb_compile and clean_restart with
+       prepare_for_testing.
+       * gdb.dwarf2/main.c (main): Add label main_label.
+
 2014-11-14  Yao Qi  <yao@codesourcery.com>
 
        * lib/dwarf.exp (function_range): New procedure.
index 9175f9eb3bd92fc97f688d9f8b48063cb949ea6b..c7ecc2b161ead9a364453d6d311c8d5dc3704c7b 100644 (file)
@@ -22,65 +22,18 @@ if {![dwarf2_support]} {
 
 standard_testfile main.c dwz.S
 
-if  {[gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile}1.o \
-         object {nodebug}] != ""} {
-    return -1
-}
-
-# Start GDB and load object file, compute the function length which is
-# needed in the Dwarf Assembler below.
-clean_restart ${testfile}1.o
-
-set main_length ""
-set test "disassemble main"
-gdb_test_multiple $test $test {
-    -re ".*$hex <\\+($decimal)>:\[^\r\n\]+\r\nEnd of assembler dump\.\r\n$gdb_prompt $" {
-       set main_length $expect_out(1,string)
-       pass $test
-    }
-}
-
-if { $main_length == "" } {
-    # Bail out here, because we can't do the following tests if
-    # $main_length is unknown.
-    return -1
-}
-
-# Compute the size of the last instruction.
-
-set test "x/2i main+$main_length"
-gdb_test_multiple $test $test {
-    -re ".*($hex) <main\\+$main_length>:\[^\r\n\]+\r\n\[ \]+($hex).*\.\r\n$gdb_prompt $" {
-       set start $expect_out(1,string)
-       set end $expect_out(2,string)
-
-       set main_length [expr $main_length + $end - $start]
-       pass $test
-    }
-}
-
-if { $main_length == "" } {
-    # Bail out here, because we can't do the following tests if
-    # $main_length is unknown.
-    return -1
-}
-
-gdb_exit
-
 # Create the DWARF.
 set asm_file [standard_output_file $srcfile2]
 Dwarf::assemble $asm_file {
     declare_labels partial_label int_label int_label2
-    global main_length
+    global srcdir subdir srcfile
 
     extern main
 
     cu {} {
        partial_label: partial_unit {} {
            subprogram {
-               {name main}
-               {low_pc main addr}
-               {high_pc "main + $main_length" addr}
+               {MACRO_AT_func { main ${srcdir}/${subdir}/${srcfile} }}
            }
        }
     }
@@ -128,17 +81,10 @@ Dwarf::assemble $asm_file {
     }
 }
 
-if  {[gdb_compile $asm_file ${binfile}2.o object {nodebug}] != ""} {
+if [prepare_for_testing ${testfile}.exp $testfile "${asm_file} ${srcfile}" {}] {
     return -1
 }
 
-if  {[gdb_compile [list ${binfile}1.o ${binfile}2.o] \
-         "${binfile}" executable {}] != ""} {
-    return -1
-}
-
-clean_restart ${testfile}
-
 if ![runto_main] {
     return -1
 }
index 3ddd194b2541db239c367f334f812936e13ef952..e6d4715f4fab174c61405094dc91a4a141faab7f 100644 (file)
@@ -20,5 +20,6 @@
 int
 main()
 {
+  asm ("main_label: .globl main_label");
   return 0;
 }