From patchwork Sun Oct 12 22:26:11 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Maciej W. Rozycki" X-Patchwork-Id: 3209 Received: (qmail 14447 invoked by alias); 12 Oct 2014 22:26:25 -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 14436 invoked by uid 89); 12 Oct 2014 22:26:24 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-1.0 required=5.0 tests=AWL, BAYES_00 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; Sun, 12 Oct 2014 22:26:21 +0000 Received: from nat-ies.mentorg.com ([192.94.31.2] helo=SVR-IES-FEM-01.mgc.mentorg.com) by relay1.mentorg.com with esmtp id 1XdRaj-0002gq-GT from Maciej_Rozycki@mentor.com for gdb-patches@sourceware.org; Sun, 12 Oct 2014 15:26:18 -0700 Received: from localhost (137.202.0.76) by SVR-IES-FEM-01.mgc.mentorg.com (137.202.0.104) with Microsoft SMTP Server (TLS) id 14.3.181.6; Sun, 12 Oct 2014 23:26:15 +0100 Date: Sun, 12 Oct 2014 23:26:11 +0100 From: "Maciej W. Rozycki" To: Subject: [PATCH] gdb.dwarf2: Testsuite 64-bit pointer truncation fixes Message-ID: User-Agent: Alpine 1.10 (DEB 962 2008-03-14) MIME-Version: 1.0 Hi, Here are fixes for some issues I discovered in DWARF-2 tests with 64-bit MIPS targets: (gdb) PASS: gdb.dwarf2/dw2-case-insensitive.exp: set case-sensitive off info functions fUnC_lang All functions matching regular expression "fUnC_lang": File file1.txt: foo FUNC_lang(void); Non-debugging symbols: 0x0000000120000b20 FUNC_lang_start 0x0000000120000b40 FUNC_lang_end (gdb) FAIL: gdb.dwarf2/dw2-case-insensitive.exp: regexp case-sensitive off p fuNC_lang Cannot access memory at address 0x20000b20 (gdb) FAIL: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_lang p fuNC_symtab $1 = {} 0x120000b40 (gdb) PASS: gdb.dwarf2/dw2-case-insensitive.exp: p fuNC_symtab break fuNC_lang Cannot access memory at address 0x20000b20 (gdb) FAIL: gdb.dwarf2/dw2-case-insensitive.exp: setting breakpoint at fuNC_lang and: (gdb) continue Continuing. Breakpoint 1, 0x0000000120000c0c in main () (gdb) break func Breakpoint 2 at 0x20000ad0: func. (3 locations) (gdb) continue Continuing. Warning: Cannot insert breakpoint 2. Cannot access memory at address 0x20000ad0 Cannot insert breakpoint 2. Cannot access memory at address 0x20000b60 (gdb) FAIL: gdb.dwarf2/dw2-skip-prologue.exp: continue to breakpoint: func info break $bpnum Num Type Disp Enb Address What 2 breakpoint keep y 2.1 y 0x0000000020000ad0 in func at main.c:5 2.2 y 0x0000000020000b60 2.3 y 0x0000000120000adc (gdb) FAIL: gdb.dwarf2/dw2-skip-prologue.exp: 2 locations found Address truncation is obvious from these logs. The fixes follow previous art across our test suite and should therefore be rather obvious. Regression tested with the mips-linux-gnu target and the following multilibs: -EB -EB -msoft-float -EB -mips16 -EB -mips16 -msoft-float -EB -mmicromips -EB -mmicromips -msoft-float -EB -mabi=n32 -EB -mabi=n32 -msoft-float -EB -mabi=64 -EB -mabi=64 -msoft-float and the -EL variants of same, fixing the 5 failures noted above for each of the `-mabi=64' multilibs and with no changes otherwise. OK to apply? 2014-10-12 Maciej W. Rozycki gdb/testsuite/ * gdb.dwarf2/dw2-case-insensitive-debug.S: Handle 64-bit pointers. * gdb.dwarf2/dw2-case-insensitive.exp: Update accordingly. * gdb.dwarf2/dw2-skip-prologue.S: Handle 64-bit pointers. * gdb.dwarf2/dw2-skip-prologue.exp: Update accordingly. Maciej gdb-dwarf2-test-64bit.diff Index: gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S =================================================================== --- gdb-fsf-trunk-quilt.orig/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2014-10-03 04:33:45.000000000 +0100 +++ gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive-debug.S 2014-10-03 04:51:44.547540632 +0100 @@ -15,6 +15,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#if PTRBITS == 64 +# define PTRBYTE .8byte +#elif PTRBITS == 32 +# define PTRBYTE .4byte +#else +# error Unsupported pointer size +#endif + .section .debug_info .Lcu1_begin: /* CU header */ @@ -22,21 +30,21 @@ .Lcu1_start: .2byte 2 /* DWARF Version */ .4byte .Labbrev1_begin /* Offset into abbrev section */ - .byte 4 /* Pointer size */ + .byte PTRBITS / 8 /* Pointer size */ /* CU die */ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ .ascii "file1.txt\0" /* DW_AT_name */ .ascii "GNU C 3.3.3\0" /* DW_AT_producer */ .byte 8 /* DW_AT_language (DW_LANG_Fortran90) */ - .4byte cu_text_start /* DW_AT_low_pc */ - .4byte cu_text_end /* DW_AT_high_pc */ + PTRBYTE cu_text_start /* DW_AT_low_pc */ + PTRBYTE cu_text_end /* DW_AT_high_pc */ .uleb128 3 /* Abbrev: DW_TAG_subprogram */ .byte 1 /* DW_AT_external */ .ascii "FUNC_lang\0" /* DW_AT_name */ - .4byte FUNC_lang_start /* DW_AT_low_pc */ - .4byte FUNC_lang_end /* DW_AT_high_pc */ + PTRBYTE FUNC_lang_start /* DW_AT_low_pc */ + PTRBYTE FUNC_lang_end /* DW_AT_high_pc */ .byte 1 /* DW_AT_prototyped */ .4byte .Ltype - .Lcu1_begin /* DW_AT_type */ Index: gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp =================================================================== --- gdb-fsf-trunk-quilt.orig/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2014-10-03 04:33:45.000000000 +0100 +++ gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-case-insensitive.exp 2014-10-03 04:50:33.537698613 +0100 @@ -21,8 +21,15 @@ if {![dwarf2_support]} { standard_testfile .c dw2-case-insensitive-debug.S +if [is_ilp32_target] { + set ptrbits 32 +} else { + set ptrbits 64 +} + if { [prepare_for_testing ${testfile}.exp ${testfile} \ - [list $srcfile $srcfile2] {nodebug}] } { + [list $srcfile $srcfile2] \ + [list nodebug additional_flags=-DPTRBITS=$ptrbits]] } { return -1 } Index: gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S =================================================================== --- gdb-fsf-trunk-quilt.orig/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S 2014-10-03 04:33:45.000000000 +0100 +++ gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.S 2014-10-03 04:50:33.537698613 +0100 @@ -15,6 +15,14 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +#if PTRBITS == 64 +# define PTRBYTE .8byte +#elif PTRBITS == 32 +# define PTRBYTE .4byte +#else +# error Unsupported pointer size +#endif + .section .debug_info .Lcu1_begin: /* CU header */ @@ -22,13 +30,13 @@ .Lcu1_start: .2byte 2 /* DWARF Version */ .4byte .Labbrev1_begin /* Offset into abbrev section */ - .byte 4 /* Pointer size */ + .byte PTRBITS / 8 /* Pointer size */ /* CU die */ .uleb128 1 /* Abbrev: DW_TAG_compile_unit */ .4byte .Lline1_begin /* DW_AT_stmt_list */ - .4byte func_start /* DW_AT_low_pc */ - .4byte func_end /* DW_AT_high_pc */ + PTRBYTE func_start /* DW_AT_low_pc */ + PTRBYTE func_end /* DW_AT_high_pc */ .ascii "main.c\0" /* DW_AT_name */ .ascii "GNU C 4.5.0\0" /* DW_AT_producer must be >= 4.5 */ .byte 2 /* DW_AT_language (DW_LANG_C) */ @@ -37,8 +45,8 @@ .byte 1 /* DW_AT_external */ .ascii "func\0" /* DW_AT_name */ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ - .4byte func_start /* DW_AT_low_pc */ - .4byte func_end /* DW_AT_high_pc */ + PTRBYTE func_start /* DW_AT_low_pc */ + PTRBYTE func_end /* DW_AT_high_pc */ /* GDB `has_loclist' detection of -O2 -g code needs to see a DW_AT_location location list. There may exist -O2 -g CUs still not needing/using any such @@ -51,16 +59,16 @@ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ .ascii "inlined\0" /* DW_AT_name */ - .4byte func0 /* DW_AT_low_pc */ - .4byte func1 /* DW_AT_high_pc */ + PTRBYTE func0 /* DW_AT_low_pc */ + PTRBYTE func1 /* DW_AT_high_pc */ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ .byte 1 /* DW_AT_call_file */ .byte 8 /* DW_AT_call_line */ .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ .ascii "inlined2\0" /* DW_AT_name */ - .4byte func2 /* DW_AT_low_pc */ - .4byte func3 /* DW_AT_high_pc */ + PTRBYTE func2 /* DW_AT_low_pc */ + PTRBYTE func3 /* DW_AT_high_pc */ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ .byte 1 /* DW_AT_call_file */ .byte 11 /* DW_AT_call_line */ @@ -68,8 +76,8 @@ #ifdef INLINED .uleb128 4 /* Abbrev: DW_TAG_inlined_subroutine */ .ascii "otherinline\0" /* DW_AT_name */ - .4byte func3 /* DW_AT_low_pc */ - .4byte func_end /* DW_AT_high_pc */ + PTRBYTE func3 /* DW_AT_low_pc */ + PTRBYTE func_end /* DW_AT_high_pc */ .byte 3 /* DW_AT_inline (DW_INL_declared_inlined) */ .byte 1 /* DW_AT_call_file */ .byte 9 /* DW_AT_call_line */ @@ -77,8 +85,8 @@ #ifdef LEXICAL .uleb128 5 /* Abbrev: DW_TAG_lexical_block */ - .4byte func3 /* DW_AT_low_pc */ - .4byte func_end /* DW_AT_high_pc */ + PTRBYTE func3 /* DW_AT_low_pc */ + PTRBYTE func_end /* DW_AT_high_pc */ /* GDB would otherwise ignore the DW_TAG_lexical_block. */ .uleb128 6 /* Abbrev: DW_TAG_variable */ @@ -97,8 +105,8 @@ .byte 1 /* DW_AT_external */ .ascii "func\0" /* DW_AT_name */ .4byte .Ltype_int-.Lcu1_begin /* DW_AT_type */ - .4byte fund_start /* DW_AT_low_pc */ - .4byte fund_end /* DW_AT_high_pc */ + PTRBYTE fund_start /* DW_AT_low_pc */ + PTRBYTE fund_end /* DW_AT_high_pc */ .byte 0 /* End of children of DW_TAG_subprogram */ @@ -117,7 +125,7 @@ /* Reset the location list base address first. */ .4byte -1, 0 - .4byte func_start, func_end + PTRBYTE func_start, func_end .2byte 2f-1f 1: .byte 0x50 /* DW_OP_reg0 */ 2: @@ -277,7 +285,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func_start + PTRBYTE func_start .byte 3 /* DW_LNS_advance_line */ .sleb128 4 /* ... to 5 */ .byte 1 /* DW_LNS_copy */ @@ -285,7 +293,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func0 + PTRBYTE func0 .byte 4 /* DW_LNS_set_file */ .uleb128 2 .byte 3 /* DW_LNS_advance_line */ @@ -295,7 +303,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func1 + PTRBYTE func1 .byte 4 /* DW_LNS_set_file */ .uleb128 1 .byte 3 /* DW_LNS_advance_line */ @@ -305,7 +313,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func2 + PTRBYTE func2 .byte 4 /* DW_LNS_set_file */ .uleb128 2 .byte 3 /* DW_LNS_advance_line */ @@ -315,7 +323,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func3 + PTRBYTE func3 .byte 4 /* DW_LNS_set_file */ .uleb128 1 .byte 3 /* DW_LNS_advance_line */ @@ -325,14 +333,14 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte func_end + PTRBYTE func_end /* Equivalent copy but renamed s/func/fund/. */ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund_start + PTRBYTE fund_start .byte 3 /* DW_LNS_advance_line */ .sleb128 -4 /* ... to 5 */ .byte 1 /* DW_LNS_copy */ @@ -340,7 +348,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund0 + PTRBYTE fund0 .byte 4 /* DW_LNS_set_file */ .uleb128 2 .byte 3 /* DW_LNS_advance_line */ @@ -350,7 +358,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund1 + PTRBYTE fund1 .byte 4 /* DW_LNS_set_file */ .uleb128 1 .byte 3 /* DW_LNS_advance_line */ @@ -360,7 +368,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund2 + PTRBYTE fund2 .byte 4 /* DW_LNS_set_file */ .uleb128 2 .byte 3 /* DW_LNS_advance_line */ @@ -370,7 +378,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund3 + PTRBYTE fund3 .byte 4 /* DW_LNS_set_file */ .uleb128 1 .byte 3 /* DW_LNS_advance_line */ @@ -380,7 +388,7 @@ .byte 0 /* DW_LNE_set_address */ .uleb128 5 .byte 2 - .4byte fund_end + PTRBYTE fund_end /* Line numbering end. */ Index: gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp =================================================================== --- gdb-fsf-trunk-quilt.orig/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp 2014-10-03 04:33:45.000000000 +0100 +++ gdb-fsf-trunk-quilt/gdb/testsuite/gdb.dwarf2/dw2-skip-prologue.exp 2014-10-03 04:50:33.537698613 +0100 @@ -39,7 +39,16 @@ if {![dwarf2_support]} { standard_testfile set executable ${testfile} -if {[build_executable ${testfile}.exp ${executable} "${testfile}.c ${testfile}.S" {additional_flags=-DINLINED}] == -1} { +if [is_ilp32_target] { + set ptrbits 32 +} else { + set ptrbits 64 +} + +if { [build_executable ${testfile}.exp ${executable} \ + "${testfile}.c ${testfile}.S" \ + [list additional_flags=-DINLINED \ + additional_flags=-DPTRBITS=$ptrbits]] == -1 } { return -1 }