From e87324746c45b0f2cd179ba59a80b43a435a9369 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Wed, 13 Jul 2016 13:58:19 +0200 Subject: [PATCH] [ppc64] Fix for function descriptors Marin Cermak has found various testcases (or one of them) of GDB FAIL on ppc64. https://sourceware.org/bugzilla/show_bug.cgi?id=20328 .o contained only the function descriptor address. The DWARF as produced by Tcl Dwarf::assemble: <1><27>: Abbrev Number: 4 (DW_TAG_subprogram) <28> DW_AT_name : main <2d> DW_AT_external : 1 <2e> DW_AT_low_pc : 0x1001ff98 <36> DW_AT_high_pc : 0x1002ff98 <2><3e>: Abbrev Number: 5 (DW_TAG_lexical_block) Runtime info: $2 = {} 0x10000674 <.main> $3 = {void ()} 0x1001ff98
On Tue, 12 Jul 2016 15:22:49 +0200, Ulrich Weigand wrote: Well, most of the gdb.dwarf2 test cases simply use explicitly placed labels for the DW_AT_low_pc / DW_AT_high_pc attributes. See e.g. dw2-unresolved-main.c: asm (".globl cu_text_start"); asm ("cu_text_start:"); On Wed, 13 Jul 2016 10:54:00 +0200, Jan Kratochvil wrote: Now I see I should not do that because: lib/dwarf.exp: proc function_range { func src } { So I am providing this patch. gdb/testsuite/ChangeLog 2016-07-13 Jan Kratochvil * gdb.dwarf2/atomic-type.exp: Use function_range for low_pc and high_pc. * gdb.dwarf2/atomic.c (f): Rename f_end_lbl to f_label. * gdb.dwarf2/dw2-bad-mips-linkage-name.c (f): Rename f_end_lbl to f_label. (g): Rename g_end_lbl to g_label. * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Use function_range for low_pc and high_pc. * gdb.dwarf2/dw2-lexical-block-bare.exp: Likewise. --- gdb/testsuite/ChangeLog | 11 +++++++++++ gdb/testsuite/gdb.dwarf2/atomic-type.exp | 10 ++++++++-- gdb/testsuite/gdb.dwarf2/atomic.c | 2 +- gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c | 4 ++-- gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp | 18 ++++++++++++++---- gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp | 14 ++++++++++---- 6 files changed, 46 insertions(+), 13 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 851487f..7ab1228 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2016-07-13 Jan Kratochvil + + * gdb.dwarf2/atomic-type.exp: Use function_range for low_pc and high_pc. + * gdb.dwarf2/atomic.c (f): Rename f_end_lbl to f_label. + * gdb.dwarf2/dw2-bad-mips-linkage-name.c (f): Rename f_end_lbl to + f_label. + (g): Rename g_end_lbl to g_label. + * gdb.dwarf2/dw2-bad-mips-linkage-name.exp: Use function_range for + low_pc and high_pc. + * gdb.dwarf2/dw2-lexical-block-bare.exp: Likewise. + 2016-07-12 Tom Tromey PR python/19293: diff --git a/gdb/testsuite/gdb.dwarf2/atomic-type.exp b/gdb/testsuite/gdb.dwarf2/atomic-type.exp index 7b35cad..0addefe 100644 --- a/gdb/testsuite/gdb.dwarf2/atomic-type.exp +++ b/gdb/testsuite/gdb.dwarf2/atomic-type.exp @@ -25,6 +25,12 @@ standard_testfile atomic.c atomic-type-dw.S set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { + global srcdir subdir srcfile + + set f_result [function_range f ${srcdir}/${subdir}/${srcfile}] + set f_start [lindex $f_result 0] + set f_length [lindex $f_result 1] + cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C11} @@ -68,8 +74,8 @@ Dwarf::assemble $asm_file { DW_TAG_subprogram { {name f} - {low_pc [gdb_target_symbol f] addr} - {high_pc f_end_lbl addr} + {low_pc $f_start addr} + {high_pc "$f_start + $f_length" addr} {type :$i_l} } { DW_TAG_formal_parameter { diff --git a/gdb/testsuite/gdb.dwarf2/atomic.c b/gdb/testsuite/gdb.dwarf2/atomic.c index 9a2d37b..ecaa56c 100644 --- a/gdb/testsuite/gdb.dwarf2/atomic.c +++ b/gdb/testsuite/gdb.dwarf2/atomic.c @@ -28,7 +28,7 @@ main (void) int f (char *x) { - asm (".global f_end_lbl\nf_end_lbl:"); + asm ("f_label: .globl f_label"); return 0; } diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c b/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c index eaf1233..5816324 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c +++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.c @@ -28,7 +28,7 @@ main (void) int f (char *x) { - asm (".global f_end_lbl\nf_end_lbl:"); + asm ("f_label: .globl f_label"); return 0; } @@ -36,6 +36,6 @@ f (char *x) int g (char *x) { - asm (".global g_end_lbl\ng_end_lbl:"); + asm ("g_label: .globl g_label"); return 0; } diff --git a/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp b/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp index b1041fa..043c1da 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-bad-mips-linkage-name.exp @@ -26,6 +26,16 @@ standard_testfile dw2-bad-mips-linkage-name.c dw2-bad-mips-linkage-name.S set asm_file [standard_output_file $srcfile2] Dwarf::assemble $asm_file { + global srcdir subdir srcfile + + set f_result [function_range f ${srcdir}/${subdir}/${srcfile}] + set f_start [lindex $f_result 0] + set f_length [lindex $f_result 1] + + set g_result [function_range g ${srcdir}/${subdir}/${srcfile}] + set g_start [lindex $g_result 0] + set g_length [lindex $g_result 1] + cu {} { DW_TAG_compile_unit { {DW_AT_language @DW_LANG_C} @@ -42,15 +52,15 @@ Dwarf::assemble $asm_file { } DW_TAG_subprogram { {name f} - {low_pc [gdb_target_symbol f] addr} - {high_pc f_end_lbl addr} + {low_pc $f_start addr} + {high_pc "$f_start + $f_length" addr} {type :$b_l} {DW_AT_MIPS_linkage_name _Z1fv} } DW_TAG_subprogram { {name g} - {low_pc [gdb_target_symbol g] addr} - {high_pc g_end_lbl addr} + {low_pc $g_start addr} + {high_pc "$g_start + $g_length" addr} {type :$b_l} {DW_AT_MIPS_linkage_name 42 DW_FORM_data1} } diff --git a/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp b/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp index 3f9411e..d09f56b 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-lexical-block-bare.exp @@ -24,10 +24,16 @@ standard_testfile .S main.c # Make some DWARF for the test. set asm_file [standard_output_file $srcfile] Dwarf::assemble $asm_file { + global srcdir subdir srcfile2 + + set main_result [function_range main ${srcdir}/${subdir}/${srcfile2}] + set main_start [lindex $main_result 0] + set main_length [lindex $main_result 1] + cu {} { compile_unit { - {low_pc [gdb_target_symbol main] DW_FORM_addr} - {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + {low_pc $main_start addr} + {high_pc "$main_start + $main_length" addr} } { declare_labels integer_label @@ -40,8 +46,8 @@ Dwarf::assemble $asm_file { DW_TAG_subprogram { {name main} {DW_AT_external 1 flag} - {low_pc [gdb_target_symbol main] DW_FORM_addr} - {high_pc [gdb_target_symbol main]+0x10000 DW_FORM_addr} + {low_pc $main_start addr} + {high_pc "$main_start + $main_length" addr} } { DW_TAG_lexical_block { } { -- 2.7.4