From 2f04067171022a65c020e27b35404abe10afabf3 Mon Sep 17 00:00:00 2001 From: Per <Per Lindgren> Date: Tue, 15 Oct 2019 01:13:24 +0200 Subject: [PATCH] WIP SyncSim --- .cargo/config | 11 +++- Cargo.toml | 3 +- link.ld | 4 ++ mips_program.objdump | 134 +++++++++++++++++++++++++++++++++++++++ mipseb-unknown-none.json | 16 +++++ src/lib.rs | 2 +- 6 files changed, 166 insertions(+), 4 deletions(-) create mode 100644 mips_program.objdump create mode 100644 mipseb-unknown-none.json diff --git a/.cargo/config b/.cargo/config index 8920f68..8bc5737 100644 --- a/.cargo/config +++ b/.cargo/config @@ -4,8 +4,15 @@ # "-C", "link-arg=-nostartfiles", "-C", "relocation-model=static", "-C", "inline-threshold=275", - "-C", "lto" + ] + +[target.mipseb-unknown-none] + rustflags = [ + "-C", "link-arg=-Tlink.ld", + # "-C", "link-arg=-nostartfiles", + "-C", "relocation-model=static", + "-C", "inline-threshold=275", ] [build] -target = "mipsel-unknown-none" \ No newline at end of file +target = "mipseb-unknown-none" \ No newline at end of file diff --git a/Cargo.toml b/Cargo.toml index 4d91a45..4b417fe 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -13,7 +13,8 @@ edition = "2018" [profile.release] #opt-level = 'z' # Optimize for size. opt-level = 3 # Aggressive optimization -debug = true # keep debug symbols +#debug = true # keep debug symbols +debug = false # skip debug symbols lto = true # Enable Link Time Optimization codegen-units = 1 # Reduce number of codegen units to increase optimizations. panic = 'abort' # Abort on panic diff --git a/link.ld b/link.ld index 45d9809..bf0cfa3 100644 --- a/link.ld +++ b/link.ld @@ -1,3 +1,6 @@ +OUTPUT_FORMAT("elf32-tradbigmips") +OUTPUT_ARCH(mips) + START_ADDR = 0x00000000; MEMORY_SIZE = 0x80000000; ASSERT(DEFINED(_start), "Cannot find entry point: fn _start() -> !"); @@ -20,6 +23,7 @@ SECTIONS _gp = ALIGN(16); + . = 0x00001000; .data : { __sdata = .; diff --git a/mips_program.objdump b/mips_program.objdump new file mode 100644 index 0000000..7e622a9 --- /dev/null +++ b/mips_program.objdump @@ -0,0 +1,134 @@ + +a.out: file format elf32-tradbigmips + +Sections: +Idx Name Size VMA LMA File off Algn + 0 .text 0000003c 00000000 00000000 00000060 2**2 + CONTENTS, ALLOC, LOAD, READONLY, CODE + 1 .data 00000040 00001000 00001000 00001060 2**4 + CONTENTS, ALLOC, LOAD, DATA + 2 .bss 00000000 00001040 00001040 000010a0 2**0 + ALLOC + 3 .reginfo 00000018 00000000 00000000 000010a0 2**2 + CONTENTS, READONLY, LINK_ONCE_SAME_SIZE + 4 .pdr 00000000 00000000 00000000 000010b8 2**2 + CONTENTS, READONLY +SYMBOL TABLE: +00000000 l d .text 00000000 .text +00001000 l d .data 00000000 .data +00001040 l d .bss 00000000 .bss +00000000 l d .reginfo 00000000 .reginfo +00000000 l d .pdr 00000000 .pdr +00000000 l d *ABS* 00000000 .shstrtab +00000000 l d *ABS* 00000000 .symtab +00000000 l d *ABS* 00000000 .strtab +00000000 l .text 00000000 main +00001000 l .data 00000000 intext +00001010 l .data 00000000 outtext +00000014 l .text 00000000 seek_end +00000028 l .text 00000000 seek_end1 +00000038 l .text 00000000 copy +00000038 l .text 00000000 stop +00000000 g *ABS* 00000000 __start + + +Contents of section .text: + 0000 3c090000 25291000 3c0a0000 254a1010 <...%)..<...%J.. + 0010 24080000 812b0000 11600003 25080001 $....+...`..%... + 0020 25290001 1000fffb 01485021 a14b0000 %).......HP!.K.. + 0030 3c090000 25291000 1000ffff <...%)...... +Contents of section .data: + 1000 21646c72 6f57206f 6c6c6548 00000000 !dlroW olleH.... + 1010 78787878 78787878 78787878 78787878 xxxxxxxxxxxxxxxx + 1020 78787878 78787878 78787878 78787878 xxxxxxxxxxxxxxxx + 1030 00000000 00000000 00000000 00000000 ................ +Contents of section .reginfo: + 0000 10000f00 00000000 00000000 00000000 ................ + 0010 00000000 00000000 ........ +Disassembly of section .text: + +00000000 <_start>: + 0: 27bdfff0 addiu sp,sp,-16 + 4: 3c010000 lui at,0x0 + 8: 24221000 addiu v0,at,4096 + c: 3c010000 lui at,0x0 + 10: 24231000 addiu v1,at,4096 + 14: 0062082b sltu at,v1,v0 + 18: 10200006 beqz at,34 <START_ADDR+0x34> + 1c: 00000000 nop + 20: ac600000 sw zero,0(v1) + 24: 24630004 addiu v1,v1,4 + 28: 0062082b sltu at,v1,v0 + 2c: 1420fffc bnez at,20 <START_ADDR+0x20> + 30: 00000000 nop + 34: 3c010000 lui at,0x0 + 38: 24221000 addiu v0,at,4096 + 3c: 3c010000 lui at,0x0 + 40: 24231000 addiu v1,at,4096 + 44: 0062082b sltu at,v1,v0 + 48: 10200009 beqz at,70 <START_ADDR+0x70> + 4c: 00000000 nop + 50: 3c010000 lui at,0x0 + 54: 24241000 addiu a0,at,4096 + 58: 8c810000 lw at,0(a0) + 5c: ac610000 sw at,0(v1) + 60: 24630004 addiu v1,v1,4 + 64: 0062082b sltu at,v1,v0 + 68: 1420fffb bnez at,58 <START_ADDR+0x58> + 6c: 24840004 addiu a0,a0,4 + 70: 0c000037 jal dc <main> + 74: 00000000 nop + 78: 0000000d break + +0000007c <_ZN7reverse3rev17h10307c82767293bfE>: + 7c: 10a00015 beqz a1,d4 <_ZN7reverse3rev17h10307c82767293bfE+0x58> + 80: 00000000 nop + 84: 27bdfff0 addiu sp,sp,-16 + 88: afbf000c sw ra,12(sp) + 8c: afb20008 sw s2,8(sp) + 90: afb10004 sw s1,4(sp) + 94: afb00000 sw s0,0(sp) + 98: 24b2ffff addiu s2,a1,-1 + 9c: 00808825 move s1,a0 + a0: 24840001 addiu a0,a0,1 + a4: 00c08025 move s0,a2 + a8: 02402825 move a1,s2 + ac: 0c00001f jal 7c <_ZN7reverse3rev17h10307c82767293bfE> + b0: 02403825 move a3,s2 + b4: 02120821 addu at,s0,s2 + b8: 92220000 lbu v0,0(s1) + bc: 8fb00000 lw s0,0(sp) + c0: 8fb10004 lw s1,4(sp) + c4: 8fb20008 lw s2,8(sp) + c8: 8fbf000c lw ra,12(sp) + cc: a0220000 sb v0,0(at) + d0: 27bd0010 addiu sp,sp,16 + d4: 03e00008 jr ra + d8: 00000000 nop + +000000dc <main>: + dc: 27bdfff0 addiu sp,sp,-16 + e0: afbf000c sw ra,12(sp) + e4: 3c010000 lui at,0x0 + e8: 27a60000 addiu a2,sp,0 + ec: 2405000b li a1,11 + f0: 2407000b li a3,11 + f4: aba00007 swl zero,7(sp) + f8: bba0000a swr zero,10(sp) + fc: afa00004 sw zero,4(sp) + 100: afa00000 sw zero,0(sp) + 104: 0c00001f jal 7c <_ZN7reverse3rev17h10307c82767293bfE> + 108: 24240170 addiu a0,at,368 + 10c: 93a1000a lbu at,10(sp) + 110: 93a10009 lbu at,9(sp) + 114: 93a10008 lbu at,8(sp) + 118: 93a10007 lbu at,7(sp) + 11c: 93a10006 lbu at,6(sp) + 120: 93a10005 lbu at,5(sp) + 124: 93a10004 lbu at,4(sp) + 128: 93a10003 lbu at,3(sp) + 12c: 93a10002 lbu at,2(sp) + 130: 93a10001 lbu at,1(sp) + 134: 93a10000 lbu at,0(sp) + 138: 0800004e j 138 <main+0x5c> + 13c: 00000000 nop diff --git a/mipseb-unknown-none.json b/mipseb-unknown-none.json new file mode 100644 index 0000000..5013d0d --- /dev/null +++ b/mipseb-unknown-none.json @@ -0,0 +1,16 @@ +{ + "llvm-target": "mipseb-unknown-none", + "arch": "mips", + "cpu": "mips32r3", + "data-layout": "E-m:m-p:32:32-i8:8:32-i16:16:32-i64:64-n32-S64", + "executables": true, + "features": "+mips32r3,+soft-float", + "linker-flavor": "ld.lld", + "linker": "rust-lld", + "panic-strategy": "abort", + "max-atomic-width": 32, + "os": "none", + "target-c-int-width": "32", + "target-endian": "big", + "target-pointer-width": "32" +} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 48792c9..867c78b 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -96,7 +96,7 @@ pub extern "C" fn _start() -> ! { unsafe { zero_bss(&mut __sbss, &mut __ebss); init_data(&mut __sdata, &mut __edata, &__sidata); - unsafe { main() } + main() } } -- GitLab