From: Jan Kratochvil Date: Sun, 17 Apr 2011 18:09:02 +0000 (+0000) Subject: gdb/ X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=90359a167375927982fc3f675718044a491da759;p=binutils-gdb.git 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. --- diff --git a/gdb/ChangeLog b/gdb/ChangeLog index e81afd7c566..b44889e70df 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/gdb/elfread.c b/gdb/elfread.c index b9cfa136fe4..2d589a42905 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 af1fd5f4b30..f1f8d3c7add 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +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. diff --git a/gdb/testsuite/gdb.base/callfuncs.c b/gdb/testsuite/gdb.base/callfuncs.c index 2d40650b102..406d22af684 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 97efacbed15..27ebd1ec985 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"