+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.
 
 
 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} }}
            }
        }
     }
     }
 }
 
-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
 }