From patchwork Sun Sep 14 09:31:11 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yao Qi X-Patchwork-Id: 2835 Received: (qmail 17400 invoked by alias); 14 Sep 2014 09:35:37 -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 17389 invoked by uid 89); 14 Sep 2014 09:35:35 -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 autolearn=no 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; Sun, 14 Sep 2014 09:35:33 +0000 Received: from svr-orw-fem-04.mgc.mentorg.com ([147.34.97.41]) by relay1.mentorg.com with esmtp id 1XT6DS-0004Pz-6s from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Sun, 14 Sep 2014 02:35:30 -0700 Received: from GreenOnly (147.34.91.1) by svr-orw-fem-04.mgc.mentorg.com (147.34.97.41) with Microsoft SMTP Server id 14.3.181.6; Sun, 14 Sep 2014 02:35:29 -0700 From: Yao Qi To: Subject: Re: [PATCH] Fix gdb.dwarf2/dwz.exp for thumb mode References: <1409706936-11220-1-git-send-email-yao@codesourcery.com> Date: Sun, 14 Sep 2014 17:31:11 +0800 In-Reply-To: <1409706936-11220-1-git-send-email-yao@codesourcery.com> (Yao Qi's message of "Wed, 3 Sep 2014 09:15:36 +0800") Message-ID: <87k356lfa8.fsf@codesourcery.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/24.3 (gnu/linux) MIME-Version: 1.0 X-IsSubscribed: yes Yao Qi writes: > +asm (".section \".text\""); > +asm (".balign 8"); > +asm ("main_start: .globl main_start"); > + > int > main() Doug expressed the concern that this approach is fragile to clang, because clang will move the label after function main. After some experiments, I find a reliable approach: define a label main_label inside function main, so neither gcc or clang moves it out of function. We can get the address of main by main_label minus the offset of main_label to main. In this updated patch, we compile main.c to object, and gets main_label's offset to main. Then, we can produce the correct address of main in the debug information. diff --git a/gdb/testsuite/gdb.dwarf2/dwz.exp b/gdb/testsuite/gdb.dwarf2/dwz.exp index 9175f9e..229f512 100644 --- a/gdb/testsuite/gdb.dwarf2/dwz.exp +++ b/gdb/testsuite/gdb.dwarf2/dwz.exp @@ -27,8 +27,9 @@ if {[gdb_compile ${srcdir}/${subdir}/${srcfile} ${binfile}1.o \ return -1 } -# Start GDB and load object file, compute the function length which is -# needed in the Dwarf Assembler below. +# Start GDB and load object file, compute the function length and the +# offset from main to main_label which are needed in the Dwarf Assembler +# below. clean_restart ${testfile}1.o set main_length "" @@ -59,9 +60,17 @@ gdb_test_multiple $test $test { } } -if { $main_length == "" } { +set main_label_offset "" +set test "p main_label" +gdb_test_multiple $test $test { + -re ".* = {.*} $hex .*\r\n$gdb_prompt $" { + set main_label_offset $expect_out(1,string) + } +} + +if { $main_length == "" || $main_label_offset == "" } { # Bail out here, because we can't do the following tests if - # $main_length is unknown. + # $main_length or $main_label_offset is unknown. return -1 } @@ -71,7 +80,7 @@ gdb_exit set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { declare_labels partial_label int_label int_label2 - global main_length + global main_length main_label_offset extern main @@ -79,8 +88,8 @@ Dwarf::assemble $asm_file { partial_label: partial_unit {} { subprogram { {name main} - {low_pc main addr} - {high_pc "main + $main_length" addr} + {low_pc "main_label - $main_label_offset" addr} + {high_pc "main_label - $main_label_offset + $main_length" addr} } } } 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; }