From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 26506 invoked by alias); 4 Nov 2014 23:01:52 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Received: (qmail 26496 invoked by uid 89); 4 Nov 2014 23:01:51 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-3.2 required=5.0 tests=AWL,BAYES_00,RCVD_IN_DNSWL_LOW,RP_MATCHES_RCVD,SPF_PASS autolearn=ham version=3.3.2 X-HELO: mail-qa0-f74.google.com Received: from mail-qa0-f74.google.com (HELO mail-qa0-f74.google.com) (209.85.216.74) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with (AES128-SHA encrypted) ESMTPS; Tue, 04 Nov 2014 23:01:50 +0000 Received: by mail-qa0-f74.google.com with SMTP id u7so1089195qaz.3 for ; Tue, 04 Nov 2014 15:01:48 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:mime-version:content-type :content-transfer-encoding:message-id:date:to:cc:subject:in-reply-to :references; bh=cSJBbiAeQbT9AhN0g8D3bLKHfCymfzgaSxEOv5bTjSo=; b=jisrTZ29gH/0THaN1M0kTCIyPMQQa1VgA6XfmFoD/x+pTSSDciGTFkrTiDHIVvV5Wd c/T8xXH4Wdu/djkbZgzGumNAoNO92X7tQ4UyCjLdJQROyQrq78MjUKem9N5LQzj8DBhm BMG3KFhWrVxSl7Ilf/yHdqvDrhkLjorYnm64n9FYifhsHCt/xf9tSikcr0pIIGv/TnzQ f77Gjy06bon3Mfi7zndp7dp7wb117uzIg+SvL66UcJKLEismfv64WrRXAuL4bkJsKtky UYwwf0KdoT9rtkt/sE1NpSMAUlcM/mBZVr9UtqPk4SRZBgbMxyukjfw/EyIFnnd3Bwb/ bVMA== X-Gm-Message-State: ALoCoQlGbT36UB8UIK3H16OXA+AD95d6kxDjJSHbpldYUI3FZjsr03/8VhrTtF4Ya1oFRItx47PTOStH/KC2itLveeqBettp1cyP+kL1QLvGwSqVIocH/hvMRPj8xW7bgj0LgxkV+PS0vOXv6+w1DPlX60LLDV3dy1l4yvWrNNISg8VokJsMW0g= X-Received: by 10.236.62.162 with SMTP id y22mr34013999yhc.38.1415142108347; Tue, 04 Nov 2014 15:01:48 -0800 (PST) Received: from corpmail-nozzle1-1.hot.corp.google.com ([100.108.1.104]) by gmr-mx.google.com with ESMTPS id n63si35565yho.5.2014.11.04.15.01.47 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Nov 2014 15:01:48 -0800 (PST) Received: from ruffy2.mtv.corp.google.com ([172.17.128.107]) by corpmail-nozzle1-1.hot.corp.google.com with ESMTP id SsrDgrH0.1; Tue, 04 Nov 2014 15:01:48 -0800 From: Doug Evans MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit Message-ID: <21593.23259.292616.702553@ruffy2.mtv.corp.google.com> Date: Tue, 04 Nov 2014 23:01:00 -0000 To: Yao Qi Cc: Subject: Re: [PATCH 0/6] Use correct function address in dwarf assembler In-Reply-To: <1414195968-3333-1-git-send-email-yao@codesourcery.com> References: <1414195968-3333-1-git-send-email-yao@codesourcery.com> X-IsSubscribed: yes X-SW-Source: 2014-11/txt/msg00088.txt.bz2 Yao Qi writes: > When we use dwarf assembler, it is common to generate DW_AT_low_pc and > DW_AT_high_pc attributes like this: > > subprogram { > {name main} > {low_pc main addr} > {high_pc main+0x100 addr} > } > > however, main is not resolved to function main's address on some > targets such as arm thumb mode and powerpc64. One approach is to > get function address by labels, like this: > > asm ("func_start: .globl func_start"); > static void func (void) {} > asm ("func_end: .globl func_end"); > > however, some compiler, such as clang, can't guarantee the order of > these labels and function, so it isn't portable. > > In this patch series, we propose a new approach > > 1. get function start and end address correctly in a portable way, > 2. don't affect too much on existing test cases. > > In patch 2/6, a new proc function_range is added. In this proc, the > source file is compiled with debug info. > > int main (void) > { > asm ("main_label: .globl main_label"); > return 0; > } > > we can get the offset of main_label in function main, and then compute > the start address of main via main_label - main_label_offset. This is > portable. > > In order to avoid much changes to existing test cases, we have to use > function_range inside dwarf assembler. Then, I invent some attribute > macros which look like DW attributes, but can be expanded to one or > more standard attributes. The TAG_subprogram above will be simplified > with macro attribute used, it becomes: > > subprogram { > {MACRO_AT_func { func ${srcdir}/${subdir}/${srcfile} }} > } > > With this macro attribute, attributes name, low_pc and high_pc are > generated and set correctly. See more details in patch 2/6. > > Patch 4/6 is to use dwarf assembler to generate .S file, which is > identical to .S current one we are using. Patch 3 and 5 is to use > macro attributes to get function start and end address correctly. > Patch 6 is remove labels and switch to use macro attribute to > get function start address to make clang happy. > > I test the whole series by running tests under gdb.dwarf2/ on > powerpc-linux (both 32-bit and 64-bit), arm-none-eabi (arm mode > and thumb mode) and x86_64-linux. > > Comments are very welcome! Hi. In general I like this a lot. Just a few outstanding questions mentioned in replies to the relevant patches.