2012-11-09 Pedro Alves <palves@redhat.com>

PR gdb/14306

	* infrun.c: Include target-descriptions.h.
	(follow_exec): Fetch new target description.

gdb/testsuite/
2012-11-09  Pedro Alves  <palves@redhat.com>

	PR gdb/14306

	* gdb.multi/multi-arch-exec.c: New file.
	* gdb.multi/multi-arch-exec.exp: New file.
This commit is contained in:
Pedro Alves 2012-11-09 12:20:24 +00:00
parent 30f8135b5c
commit 9107fc8d18
5 changed files with 126 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2012-11-09 Pedro Alves <palves@redhat.com>
PR gdb/14306
* infrun.c: Include target-descriptions.h.
(follow_exec): Fetch new target description.
2012-11-09 Yao Qi <yao@codesourcery.com>
* i386-tdep.c (i386_analyze_frame_setup): Handle opcode

View File

@ -58,6 +58,7 @@
#include "probe.h"
#include "objfiles.h"
#include "completer.h"
#include "target-descriptions.h"
/* Prototypes for local functions */
@ -913,6 +914,16 @@ follow_exec (ptid_t pid, char *execd_pathname)
set_current_inferior (inf);
set_current_program_space (pspace);
}
else
{
/* The old description may no longer be fit for the new image.
E.g, a 64-bit process exec'ed a 32-bit process. Clear the
old description; we'll read a new one below. No need to do
this on "follow-exec-mode new", as the old inferior stays
around (its description is later cleared/refetched on
restart). */
target_clear_description ();
}
gdb_assert (current_program_space == inf->pspace);
@ -932,6 +943,14 @@ follow_exec (ptid_t pid, char *execd_pathname)
if ((inf->symfile_flags & SYMFILE_NO_READ) == 0)
set_initial_language ();
/* If the target can specify a description, read it. Must do this
after flipping to the new executable (because the target supplied
description must be compatible with the executable's
architecture, and the old executable may e.g., be 32-bit, while
the new one 64-bit), and before anything involving memory or
registers. */
target_find_description ();
#ifdef SOLIB_CREATE_INFERIOR_HOOK
SOLIB_CREATE_INFERIOR_HOOK (PIDGET (inferior_ptid));
#else

View File

@ -1,3 +1,10 @@
2012-11-09 Pedro Alves <palves@redhat.com>
PR gdb/14306
* gdb.multi/multi-arch-exec.c: New file.
* gdb.multi/multi-arch-exec.exp: New file.
2012-11-09 Yao Qi <yao@codesourcery.com>
* gdb.mi/mi-break.exp (test_abreak_creation): New procedure.

View File

@ -0,0 +1,29 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2012 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/>. */
#include <stdio.h>
#include <unistd.h>
int
main ()
{
execl ("gdb.multi/multi-arch-exec-hello",
"gdb.multi/multi-arch-exec-hello",
(char *) NULL);
perror ("execl failed");
exit (1);
}

View File

@ -0,0 +1,64 @@
# Copyright 2009-2012 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/>.
# Test multi-exec / multi-process features that work for all configurations,
# even ones that cannot run multiple processes simultaneously.
set testfile "multi-arch-exec"
# The plain remote target can't do multiple inferiors.
if [target_info exists use_gdb_stub] {
return
}
# Can't use standard_testfile, we want executables with specialized
# names.
set exec1 "multi-arch-exec"
set srcfile1 multi-arch-exec.c
set binfile1 [standard_output_file ${exec1}]
set exec2 "multi-arch-exec-hello"
set srcfile2 hello.c
set binfile2 [standard_output_file ${exec2}]
# Build two executables, one for each arch.
if [istarget "s390*-*-*"] {
set march1 "-m64"
set march2 "-m31"
} else {
set march1 "-m64"
set march2 "-m32"
}
if { [prepare_for_testing ${testfile}.exp ${exec1} "${srcfile1}" \
[list debug nowarnings additional_flags=${march1}]] } {
return -1
}
if { [prepare_for_testing ${testfile}.exp ${exec2} "${srcfile2}" \
[list debug nowarnings additional_flags=${march2}]] } {
return -1
}
clean_restart ${exec1}
if ![runto_main] then {
fail "Couldn't run to main"
return -1
}
# Test that GDB updates the target description / arch successfuly
# after the exec.
gdb_test "continue" "Breakpoint 1, main.*" "continue across exec that changes architecture"