diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/stap-probe.c | 6 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S | 81 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c | 29 | ||||
-rw-r--r-- | gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp | 35 |
6 files changed, 159 insertions, 3 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7bc35d1..ec05028 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2014-10-14 Sergio Durigan Junior <sergiodj@redhat.com> + + * stap-probe.c (stap_parse_argument): Initialize expout explicitly + using language_c, instead of current_language. + 2014-10-13 Doug Evans <dje@google.com> * python/py-objfile.c (objfpy_initialize): New function. diff --git a/gdb/stap-probe.c b/gdb/stap-probe.c index a51bf8b..3902997 100644 --- a/gdb/stap-probe.c +++ b/gdb/stap-probe.c @@ -1050,9 +1050,9 @@ stap_parse_argument (const char **arg, struct type *atype, struct cleanup *back_to; /* We need to initialize the expression buffer, in order to begin - our parsing efforts. The language here does not matter, since we - are using our own parser. */ - initialize_expout (&p.pstate, 10, current_language, gdbarch); + our parsing efforts. We use language_c here because we may need + to do pointer arithmetics. */ + initialize_expout (&p.pstate, 10, language_def (language_c), gdbarch); back_to = make_cleanup (free_current_contents, &p.pstate.expout); p.saved_arg = *arg; diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 53c6216..c6384c9 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2014-10-14 Sergio Durigan Junior <sergiodj@redhat.com> + + * gdb.arch/stap-eval-lang-ada.S: Likewise. + * gdb.arch/stap-eval-lang-ada.c: Likewise. + * gdb.arch/stap-eval-lang-ada.exp: New file. + 2014-10-14 Yao Qi <yao@codesourcery.com> * gdb.mi/mi-var-child.c (nothing1): New function. diff --git a/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S new file mode 100644 index 0000000..26f060a --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.S @@ -0,0 +1,81 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This file has been generated using the following command: + + gcc -m32 -S i386-stap-eval-lang-ada.c -o i386-stap-eval-lang-ada.S + + The important thing about this is that the probe argument (below) + should be exactly "-4@-4(%ebp)" in order to trigger the bug. */ + + .file "i386-stap-eval-lang-ada.c" + .text + .globl main + .type main, @function +main: +.LFB0: + .cfi_startproc + pushl %ebp + .cfi_def_cfa_offset 8 + .cfi_offset 5, -8 + movl %esp, %ebp + .cfi_def_cfa_register 5 + subl $16, %esp + movl $40, -4(%ebp) +#APP +# 27 "i386-stap-eval-lang-ada.c" 1 + 990: nop +.pushsection .note.stapsdt,"?","note" +.balign 4 +.4byte 992f-991f,994f-993f,3 +991: .asciz "stapsdt" +992: .balign 4 +993: .4byte 990b +.4byte _.stapsdt.base +.4byte 0 +.asciz "foo" +.asciz "bar" +/* The following probe argument should be "-4@-4(%ebp)", or some other + register displacement expression that references %ebp, otherwise the + bug will not trigger. */ +.asciz "-4@-4(%ebp)" +994: .balign 4 +.popsection + +# 0 "" 2 +# 27 "i386-stap-eval-lang-ada.c" 1 + .ifndef _.stapsdt.base +.pushsection .stapsdt.base,"aG","progbits",.stapsdt.base,comdat +.weak _.stapsdt.base +.hidden _.stapsdt.base +_.stapsdt.base: .space 1 +.size _.stapsdt.base,1 +.popsection +.endif + +# 0 "" 2 +#NO_APP + movl $0, %eax + leave + .cfi_restore 5 + .cfi_def_cfa 4, 4 + ret + .cfi_endproc +.LFE0: + .size main, .-main + .ident "GCC: (GNU) 4.8.3 20140911 (Red Hat 4.8.3-7)" + .section .note.GNU-stack,"",@progbits diff --git a/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c new file mode 100644 index 0000000..78308cd --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.c @@ -0,0 +1,29 @@ +/* This testcase is part of GDB, the GNU debugger. + + Copyright 2014 Free Software Foundation, Inc. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. */ + +/* This file is not used directly; instead, it has been used to + generate the .S file. See comments on the .S file for more info. */ + +#include <sys/sdt.h> + +int main () +{ + int a = 40; + + STAP_PROBE1 (foo, bar, a); + return 0; +} diff --git a/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp new file mode 100644 index 0000000..6afe758 --- /dev/null +++ b/gdb/testsuite/gdb.arch/i386-stap-eval-lang-ada.exp @@ -0,0 +1,35 @@ +# Copyright 2014 Free Software Foundation, Inc. + +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see <http://www.gnu.org/licenses/>. + +standard_testfile ".S" + +# We can only test this if the target is i686 or x86_64 with -m32 +if { ![is_x86_like_target] } { + verbose "Skipping $testfile.exp" + return +} + +if { [prepare_for_testing "failed to prepare" $testfile $srcfile] } { + return -1 +} + +gdb_test_no_output "set language ada" + +if { ![runto "-pstap bar"] } { + return -1 +} + +gdb_test "print \$_probe_arg0" " = 40" \ + "printing \$_probe_arg0" |