X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=sim%2Fcommon%2Fsim-hload.c;h=64f47503cd30786c12c8343f62a9373ca3676e1d;hb=c5a570810022466eaa5e077cd1b8aa00d74706f1;hp=c342245c09e9fe7feecadd80accb6ef072fa246e;hpb=e98fe4f7b54cbdf29aef9287bbb1bea8801dd05a;p=deliverable%2Fbinutils-gdb.git diff --git a/sim/common/sim-hload.c b/sim/common/sim-hload.c index c342245c09..64f47503cd 100644 --- a/sim/common/sim-hload.c +++ b/sim/common/sim-hload.c @@ -1,22 +1,21 @@ /* Generic load for hardware simulator models. - Copyright (C) 1997 Free Software Foundation, Inc. + Copyright (C) 1997, 2007-2012 Free Software Foundation, Inc. Contributed by Cygnus Support. This file is part of GDB, the GNU debugger. 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 2, or (at your option) -any later version. +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, write to the Free Software Foundation, Inc., -59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ +You should have received a copy of the GNU General Public License +along with this program. If not, see . */ #include "sim-main.h" #include "bfd.h" @@ -31,18 +30,28 @@ SIM_RC sim_load (sd, prog_name, prog_bfd, from_tty) SIM_DESC sd; char *prog_name; - struct _bfd *prog_bfd; + struct bfd *prog_bfd; int from_tty; { bfd *result_bfd; + + SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER); if (sim_analyze_program (sd, prog_name, prog_bfd) != SIM_RC_OK) return SIM_RC_FAIL; SIM_ASSERT (STATE_PROG_BFD (sd) != NULL); + + /* NOTE: For historical reasons, older hardware simulators + incorrectly write the program sections at LMA interpreted as a + virtual address. This is still accommodated for backward + compatibility reasons. */ + result_bfd = sim_load_file (sd, STATE_MY_NAME (sd), STATE_CALLBACK (sd), - NULL, + prog_name, STATE_PROG_BFD (sd), - STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG); + STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG, + STATE_LOAD_AT_LMA_P (sd), + sim_write); if (result_bfd == NULL) { bfd_close (STATE_PROG_BFD (sd));