1/* Generic load for hardware simulator models. 2 Copyright (C) 1997, 2007 Free Software Foundation, Inc. 3 Contributed by Cygnus Support. 4 5This file is part of GDB, the GNU debugger. 6 7This program is free software; you can redistribute it and/or modify 8it under the terms of the GNU General Public License as published by 9the Free Software Foundation; either version 3 of the License, or 10(at your option) any later version. 11 12This program is distributed in the hope that it will be useful, 13but WITHOUT ANY WARRANTY; without even the implied warranty of 14MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15GNU General Public License for more details. 16 17You should have received a copy of the GNU General Public License 18along with this program. If not, see <http://www.gnu.org/licenses/>. */ 19 20#include "sim-main.h" 21#include "bfd.h" 22#include "sim-utils.h" 23#include "sim-assert.h" 24 25 26/* Generic implementation of sim_load that works with simulators 27 modeling a hardware platform. */ 28 29SIM_RC 30sim_load (sd, prog_name, prog_bfd, from_tty) 31 SIM_DESC sd; 32 char *prog_name; 33 struct bfd *prog_bfd; 34 int from_tty; 35{ 36 bfd *result_bfd; 37 38 SIM_ASSERT (STATE_MAGIC (sd) == SIM_MAGIC_NUMBER); 39 if (sim_analyze_program (sd, prog_name, prog_bfd) != SIM_RC_OK) 40 return SIM_RC_FAIL; 41 SIM_ASSERT (STATE_PROG_BFD (sd) != NULL); 42 43 /* NOTE: For historical reasons, older hardware simulators 44 incorrectly write the program sections at LMA interpreted as a 45 virtual address. This is still accommodated for backward 46 compatibility reasons. */ 47 48 result_bfd = sim_load_file (sd, STATE_MY_NAME (sd), 49 STATE_CALLBACK (sd), 50 prog_name, 51 STATE_PROG_BFD (sd), 52 STATE_OPEN_KIND (sd) == SIM_OPEN_DEBUG, 53 STATE_LOAD_AT_LMA_P (sd), 54 sim_write); 55 if (result_bfd == NULL) 56 { 57 bfd_close (STATE_PROG_BFD (sd)); 58 STATE_PROG_BFD (sd) = NULL; 59 return SIM_RC_FAIL; 60 } 61 return SIM_RC_OK; 62} 63