Overhaul the build system (#234)

* wip

* fix

* add disassembler

* Disasm builds OK

* Variable addends

* More wip

* Rodata migration implemented

* Cleanup old tools

* Try fix submodule -> subrepo merge

* git subrepo pull --force --remote=https://github.com/zeldaret/ZAPD.git tools/ZAPD

subrepo:
  subdir:   "tools/ZAPD"
  merged:   "602e609"
upstream:
  origin:   "https://github.com/zeldaret/ZAPD.git"
  branch:   "master"
  commit:   "602e609"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Builds again but assets are totally broken

* git subrepo pull --force tools/asm-processor

subrepo:
  subdir:   "tools/asm-processor"
  merged:   "1ffdb08a"
upstream:
  origin:   "https://github.com/simonlindholm/asm-processor.git"
  branch:   "master"
  commit:   "1ffdb08a"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* More cleanup, move functions.txt and variables.txt to tools/disasm and rm tables

* rm z64compress in preparation for subrepo

* git subrepo clone (merge) https://github.com/z64me/z64compress.git tools/z64compress

subrepo:
  subdir:   "tools/z64compress"
  merged:   "eb11085c"
upstream:
  origin:   "https://github.com/z64me/z64compress.git"
  branch:   "main"
  commit:   "eb11085c"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Fix asset extraction

* Fix diff-init make rule

* Split code bss

* Split assumed linker bug padding from assembly files

* add filelists for mm.us.rev1

* Maybe working, but I'm not sure

* add overlays to spec

* Add rodata to actos

* Everything compiles

* Make a lot of C files for code

* Add almost every file in code to spec

* whoops

* 3 code files left

* add scenes to spec

* More progress on progress.py

* Fix skelanime in spec

* audio files!

* Fix merge issues

* Fix some C files in code

* Fix remaining code files

* Use existing O1 C files in spec

* reorder boot order in spec

* update spec

* fault.c

* Convert relocs on completed actors, fixbaserom uses current rom name

* more boot files

* Add VT macros and script

* finish already existing boot files

* most of  libultra

* fix 64bits libultra files

* Use C files for libultra, wrap some functions in NON_MATCHING

* Remove duplicate of OS_CLOCK_RATE from fault.c

* C files for fbdemos

* delete dumb files

* bootstrap C files, still need to add them to the spec

* update fixbaserom

* boot OK?

* I forgot to commit the spec

* C for gamestates

* C for kaleido

* Change all includes to ""

* copy actor sizes script from oot

* I forgot to delete those files

* Basic C files for effects

* Add effects initvars names

* Remove mislabelled boot functions from header/txt

* Begin porting bootstrap_fx, some sizes

* Fix <>

* Fix enum

* Fix diff.py

* fix libultra stuff

* update regconvert

* update setup warnings

* add some missing ;

* Fix some makefile stuff and other fixes on some non_matching functions

* add executable flag in extract_baserom and fixbaserom

* fix relative path

* copy assist from oot

* fix map path

* another assist path fix

* Delete C files for handwritten files

* add code_801A51F0 to spec

* add gfxbuffers to spec

* Move rodata to top of each file when possible

* UNK_TYPEs for func_801A51F0

* Remove kaleido rodata from spec

* Update spec and undefined_syms for recent merge

* GCC warnings and fix errors in nonmatchings,

* round percentage numbers

* progress script: format changes

* progress: error on non-existing files

* fix warning in z_scene_table

* Match 2 nonmatchings in z_actor

* Warnings in lightswitch and invadepoh

* Fix warning in z_actor_dlftbls

* I though I fixed this one

* whoops

* Comment out CC_CHECK

* Removed redundant ultra64.h includes

* Update asm_processor, sorted boot_O1 into other folders, completed the fbdemo bootstrap, cleaned up undefined_syms

* Completed gamestates bootstrap

* Split kaleido_scope

* Remove section.h and segment.h, move keep object externs to a common location in variables.h

* Completed effects bootstrap

* Segmented address externs for effects, fbdemos, gamestates and kaleido

* Move actor data externs out of the if 0

* Segmented address externs for actors

* Prepare actionfunc detection

* fix script, how did it even work before

* Fix actionfunc script again, re-introduce some more intermediate prints to the disassembler

* Automated actionFunc detection in actors

* Segmented addresses from player .text

* rm old segment addrs script and fix build

* Move sizes folder to tools

* Make build.py executable

* New Jenkinsfile Prayge

* Remove numpy dependencies

* Add warnings_disasm_current.txt

* my bad

* Update spec and undefined_syms

* Add z_eff_ss_hahen to pametfrog

* git subrepo pull (merge) --force tools/z64compress

subrepo:
  subdir:   "tools/z64compress"
  merged:   "163ca2af"
upstream:
  origin:   "https://github.com/z64me/z64compress.git"
  branch:   "main"
  commit:   "163ca2af"
git-subrepo:
  version:  "0.4.3"
  origin:   "https://github.com/ingydotnet/git-subrepo"
  commit:   "2f68596"

* Make z64compress print to stdout

* sneeky commit to update warnings tooling

* test

* Another test

* Mark fixing overlay reloc generating as a TODO

* Update warnings stuff

* Communicate the return code from running z64compress back to the Makefile through the wrapper

* Run formatter, remove extra commented copy of function

* Re-fix some includes

* Convert atan to hex to conform to decided style

* Some tidying up, remove c for fp and the other two handwritten code files

* BSS in z_collision_check & z_scene_proc

* add static back in

* Fix timerintr bss, add file to spec, some cleanup

* Remove externs

* Newline

* Readd enums

* Typo

* Colours

* Comments for hitmark enum values

Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>

* Improvements and suggestions

* Organize and remove unused imports and use env for python3 scripts, delete unused overlay.py

Co-authored-by: angie <angheloalf95@gmail.com>
Co-authored-by: Elliptic Ellipsis <elliptic.ellipsis@gmail.com>
Co-authored-by: engineer124 <engineer124engineer124@gmail.com>
Co-authored-by: EllipticEllipsis <73679967+EllipticEllipsis@users.noreply.github.com>
This commit is contained in:
Tharo
2021-08-03 23:21:31 -04:00
committed by GitHub
co-authored by angie Elliptic Ellipsis engineer124 EllipticEllipsis
parent 60ff207982
commit 7743e5a2c4
1788 changed files with 88892 additions and 47119 deletions
-1
View File
@@ -1 +0,0 @@
*.o
-12
View File
@@ -1,12 +0,0 @@
; 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
@@ -1,24 +0,0 @@
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
@@ -1,93 +0,0 @@
# 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
@@ -1,4 +0,0 @@
#!/usr/bin/env bash
for A in "$@"; do
./compile.sh "$A" && mips-linux-gnu-objdump -s "${A%.c}.o" > "${A%.c}.objdump"
done
+11 -26
View File
@@ -380,7 +380,7 @@ class Failure(Exception):
class GlobalState:
def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata, mips1):
def __init__(self, min_instr_count, skip_instr_count, use_jtbl_for_rodata):
# A value that hopefully never appears as a 32-bit rodata constant (or we
# miscompile late rodata). Increases by 1 in each step.
self.late_rodata_hex = 0xE0123456
@@ -388,7 +388,6 @@ class GlobalState:
self.min_instr_count = min_instr_count
self.skip_instr_count = skip_instr_count
self.use_jtbl_for_rodata = use_jtbl_for_rodata
self.mips1 = mips1
def next_late_rodata_hex(self):
dummy_bytes = struct.pack('>I', self.late_rodata_hex)
@@ -609,13 +608,12 @@ class GlobalAsmBlock:
size = self.fn_section_sizes['.late_rodata'] // 4
skip_next = False
needs_double = (self.late_rodata_alignment != 0)
extra_mips1_nop = False
for i in range(size):
if skip_next:
skip_next = False
continue
# Jump tables give 9 instructions (11 with -mips1) for >= 5 words of rodata,
# and should be emitted when:
# Jump tables give 9 instructions for >= 5 words of rodata, and should be
# emitted when:
# - -O2 or -O2 -g3 are used, which give the right codegen
# - we have emitted our first .float/.double (to ensure that we find the
# created rodata in the binary)
@@ -625,14 +623,12 @@ class GlobalAsmBlock:
# generate a jump table)
# - we have at least 10 more instructions to go in this function (otherwise our
# function size computation will be wrong since the delay slot goes unused)
jtbl_size = 11 if state.mips1 else 9
if (not needs_double and state.use_jtbl_for_rodata and i >= 1 and
size - i >= 5 and num_instr - len(late_rodata_fn_output) >= jtbl_size + 1):
size - i >= 5 and num_instr - len(late_rodata_fn_output) >= 10):
cases = " ".join("case {}:".format(case) for case in range(size - i))
late_rodata_fn_output.append("switch (*(volatile int*)0) { " + cases + " ; }")
late_rodata_fn_output.extend([""] * (jtbl_size - 1))
late_rodata_fn_output.extend([""] * 8)
jtbl_rodata_size = (size - i) * 4
extra_mips1_nop = True
break
dummy_bytes = state.next_late_rodata_hex()
late_rodata_dummy_bytes.append(dummy_bytes)
@@ -642,20 +638,12 @@ class GlobalAsmBlock:
fval, = struct.unpack('>d', dummy_bytes + dummy_bytes2)
late_rodata_fn_output.append('*(volatile double*)0 = {};'.format(fval))
skip_next = True
needs_double = False
if state.mips1:
# mips1 does not have ldc1/sdc1
late_rodata_fn_output.append('')
late_rodata_fn_output.append('')
extra_mips1_nop = False
needs_double = True
else:
fval, = struct.unpack('>f', dummy_bytes)
late_rodata_fn_output.append('*(volatile float*)0 = {}f;'.format(fval))
extra_mips1_nop = True
late_rodata_fn_output.append('')
late_rodata_fn_output.append('')
if state.mips1 and extra_mips1_nop:
late_rodata_fn_output.append('')
text_name = None
if self.fn_section_sizes['.text'] > 0 or late_rodata_fn_output:
@@ -734,7 +722,7 @@ float_regexpr = re.compile(r"[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?f")
def repl_float_hex(m):
return str(struct.unpack(">I", struct.pack(">f", float(m.group(0).strip().rstrip("f"))))[0])
def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_dependencies, print_source=None):
def parse_source(f, opt, framepointer, input_enc, output_enc, out_dependencies, print_source=None):
if opt in ['O2', 'O1']:
if framepointer:
min_instr_count = 6
@@ -763,7 +751,7 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
if opt in ['O2', 'g3'] and not framepointer:
use_jtbl_for_rodata = True
state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata, mips1)
state = GlobalState(min_instr_count, skip_instr_count, use_jtbl_for_rodata)
global_asm = None
asm_functions = []
@@ -815,7 +803,7 @@ def parse_source(f, opt, framepointer, mips1, input_enc, output_enc, out_depende
out_dependencies.append(fname)
include_src = StringIO()
with open(fname, encoding=input_enc) as include_file:
parse_source(include_file, opt, framepointer, mips1, input_enc, output_enc, out_dependencies, include_src)
parse_source(include_file, opt, framepointer, input_enc, output_enc, out_dependencies, include_src)
include_src.write('#line ' + str(line_no + 1) + ' "' + f.name + '"')
output_lines[-1] = include_src.getvalue()
include_src.close()
@@ -1191,7 +1179,6 @@ def run_wrapped(argv, outfile, functions):
parser.add_argument('--input-enc', default='latin1', help="Input encoding (default: latin1)")
parser.add_argument('--output-enc', default='latin1', help="Output encoding (default: latin1)")
parser.add_argument('-framepointer', dest='framepointer', action='store_true')
parser.add_argument('-mips1', dest='mips1', action='store_true')
parser.add_argument('-g3', dest='g3', action='store_true')
group = parser.add_mutually_exclusive_group(required=True)
group.add_argument('-O1', dest='opt', action='store_const', const='O1')
@@ -1203,20 +1190,18 @@ def run_wrapped(argv, outfile, functions):
if opt != 'O2':
raise Failure("-g3 is only supported together with -O2")
opt = 'g3'
if args.mips1 and (opt != 'O2' or args.framepointer):
raise Failure("-mips1 is only supported together with -O2")
if args.objfile is None:
with open(args.filename, encoding=args.input_enc) as f:
deps = []
functions = parse_source(f, opt=opt, framepointer=args.framepointer, mips1=args.mips1, input_enc=args.input_enc, output_enc=args.output_enc, out_dependencies=deps, print_source=outfile)
functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, output_enc=args.output_enc, out_dependencies=deps, print_source=outfile)
return functions, deps
else:
if args.assembler is None:
raise Failure("must pass assembler command")
if functions is None:
with open(args.filename, encoding=args.input_enc) as f:
functions = parse_source(f, opt=opt, framepointer=args.framepointer, mips1=args.mips1, input_enc=args.input_enc, out_dependencies=[], output_enc=args.output_enc)
functions = parse_source(f, opt=opt, framepointer=args.framepointer, input_enc=args.input_enc, out_dependencies=[], output_enc=args.output_enc)
if not functions:
return
asm_prelude = b''
+64
View File
@@ -0,0 +1,64 @@
#!/usr/bin/env python3
import sys
import os
import shlex
import subprocess
import tempfile
import asm_processor
dir_path = os.path.dirname(os.path.realpath(__file__))
prelude = os.path.join(dir_path, "prelude.inc")
all_args = sys.argv[1:]
sep1 = all_args.index('--')
sep2 = all_args.index('--', sep1+1)
compiler = all_args[:sep1]
assembler = all_args[sep1+1:sep2]
assembler_sh = ' '.join(shlex.quote(x) for x in assembler)
compile_args = all_args[sep2+1:]
in_file = compile_args[-1]
out_ind = compile_args.index('-o')
out_file = compile_args[out_ind + 1]
del compile_args[-1]
del compile_args[out_ind + 1]
del compile_args[out_ind]
in_dir = os.path.split(os.path.realpath(in_file))[0]
opt_flags = [x for x in compile_args if x in ['-g3', '-g', '-O1', '-O2', '-framepointer']]
preprocessed_file = tempfile.NamedTemporaryFile(prefix='preprocessed', suffix='.c', delete=False)
try:
asmproc_flags = opt_flags + [in_file, '--input-enc', 'utf-8', '--output-enc', 'euc-jp']
compile_cmdline = compiler + compile_args + ['-I', in_dir, '-o', out_file, preprocessed_file.name]
functions, deps = asm_processor.run(asmproc_flags, outfile=preprocessed_file)
try:
subprocess.check_call(compile_cmdline)
except subprocess.CalledProcessError as e:
print("Failed to compile file " + in_file + ". Command line:")
print()
print(' '.join(shlex.quote(x) for x in compile_cmdline))
print()
sys.exit(55)
# To keep the preprocessed file:
# os._exit(1)
asm_processor.run(asmproc_flags + ['--post-process', out_file, '--assembler', assembler_sh, '--asm-prelude', prelude], functions=functions)
deps_file = out_file[:-2] + ".asmproc.d"
if deps:
with open(deps_file, "w") as f:
f.write(out_file + ": " + " \\\n ".join(deps) + "\n")
for dep in deps:
f.write("\n" + dep + ":\n")
else:
try:
os.remove(deps_file)
except OSError:
pass
finally:
os.remove(preprocessed_file.name)
-23
View File
@@ -1,23 +0,0 @@
#!/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
@@ -1,2 +0,0 @@
// (this is used for piping input to the IRIX compiler without needing to make a temporary .c file)
#include "/dev/stdin"
+5
View File
@@ -0,0 +1,5 @@
.set noat
.set noreorder
.set gp=64
.include "macro.inc"
-8
View File
@@ -1,8 +0,0 @@
.set noat
.set noreorder
.set gp=64
.macro glabel label
.global \label
\label:
.endm
-8
View File
@@ -1,8 +0,0 @@
#!/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
@@ -1,19 +0,0 @@
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
@@ -1,19 +0,0 @@
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
@@ -1,6 +0,0 @@
const char before[] = "^";
GLOBAL_ASM(
.rdata
.asciz "aaaa /* bbbb */ # cccc" /**//**//**//**/ /*/ "xxxx" /*/ /* dddd " eeee */ "# ffff" # gggg "hhhh" /* iiii */
)
const char after[] = "$";
@@ -1,13 +0,0 @@
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 ........
@@ -1,7 +0,0 @@
GLOBAL_ASM(
.rdata
.word 0x12345678
glabel blah
.word blah2
/*a*/ blah2: /*b*/ .word blah /*c*/
)
@@ -1,11 +0,0 @@
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
@@ -1,164 +0,0 @@
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
@@ -1,50 +0,0 @@
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 ........

Some files were not shown because too many files have changed in this diff Show More