From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12806 invoked by alias); 7 Mar 2005 19:30:41 -0000 Mailing-List: contact gdb-patches-help@sources.redhat.com; run by ezmlm Precedence: bulk List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sources.redhat.com Received: (qmail 12424 invoked from network); 7 Mar 2005 19:30:30 -0000 Received: from unknown (HELO priv-edtnes57.telusplanet.net) (199.185.220.220) by sourceware.org with SMTP; 7 Mar 2005 19:30:30 -0000 Received: from takamaka.act-europe.fr ([142.179.108.108]) by priv-edtnes57.telusplanet.net (InterMail vM.6.01.04.00 201-2131-118-20041027) with ESMTP id <20050307193029.SSBN16712.priv-edtnes57.telusplanet.net@takamaka.act-europe.fr> for ; Mon, 7 Mar 2005 12:30:29 -0700 Received: by takamaka.act-europe.fr (Postfix, from userid 507) id EC0E547DC0; Mon, 7 Mar 2005 11:30:28 -0800 (PST) Date: Mon, 07 Mar 2005 19:30:00 -0000 From: Joel Brobecker To: gdb-patches@sources.redhat.com Subject: Re: [RFA/testsuite/dwarf2] testcase for duplicated psymtab Message-ID: <20050307193028.GQ1750@adacore.com> References: <20050203145813.GL1147@adacore.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20050203145813.GL1147@adacore.com> User-Agent: Mutt/1.4i X-SW-Source: 2005-03/txt/msg00081.txt.bz2 Hello, One month ping? Thank you! On Thu, Feb 03, 2005 at 06:58:14PM +0400, Joel Brobecker wrote: > Hello, > > This patch adds a new dwarf2 testcase for the already approved patch > from: http://sources.redhat.com/ml/gdb-patches/2004-10/msg00298.html > > The intent is to reproduce the dwarf2 information obtaine when compiling > a source file stored in a subdirectory. To create dup-psym.S, I basically > copied dw2-basic.S, and then added a DW_AT_comp_dir to the > compilation_unit. I also added an entry in the directory table and > linked my source file name to that entry in the file name table. > > The file above, once compiled, causes GDB to create 2 psymtabs for > file1.txt, as evidenced by "info sources": > > (gdb) info sources > [...] > Source files for which symbols will be read in on demand: > [...], file1.txt, foo/file1.txt, [...] > > The dup-psym.exp testcase checks for this and reports a fail when > file1.txt is seen twice in the "info souces" output. Once the patch > is applied, the fail is changed into a pass. > > 2005-02-03 Joel Brobecker > > * gdb.dwarf2/dup-psym.S: New file. > * gdb.dwarf2/dup-psym.exp: New testcase. > > Tested on x86-linux. Currently causes on fail since the approval > for the fix was conditional on the addition of this testcase first. > Will become a pass shortly after, once I check the fix in. > > OK to apply? > > Thanks, > -- > Joel > /* This testcase is part of GDB, the GNU debugger. > > Copyright 2005 Free Software Foundation, Inc. > > This program is free software; you can redistribute it and/or modify > it under the terms of the GNU General Public License as published by > the Free Software Foundation; either version 2 of the License, or > (at your option) any later version. > > This program is distributed in the hope that it will be useful, > but WITHOUT ANY WARRANTY; without even the implied warranty of > MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > GNU General Public License for more details. > > You should have received a copy of the GNU General Public License > along with this program; if not, write to the Free Software > Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, > USA. */ > > /* This file reproduces the dwarf2 information that was obtained when > compiling a unit stored in a subdirectory (eg "gcc -c -g foo/bar.c). > We have observed in this case that the DW_AT_name for the > DW_TAG_compile_unit is "foo/bar.c", while the associated filename > from the line table is only "bar.c". This slight difference used > to cause some problems in GDB. */ > > /* Dummy function to provide debug information for. */ > > .text > .Lbegin_text1: > .globl func_cu1 > .type func_cu1, %function > func_cu1: > .Lbegin_func_cu1: > .int 0 > .Lend_func_cu1: > .size func_cu1, .-func_cu1 > .Lend_text1: > > /* Debug information */ > > .section .debug_info > .Lcu1_begin: > /* CU header */ > .int .Lcu1_end - .Lcu1_start /* Length of Compilation Unit */ > .Lcu1_start: > .short 2 /* DWARF Version */ > .int .Labbrev1_begin /* Offset into abbrev section */ > .byte 4 /* Pointer size */ > > /* CU die */ > .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ > .int .Lline1_begin /* DW_AT_stmt_list */ > .int .Lend_text1 /* DW_AT_high_pc */ > .int .Lbegin_text1 /* DW_AT_low_pc */ > .ascii "foo/file1.txt\0" /* DW_AT_name */ > .ascii "/tmp/dup\0" /* DW_AT_comp_dir */ > .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ > .byte 1 /* DW_AT_language (C) */ > > /* func_cu1 */ > .uleb128 2 /* Abbrev: DW_TAG_subprogram */ > .byte 1 /* DW_AT_external */ > .byte 1 /* DW_AT_decl_file */ > .byte 2 /* DW_AT_decl_line */ > .ascii "func_cu1\0" /* DW_AT_name */ > .int .Ltype_int-.Lcu1_begin /* DW_AT_type */ > .int .Lbegin_func_cu1 /* DW_AT_low_pc */ > .int .Lend_func_cu1 /* DW_AT_high_pc */ > .byte 1 /* DW_AT_frame_base: length */ > .byte 0x55 /* DW_AT_frame_base: DW_OP_reg5 */ > > .Ltype_int: > .uleb128 3 /* Abbrev: DW_TAG_base_type */ > .ascii "int\0" /* DW_AT_name */ > .byte 4 /* DW_AT_byte_size */ > .byte 5 /* DW_AT_encoding */ > > .byte 0 /* End of children of CU */ > > .Lcu1_end: > > /* Abbrev table */ > .section .debug_abbrev > .Labbrev1_begin: > .uleb128 1 /* Abbrev code */ > .uleb128 0x11 /* DW_TAG_compile_unit */ > .byte 1 /* has_children */ > .uleb128 0x10 /* DW_AT_stmt_list */ > .uleb128 0x6 /* DW_FORM_data4 */ > .uleb128 0x12 /* DW_AT_high_pc */ > .uleb128 0x1 /* DW_FORM_addr */ > .uleb128 0x11 /* DW_AT_low_pc */ > .uleb128 0x1 /* DW_FORM_addr */ > .uleb128 0x3 /* DW_AT_name */ > .uleb128 0x8 /* DW_FORM_string */ > .uleb128 0x1b /* DW_AT_comp_dir */ > .uleb128 0x8 /* DW_FORM_string */ > .uleb128 0x25 /* DW_AT_producer */ > .uleb128 0x8 /* DW_FORM_string */ > .uleb128 0x13 /* DW_AT_language */ > .uleb128 0xb /* DW_FORM_data1 */ > .byte 0x0 /* Terminator */ > .byte 0x0 /* Terminator */ > > .uleb128 2 /* Abbrev code */ > .uleb128 0x2e /* DW_TAG_subprogram */ > .byte 0 /* has_children */ > .uleb128 0x3f /* DW_AT_external */ > .uleb128 0xc /* DW_FORM_flag */ > .uleb128 0x3a /* DW_AT_decl_file */ > .uleb128 0xb /* DW_FORM_data1 */ > .uleb128 0x3b /* DW_AT_decl_line */ > .uleb128 0xb /* DW_FORM_data1 */ > .uleb128 0x3 /* DW_AT_name */ > .uleb128 0x8 /* DW_FORM_string */ > .uleb128 0x49 /* DW_AT_type */ > .uleb128 0x13 /* DW_FORM_ref4 */ > .uleb128 0x11 /* DW_AT_low_pc */ > .uleb128 0x1 /* DW_FORM_addr */ > .uleb128 0x12 /* DW_AT_high_pc */ > .uleb128 0x1 /* DW_FORM_addr */ > .uleb128 0x40 /* DW_AT_frame_base */ > .uleb128 0xa /* DW_FORM_block1 */ > .byte 0x0 /* Terminator */ > .byte 0x0 /* Terminator */ > > .uleb128 3 /* Abbrev code */ > .uleb128 0x24 /* DW_TAG_base_type */ > .byte 0 /* has_children */ > .uleb128 0x3 /* DW_AT_name */ > .uleb128 0x8 /* DW_FORM_string */ > .uleb128 0xb /* DW_AT_byte_size */ > .uleb128 0xb /* DW_FORM_data1 */ > .uleb128 0x3e /* DW_AT_encoding */ > .uleb128 0xb /* DW_FORM_data1 */ > .byte 0x0 /* Terminator */ > .byte 0x0 /* Terminator */ > > .byte 0x0 /* Terminator */ > .byte 0x0 /* Terminator */ > > /* Line table */ > .section .debug_line > .Lline1_begin: > .int .Lline1_end - .Lline1_start /* Initial length */ > .Lline1_start: > .short 2 /* Version */ > .int .Lline1_lines - .Lline1_hdr /* header_length */ > .Lline1_hdr: > .byte 1 /* Minimum insn length */ > .byte 1 /* default_is_stmt */ > .byte 1 /* line_base */ > .byte 1 /* line_range */ > .byte 0x10 /* opcode_base */ > > /* Standard lengths */ > .byte 0 > .byte 1 > .byte 1 > .byte 1 > .byte 1 > .byte 0 > .byte 0 > .byte 0 > .byte 1 > .byte 0 > .byte 0 > .byte 1 > .byte 0 > .byte 0 > .byte 0 > > /* Include directories */ > .ascii "foo\0" > .byte 0 > > /* File names */ > .ascii "file1.txt\0" > .uleb128 1 > .uleb128 0 > .uleb128 0 > > .byte 0 > > .Lline1_lines: > .byte 0 /* DW_LNE_set_address */ > .uleb128 5 > .byte 2 > .int .Lbegin_func_cu1 > > .byte 3 /* DW_LNS_advance_line */ > .sleb128 3 /* ... to 4 */ > > .byte 1 /* DW_LNS_copy */ > > .byte 1 /* DW_LNS_copy (second time as an end-of-prologue marker) */ > > .byte 0 /* DW_LNE_set_address */ > .uleb128 5 > .byte 2 > .int .Lend_func_cu1 > > .byte 0 /* DW_LNE_end_of_sequence */ > .uleb128 1 > .byte 1 > > .Lline1_end: > # Copyright 2005 > # Free Software Foundation, Inc. > > # This program is free software; you can redistribute it and/or modify > # it under the terms of the GNU General Public License as published by > # the Free Software Foundation; either version 2 of the License, or > # (at your option) any later version. > # > # This program is distributed in the hope that it will be useful, > # but WITHOUT ANY WARRANTY; without even the implied warranty of > # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the > # GNU General Public License for more details. > # > # You should have received a copy of the GNU General Public License > # along with this program; if not, write to the Free Software > # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. > > # Minimal DWARF-2 unit test > > # This test can only be run on targets which support DWARF-2 and use gas. > # For now pick a sampling of likely targets. > if {![istarget *-*-linux*] > && ![istarget *-*-gnu*] > && ![istarget *-*-elf*] > && ![istarget arm-*-eabi*] > && ![istarget powerpc-*-eabi*]} { > return 0 > } > > set testfile "dup-psym" > set srcfile ${testfile}.S > set binfile ${objdir}/${subdir}/${testfile}.x > > if { [gdb_compile "${srcdir}/${subdir}/main.c" "main.o" object {debug}] != "" } { > return -1 > } > > if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${testfile}.o" object {nodebug}] != "" } { > return -1 > } > > if { [gdb_compile "${testfile}.o main.o" "${binfile}" executable {debug}] != "" } { > return -1 > } > > gdb_exit > gdb_start > # Note that we do not change the sources search path, > gdb_load ${binfile} > > set test "info sources should contain only one reference to file1.txt" > gdb_test_multiple "info sources" "$test" { > -re "file1\\.txt.*file1\\.txt.*" { > fail "$test (file1.txt seen more than once)" > } > -re "file1\\.txt.*" { > pass "$test" > } > default { > fail "$test (file1.txt missing from list of sources)" > } > } -- Joel