[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] AArch64 ELF File Loading
From: |
Christopher Covington |
Subject: |
[Qemu-devel] AArch64 ELF File Loading |
Date: |
Fri, 25 Jul 2014 10:01:17 -0400 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130106 Thunderbird/17.0.2 |
Hi,
I think the AArch64 port has a problem with a self-modifying code sequence
that appears to run fine on other simulators, but I can't get QEMU to run the
small bare metal test case I created to try to reproduce the issue. Any help
would be appreciated.
qemu-system-aarch64 -nodefaults -nographic -monitor none -M virt -semihosting
-d exec,in_asm /tmp/test-nooverwrite 2>&1 | less
qemu: fatal: Trying to execute code outside RAM or ROM at 0x0000000000000000
qemu-system-aarch64 -nodefaults -nographic -monitor none -M virt -semihosting
-d exec,in_asm -bios /tmp/test-nooverwrite 2>&1 | less
qemu: fatal: Trying to execute code outside RAM or ROM at 0x0000000000000000
qemu-system-aarch64 -nodefaults -nographic -monitor none -M virt -semihosting
-d exec,in_asm -kernel /tmp/test-nooverwrite 2>&1 | less
IN:
0x0000000040000000: e3a00000 mov r0, #0 ; 0x0
0x0000000040000004: e59f1004 ldr r1, [pc, #4] ; 0x40000010
0x0000000040000008: e59f2004 ldr r2, [pc, #4] ; 0x40000014
0x000000004000000c: e59ff004 ldr pc, [pc, #4] ; 0x40000018
Trace 0x7f309f012000 [0000000040000000]
Note that the above are A32 instructions, but my ELF is A64 and this is not
the specified entry point.
aarch64-linux-gnu-readelf -h /tmp/test-nooverwrite
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: EXEC (Executable file)
Machine: AArch64
Version: 0x1
Entry point address: 0x80001140
Start of program headers: 64 (bytes into file)
Start of section headers: 186600 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 3
Size of section headers: 64 (bytes)
Number of section headers: 17
Section header string table index: 14
To generate a test bare metal executable, you can download the
aarch64-none-elf toolchain from Linaro and:
echo '#include <stdio.h>
int main() {
printf("Hello, world!\n");
return 0;
}' > hello.c
aarch64-none-elf-gcc -specs=aem-ve.specs hello.c -o hello
Thanks,
Christopher
--
Employee of Qualcomm Innovation Center, Inc.
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
hosted by the Linux Foundation.
- [Qemu-devel] AArch64 ELF File Loading,
Christopher Covington <=