mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-25 04:49:54 +08:00
[gdb/testsuite] Fix gdb.dwarf2/dw2-dir-file-name.exp with clang
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.
This commit is contained in:
@ -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
|
||||
|
||||
|
@ -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
|
||||
|
Reference in New Issue
Block a user