From: Kwok Cheung Yeung <kwok_yeung@mentor.com>
To: <gdb-patches@sourceware.org>
Subject: [PATCH] Fix gdb.dwarf2/dw2-dir-file-name.exp test for MIPS architectures
Date: Sat, 11 Oct 2014 21:01:00 -0000 [thread overview]
Message-ID: <54399A91.8000006@mentor.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1413 bytes --]
This patch fixes the failures that occur with the
gdb.dwarf2/dw2-dir-file-name.exp test on 64-bit MIPS and compressed MIPS
ISAs (i.e. MIPS16 and microMIPS).
The failures on 64-bit occur because the generated DWARF address
information is always 32-bit, which causes the upper 32-bits of
addresses to be truncated and causes breakpoints to be set on the wrong
address if any of the upper 32-bits are non-zero. I suspect that other
64-bit architectures get away with it because they place all their
instructions at a VMA lower than 2^32 by default. This patch causes
64-bit addresses to be generated if a 64-bit target is detected.
The failures on MIPS16 and microMIPS occur because the breakpoint
address needs to have the LSB set to 1 (used to indicate that the code
is compressed). However, the function name is interpreted as a data
label, causing GDB to set breakpoints at even addresses. This is fixed
by explicitly adding a '.insn' directive (see
https://sourceware.org/binutils/docs/as/MIPS-insn.html) after the label
on MIPS only.
Kwok
2014-08-14 Kwok Cheung Yeung <kcy@codesourcery.com>
gdb/testsuite/
* gdb.dwarf2/dw2-dir-file-name.exp (addr_len): New.
(out_cu): Use addr_len for the size of addresses.
(out_line): Likewise. Size DW_LNE_set_address instruction
according to addr_len.
* gdb.dwarf2/dw2-dir-file-name.c (START_INSNS): New.
(FUNC): Add START_INSNS to definition.
[-- Attachment #2: gdb_dw2-dir-file-name.patch --]
[-- Type: text/plain, Size: 3895 bytes --]
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
index 517df90..69aad30 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
+++ b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
@@ -63,6 +63,12 @@ FUNC (compdir_absolute_ldir_absolute_file_relative_different) \
FUNC (compdir_absolute_ldir_absolute_file_absolute_same) \
FUNC (compdir_absolute_ldir_absolute_file_absolute_different)
+#ifdef __mips__
+#define START_INSNS asm (".insn\n");
+#else
+#define START_INSNS
+#endif
+
/* Notes: (1) The '*_start' label below is needed because 'name' may
point to a function descriptor instead of to the actual code. (2)
The '.balign' should specify the highest possible function
@@ -72,6 +78,7 @@ FUNC (compdir_absolute_ldir_absolute_file_absolute_different)
#define FUNC(name) \
asm (".balign 8"); \
asm (#name "_start: .globl " #name "_start\n"); \
+ START_INSNS \
static void \
name (void) \
{ \
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
index 7f29581..6c92441 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
@@ -19,6 +19,13 @@ if {![dwarf2_support]} {
return 0
}
+# Find length of addresses in bytes.
+if {[is_64_target]} {
+ set addr_len 8
+} else {
+ set addr_len 4
+}
+
standard_testfile
set asmsrcfile [standard_output_file ${testfile}asm.S]
set asmobjfile [standard_output_file ${testfile}asm.o]
@@ -36,6 +43,7 @@ puts $f "/* DO NOT EDIT! GENERATED AUTOMATICALLY! */"
proc out_cu { name cu_dir cu_name line_dir line_name } {
global f
+ global addr_len
puts -nonewline $f "\
.L${name}_begin:
@@ -43,7 +51,7 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.L${name}_start:
.2byte 2 /* DWARF Version */
.4byte .Labbrev1_begin /* Offset into abbrev section */
- .byte 4 /* Pointer size */
+ .byte ${addr_len} /* Pointer size */
"
if { $cu_dir != "" } {
puts $f " .uleb128 ABBREV_COMP_DIR_NAME /* Abbrev: DW_TAG_compile_unit */"
@@ -54,8 +62,8 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.ascii \"GNU C\\0\" /* DW_AT_producer */
.byte 2 /* DW_AT_language (DW_LANG_C) */
.4byte .Lline_${name}_begin /* DW_AT_stmt_list */
- .4byte ${name}_start /* DW_AT_low_pc */
- .4byte ${name}_end /* DW_AT_high_pc */
+ .${addr_len}byte ${name}_start /* DW_AT_low_pc */
+ .${addr_len}byte ${name}_end /* DW_AT_high_pc */
"
if { $cu_dir != "" } {
puts $f " .ascii $cu_dir /* DW_AT_comp_dir */"
@@ -65,8 +73,8 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.uleb128 3 /* Abbrev: DW_TAG_subprogram */
.asciz \"${name}\" /* DW_AT_name */
- .4byte ${name}_start /* DW_AT_low_pc */
- .4byte ${name}_end /* DW_AT_high_pc */
+ .${addr_len}byte ${name}_start /* DW_AT_low_pc */
+ .${addr_len}byte ${name}_end /* DW_AT_high_pc */
.byte 0 /* End of children of CU */
.L${name}_end:
@@ -75,6 +83,7 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
proc out_line { name cu_dir cu_name line_dir line_name } {
global f
+ global addr_len
puts -nonewline $f "\
.Lline_${name}_begin:
@@ -120,16 +129,16 @@ proc out_line { name cu_dir cu_name line_dir line_name } {
.byte 3 /* DW_LNS_advance_line */
.sleb128 998 /* ... to 999 */
.byte 0 /* DW_LNE_set_address */
- .uleb128 5
+ .uleb128 ${addr_len}+1
.byte 2
- .4byte ${name}_start
+ .${addr_len}byte ${name}_start
.byte 1 /* DW_LNS_copy */
.byte 3 /* DW_LNS_advance_line */
.sleb128 1 /* ... to 1000 */
.byte 0 /* DW_LNE_set_address */
- .uleb128 5
+ .uleb128 ${addr_len}+1
.byte 2
- .4byte ${name}_end
+ .${addr_len}byte ${name}_end
.byte 1 /* DW_LNS_copy */
.byte 0 /* DW_LNE_end_of_sequence */
.uleb128 1
next reply other threads:[~2014-10-11 21:01 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-10-11 21:01 Kwok Cheung Yeung [this message]
2014-10-17 12:07 ` Pedro Alves
2014-10-17 22:29 ` Kwok Cheung Yeung
2014-10-17 23:17 ` Doug Evans
2014-10-21 22:26 ` Maciej W. Rozycki
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=54399A91.8000006@mentor.com \
--to=kwok_yeung@mentor.com \
--cc=gdb-patches@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox