After load elf64 tilegx binary for linux-user, the working flow reaches 1st correct instruction "__start". Next, we shall load all instructions for qemu using.
This patch is based on Linux kernel tile architecture tilegx 64-bit implementation, and also based on tilegx architecture ABI reference. The related test: [root@localhost qemu]# ./configure --target-list=tilegx-linux-user && make [root@localhost qemu]# ./tilegx-linux-user/qemu-tilegx -d all ./test.tgx CPU Reset (CPU 0) CPU Reset (CPU 0) host mmap_min_addr=0x10000 Reserved 0xe0000 bytes of guest address space Relocating guest address space from 0x0000000000010000 to 0x10000 guest_base 0x0 start end size prot 0000000000010000-00000000000e0000 00000000000d0000 r-x 00000000000e0000-00000000000f0000 0000000000010000 rw- 0000004000000000-0000004000010000 0000000000010000 --- 0000004000010000-0000004000810000 0000000000800000 rw- start_brk 0x0000000000000000 end_code 0x00000000000d86f7 start_code 0x0000000000010000 start_data 0x00000000000e86f8 end_data 0x00000000000ea208 start_stack 0x000000400080f250 brk 0x00000000000ec2b0 entry 0x0000000000010f60 PROLOGUE: [size=40] 0x7fcc44c716f0: push %rbp 0x7fcc44c716f1: push %rbx 0x7fcc44c716f2: push %r12 0x7fcc44c716f4: push %r13 0x7fcc44c716f6: push %r14 0x7fcc44c716f8: push %r15 0x7fcc44c716fa: mov %rdi,%r14 0x7fcc44c716fd: add $0xfffffffffffffb78,%rsp 0x7fcc44c71704: jmpq *%rsi 0x7fcc44c71706: add $0x488,%rsp 0x7fcc44c7170d: pop %r15 0x7fcc44c7170f: pop %r14 0x7fcc44c71711: pop %r13 0x7fcc44c71713: pop %r12 0x7fcc44c71715: pop %rbx 0x7fcc44c71716: pop %rbp 0x7fcc44c71717: retq Load elf64 tilegx successfully reach code start position: [0000000000010f60] _start [root@localhost qemu]# echo $? 0 [root@localhost qemu]# Chen Gang (5): target-tile: Firstly add to qemu with minimized features linux-user: tile: Firstly add architecture related features linux-user: tile: Add target features support within qemu linux-user: Support tile architecture in syscall linux-user: Support tile architecture in linux-user configure | 7 + default-configs/tilegx-linux-user.mak | 1 + include/elf.h | 2 + linux-user/elfload.c | 23 +++ linux-user/main.c | 73 ++++++++ linux-user/syscall_defs.h | 34 +++- linux-user/tile/syscall.h | 80 +++++++++ linux-user/tile/syscall_nr.h | 327 ++++++++++++++++++++++++++++++++++ linux-user/tile/target_cpu.h | 35 ++++ linux-user/tile/target_signal.h | 28 +++ linux-user/tile/target_structs.h | 48 +++++ linux-user/tile/termbits.h | 285 +++++++++++++++++++++++++++++ target-tile/Makefile.objs | 1 + target-tile/cpu-qom.h | 72 ++++++++ target-tile/cpu.c | 159 +++++++++++++++++ target-tile/cpu.h | 84 +++++++++ target-tile/helper.h | 0 target-tile/translate.c | 54 ++++++ 18 files changed, 1310 insertions(+), 3 deletions(-) create mode 100644 default-configs/tilegx-linux-user.mak create mode 100644 linux-user/tile/syscall.h create mode 100644 linux-user/tile/syscall_nr.h create mode 100644 linux-user/tile/target_cpu.h create mode 100644 linux-user/tile/target_signal.h create mode 100644 linux-user/tile/target_structs.h create mode 100644 linux-user/tile/termbits.h create mode 100644 target-tile/Makefile.objs create mode 100644 target-tile/cpu-qom.h create mode 100644 target-tile/cpu.c create mode 100644 target-tile/cpu.h create mode 100644 target-tile/helper.h create mode 100644 target-tile/translate.c -- 1.9.3 (Apple Git-50)