# Run bare-metal program on Spike with non-default memory map

**URL:** <https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340>\
**Category:** HiFive1 Rev B\
**Created:** [November 26, 2023, 10:24am UTC](https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340 "2023-11-26T10:24:53Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![oscarh](https://avatars.discourse-cdn.com/v4/letter/o/aca169/32.png) [@oscarh](https://forums.sifive.com/u/oscarh)\
**Post date:** [November 26, 2023, 10:24am UTC](https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340/1 "2023-11-26T10:24:53Z")

</div>

HI, I tried to load a bare-metal program into Spike, with my own memory map, the command line I used is:

```auto
spike -m0x0:0x20000,0x100000:0x20000,0x10000000:0x80000, \
0x10080000:0x40000,0x40000000:0x20000,0x50000000:0x580000 \
 -d <my_elf_file>

```

And the entry point of my elf is 0x50000000.  
But after Spike was launched, I checked PC, it was not 0x50000000, but 0x1000

 ![image](https://us1.discourse-cdn.com/flex020/uploads/sifive/original/2X/c/ca953ac243b68ae9eb7fcf4884c36854614a1ee0.png)

I then tried using --pc=0x50000000 to force PC to 0x50000000, but it made no difference at all.

I checked the content starting from 0x50000000 after Spike was launched. The content was my program, so it was loaded correctly into the memory. But PC was not set as the elf indicated.  
What might be wrong with my steps running Spike? Thanks.

-Oscar

---

<div class="post-metadata">

**Author:** ![oscarh](https://avatars.discourse-cdn.com/v4/letter/o/aca169/32.png) [@oscarh](https://forums.sifive.com/u/oscarh)\
**Post date:** [November 27, 2023, 1:49am UTC](https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340/2 "2023-11-27T01:49:32Z")

</div>

It’s interesting that it seems that Spike embedded some code silently at 0x1000. And it always runs from there:  
 ![image](https://us1.discourse-cdn.com/flex020/uploads/sifive/original/2X/8/806af4ad22f3792fccebe547ccb2bde99f04418b.png)

After a few instructions, it jumps to the entry point of my elf: 0x50000000.

What if my elf overwrites 0x1000 memory area?

---

<div class="post-metadata">

**Author:** ![tgm](https://avatars.discourse-cdn.com/v4/letter/t/c68b51/32.png) [@tgm](https://forums.sifive.com/u/tgm)\
**Post date:** [November 30, 2023, 8:03pm UTC](https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340/3 "2023-11-30T20:03:33Z")

</div>

See here for some info on what Spike is doing with regard to code at `0x1000`:

- [Add documentation of low-level spike internals · Issue #145 · riscv-software-src/riscv-isa-sim · GitHub](https://github.com/riscv-software-src/riscv-isa-sim/issues/145)
- [Spike can't simulate simple program, progmem.c from icicle repository · Issue #192 · riscv-software-src/riscv-isa-sim · GitHub](https://github.com/riscv-software-src/riscv-isa-sim/issues/192)

---

<div class="post-metadata">

**Author:** ![oscarh](https://avatars.discourse-cdn.com/v4/letter/o/aca169/32.png) [@oscarh](https://forums.sifive.com/u/oscarh)\
**Post date:** [December 4, 2023, 12:17am UTC](https://forums.sifive.com/t/run-bare-metal-program-on-spike-with-non-default-memory-map/6340/4 "2023-12-04T00:17:02Z")

</div>

Thank you, Tommy. The information there is very helpful for me.
