/* interp.c -- Simulator for Motorola 68HC11/68HC12
- Copyright (C) 1999-2015 Free Software Foundation, Inc.
+ Copyright (C) 1999-2020 Free Software Foundation, Inc.
Written by Stephane Carrez (stcarrez@nerim.fr)
This file is part of GDB, the GNU debugger.
/* Get the memory bank parameters by looking at the global symbols
defined by the linker. */
static int
-sim_get_bank_parameters (SIM_DESC sd, bfd* abfd)
+sim_get_bank_parameters (SIM_DESC sd)
{
sim_cpu *cpu;
- long symsize;
- long symbol_count, i;
unsigned size;
- asymbol** asymbols;
- asymbol** current;
+ bfd_vma addr;
cpu = STATE_CPU (sd, 0);
- symsize = bfd_get_symtab_upper_bound (abfd);
- if (symsize < 0)
- {
- sim_io_eprintf (sd, "Cannot read symbols of program");
- return 0;
- }
- asymbols = (asymbol **) xmalloc (symsize);
- symbol_count = bfd_canonicalize_symtab (abfd, asymbols);
- if (symbol_count < 0)
- {
- sim_io_eprintf (sd, "Cannot read symbols of program");
- return 0;
- }
+ addr = trace_sym_value (sd, BFD_M68HC11_BANK_START_NAME);
+ if (addr != -1)
+ cpu->bank_start = addr;
- size = 0;
- for (i = 0, current = asymbols; i < symbol_count; i++, current++)
- {
- const char* name = bfd_asymbol_name (*current);
+ size = trace_sym_value (sd, BFD_M68HC11_BANK_SIZE_NAME);
+ if (size == -1)
+ size = 0;
- if (strcmp (name, BFD_M68HC11_BANK_START_NAME) == 0)
- {
- cpu->bank_start = bfd_asymbol_value (*current);
- }
- else if (strcmp (name, BFD_M68HC11_BANK_SIZE_NAME) == 0)
- {
- size = bfd_asymbol_value (*current);
- }
- else if (strcmp (name, BFD_M68HC11_BANK_VIRTUAL_NAME) == 0)
- {
- cpu->bank_virtual = bfd_asymbol_value (*current);
- }
- }
- free (asymbols);
+ addr = trace_sym_value (sd, BFD_M68HC11_BANK_VIRTUAL_NAME);
+ if (addr != -1)
+ cpu->bank_virtual = addr;
cpu->bank_end = cpu->bank_start + size;
cpu->bank_shift = 0;
{
bfd_size_type size;
- size = bfd_get_section_size (s);
+ size = bfd_section_size (s);
if (size > 0)
{
bfd_vma lma;
if (STATE_LOAD_AT_LMA_P (sd))
- lma = bfd_section_lma (abfd, s);
+ lma = bfd_section_lma (s);
else
- lma = bfd_section_vma (abfd, s);
+ lma = bfd_section_vma (s);
if (lma <= 0xFFFE && lma+size >= 0x10000)
cpu->cpu_use_elf_start = 0;
if (elf_flags & E_M68HC12_BANKS)
{
- if (sim_get_bank_parameters (sd, abfd) != 0)
+ if (sim_get_bank_parameters (sd) != 0)
sim_io_eprintf (sd, "Memory bank parameters are not initialized\n");
}
}
SIM_DESC
sim_open (SIM_OPEN_KIND kind, host_callback *callback,
- bfd *abfd, char **argv)
+ bfd *abfd, char * const *argv)
{
int i;
SIM_DESC sd;
cpu = STATE_CPU (sd, 0);
- /* for compatibility */
- current_alignment = NONSTRICT_ALIGNMENT;
- current_target_byte_order = BIG_ENDIAN;
-
cpu_initialize (sd, cpu);
if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK)
return 0;
}
- /* getopt will print the error message so we just have to exit if this fails.
- FIXME: Hmmm... in the case of gdb we need getopt to call
- print_filtered. */
+ /* The parser will print an error message for us, so we silently return. */
if (sim_parse_args (sd, argv) != SIM_RC_OK)
{
/* Uninstall the modules to avoid memory leaks,
SIM_RC
sim_create_inferior (SIM_DESC sd, struct bfd *abfd,
- char **argv, char **env)
+ char * const *argv, char * const *env)
{
return sim_prepare_for_program (sd, abfd);
}