Convert every submodule into subrepo (#170)

* remove ZAPD submodule

* git subrepo clone https://github.com/zeldaret/ZAPD.git tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "ca229f19"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "ca229f19"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"

* git subrepo clone https://github.com/simonlindholm/decomp-permuter.git tools/decomp-permuter

subrepo:
  subdir:   "tools/decomp-permuter"
  merged:   "1e4b85a7"
upstream:
  origin:   "https://github.com/simonlindholm/decomp-permuter.git"
  branch:   "main"
  commit:   "1e4b85a7"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"

* Remove asm-differ

* git subrepo clone https://github.com/simonlindholm/asm-differ.git tools/asm-differ

subrepo:
  subdir:   "tools/asm-differ"
  merged:   "eaf72269"
upstream:
  origin:   "https://github.com/simonlindholm/asm-differ.git"
  branch:   "master"
  commit:   "eaf72269"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"

* remove asm-processor

* git subrepo clone https://github.com/simonlindholm/asm-processor.git tools/asm-processor

subrepo:
  subdir:   "tools/asm-processor"
  merged:   "85288fcd"
upstream:
  origin:   "https://github.com/simonlindholm/asm-processor.git"
  branch:   "master"
  commit:   "85288fcd"
git-subrepo:
  version:  "0.4.3"
  origin:   "???"
  commit:   "???"

* remove .gitmodules file

* Update REAMDE

* Update warnings
This commit is contained in:
Anghelo Carvajal
2021-06-07 18:31:56 -04:00
committed by GitHub
parent 2bf68a5263
commit b6904aa2cc
418 changed files with 113047 additions and 62 deletions
+1
View File
@@ -0,0 +1 @@
*.o
+12
View File
@@ -0,0 +1,12 @@
; DO NOT EDIT (unless you know what you are doing)
;
; This subdirectory is a git "subrepo", and this file is maintained by the
; git-subrepo command. See https://github.com/git-commands/git-subrepo#readme
;
[subrepo]
remote = https://github.com/simonlindholm/asm-processor.git
branch = master
commit = 85288fcdfefd5d2644d9bac1230c8b4aa7c92024
parent = 492b92579d6bc30f635cbcc3852de1b17ed1bc43
method = merge
cmdver = 0.4.3
+24
View File
@@ -0,0 +1,24 @@
This is free and unencumbered software released into the public domain.
Anyone is free to copy, modify, publish, use, compile, sell, or
distribute this software, either in source code form or as a compiled
binary, for any purpose, commercial or non-commercial, and by any
means.
In jurisdictions that recognize copyright laws, the author or authors
of this software dedicate any and all copyright interest in the
software to the public domain. We make this dedication for the benefit
of the public at large and to the detriment of our heirs and
successors. We intend this dedication to be an overt act of
relinquishment in perpetuity of all present and future rights to this
software under copyright law.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
For more information, please refer to <http://unlicense.org>
+93
View File
@@ -0,0 +1,93 @@
# asm-processor
Pre-process .c files and post-process .o files to enable embedding MIPS assembly into IDO-compiled C.
## Usage
Let's say you have a file compiled with `-g` on the IDO compiler, that looks like this:
```c
float func4(void) {
"func4";
return 0.2f;
}
```
This script enables replacing it by:
```asm
GLOBAL_ASM(
.rdata
.word 0x66756e63 # func
.word 0x34000000 # 4\0\0\0
.late_rodata
glabel rv
.word 0x3e4ccccd # 0.2f
.text
glabel func4
lui $at, %hi(rv)
jr $ra
lwc1 $f0, %lo(rv)($at)
jr $ra
nop
jr $ra
nop
)
```
To compile the file, run `./compile.sh file.c`, or invoke the `asm_processor.py` script in a similar manner. (`compile.sh` is mostly just intended to describe example usage.)
Reading assembly from file is also supported, e.g. `GLOBAL_ASM("file.s")`.
### What is supported?
`.text`, `.data`, `.bss` and `.rodata` sections, `.word`/`.incbin`, `.ascii`/`.asciz`, and `-g`, `-g3`, `-O1`, `-O2` and `-framepointer` flags to the IDO compiler.
### What is not supported?
* complicated assembly (.ifdef, macro declarations/calls other than `glabel`, pseudo-instructions that expand to several real instructions)
* non-IDO compilers
* `-mips1` (`-mips3` may also not work fully)
C `#ifdef`s only work outside of `GLOBAL_ASM` calls, but is otherwise able to replace `.ifdef`.
### What's up with "late rodata"?
The IDO compiler emits rodata in two passes: first array/string contents, then large literals/switch jump tables.
Data declared within `.rdata`/`.section .rodata` will end up in the first half, and `.late_rodata`/`.section .late_rodata` in the second half.
### How does it work?
It's a bit of a hack!
The basic idea is replace `GLOBAL_ASM` blocks with dummy C functions/global vars of the same sections sizes as the assembly.
Then the C file gets compiled, and the dummy contents overwritten with the injected assembly.
To accomplish this, asm-processor has logic for guessing the size of assembly contents
(which assumes the assembly isn't too complicated, e.g. no macros),
and for emitting C code of exact sizes for a bunch of different IDO compiler flags.
The assembler code is padded with nops to line it up with its correct position in the C;
this allows C and asm ELF files to be merged easily without having to fix up e.g. symbol addresses.
The most difficulty part is `late_rodata`, which is hard to create programmatically.
asm-processor does that by emitting code that uses dummy float literals/double literals/jump tables,
assembles the late_rodata at another location of the .rodata section, then overwrites the dummy rodata.
This does require some movement of symbols and relocations, and quite a bit of care in what code to
emit and how to preserve .double alignment.
It's worth noting some alternative ways in which asm-processor would have been implemented:
- One idea to get rid of the C/asm size estimations is to emit arbitrary code, and then move code,
symbols and relocations to the correct place after the sizes are known.
Given the machinery for `late_rodata` this wouldn't have been too difficult, and it would have the upside of improved portability.
There is a big downside, however: using dummy code of incorrect size throws off alignment and can introduce unintended padding.
Fixing this would require running multiple passes of asm-processor, with one compile per `ASM_GLOBAL`.
- Another idea is to run the compiler with -S to emit assembly, modify the emitted assembly, then run the assembler
(which in IDO's case may perform additional instruction reordering etc.).
This option has not been investigated in much detail, and would perhaps be superior to the current implementation.
It does have a few unknowns to it, e.g. instruction encoding differences between GNU `as` and IDO's assembler,
how to avoid reordering the injected assembly, and how .rodata/.late_rodata are implemented.
### Testing
There are a few tests to ensure you don't break anything when hacking on asm-processor: `./run-tests.sh` should exit without output if they pass, or else output a diff from previous to new version.
+4
View File
@@ -0,0 +1,4 @@
#!/usr/bin/env bash
for A in "$@"; do
./compile.sh "$A" && mips-linux-gnu-objdump -s "${A%.c}.o" > "${A%.c}.objdump"
done
File diff suppressed because it is too large Load Diff
+23
View File
@@ -0,0 +1,23 @@
#!/bin/bash
set -e
set -o pipefail
INPUT="$1"
OUTPUT="${INPUT%.c}.o"
CC="$QEMU_IRIX -silent -L $IRIX_ROOT $IRIX_ROOT/usr/bin/cc"
CFLAGS="-Wab,-r4300_mul -non_shared -G 0 -Xcpluscomm -fullwarn -wlint -woff 819,820,852,821 -signed -DVERSION_JP=1" # -I include
AS="mips-linux-gnu-as"
ASFLAGS="-march=vr4300 -mabi=32 --defsym VERSION_JP=1" # -I include
set +e
OPTFLAGS=$(grep '^// COMPILE-FLAGS: ' $INPUT | sed 's#^// COMPILE-FLAGS: ##')
ISET=$(grep '^// COMPILE-ISET: ' $INPUT | sed 's#^// COMPILE-ISET: ##')
set -e
if [[ -z "$OPTFLAGS" ]]; then
OPTFLAGS="-g"
fi
if [[ -z "$ISET" ]]; then
CFLAGS="$CFLAGS -mips2"
fi
python3 asm_processor.py $OPTFLAGS $ISET "$INPUT" | $CC -c $CFLAGS include-stdin.c -o "$OUTPUT" $OPTFLAGS
python3 asm_processor.py $OPTFLAGS $ISET "$INPUT" --post-process "$OUTPUT" --assembler "$AS $ASFLAGS" --asm-prelude prelude.s
+2
View File
@@ -0,0 +1,2 @@
// (this is used for piping input to the IRIX compiler without needing to make a temporary .c file)
#include "/dev/stdin"
+8
View File
@@ -0,0 +1,8 @@
.set noat
.set noreorder
.set gp=64
.macro glabel label
.global \label
\label:
.endm
+8
View File
@@ -0,0 +1,8 @@
#!/usr/bin/env bash
for A in tests/*.c; do
OBJDUMPFLAGS=$(grep '^// OBJDUMP-FLAGS: ' "$A" | sed 's#^// OBJDUMP-FLAGS: ##')
if [[ -z "$OBJDUMPFLAGS" ]]; then
OBJDUMPFLAGS="-s"
fi
./compile.sh "$A" && mips-linux-gnu-objdump $OBJDUMPFLAGS "${A%.c}.o" | diff - "${A%.c}.objdump" || echo FAIL "$A"
done
+19
View File
@@ -0,0 +1,19 @@
void foo(void) { "abcdef"; }
GLOBAL_ASM(
.rdata
.ascii "AB"
.ascii "CD", "EF"
.ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK"
)
void bar(void) { "hello"; }
GLOBAL_ASM(
.rdata
.asciiz "12"
.asciiz "34", "56"
.asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A"
)
void baz(void) { "ghijkl"; }
+19
View File
@@ -0,0 +1,19 @@
tests/ascii.o: file format elf32-tradbigmips
Contents of section .text:
0000 03e00008 00000000 03e00008 00000000 ................
0010 03e00008 00000000 03e00008 00000000 ................
0020 03e00008 00000000 03e00008 00000000 ................
Contents of section .rodata:
0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH
0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ
0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3
0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$
0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl..
Contents of section .options:
0000 01200000 00000000 80000000 00000000 . ..............
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000000 00000000 00000000 00000000 ................
0010 00000000 00007ff0 ........
+6
View File
@@ -0,0 +1,6 @@
const char before[] = "^";
GLOBAL_ASM(
.rdata
.asciz "aaaa /* bbbb */ # cccc" /**//**//**//**/ /*/ "xxxx" /*/ /* dddd " eeee */ "# ffff" # gggg "hhhh" /* iiii */
)
const char after[] = "$";
@@ -0,0 +1,13 @@
tests/comments.o: file format elf32-tradbigmips
Contents of section .rodata:
0000 5e000000 61616161 202f2a20 62626262 ^...aaaa /* bbbb
0010 202a2f20 23206363 63630023 20666666 */ # cccc.# fff
0020 66000000 24000000 00000000 00000000 f...$...........
Contents of section .options:
0000 01200000 00000000 00000000 00000000 . ..............
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,7 @@
GLOBAL_ASM(
.rdata
.word 0x12345678
glabel blah
.word blah2
/*a*/ blah2: /*b*/ .word blah /*c*/
)
@@ -0,0 +1,11 @@
tests/label-sameline.o: file format elf32-tradbigmips
Contents of section .rodata:
0000 12345678 00000008 00000000 00000000 .4Vx............
Contents of section .options:
0000 01200000 00000000 00000000 00000000 . ..............
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00007ff0 ........
+164
View File
@@ -0,0 +1,164 @@
GLOBAL_ASM(
glabel test
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
addiu $sp, $sp, -24
sw $zero, 4($sp)
lw $t6, 4($sp)
addu $t7, $a0, $t6
sb $zero, ($t7)
lw $t8, 4($sp)
addiu $t9, $t8, 1
slt $at, $t9, $a1
sw $t9, 4($sp)
nop
jr $ra
addiu $sp, $sp, 24
)
void foo(void) {}
+50
View File
@@ -0,0 +1,50 @@
tests/large.o: file format elf32-tradbigmips
Contents of section .text:
0000 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0010 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0020 afb90004 00000000 03e00008 27bd0018 ............'...
0030 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0040 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0050 afb90004 00000000 03e00008 27bd0018 ............'...
0060 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0070 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0080 afb90004 00000000 03e00008 27bd0018 ............'...
0090 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
00a0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
00b0 afb90004 00000000 03e00008 27bd0018 ............'...
00c0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
00d0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
00e0 afb90004 00000000 03e00008 27bd0018 ............'...
00f0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0100 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0110 afb90004 00000000 03e00008 27bd0018 ............'...
0120 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0130 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0140 afb90004 00000000 03e00008 27bd0018 ............'...
0150 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0160 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0170 afb90004 00000000 03e00008 27bd0018 ............'...
0180 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0190 a1e00000 8fb80004 27190001 0325082a ........'....%.*
01a0 afb90004 00000000 03e00008 27bd0018 ............'...
01b0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
01c0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
01d0 afb90004 00000000 03e00008 27bd0018 ............'...
01e0 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
01f0 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0200 afb90004 00000000 03e00008 27bd0018 ............'...
0210 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0220 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0230 afb90004 00000000 03e00008 27bd0018 ............'...
0240 27bdffe8 afa00004 8fae0004 008e7821 '.............x!
0250 a1e00000 8fb80004 27190001 0325082a ........'....%.*
0260 afb90004 00000000 03e00008 27bd0018 ............'...
0270 03e00008 00000000 03e00008 00000000 ................
Contents of section .options:
0000 01200000 00000000 80000000 00000000 . ..............
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 a300c032 00000000 00000000 00000000 ...2............
0010 00000000 00007ff0 ........
@@ -0,0 +1,80 @@
GLOBAL_ASM(
.late_rodata
.float 4.1
.float 4.2
.float 4.3
.float 4.4
.text
glabel a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float foo(void) { "foo"; return 1.1f; }
GLOBAL_ASM(
.late_rodata
.late_rodata_alignment 4
.float 5.1
.float 5.2
.float 5.3
.float 5.4
.text
glabel b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float bar(void) { "bar"; return 1.2f; }
GLOBAL_ASM(
.late_rodata
.late_rodata_alignment 8
.float 6.1
.float 6.2
.float 6.3
.float 6.4
.float 6.5
.text
glabel c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
@@ -0,0 +1,31 @@
tests/late_rodata_align.o: file format elf32-tradbigmips
Contents of section .text:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00000000 00000000 00000000 ................
0020 00000000 00000000 00000000 00000000 ................
0030 00000000 00000000 00000000 00000000 ................
0040 3c010000 03e00008 c4200018 03e00008 <........ ......
0050 00000000 03e00008 00000000 00000000 ................
0060 00000000 00000000 00000000 00000000 ................
0070 00000000 00000000 00000000 00000000 ................
0080 00000000 00000000 00000000 00000000 ................
0090 3c010000 03e00008 c420002c 03e00008 <........ .,....
00a0 00000000 03e00008 00000000 00000000 ................
00b0 00000000 00000000 00000000 00000000 ................
00c0 00000000 00000000 00000000 00000000 ................
00d0 00000000 00000000 00000000 00000000 ................
00e0 00000000 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 666f6f00 62617200 40833333 40866666 foo.bar.@.33@.ff
0010 4089999a 408ccccd 3f8ccccd 40a33333 @...@...?...@.33
0020 40a66666 40a9999a 40accccd 3f99999a @.ff@...@...?...
0030 40c33333 40c66666 40c9999a 40cccccd @.33@.ff@...@...
0040 40d00000 00000000 00000000 00000000 @...............
Contents of section .options:
0000 01200000 00000000 80000002 00000000 . ..............
0010 000005f1 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000002 00000000 000005f1 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,83 @@
GLOBAL_ASM(
.late_rodata
.float 4.1
.text
glabel a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float foo(void) {
return 4.15f;
}
GLOBAL_ASM(
.late_rodata
.float 4.2
.word 0
.double 4.3
.text
glabel b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float bar(void) {
return 4.4f;
}
GLOBAL_ASM(
.late_rodata
.float 4.55
.double 4.6
.text
glabel c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float baz(void) {
return 4.6f;
}
@@ -0,0 +1,32 @@
tests/late_rodata_doubles.o: file format elf32-tradbigmips
Contents of section .text:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00000000 00000000 00000000 ................
0020 00000000 00000000 00000000 00000000 ................
0030 00000000 00000000 00000000 00000000 ................
0040 3c010000 03e00008 c4200004 03e00008 <........ ......
0050 00000000 03e00008 00000000 00000000 ................
0060 00000000 00000000 00000000 00000000 ................
0070 00000000 00000000 00000000 00000000 ................
0080 00000000 00000000 00000000 00000000 ................
0090 00000000 00000000 00000000 3c010000 ............<...
00a0 03e00008 c4200018 03e00008 00000000 ..... ..........
00b0 03e00008 00000000 00000000 00000000 ................
00c0 00000000 00000000 00000000 00000000 ................
00d0 00000000 00000000 00000000 00000000 ................
00e0 00000000 00000000 00000000 00000000 ................
00f0 00000000 00000000 3c010000 03e00008 ........<.......
0100 c4200028 03e00008 00000000 03e00008 . .(............
0110 00000000 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff....
0010 40113333 33333333 408ccccd 4091999a @.333333@...@...
0020 40126666 66666666 40933333 00000000 @.ffffff@.33....
Contents of section .options:
0000 01200000 00000000 80000002 00000000 . ..............
0010 000000f1 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000002 00000000 000000f1 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,86 @@
// COMPILE-FLAGS: -O2
// COMPILE-ISET: -mips1
// exact copy of late_rodata_doubles.c except for the -mips1 -O2 additions
GLOBAL_ASM(
.late_rodata
.float 4.1
.text
glabel a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float foo(void) {
return 4.15f;
}
GLOBAL_ASM(
.late_rodata
.float 4.2
.word 0
.double 4.3
.text
glabel b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float bar(void) {
return 4.4f;
}
GLOBAL_ASM(
.late_rodata
.float 4.55
.double 4.6
.text
glabel c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
float baz(void) {
return 4.6f;
}
@@ -0,0 +1,29 @@
tests/late_rodata_doubles_mips1.o: file format elf32-tradbigmips
Contents of section .text:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00000000 00000000 00000000 ................
0020 00000000 00000000 00000000 00000000 ................
0030 00000000 00000000 00000000 00000000 ................
0040 3c010000 c4200004 03e00008 00000000 <.... ..........
0050 00000000 00000000 00000000 00000000 ................
0060 00000000 00000000 00000000 00000000 ................
0070 00000000 00000000 00000000 00000000 ................
0080 00000000 00000000 00000000 00000000 ................
0090 3c010000 c4200018 03e00008 00000000 <.... ..........
00a0 00000000 00000000 00000000 00000000 ................
00b0 00000000 00000000 00000000 00000000 ................
00c0 00000000 00000000 00000000 00000000 ................
00d0 00000000 00000000 00000000 00000000 ................
00e0 3c010000 c4200028 03e00008 00000000 <.... .(........
Contents of section .rodata:
0000 40833333 4084cccd 40866666 00000000 @.33@...@.ff....
0010 40113333 33333333 408ccccd 4091999a @.333333@...@...
0020 40126666 66666666 40933333 00000000 @.ffffff@.33....
Contents of section .options:
0000 01200000 00000000 80000002 00000000 . ..............
0010 000c0011 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000002 00000000 000c0011 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,77 @@
// COMPILE-FLAGS: -O2
float a(void) { return 1.1f; }
GLOBAL_ASM(
glabel a2
move $a0, $a0
nop
nop
nop
jr $ra
move $a0, $a0
)
GLOBAL_ASM(
.late_rodata
glabel jtbl
.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10
.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20
.word case21, case22, case23, case24, case25, case26
.text
glabel foo
sltiu $at, $a0, 0xa
beqz $at, .L756E659B
sll $t7, $a0, 2
lui $at, %hi(jtbl)
addu $at, $at, $t7
lw $t7, %lo(jtbl)($at)
jr $t7
nop
case0: addiu $a0, $a0, 1
case1: addiu $a0, $a0, 1
case2: addiu $a0, $a0, 1
case3: addiu $a0, $a0, 1
case4: addiu $a0, $a0, 1
case5: addiu $a0, $a0, 1
case6: addiu $a0, $a0, 1
case7: addiu $a0, $a0, 1
case8: addiu $a0, $a0, 1
case9: addiu $a0, $a0, 1
case10: addiu $a0, $a0, 1
case11: addiu $a0, $a0, 1
case12: addiu $a0, $a0, 1
case13: addiu $a0, $a0, 1
case14: addiu $a0, $a0, 1
case15: addiu $a0, $a0, 1
case16: addiu $a0, $a0, 1
case17: addiu $a0, $a0, 1
case18: addiu $a0, $a0, 1
case19: addiu $a0, $a0, 1
case20: addiu $a0, $a0, 1
case21: addiu $a0, $a0, 1
case22: addiu $a0, $a0, 1
case23: addiu $a0, $a0, 1
case24: addiu $a0, $a0, 1
case25: addiu $a0, $a0, 1
case26:
jr $ra
addiu $v0, $a0, 1
.L756E659B:
addiu $v0, $zero, 2
jr $ra
nop
)
GLOBAL_ASM(
glabel b2
move $a0, $a0
nop
nop
jr $ra
move $a0, $a0
)
float b(void) { return 1.2f; }
@@ -0,0 +1,33 @@
tests/late_rodata_jtbl.o: file format elf32-tradbigmips
Contents of section .text:
0000 3c010000 03e00008 c4200000 00802025 <........ .... %
0010 00000000 00000000 00000000 03e00008 ................
0020 00802025 2c81000a 10200022 00047880 .. %,.... ."..x.
0030 3c010000 002f0821 8c2f0000 01e00008 <..../.!./......
0040 00000000 24840001 24840001 24840001 ....$...$...$...
0050 24840001 24840001 24840001 24840001 $...$...$...$...
0060 24840001 24840001 24840001 24840001 $...$...$...$...
0070 24840001 24840001 24840001 24840001 $...$...$...$...
0080 24840001 24840001 24840001 24840001 $...$...$...$...
0090 24840001 24840001 24840001 24840001 $...$...$...$...
00a0 24840001 24840001 24840001 03e00008 $...$...$.......
00b0 24820001 24020002 03e00008 00000000 $...$...........
00c0 00802025 00000000 00000000 03e00008 .. %............
00d0 00802025 3c010000 03e00008 c4200070 .. %<........ .p
Contents of section .rodata:
0000 3f8ccccd 00000044 00000048 0000004c ?......D...H...L
0010 00000050 00000054 00000058 0000005c ...P...T...X...\
0020 00000060 00000064 00000068 0000006c ...`...d...h...l
0030 00000070 00000074 00000078 0000007c ...p...t...x...|
0040 00000080 00000084 00000088 0000008c ................
0050 00000090 00000094 00000098 0000009c ................
0060 000000a0 000000a4 000000a8 000000ac ................
0070 3f99999a 00000000 00000000 00000000 ?...............
Contents of section .options:
0000 01200000 00000000 80004002 00000000 . ........@.....
0010 00000011 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 8000c016 00000000 00000011 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,79 @@
// COMPILE-FLAGS: -O2
// COMPILE-ISET: -mips1
// exact copy of late_rodata_jtbl.c except for the -mips1 addition
float a(void) { return 1.1f; }
GLOBAL_ASM(
glabel a2
move $a0, $a0
nop
nop
nop
jr $ra
move $a0, $a0
)
GLOBAL_ASM(
.late_rodata
glabel jtbl
.word case0, case1, case2, case3, case4, case5, case6, case7, case8, case9, case10
.word case11, case12, case13, case14, case15, case16, case17, case18, case19, case20
.word case21, case22, case23, case24, case25, case26
.text
glabel foo
sltiu $at, $a0, 0xa
beqz $at, .L756E659B
sll $t7, $a0, 2
lui $at, %hi(jtbl)
addu $at, $at, $t7
lw $t7, %lo(jtbl)($at)
jr $t7
nop
case0: addiu $a0, $a0, 1
case1: addiu $a0, $a0, 1
case2: addiu $a0, $a0, 1
case3: addiu $a0, $a0, 1
case4: addiu $a0, $a0, 1
case5: addiu $a0, $a0, 1
case6: addiu $a0, $a0, 1
case7: addiu $a0, $a0, 1
case8: addiu $a0, $a0, 1
case9: addiu $a0, $a0, 1
case10: addiu $a0, $a0, 1
case11: addiu $a0, $a0, 1
case12: addiu $a0, $a0, 1
case13: addiu $a0, $a0, 1
case14: addiu $a0, $a0, 1
case15: addiu $a0, $a0, 1
case16: addiu $a0, $a0, 1
case17: addiu $a0, $a0, 1
case18: addiu $a0, $a0, 1
case19: addiu $a0, $a0, 1
case20: addiu $a0, $a0, 1
case21: addiu $a0, $a0, 1
case22: addiu $a0, $a0, 1
case23: addiu $a0, $a0, 1
case24: addiu $a0, $a0, 1
case25: addiu $a0, $a0, 1
case26:
jr $ra
addiu $v0, $a0, 1
.L756E659B:
addiu $v0, $zero, 2
jr $ra
nop
)
GLOBAL_ASM(
glabel b2
move $a0, $a0
nop
nop
jr $ra
move $a0, $a0
)
float b(void) { return 1.2f; }
@@ -0,0 +1,34 @@
tests/late_rodata_jtbl_mips1.o: file format elf32-tradbigmips
Contents of section .text:
0000 3c010000 c4200000 03e00008 00000000 <.... ..........
0010 00802025 00000000 00000000 00000000 .. %............
0020 03e00008 00802025 2c81000a 10200022 ...... %,.... ."
0030 00047880 3c010000 002f0821 8c2f0000 ..x.<..../.!./..
0040 01e00008 00000000 24840001 24840001 ........$...$...
0050 24840001 24840001 24840001 24840001 $...$...$...$...
0060 24840001 24840001 24840001 24840001 $...$...$...$...
0070 24840001 24840001 24840001 24840001 $...$...$...$...
0080 24840001 24840001 24840001 24840001 $...$...$...$...
0090 24840001 24840001 24840001 24840001 $...$...$...$...
00a0 24840001 24840001 24840001 24840001 $...$...$...$...
00b0 03e00008 24820001 24020002 03e00008 ....$...$.......
00c0 00000000 00802025 00000000 00000000 ...... %........
00d0 03e00008 00802025 3c010000 c4200070 ...... %<.... .p
00e0 03e00008 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 3f8ccccd 00000048 0000004c 00000050 ?......H...L...P
0010 00000054 00000058 0000005c 00000060 ...T...X...\...`
0020 00000064 00000068 0000006c 00000070 ...d...h...l...p
0030 00000074 00000078 0000007c 00000080 ...t...x...|....
0040 00000084 00000088 0000008c 00000090 ................
0050 00000094 00000098 0000009c 000000a0 ................
0060 000000a4 000000a8 000000ac 000000b0 ................
0070 3f99999a 00000000 00000000 00000000 ?...............
Contents of section .options:
0000 01200000 00000000 80004002 00000000 . ........@.....
0010 00000011 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 8000c016 00000000 00000011 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,77 @@
GLOBAL_ASM(
.late_rodata
.float 4.01
.word 0
.double 4.02
.text
glabel a
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
double foo(void) { return 4.03; }
GLOBAL_ASM(
.late_rodata
.float 4.04
.double 4.05
.text
glabel b
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
double bar(void) { return 4.06; }
float baz(void) { return 4.07f; }
GLOBAL_ASM(
.late_rodata
.double 4.08
.text
glabel c
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
)
@@ -0,0 +1,33 @@
tests/late_rodata_misaligned_doubles.o: file format elf32-tradbigmips
Contents of section .text:
0000 00000000 00000000 00000000 00000000 ................
0010 00000000 00000000 00000000 00000000 ................
0020 00000000 00000000 00000000 00000000 ................
0030 00000000 00000000 00000000 00000000 ................
0040 3c010000 03e00008 d4200010 03e00008 <........ ......
0050 00000000 03e00008 00000000 00000000 ................
0060 00000000 00000000 00000000 00000000 ................
0070 00000000 00000000 00000000 00000000 ................
0080 00000000 00000000 00000000 00000000 ................
0090 00000000 00000000 00000000 3c010000 ............<...
00a0 03e00008 d4200028 03e00008 00000000 ..... .(........
00b0 03e00008 00000000 3c010000 03e00008 ........<.......
00c0 c4200030 03e00008 00000000 03e00008 . .0............
00d0 00000000 00000000 00000000 00000000 ................
00e0 00000000 00000000 00000000 00000000 ................
00f0 00000000 00000000 00000000 00000000 ................
0100 00000000 00000000 00000000 00000000 ................
0110 00000000 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 408051ec 00000000 4010147a e147ae14 @.Q.....@..z.G..
0010 40101eb8 51eb851f 00000000 408147ae @...Q.......@.G.
0020 40103333 33333333 40103d70 a3d70a3d @.333333@.=p...=
0030 40823d71 00000000 401051eb 851eb852 @.=q....@.Q....R
Contents of section .options:
0000 01200000 00000000 80000002 00000000 . ..............
0010 000000f3 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000002 00000000 000000f3 00000000 ................
0010 00000000 00007ff0 ........
@@ -0,0 +1,4 @@
.rdata
label: .asciiz "1\n\
2" \
"34", "56"
@@ -0,0 +1,22 @@
void foo(void) { "abcdef"; }
GLOBAL_ASM(
.rdata
.ascii "AB" \
"CD", "EF"
.ascii "GH\n\n\n\0\11\222\3333\44444\x1234567\n\nIJK"
)
void bar(void) { "hello"; }
GLOBAL_ASM(
.rdata
.asciiz "1\
2"
.asciiz "34", "56"
.asciiz "78\n\n\n\0\11\222\3333\44444\x1234567\n\n9A"
)
void baz(void) { "ghijkl"; }
GLOBAL_ASM("tests/line-continuation-separate-file.s")
@@ -0,0 +1,20 @@
tests/line-continuation.o: file format elf32-tradbigmips
Contents of section .text:
0000 03e00008 00000000 03e00008 00000000 ................
0010 03e00008 00000000 03e00008 00000000 ................
0020 03e00008 00000000 03e00008 00000000 ................
Contents of section .rodata:
0000 61626364 65660000 41424344 45464748 abcdef..ABCDEFGH
0010 0a0a0a00 0992db33 24343467 0a0a494a .......3$44g..IJ
0020 4b000000 68656c6c 6f000000 31320033 K...hello...12.3
0030 34003536 0037380a 0a0a0009 92db3324 4.56.78.......3$
0040 3434670a 0a394100 6768696a 6b6c0000 44g..9A.ghijkl..
0050 310a3200 33340035 36000000 00000000 1.2.34.56.......
Contents of section .options:
0000 01200000 00000000 80000000 00000000 . ..............
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000000 00000000 00000000 00000000 ................
0010 00000000 00007ff0 ........
+26
View File
@@ -0,0 +1,26 @@
// COMPILE-FLAGS: -O2
int a(void) { return 1; }
GLOBAL_ASM(
glabel foo
addiu $a0, $a0, 1
addiu $a0, $a0, 2
addiu $a0, $a0, 3
jr $ra
addiu $a0, $a0, 4
)
float b(void) { return 1.2f; }
GLOBAL_ASM(
.late_rodata
glabel float1
.float 12.34
.text
glabel bar
addiu $a0, $a0, 5
addiu $a0, $a0, 6
lui $v0, %hi(float1 + 1)
jr $ra
addiu $v0, $v0, %lo(float1 + 1)
)
float c(void) { return 1.3f; }
+17
View File
@@ -0,0 +1,17 @@
tests/o2.o: file format elf32-tradbigmips
Contents of section .text:
0000 03e00008 24020001 24840001 24840002 ....$...$...$...
0010 24840003 03e00008 24840004 3c010000 $.......$...<...
0020 03e00008 c4200000 24840005 24840006 ..... ..$...$...
0030 3c020000 03e00008 24420001 3c010000 <.......$B..<...
0040 03e00008 c4200008 00000000 00000000 ..... ..........
Contents of section .rodata:
0000 3f99999a 414570a4 3fa66666 00000000 ?...AEp.?.ff....
Contents of section .options:
0000 01200000 00000000 80000006 00000000 . ..............
0010 00000011 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 80000016 00000000 00000011 00000000 ................
0010 00000000 00007ff0 ........
+33
View File
@@ -0,0 +1,33 @@
// COMPILE-FLAGS: -O2
// OBJDUMP-FLAGS: -srt
static int xtext(int a, int b, int c);
const int rodata1[] = {1};
static const int rodata2[] = {2};
int data1[] = {3};
static int data2[] = {4};
int bss1;
static int bss2;
GLOBAL_ASM(
glabel bar
lui $a0, %hi(rodata2)
lw $a0, %lo(rodata2)($a0)
lui $a1, %hi(data2)
lw $a1, %lo(data2)($a0)
lui $a2, %hi(bss2)
lw $a2, %lo(bss2)($a0)
jal xtext
nop
jr $ra
nop
nop
nop
)
static int xtext(int a, int b, int c) {
return 1;
}
void baz(void) {
xtext(bss2, rodata2[0], data2[0]);
}
+56
View File
@@ -0,0 +1,56 @@
tests/static.o: file format elf32-tradbigmips
SYMBOL TABLE:
00000000 l d .text 00000080 .text
00000000 l d .rodata 00000010 .rodata
00000000 l d .data 00000010 .data
00000000 l d .bss 00000010 .bss
00000004 l O .rodata 00000000 rodata2
00000004 l O .data 00000000 data2
00000004 l O .bss 00000000 bss2
00000030 l F .text 00000000 xtext
00000000 g O .rodata 00000004 rodata1
00000000 g O .data 00000004 data1
00000000 g O .bss 00000004 bss1
00000044 g F .text 00000034 baz
00000000 g F .text 00000030 bar
RELOCATION RECORDS FOR [.text]:
OFFSET TYPE VALUE
0000004c R_MIPS_HI16 .bss
00000064 R_MIPS_LO16 .bss
00000050 R_MIPS_HI16 .rodata
0000005c R_MIPS_LO16 .rodata
00000054 R_MIPS_HI16 .data
00000058 R_MIPS_LO16 .data
00000060 R_MIPS_26 .text
00000000 R_MIPS_HI16 rodata2
00000004 R_MIPS_LO16 rodata2
00000008 R_MIPS_HI16 data2
0000000c R_MIPS_LO16 data2
00000010 R_MIPS_HI16 bss2
00000014 R_MIPS_LO16 bss2
00000018 R_MIPS_26 xtext
Contents of section .text:
0000 3c040000 8c840000 3c050000 8c850000 <.......<.......
0010 3c060000 8c860000 0c000000 00000000 <...............
0020 03e00008 00000000 00000000 00000000 ................
0030 afa40000 afa50004 afa60008 03e00008 ................
0040 24020001 27bdffe8 afbf0014 3c040000 $...'.......<...
0050 3c050000 3c060000 8cc60004 8ca50004 <...<...........
0060 0c00000c 8c840004 8fbf0014 27bd0018 ............'...
0070 03e00008 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 00000001 00000002 00000000 00000000 ................
Contents of section .data:
0000 00000003 00000004 00000000 00000000 ................
Contents of section .options:
0000 01200000 00000000 a0000074 00000000 . .........t....
0010 00000000 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 a0000074 00000000 00000000 00000000 ...t............
0010 00000000 00007ff0 ........
+71
View File
@@ -0,0 +1,71 @@
GLOBAL_ASM(
.rdata
.word 0x1212
)
GLOBAL_ASM(
.late_rodata
.word 0x123123
.text
glabel test
/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24
/* 000094 00400094 18A00009 */ blez $a1, .L004000BC
/* 000098 00400098 AFA00004 */ sw $zero, 4($sp)
.L0040009C:
/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp)
/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6
/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7)
/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp)
/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1
/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1
/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C
/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp)
.L004000BC:
/* 0000BC 004000BC 10000001 */ b .L004000C4
/* 0000C0 004000C0 00000000 */ nop
.L004000C4:
/* 0000C4 004000C4 03E00008 */ jr $ra
/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24
)
char bss1[3];
GLOBAL_ASM(
.bss
bss2:
.space 3
)
char bss3[3];
char bss4[3];
const int rodata1[2] = {1};
extern int some_rodata;
unsigned g(float, int);
unsigned f(void) {
return g(1.1f, some_rodata);
}
GLOBAL_ASM(
.rdata
glabel some_rodata
.word 0x1313
.text
.late_rodata
.word 0x321321
.text
glabel g
/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp)
/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4
/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100)
/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at)
/* 0000D4 004000D4 0C10002C */ jal func_004000B0
/* 0000D8 004000D8 00000000 */ nop
/* 0000DC 004000DC 10000001 */ b .L004000E4
/* 0000E0 004000E0 00000000 */ nop
.L004000E4:
/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp)
/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18
/* 0000EC 004000EC 03E00008 */ jr $ra
/* 0000F0 004000F0 00000000 */ nop
)
+24
View File
@@ -0,0 +1,24 @@
tests/test1.o: file format elf32-tradbigmips
Contents of section .text:
0000 27bdffe8 18a00009 afa00004 8fae0004 '...............
0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'...
0020 0325082a 1420fff9 afb90004 10000001 .%.*. ..........
0030 00000000 03e00008 27bd0018 27bdffe8 ........'...'...
0040 afbf0014 3c010000 3c050000 8ca50000 ....<...<.......
0050 0c000000 c42c0014 10000003 00000000 .....,..........
0060 10000001 00000000 8fbf0014 27bd0018 ............'...
0070 03e00008 00000000 27bdffe8 afbf0014 ........'.......
0080 240e0004 3c010000 ac2e0000 0c000000 $...<...........
0090 00000000 10000001 00000000 8fbf0014 ................
00a0 27bd0018 03e00008 00000000 00000000 '...............
Contents of section .rodata:
0000 00001212 00000001 00000000 00001313 ................
0010 00123123 3f8ccccd 00321321 00000000 ..1#?....2.!....
Contents of section .options:
0000 01200000 00000000 a0000022 00000000 . ........."....
0010 00001010 00000000 00000000 00007ff0 ................
Contents of section .reginfo:
0000 a300c032 00000000 00001010 00000000 ...2............
0010 00000000 00007ff0 ........
+69
View File
@@ -0,0 +1,69 @@
const char buf1[1] = {1};
float func1(void) {
"func1";
return 0.1f;
}
const char buf2[1] = {2};
void func2(void) {
*(volatile float*)0 = -3.5792360305786133f;
*(volatile float*)0 = -3.5792362689971924f;
// "func2";
// return 0.2f;
}
const char buf3[1] = {3};
int func3(int x) {
switch(x) {
case 0:
return 1;
case 1:
return 2;
case 2:
return 3;
case 3:
return 4;
case 4:
return 5;
case 5:
return 4;
case 6:
return 4;
case 7:
return 4;
default:
return 3;
}
}
#if 1
GLOBAL_ASM(
.rdata
.word 0x66756e63 # func
.word 0x34000000 # 4\0\0\0
.word jumptarget
.late_rodata
glabel rv
.word 0x3e4ccccd # 0.2f
.word jumptarget
.text
glabel func4
lui $at, %hi(rv)
jumptarget:
jr $ra
lwc1 $f0, %lo(rv)($at)
jr $ra
nop
jr $ra
nop
jr $ra
nop
jr $ra
nop
)
#else
float func4(void) {
"func4";
return 0.2f;
}
#endif
+32
View File
@@ -0,0 +1,32 @@
tests/test2.o: file format elf32-tradbigmips
Contents of section .text:
0000 3c010000 03e00008 c4200020 03e00008 <........ . ....
0010 00000000 03e00008 00000000 3c010000 ............<...
0020 c4240024 e4040000 3c010000 c4260028 .$.$....<....&.(
0030 e4060000 03e00008 00000000 03e00008 ................
0040 00000000 2c810008 10200017 00000000 ....,.... ......
0050 00047080 3c010000 002e0821 8c2e002c ..p.<......!...,
0060 01c00008 00000000 03e00008 24020001 ............$...
0070 03e00008 24020002 03e00008 24020003 ....$.......$...
0080 03e00008 24020004 03e00008 24020005 ....$.......$...
0090 03e00008 24020004 03e00008 24020004 ....$.......$...
00a0 03e00008 24020004 03e00008 24020003 ....$.......$...
00b0 03e00008 00000000 03e00008 00000000 ................
00c0 3c010000 03e00008 c4200000 03e00008 <........ ......
00d0 00000000 03e00008 00000000 03e00008 ................
00e0 00000000 03e00008 00000000 00000000 ................
Contents of section .rodata:
0000 01000000 66756e63 31000000 02000000 ....func1.......
0010 03000000 66756e63 34000000 000000c4 ....func4.......
0020 3dcccccd c0651234 c0651235 00000068 =....e.4.e.5...h
0030 00000070 00000078 00000080 00000088 ...p...x........
0040 00000090 00000098 000000a0 3e4ccccd ............>L..
0050 000000c4 00000000 00000000 00000000 ................
Contents of section .options:
0000 01200000 00000000 80004016 00000000 . ........@.....
0010 00000051 00000000 00000000 00007ff0 ...Q............
Contents of section .reginfo:
0000 80004016 00000000 00000051 00000000 ..@........Q....
0010 00000000 00007ff0 ........
+70
View File
@@ -0,0 +1,70 @@
GLOBAL_ASM(
.rdata
.word 321321
.text
glabel test
/* 000090 00400090 27BDFFF8 */ addiu $sp, $sp, -24
/* 000094 00400094 18A00009 */ blez $a1, .L004000BC
/* 000098 00400098 AFA00004 */ sw $zero, 4($sp)
.L0040009C:
/* 00009C 0040009C 8FAE0004 */ lw $t6, 4($sp)
/* 0000A0 004000A0 008E7821 */ addu $t7, $a0, $t6
/* 0000A4 004000A4 A1E00000 */ sb $zero, ($t7)
/* 0000A8 004000A8 8FB80004 */ lw $t8, 4($sp)
/* 0000AC 004000AC 27190001 */ addiu $t9, $t8, 1
/* 0000B0 004000B0 0325082A */ slt $at, $t9, $a1
/* 0000B4 004000B4 1420FFF9 */ bnez $at, .L0040009C
/* 0000B8 004000B8 AFB90004 */ sw $t9, 4($sp)
.L004000BC:
/* 0000BC 004000BC 10000001 */ b .L004000C4
/* 0000C0 004000C0 00000000 */ nop
.L004000C4:
/* 0000C4 004000C4 03E00008 */ jr $ra
/* 0000C8 004000C8 27BD0008 */ addiu $sp, $sp, 24
)
// static -> no symbols
// bss
char globalBuf[4];
const char constBuf[4];
// data
char globalBufInit[4] = {1};
// rodata
const char constBufInit[4] = {1};
const char constBufInit2[1] = {2};
const char constBufInit3[1] = {3};
unsigned g(void);
unsigned f(void) {
// aligns to 4 or 8 byte boundary (char -> 4, double -> 8)
double x = 5.1;
float y = 5.2f;
float z = 5.3f;
"Hello ";
"World";
return g();
}
GLOBAL_ASM(
.rdata
.word 123123
.text
glabel g
/* 0000C0 004000C0 27BDFFE8 */ addiu $sp, $sp, -0x18
/* 0000C4 004000C4 AFBF0014 */ sw $ra, 0x14($sp)
/* 0000C8 004000C8 240E0004 */ addiu $t6, $zero, 4
/* 0000CC 004000CC 3C010041 */ lui $at, %hi(D_410100)
/* 0000D0 004000D0 AC2E0100 */ sw $t6, %lo(D_410100)($at)
/* 0000D4 004000D4 0C10002C */ jal func_004000B0
/* 0000D8 004000D8 00000000 */ nop
/* 0000DC 004000DC 10000001 */ b .L004000E4
/* 0000E0 004000E0 00000000 */ nop
.L004000E4:
/* 0000E4 004000E4 8FBF0014 */ lw $ra, 0x14($sp)
/* 0000E8 004000E8 27BD0018 */ addiu $sp, $sp, 0x18
/* 0000EC 004000EC 03E00008 */ jr $ra
/* 0000F0 004000F0 00000000 */ nop
)
+30
View File
@@ -0,0 +1,30 @@
tests/test3.o: file format elf32-tradbigmips
Contents of section .text:
0000 27bdffe8 18a00009 afa00004 8fae0004 '...............
0010 008e7821 a1e00000 8fb80004 27190001 ..x!........'...
0020 0325082a 1420fff9 afb90004 10000001 .%.*. ..........
0030 00000000 03e00008 27bd0018 27bdffd8 ........'...'...
0040 afbf0014 3c010000 d4240028 f7a40020 ....<....$.(...
0050 3c010000 c4260030 e7a6001c 3c010000 <....&.0....<...
0060 c4280034 e7a80018 0c000000 00000000 .(.4............
0070 10000003 00000000 10000001 00000000 ................
0080 8fbf0014 27bd0028 03e00008 00000000 ....'..(........
0090 27bdffe8 afbf0014 240e0004 3c010000 '.......$...<...
00a0 ac2e0000 0c000000 00000000 10000001 ................
00b0 00000000 8fbf0014 27bd0018 03e00008 ........'.......
00c0 00000000 00000000 00000000 00000000 ................
Contents of section .rodata:
0000 0004e729 01000000 02000000 03000000 ...)............
0010 48656c6c 6f202000 576f726c 64000000 Hello .World...
0020 0001e0f3 00000000 40146666 66666666 ........@.ffffff
0030 40a66666 40a9999a 00000000 00000000 @.ff@...........
Contents of section .data:
0000 01000000 00000000 00000000 00000000 ................
Contents of section .options:
0000 01200000 00000000 a0000002 00000000 . ..............
0010 00000170 00000000 00000000 00007ff0 ...p............
Contents of section .reginfo:
0000 a300c032 00000000 00000170 00000000 ...2.......p....
0010 00000000 00007ff0 ........