-
Notifications
You must be signed in to change notification settings - Fork 0
arm on arm qemu optimization
License
Unknown and 2 other licenses found
Licenses found
Unknown
LICENSE
GPL-2.0
COPYING
LGPL-2.1
COPYING.LIB
arhangeldim/qemu_arm
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
Content
1. ARM assembly. Building binary
1) For cross-compile use this toolchain https://sourcery.mentor.com/public/gnu_toolchain/arm-none-linux-gnueabi/arm-2011.03-41-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
If there is an ARM board use default tools for compile (as, ld, etc...)
2) There is a simple assembly module (add two numbers)
simple.s
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
.text
start: @ Label, not really required
mov r0, #5 @ Load register r0 with the value 5
mov r1, #4 @ Load register r1 with the value 4
add r2, r1, r0 @ Add r0 and r1 and store in r2
stop: b stop @ INfinity loop. Or use bx lr
@@@@@@@@@@@@@@@@@@@@@@@@@@@@
3) Script for compile (on ARM)
#!/bin/bash
as -o out.o "$1"
ld -Ttext=0x0 -o out.elf out.o
objcopy -O binary out.elf out.bin
2. QEMU running
#!/bin/bash
dd if=/dev/zero of=flash.bin bs=4096 count 4096
dd if=out.bin of=flash.bin bs=4096 conv=notrunc
qemu-system-arm -M connex -pflash flash.bin -nographic -serial /dev/null -D ~/qemu.log -d in_asm,out_asm,op
QEMU options
-M model
-pflash flash memory
-serial i/o device
-D path to log file
-d log option
-s wait for gdb connection
-S set breakpoint before first code line
3. GDB
if qemu is ran with -s option we can connect with gdb for remote debugging (default port 1234).
(gdb) target remote localhost:1234
4. PROCESS
generation of intermediate code.
cpu-exec.c: int cpu_exec(CPUState *env)
static void cpu_exec_nocache(CPUState *env, int max_cycles,
TranslationBlock *orig_tb)
exec.c: TranslationBlock *tb_gen_code(CPUState *env,
target_ulong pc, target_ulong cs_base,
int flags, int cflags)
translate-all.c: int cpu_gen_code(CPUState *env, TranslationBlock *tb, int *gen_code_size_ptr)
//gen target mashine code
cpu_gen_code(CPUState *env, TranslationBlock *tb, int *gen_code_size_ptr)
target-arm/translate.c: static inline void gen_intermediate_code_internal(CPUState *env,
TranslationBlock *tb,
int search_pc)
static void disas_arm_insn(CPUState * env, DisasContext *s)
5. ADDITION
Translation stops when a conditional branch is encountered. Otherwise the subsequent code could get translated several times.
Also stop translation when a page boundary is reached. This ensures prefetch aborts occur at the right place.
About
arm on arm qemu optimization
Resources
License
Unknown and 2 other licenses found
Licenses found
Unknown
LICENSE
GPL-2.0
COPYING
LGPL-2.1
COPYING.LIB
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published