From: Tom de Vries <tdevries@suse.de>
To: gdb-patches@sourceware.org
Subject: [PATCH 1/2] [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp with clang
Date: Thu, 1 Sep 2022 16:09:04 +0200 [thread overview]
Message-ID: <20220901140905.24562-1-tdevries@suse.de> (raw)
When running test-case gdb.dwarf2/dw2-dir-file-name.exp with clang, we run
into:
...
(gdb) break *compdir_missing__ldir_missing__file_basename^M
Breakpoint 2 at 0x400580^M
(gdb) continue^M
Continuing.^M
^M
Breakpoint 2, 0x0000000000400580 in \
compdir_missing.ldir_missing.file_basename ()^M
(gdb) FAIL: gdb.dwarf2/dw2-dir-file-name.exp: \
compdir_missing__ldir_missing__file_basename: continue to breakpoint: \
compdir_missing__ldir_missing__file_basename
...
The problem is that the test-case uses labels outside functions, which is know
to cause problem with clang, as documented in the comment for proc
function_range.
Fix this by using get_func_info instead.
Tested on x86_64-linux, with both gcc 7.5.0 and clang 13.0.0.
---
gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c | 19 +-----
.../gdb.dwarf2/dw2-dir-file-name.exp | 66 +++++++++++++++++--
2 files changed, 62 insertions(+), 23 deletions(-)
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
index a2a0db27155..8041053b4d8 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
+++ b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.c
@@ -63,28 +63,13 @@ 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
- alignment across all supported architectures, such that the label
- never points into the alignment gap. */
-
#define FUNC(name) \
- asm (".balign 8"); \
- asm (#name "_start: .globl " #name "_start\n"); \
- START_INSNS \
static void \
name (void) \
{ \
+ asm (#name "_label: .globl " #name "_label\n"); \
v++; \
- } \
- asm (#name "_end: .globl " #name "_end\n");
+ }
FUNCBLOCK
#undef FUNC
diff --git a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
index 4c4c1ff07af..08b5c645fa2 100644
--- a/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
+++ b/gdb/testsuite/gdb.dwarf2/dw2-dir-file-name.exp
@@ -34,6 +34,50 @@ if {[is_64_target]} {
}
standard_testfile
+
+set func_info_names {
+ compdir_missing__ldir_missing__file_basename
+ compdir_missing__ldir_missing__file_relative
+ compdir_missing__ldir_missing__file_absolute
+ compdir_missing__ldir_relative_file_basename
+ compdir_missing__ldir_relative_file_relative
+ compdir_missing__ldir_relative_file_absolute
+ compdir_missing__ldir_absolute_file_basename
+ compdir_missing__ldir_absolute_file_relative
+ compdir_missing__ldir_absolute_file_absolute_same
+ compdir_missing__ldir_absolute_file_absolute_different
+ compdir_relative_ldir_missing__file_basename
+ compdir_relative_ldir_missing__file_relative
+ compdir_relative_ldir_missing__file_absolute
+ compdir_relative_ldir_relative_file_basename
+ compdir_relative_ldir_relative_file_relative
+ compdir_relative_ldir_relative_file_absolute
+ compdir_relative_ldir_absolute_file_basename
+ compdir_relative_ldir_absolute_file_relative
+ compdir_relative_ldir_absolute_file_absolute_same
+ compdir_relative_ldir_absolute_file_absolute_different
+ compdir_absolute_ldir_missing__file_basename
+ compdir_absolute_ldir_missing__file_relative
+ compdir_absolute_ldir_missing__file_absolute_same
+ compdir_absolute_ldir_missing__file_absolute_different
+ compdir_absolute_ldir_relative_file_basename
+ compdir_absolute_ldir_relative_file_relative
+ compdir_absolute_ldir_relative_file_absolute_same
+ compdir_absolute_ldir_relative_file_absolute_different
+ compdir_absolute_ldir_absolute_file_basename_same
+ compdir_absolute_ldir_absolute_file_basename_different
+ compdir_absolute_ldir_absolute_file_relative_same
+ compdir_absolute_ldir_absolute_file_relative_different
+ compdir_absolute_ldir_absolute_file_absolute_same
+ compdir_absolute_ldir_absolute_file_absolute_different
+}
+
+with_shared_gdb {
+ foreach func_info_name $func_info_names {
+ get_func_info $func_info_name
+ }
+}
+
set asmsrcfile [standard_output_file ${testfile}asm.S]
set asmobjfile [standard_output_file ${testfile}asm.o]
set srcabsdir [standard_output_file ${testfile}.d]
@@ -52,6 +96,11 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
global f
global addr_len
+ global ${name}_start
+ global ${name}_end
+ set name_start [set ${name}_start]
+ set name_end [set ${name}_end]
+
puts -nonewline $f "\
.L${name}_begin:
.4byte .L${name}_end - .L${name}_start /* Length of Compilation Unit */
@@ -69,8 +118,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 */
- .${addr_len}byte ${name}_start /* DW_AT_low_pc */
- .${addr_len}byte ${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 */"
@@ -80,8 +129,8 @@ proc out_cu { name cu_dir cu_name line_dir line_name } {
.uleb128 3 /* Abbrev: DW_TAG_subprogram */
.asciz \"${name}\" /* DW_AT_name */
- .${addr_len}byte ${name}_start /* DW_AT_low_pc */
- .${addr_len}byte ${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:
@@ -92,6 +141,11 @@ proc out_line { name cu_dir cu_name line_dir line_name } {
global f
global addr_len
+ global ${name}_start
+ global ${name}_end
+ set name_start [set ${name}_start]
+ set name_end [set ${name}_end]
+
puts -nonewline $f "\
.Lline_${name}_begin:
.4byte .Lline_${name}_end - .Lline_${name}_start /* Initial length */
@@ -138,14 +192,14 @@ proc out_line { name cu_dir cu_name line_dir line_name } {
.byte 0 /* DW_LNE_set_address */
.uleb128 ${addr_len}+1
.byte 2
- .${addr_len}byte ${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 ${addr_len}+1
.byte 2
- .${addr_len}byte ${name}_end
+ .${addr_len}byte $name_end
.byte 1 /* DW_LNS_copy */
.byte 0 /* DW_LNE_end_of_sequence */
.uleb128 1
base-commit: 7b0d7ede79f548915641ac5916fbeb77fc9c44ff
--
2.35.3
next reply other threads:[~2022-09-01 14:09 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-01 14:09 Tom de Vries [this message]
2022-09-01 14:09 ` [PATCH 2/2] [gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp for ppc64le Tom de Vries
2022-09-12 10:20 ` Luis Machado
2022-09-13 14:55 ` Tom de Vries
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=20220901140905.24562-1-tdevries@suse.de \
--to=tdevries@suse.de \
--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;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).