summaryrefslogtreecommitdiff
path: root/sim
diff options
context:
space:
mode:
authorMike Frysinger <vapier@gentoo.org>2014-03-08 00:20:11 -0500
committerMike Frysinger <vapier@gentoo.org>2014-03-10 23:57:57 -0400
commit7b0278dcad72af1db86e6ecf91751dbc45e3b071 (patch)
treea31efb2671e2bf5088c311de89047000b6629bb7 /sim
parenta3271a3e6c841729a9ece40af973e275ea2de875 (diff)
downloadbinutils-7b0278dcad72af1db86e6ecf91751dbc45e3b071.tar.gz
binutils-7b0278dcad72af1db86e6ecf91751dbc45e3b071.tar.bz2
binutils-7b0278dcad72af1db86e6ecf91751dbc45e3b071.zip
sim: msp430: set initial PC to ELF entry if available
If we want to run a simple ELF, the reset vector isn't set up, so starting at address 0 doesn't make sense. Use the ELF's entry point instead.
Diffstat (limited to 'sim')
-rw-r--r--sim/msp430/ChangeLog5
-rw-r--r--sim/msp430/msp430-sim.c7
2 files changed, 11 insertions, 1 deletions
diff --git a/sim/msp430/ChangeLog b/sim/msp430/ChangeLog
index 0a3da7dc491..484a5d2e498 100644
--- a/sim/msp430/ChangeLog
+++ b/sim/msp430/ChangeLog
@@ -1,5 +1,10 @@
2014-03-10 Mike Frysinger <vapier@gentoo.org>
+ * msp430-sim.c (sim_create_inferior): Set new_pc to the result of
+ bfd_get_start_address when abfd is not NULL and new_pc is zero.
+
+2014-03-10 Mike Frysinger <vapier@gentoo.org>
+
* msp430-sim (maybe_perform_syscall): Change %d to %ld.
(msp430_step_once): Cast fprintf to fprintf_ftype.
diff --git a/sim/msp430/msp430-sim.c b/sim/msp430/msp430-sim.c
index c3fa4a9621b..2a648f58468 100644
--- a/sim/msp430/msp430-sim.c
+++ b/sim/msp430/msp430-sim.c
@@ -249,9 +249,14 @@ sim_create_inferior (SIM_DESC sd,
int c;
int new_pc;
+ /* Set the PC to the default reset vector if available. */
c = sim_core_read_buffer (sd, MSP430_CPU (sd), read_map, resetv, 0xfffe, 2);
-
new_pc = resetv[0] + 256 * resetv[1];
+
+ /* If the reset vector isn't initialized, then use the ELF entry. */
+ if (abfd != NULL && !new_pc)
+ new_pc = bfd_get_start_address (abfd);
+
sim_pc_set (MSP430_CPU (sd), new_pc);
msp430_pc_store (MSP430_CPU (sd), new_pc);