mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-03-01 22:06:14 +00:00
btrace, vdso: add vdso target sections
When loading symbols for the vdso, also add its sections to target_sections. This fixes an issue with record btrace where vdso instructions could not be disassembled during replay. * symfile-mem.c (symbol_file_add_from_memory): Add BFD sections. testsuite/ * gdb.btrace/vdso.c: New. * gdb.btrace/vdso.exp: New.
This commit is contained in:
parent
e9089e05b6
commit
589fdceb99
@ -1,3 +1,7 @@
|
||||
2014-05-23 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* symfile-mem.c (symbol_file_add_from_memory): Add BFD sections.
|
||||
|
||||
2014-05-23 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* record-btrace.c (record_btrace_allow_memory_access): Remove.
|
||||
|
@ -92,6 +92,7 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
|
||||
struct section_addr_info *sai;
|
||||
unsigned int i;
|
||||
struct cleanup *cleanup;
|
||||
struct target_section *sections, *sections_end, *tsec;
|
||||
|
||||
if (bfd_get_flavour (templ) != bfd_target_elf_flavour)
|
||||
error (_("add-symbol-file-from-memory not supported for this target"));
|
||||
@ -131,6 +132,23 @@ symbol_file_add_from_memory (struct bfd *templ, CORE_ADDR addr,
|
||||
from_tty ? SYMFILE_VERBOSE : 0,
|
||||
sai, OBJF_SHARED, NULL);
|
||||
|
||||
sections = NULL;
|
||||
sections_end = NULL;
|
||||
|
||||
if (build_section_table (nbfd, §ions, §ions_end) == 0)
|
||||
{
|
||||
make_cleanup (xfree, sections);
|
||||
|
||||
/* Adjust the target section addresses by the load address. */
|
||||
for (tsec = sections; tsec != sections_end; ++tsec)
|
||||
{
|
||||
tsec->addr += loadbase;
|
||||
tsec->endaddr += loadbase;
|
||||
}
|
||||
|
||||
add_target_sections (&nbfd, sections, sections_end);
|
||||
}
|
||||
|
||||
/* This might change our ideas about frames already looked at. */
|
||||
reinit_frame_cache ();
|
||||
|
||||
|
@ -1,3 +1,8 @@
|
||||
2014-05-23 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* gdb.btrace/vdso.c: New.
|
||||
* gdb.btrace/vdso.exp: New.
|
||||
|
||||
2014-05-23 Markus Metzger <markus.t.metzger@intel.com>
|
||||
|
||||
* gdb.base/gcore.exp (capture_command_output): Move ...
|
||||
|
30
gdb/testsuite/gdb.btrace/vdso.c
Normal file
30
gdb/testsuite/gdb.btrace/vdso.c
Normal file
@ -0,0 +1,30 @@
|
||||
/* This testcase is part of GDB, the GNU debugger.
|
||||
|
||||
Copyright 2014 Free Software Foundation, Inc.
|
||||
|
||||
Contributed by Intel Corp. <markus.t.metzger@intel.com>
|
||||
|
||||
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 <sys/time.h>
|
||||
|
||||
int
|
||||
main (void)
|
||||
{
|
||||
struct timeval tv;
|
||||
|
||||
gettimeofday (&tv, 0); /* main.1. */
|
||||
|
||||
return 0; /* main.2. */
|
||||
}
|
53
gdb/testsuite/gdb.btrace/vdso.exp
Normal file
53
gdb/testsuite/gdb.btrace/vdso.exp
Normal file
@ -0,0 +1,53 @@
|
||||
# This testcase is part of GDB, the GNU debugger.
|
||||
#
|
||||
# Copyright 2014 Free Software Foundation, Inc.
|
||||
#
|
||||
# Contributed by Intel Corp. <markus.t.metzger@intel.com>
|
||||
#
|
||||
# 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/>.
|
||||
#
|
||||
#
|
||||
# Test that we can access the vdso memory during replay for stepping.
|
||||
|
||||
# check for btrace support
|
||||
if { [skip_btrace_tests] } { return -1 }
|
||||
|
||||
# start inferior
|
||||
standard_testfile
|
||||
if [prepare_for_testing $testfile.exp $testfile $srcfile] {
|
||||
return -1
|
||||
}
|
||||
if ![runto_main] {
|
||||
return -1
|
||||
}
|
||||
|
||||
# capture the disassembly of gettimeofday while live debugging
|
||||
set live_gettimeofday [capture_command_output "disassemble gettimeofday" ""]
|
||||
|
||||
# trace the test code
|
||||
gdb_test_no_output "record btrace"
|
||||
gdb_test "next" "main\.2.*"
|
||||
|
||||
with_test_prefix "replay" {
|
||||
# capture the disassembly of gettimeofday while replaying
|
||||
gdb_test "record goto begin" "main\.1.*"
|
||||
set replay_gettimeofday [capture_command_output "disassemble gettimeofday" ""]
|
||||
|
||||
# the two disassemblies must be identical
|
||||
if ![string compare $live_gettimeofday $replay_gettimeofday] {
|
||||
pass "disassemble gettimeofday"
|
||||
} else {
|
||||
fail "disassemble gettimeofday"
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user