MIPSE / Ultra GCC

MIPSE is the name of a series of programs included in the Nintendo 64 SDK to compile and link C files into playable ROMs. This page will serve as a ‘hub’ for this set of programs, but I might add sub-pages as the detail grows.

Note: In the case where there are pairs of parameters, I will list them side by side to show both ways of adding functionality to a program.

The source for all these pages exists under this directory:

C:\ultra\GCC\MIPSE\BIN

Note: It’s a bit of a technicality, but the .exe files in the MIPSE folder just serve the purpose of running their accompanying .out file. That’s the bit that is actually doing all the work in each case.

AR

This is the archiver that combines object files into libraries. I think this can be used to build libraries for reference later on.

AS

Assembles a source file (.s) into machine code. You can get a source file by using CC1 (below).

AS Parameters

[-o] the name of the output file
(more to come later, as needed)

CC1

Creates a .s (source) file based on another file. This file can later be used with the AS program (above).

CELF

Does something with a CELF file. not sure what exactly.

CPP

This is a C++ standard macro preprocessor of C and C++. It resolves all the # directives like #include and #define.

ELFTBL

Creates two files out of __elfcom.o. These are __elfcom.elf and __elfcom.tbl.

EXEW32

ExeW32 doesn’t really do anything other than execute other windows executables, such as the ones on this list.

GCC

This is the GNU C Compiler.

LD

The linker that links all the object files together to create the final ROM.

Might warrant a full page later.

MAKE

Executes the makefile located in the current directory. Mimics the command used in Unix.

MAKEMASK

This puts a mass-production finish on a ROM.

A full page on this will come in the future.

MILD

This is the compiler that is built-in for the N64 SDK.

A full page on this will come in the future.

NM

I’m not too sure about this one, but I think it just lists symbols and interfaces in object files.

OBJDUMP

This program dumps the information about an object file. It all depends on the parameters used, so I will list them all here. The main way of summoning it is like so: objdump [file] [-args]

ObjDump Parameters

[-a][--archive-headers] Returns the file headers, namely the file format. In my usage, it usually returns elf32-bigmips.
[-h][--headers] Returns the archive headers like in [-a], but also all the headers of the file’s subsections.
[-d][--disassemble] Takes the compiled machine code, and shows the related assembly commands.
[-D][--disassemble-all] Same as the previous, but that one is limited to the ‘text’ section of the code. This does all sections.
[-f][--file-headers] Returns file format, CPU architecture, flags and starting address.
[-S][--source] Shows a long list of the memory location along with the function name and code equivalent in assembly. Appears to be the same as [-d]
[-p][--wide] Seems to be the same thing as the [-a] parameter.
[-w][--wide] Seems to be the same thing as the [-a] parameter.
[-r][--reloc] Displays the relocation records of each section of code.
[-s][--syms] Displays a list of symbols related to the file.

There are some others in the list, but it would be a bit tedious to go through all of them. Let me know if you need information on any other. There were several which just display the header, but I think it’s because that’s the default 1st line, and then the parameter itself doesn’t display anything else afterwards. There’s a bit too many variations of the output to show in a single screenshot, so there won’t be one for this program

RANLIB

Creates a symbol index in a library.

Not sure how this works, exactly. First I need to know what kind of file it accepts.

SGI2GAS

This seems to be a program that converts a file from SGI format to a GNU Assembler format.

It takes in two parameters: a source file and a destination file. In the output file, it leave an ominous bit of text which includes some strange ASCII values (in square brackets):

[x7F]ELF[x01][x02][x01]

Not really sure what to make of it.

SIZE

As the name indicates, this is a program used to show the size of the different sections of code within a file. It takes only one parameter, which is the name of the filename of what is being examined. Note that it only accepts O files (compiled C files).

MIPSE size output sample

As you can see, it outputs a short table that looks something like this:

text	data	bss	dec	hex	filename
160	20	0	184	b8	main.o

What this comes to show are the various different kinds of data that the file contains.

Text is the code and constant data, ie data in the object that doesn’t use RAM and is fixed and cannot be changed.
Data is the initialised data. These are variables that are initialised with a particular value.
BSS stands for Block Started by Symbol, which refers to uninitialised variables
Dec is the sum of the three previous numbers, which gives the total size in decimal format.
Hex is the same as Dec, but in hexadecimal format.
Filename is the file that is being checked.

STRIP

This is a program that removes profiling information, debugging information, and symbols from an object. Note that removing this information can cause the object files to be rendered unusable. This can be solved by deleting and recompiling them back.

It has a bunch of parameters, but none of them are very useful. The output is even less useful since it just returns an empty line upon success.

Search

Subscribe to the mailing list

Follow N64 Squid

  • RSS Feed
  • YouTube

Random featured posts