Hi,
I am porting SEL4 on RISCV FPGA. I am stuck midway in the kernel elf loader.
The function stuck is memcpy. I have added prints and I am not progressing
after the last memcpy call in unpack_elf_to_paddr(). All kinds of input
appreciated.
Function under review:
*static void unpack_elf_to_paddr(void *elf, paddr_t dest_paddr)*
/* Parse size/length headers. */
dest_vaddr = elf_getProgramHeaderVaddr(elf, i);
data_size = elf_getProgramHeaderFileSize(elf, i);
data_offset = elf_getProgramHeaderOffset(elf, i);
/* Load data into memory. */
* memcpy((char *)dest_vaddr + phys_virt_offset,*
* (char *)elf + data_offset, data_size);*
* printf("loaded data into memory \n"); -----> Stuck Here !*
}
}
*Can anyone give me a clue on whatsoever to check here ? **It worked
perfectly in spike simulation.*
*RISCV FPGA configuration* - It supports IMAFD. It has already booted
linux. Kernel is loaded at physical address 80 million.
--
regards,
Sathya
Show replies by date
Hi Sathya,
I'm familiar with the use of the elfloader on ARM platforms, but not so familiar with
the RISC-V port.
My bet is that the memcpy is overwriting some part of the elfloader code, data or stack
sections.
To resolve this, you could try to load/execute the elfloader from a higher address in
memory.
Alternatively, the destination address range for the memcpy may not be to RAM. It might
help to draw a diagram of where RAM lies, where the elfloader lies, and where the kernel
and user images will be copied to.
- Alex
________________________________
From: Devel <devel-bounces(a)sel4.systems> on behalf of Sathya Narayanan N
<sathya281(a)gmail.com>
Sent: Friday, August 3, 2018 10:13 PM
To: devel(a)sel4.systems
Subject: [seL4] Porting SEL4 on RISCV FPGA
Hi,
I am porting SEL4 on RISCV FPGA. I am stuck midway in the kernel elf loader.
The function stuck is memcpy. I have added prints and I am not progressing after the last
memcpy call in unpack_elf_to_paddr(). All kinds of input appreciated.
Function under review:
static void unpack_elf_to_paddr(void *elf, paddr_t dest_paddr)
/* Parse size/length headers. */
dest_vaddr = elf_getProgramHeaderVaddr(elf, i);
data_size = elf_getProgramHeaderFileSize(elf, i);
data_offset = elf_getProgramHeaderOffset(elf, i);
/* Load data into memory. */
memcpy((char *)dest_vaddr + phys_virt_offset,
(char *)elf + data_offset, data_size);
printf("loaded data into memory \n"); -----> Stuck Here !
}
}
Can anyone give me a clue on whatsoever to check here ? It worked perfectly in spike
simulation.
RISCV FPGA configuration - It supports IMAFD. It has already booted linux. Kernel is
loaded at physical address 80 million.?
--
regards,
Sathya