From patchwork Sat Oct 25 00:12:45 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 3365 Received: (qmail 18686 invoked by alias); 25 Oct 2014 00:18:01 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 18555 invoked by uid 89); 25 Oct 2014 00:18:01 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.7 required=5.0 tests=AWL, BAYES_00, RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.2 X-HELO: relay1.mentorg.com Received: from relay1.mentorg.com (HELO relay1.mentorg.com) (192.94.38.131) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sat, 25 Oct 2014 00:17:59 +0000 Received: from svr-orw-fem-06.mgc.mentorg.com ([147.34.97.120]) by relay1.mentorg.com with esmtp id 1Xhp3M-0004pp-DS from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Fri, 24 Oct 2014 17:17:56 -0700 Received: from qiyao.dyndns.org.com (147.34.91.1) by SVR-ORW-FEM-06.mgc.mentorg.com (147.34.97.120) with Microsoft SMTP Server id 14.3.181.6; Fri, 24 Oct 2014 17:17:55 -0700 From: Yao Qi To: Subject: [PATCH 3/6] Get start and end address of main in dwz.exp Date: Sat, 25 Oct 2014 08:12:45 +0800 Message-ID: <1414195968-3333-4-git-send-email-yao@codesourcery.com> In-Reply-To: <1414195968-3333-1-git-send-email-yao@codesourcery.com> References: <1414195968-3333-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 X-IsSubscribed: yes 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-10-24 Yao Qi * 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/gdb.dwarf2/dwz.exp | 60 ++-------------------------------------- gdb/testsuite/gdb.dwarf2/main.c | 1 + 2 files changed, 4 insertions(+), 57 deletions(-) diff --git a/gdb/testsuite/gdb.dwarf2/dwz.exp b/gdb/testsuite/gdb.dwarf2/dwz.exp index 9175f9e..c7ecc2b 100644 --- a/gdb/testsuite/gdb.dwarf2/dwz.exp +++ b/gdb/testsuite/gdb.dwarf2/dwz.exp @@ -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) :\[^\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 } diff --git a/gdb/testsuite/gdb.dwarf2/main.c b/gdb/testsuite/gdb.dwarf2/main.c index 3ddd194..e6d4715 100644 --- a/gdb/testsuite/gdb.dwarf2/main.c +++ b/gdb/testsuite/gdb.dwarf2/main.c @@ -20,5 +20,6 @@ int main() { + asm ("main_label: .globl main_label"); return 0; }