From 90359a167375927982fc3f675718044a491da759 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Sun, 17 Apr 2011 18:09:02 +0000 Subject: [PATCH] gdb/ * elfread.c (elf_symtab_read): Do not ignore .L symbols if they are BSF_SYNTHETIC. gdb/testsuite/ * gdb.base/callfuncs.c (Lcallfunc, callfunc): New functions. * gdb.base/callfuncs.exp (print callfunc (Lcallfunc, 5)): New test. --- gdb/ChangeLog | 5 +++++ gdb/elfread.c | 6 +++++- gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.base/callfuncs.c | 12 ++++++++++++ gdb/testsuite/gdb.base/callfuncs.exp | 5 +++++ 5 files changed, 32 insertions(+), 1 deletion(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e81afd7..b44889e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2011-04-17 Jan Kratochvil + * elfread.c (elf_symtab_read): Do not ignore .L symbols if they are + BSF_SYNTHETIC. + +2011-04-17 Jan Kratochvil + Fix Python access to inlined frames. * python/py-frame.c (frapy_read_var): Find BLOCK using get_frame_block. * python/py-symbol.c (gdbpy_lookup_symbol): Likewise. diff --git a/gdb/elfread.c b/gdb/elfread.c index b9cfa13..2d589a4 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -412,7 +412,11 @@ elf_symtab_read (struct objfile *objfile, int type, else ms_type = mst_text; } - else if ((sym->name[0] == '.' && sym->name[1] == 'L') + /* The BSF_SYNTHETIC check is there to omit ppc64 function + descriptors mistaken for static functions starting with 'L'. + */ + else if ((sym->name[0] == '.' && sym->name[1] == 'L' + && (sym->flags & BSF_SYNTHETIC) == 0) || ((sym->flags & BSF_LOCAL) && sym->name[0] == '$' && sym->name[1] == 'L')) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index af1fd5f..f1f8d3c 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,5 +1,10 @@ 2011-04-17 Jan Kratochvil + * gdb.base/callfuncs.c (Lcallfunc, callfunc): New functions. + * gdb.base/callfuncs.exp (print callfunc (Lcallfunc, 5)): New test. + +2011-04-17 Jan Kratochvil + Fix Python access to inlined frames. * gdb.python/py-frame-inline.c: New file. * gdb.python/py-frame-inline.exp: New file. diff --git a/gdb/testsuite/gdb.base/callfuncs.c b/gdb/testsuite/gdb.base/callfuncs.c index 2d40650..406d22a 100644 --- a/gdb/testsuite/gdb.base/callfuncs.c +++ b/gdb/testsuite/gdb.base/callfuncs.c @@ -510,3 +510,15 @@ int main () t_structs_c(struct_val1); return 0 ; } + +static int +Lcallfunc (int arg) +{ + return arg + 1; +} + +int +callfunc (int (*func) (int value), int value) +{ + return Lcallfunc (0) * 0 + func (value) * 2; +} diff --git a/gdb/testsuite/gdb.base/callfuncs.exp b/gdb/testsuite/gdb.base/callfuncs.exp index 97efacb..27ebd1e 100644 --- a/gdb/testsuite/gdb.base/callfuncs.exp +++ b/gdb/testsuite/gdb.base/callfuncs.exp @@ -458,3 +458,8 @@ if {![target_info exists gdb,nosignals] && ![istarget "*-*-uclinux*"]} { gdb_test {set $sp = $old_sp} } + +# Test function descriptor resolution - the separate debug info .opd section +# handling vs. local labels `.L'... as `Lcallfunc' starts with `L'. + +gdb_test "print callfunc (Lcallfunc, 5)" " = 12" -- 2.7.4