This is the mail archive of the
gdb-patches@sourceware.org
mailing list for the GDB project.
[PATCH] gdb.dwarf2: Testsuite 64-bit pointer truncation fixes
- From: "Maciej W. Rozycki" <macro at codesourcery dot com>
- To: <gdb-patches at sourceware dot org>
- Date: Sun, 12 Oct 2014 23:26:11 +0100
- Subject: [PATCH] gdb.dwarf2: Testsuite 64-bit pointer truncation fixes
- Authentication-results: sourceware.org; auth=none
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 = {<text variable, no debug info>} 0x120000b40 <FUNC_symtab>
(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 <MULTIPLE>
2.1 y 0x0000000020000ad0 in func at main.c:5
2.2 y 0x0000000020000b60
2.3 y 0x0000000120000adc <func+12>
(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 <macro@codesourcery.com>
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 <http://www.gnu.org/licenses/>. */
+#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 <http://www.gnu.org/licenses/>. */
+#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
}