From 261d6729f1e2d7439f21ad26e8d7bc2810d6372d Mon Sep 17 00:00:00 2001 From: Stephane Carrez Date: Tue, 13 Aug 2002 08:52:02 +0000 Subject: * interp.c (sim_prepare_for_program): Look up the image for the reset vector and set cpu_use_elf_start to 1 if not found. (sim_open): Do not set cpu_use_elf_start. --- sim/m68hc11/ChangeLog | 6 ++++++ sim/m68hc11/interp.c | 25 ++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) (limited to 'sim/m68hc11') diff --git a/sim/m68hc11/ChangeLog b/sim/m68hc11/ChangeLog index d6c38630a54..fc85e602198 100644 --- a/sim/m68hc11/ChangeLog +++ b/sim/m68hc11/ChangeLog @@ -1,3 +1,9 @@ +2002-08-13 Marko Kohtala + + * interp.c (sim_prepare_for_program): Look up the image for the + reset vector and set cpu_use_elf_start to 1 if not found. + (sim_open): Do not set cpu_use_elf_start. + 2002-08-13 Marko Kohtala * interp.c (sim_hw_configure): Return 1 for success. diff --git a/sim/m68hc11/interp.c b/sim/m68hc11/interp.c index 8889da6cc7d..74674ce2969 100644 --- a/sim/m68hc11/interp.c +++ b/sim/m68hc11/interp.c @@ -306,7 +306,31 @@ sim_prepare_for_program (SIM_DESC sd, struct _bfd* abfd) if (abfd != NULL) { + asection *s; cpu->cpu_elf_start = bfd_get_start_address (abfd); + /* See if any section sets the reset address */ + cpu->cpu_use_elf_start = 1; + for (s = abfd->sections; s && cpu->cpu_use_elf_start; s = s->next) + { + if (s->flags & SEC_LOAD) + { + bfd_size_type size; + + size = bfd_get_section_size_before_reloc (s); + if (size > 0) + { + bfd_vma lma; + + if (STATE_LOAD_AT_LMA_P (sd)) + lma = bfd_section_lma (abfd, s); + else + lma = bfd_section_vma (abfd, s); + + if (lma <= 0xFFFE && lma+size >= 0x10000) + cpu->cpu_use_elf_start = 0; + } + } + } } /* reset all state information */ @@ -333,7 +357,6 @@ sim_open (SIM_OPEN_KIND kind, host_callback *callback, cpu_initialize (sd, cpu); - cpu->cpu_use_elf_start = 1; if (sim_pre_argv_init (sd, argv[0]) != SIM_RC_OK) { free_state (sd); -- cgit v1.2.1