diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/amd64-tdep.c | 2 | ||||
-rw-r--r-- | gdb/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso-dso1.c | 26 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso-dso1.h | 23 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso-dso2.c | 24 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso-dso2.h | 23 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso.c | 25 | ||||
-rw-r--r-- | gdb/testsuite/gdb.base/dso2dso.exp | 68 |
9 files changed, 201 insertions, 1 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 337b9bf..367572a 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2015-08-12 Joel Brobecker <brobecker@adacore.com> + + * amd64-tdep.c (amd64_displaced_step_fixup): Fix the mask used to + compute RETADDR. + 2015-08-12 Keith Seitz <keiths@redhat.com> * python/python.c (gdbpy_decode_line): Initialize `location' to NULL diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c index 5e63b5e..a672cde 100644 --- a/gdb/amd64-tdep.c +++ b/gdb/amd64-tdep.c @@ -1662,7 +1662,7 @@ amd64_displaced_step_fixup (struct gdbarch *gdbarch, regcache_cooked_read_unsigned (regs, AMD64_RSP_REGNUM, &rsp); retaddr = read_memory_unsigned_integer (rsp, retaddr_len, byte_order); - retaddr = (retaddr - insn_offset) & 0xffffffffUL; + retaddr = (retaddr - insn_offset) & 0xffffffffffffffffULL; write_memory_unsigned_integer (rsp, retaddr_len, byte_order, retaddr); if (debug_displaced) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 916da1f..738c927 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2015-08-12 Joel Brobecker <brobecker@adacore.com> + + * gdb.base/dso2dso-dso2.c, gdb.base/dso2dso-dso2.h, + gdb.base/dso2dso-dso1.c, gdb.base/dso2dso-dso1.h, gdb.base/dso2dso.c, + gdb.base/dso2dso.exp: New files. + 2015-08-12 Sergio Durigan Junior <sergiodj@redhat.com> Pedro Alves <palves@redhat.com> Keith Seitz <keiths@redhat.com> diff --git a/gdb/testsuite/gdb.base/dso2dso-dso1.c b/gdb/testsuite/gdb.base/dso2dso-dso1.c new file mode 100644 index 0000000..a360e20 --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso-dso1.c @@ -0,0 +1,26 @@ +/* Copyright 2015 Free Software Foundation, Inc. + + This file is part of GDB. + + 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/>. */ + +#include "dso2dso-dso1.h" +#include "dso2dso-dso2.h" + +int +sub1 (void) +{ + sub2 (); /* STOP HERE. */ + return 5; +} diff --git a/gdb/testsuite/gdb.base/dso2dso-dso1.h b/gdb/testsuite/gdb.base/dso2dso-dso1.h new file mode 100644 index 0000000..2423360 --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso-dso1.h @@ -0,0 +1,23 @@ +/* Copyright 2015 Free Software Foundation, Inc. + + This file is part of GDB. + + 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/>. */ + +#ifndef DSO2DSO_DSO1_H +#define DSO2DSO_DSO1_H + +extern int sub1 (void); + +#endif diff --git a/gdb/testsuite/gdb.base/dso2dso-dso2.c b/gdb/testsuite/gdb.base/dso2dso-dso2.c new file mode 100644 index 0000000..14de6a8 --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso-dso2.c @@ -0,0 +1,24 @@ +/* Copyright 2015 Free Software Foundation, Inc. + + This file is part of GDB. + + 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/>. */ + +#include "dso2dso-dso2.h" + +void +sub2 (void) +{ + /* Do nothing. */ +} diff --git a/gdb/testsuite/gdb.base/dso2dso-dso2.h b/gdb/testsuite/gdb.base/dso2dso-dso2.h new file mode 100644 index 0000000..e33ca0a --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso-dso2.h @@ -0,0 +1,23 @@ +/* Copyright 2015 Free Software Foundation, Inc. + + This file is part of GDB. + + 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/>. */ + +#ifndef DSO2DSO_DSO2_H +#define DSO2DSO_DSO2_H + +extern void sub2 (void); + +#endif diff --git a/gdb/testsuite/gdb.base/dso2dso.c b/gdb/testsuite/gdb.base/dso2dso.c new file mode 100644 index 0000000..563bd96 --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso.c @@ -0,0 +1,25 @@ +/* Copyright 2015 Free Software Foundation, Inc. + + This file is part of GDB. + + 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/>. */ + +#include "dso2dso-dso1.h" + +int +main (void) +{ + int ignored = sub1 (); + return 0; +} diff --git a/gdb/testsuite/gdb.base/dso2dso.exp b/gdb/testsuite/gdb.base/dso2dso.exp new file mode 100644 index 0000000..b604012 --- /dev/null +++ b/gdb/testsuite/gdb.base/dso2dso.exp @@ -0,0 +1,68 @@ +# Copyright 2015 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/>. + +if { [skip_shlib_tests] } { + return 0 +} + +standard_testfile + +set output_dir [standard_output_file {}] + +set libdso2 $testfile-dso2 +set srcfile_libdso2 $srcdir/$subdir/$libdso2.c +set binfile_libdso2 [standard_output_file $libdso2.so] + +set libdso1 $testfile-dso1 +set srcfile_libdso1 $srcdir/$subdir/$libdso1.c +set binfile_libdso1 [standard_output_file $libdso1.so] + +if { [gdb_compile_shlib $srcfile_libdso2 $binfile_libdso2 \ + [list debug additional_flags=-fPIC]] != "" } { + untested "Could not compile $binfile_libdso2." + return -1 +} + +if { [gdb_compile_shlib $srcfile_libdso1 $binfile_libdso1 \ + [list debug additional_flags=-fPIC]] != "" } { + untested "Could not compile $binfile_libdso1." + return -1 +} + +if { [gdb_compile $srcdir/$subdir/$srcfile $binfile executable \ + [list debug shlib=$binfile_libdso2 shlib=$binfile_libdso1]] != "" } { + return -1 +} + +clean_restart $binfile +gdb_load_shlibs $binfile_libdso2 $binfile_libdso1 + +if { ![runto_main] } { + return -1 +} + +# Verify that we can "next" over the call to sub2 (provided by +# libdso2) make from sub1 (provided by libdso1), and land at +# the expected location. + +set bp_location [gdb_get_line_number "STOP HERE" $srcfile_libdso1] +gdb_breakpoint ${srcfile_libdso1}:${bp_location} + +gdb_continue_to_breakpoint "at call to sub2" \ + ".*sub2 ().*" + +gdb_test "next" \ + ".*return 5;.*" \ + "next over call to sub2" |