From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 17908 invoked by alias); 25 Oct 2014 00:17:56 -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 17896 invoked by uid 89); 25 Oct 2014 00:17:55 -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,FROM_12LTRDOM,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:54 +0000 Received: from svr-orw-fem-06.mgc.mentorg.com ([147.34.97.120]) by relay1.mentorg.com with esmtp id 1Xhp3G-0004pV-St from Yao_Qi@mentor.com for gdb-patches@sourceware.org; Fri, 24 Oct 2014 17:17:50 -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:50 -0700 From: Yao Qi To: Subject: [PATCH 0/6] Use correct function address in dwarf assembler Date: Sat, 25 Oct 2014 00:17:00 -0000 Message-ID: <1414195968-3333-1-git-send-email-yao@codesourcery.com> MIME-Version: 1.0 Content-Type: text/plain X-IsSubscribed: yes X-SW-Source: 2014-10/txt/msg00683.txt.bz2 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! *** BLURB HERE *** Yao Qi (6): New proc _handle_attribute DW attribute macro MACRO_AT_func and MACRO_AT_range Get start and end address of main in dwz.exp Use Dwarf::assemble in implptr-optimized-out.exp Fix implptr-optimized-out.exp fail Fix dw2-ifort-parameter.exp fail with clang gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.c | 7 +- gdb/testsuite/gdb.dwarf2/dw2-ifort-parameter.exp | 8 +- gdb/testsuite/gdb.dwarf2/dwz.exp | 60 +------- gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S | 166 --------------------- gdb/testsuite/gdb.dwarf2/implptr-optimized-out.exp | 63 +++++++- gdb/testsuite/gdb.dwarf2/main.c | 1 + gdb/testsuite/lib/dwarf.exp | 143 ++++++++++++++++-- 7 files changed, 201 insertions(+), 247 deletions(-) delete mode 100644 gdb/testsuite/gdb.dwarf2/implptr-optimized-out.S -- 1.9.3