Skip to content

Latest commit

 

History

History
62 lines (33 loc) · 3 KB

README.md

File metadata and controls

62 lines (33 loc) · 3 KB

OpenOrbis PS4 Toolchain - Source Files

This directory contains source files for all the tools included in the OpenOrbis PS4 toolchain. As a quick index, below is a table of the current projects that can be found here.

Directory Project Lead Author/Maintainer
./crt C-Runtime Library Specter
./templates Visual Studio Templates Specter
./tools/create-eboot create-eboot / create-lib Specter
./tools/miralib MiraLib library Specter
./tools/orbisLibGen Library stub generator CrazyVoid
./tools/readelf Readelf replacement Specter

C-Runtime Library

./crt

The C-Runtime (CRT) stubs are linked with ELFs, and include starter code and data that every application or library should have. Games/applications should be linked with crt1.o, and libraries with crtlib.o.

The source files are all .S x64 assembly files (intel syntax).

The crt1 stub is responsible for ensuring final ELFs for applications have a proper entrypoint defined as _start. It is also responsible for including important data structures, namely sceLibcParam, sceKernelMemParam, sceKernelFsParam, sceLibcMallocReplace, sceLibcNewReplace, sceLibcMallocReplaceForTLS, and .sce_process_param structures. It is also responsible for the sceLibcHeapSize, sce_libc_heap_delayed_alloc, sce_libc_heap_extended_alloc, __dso_handle, and sceLibc global variables. For more information on these structures, consult the wiki or documentation.

The crtlib stub is responsible for ensuring final ELFs for libraries have the .sce_module_param structure, as well as the __dso_handle and sceLibc global variables. The crtlib stub is responsible for a lot less than crt1, and as such is far smaller.

Games/apps should always link against the crt1 stub, and libraries should always link against the crtlib stub.

Templates

./templates

This directory contains two Visual Studio projects, one for OpenOrbis SELF Project, and the other for OpenOrbis SPRX Project. These projects are exported to templates, and is the source code for the project templates found in /extra.

Create-eboot/create-lib

./tools/create-eboot

The create-eboot project contains the source for both create-eboot and create-lib. The project was written in Golang.

Since much of the process of creating applications and libraries is the same, we thought it best to not unnecessarily duplicate code and keep it all in one code-base. Which tool is compiled is determined by a linker flag. More information on this can be found on the tool's own README.md.

Library stub generator (orbisLibGen)

./tools/orbisLibGen

This project contains a python script for generating the library source files found in ./lib.

MiraLib Library

./tools/miralib

This project contains all the language bindings and libraries for interacting with Mira from the PC side.

Readelf replacement

./tools/readelf

This project contains a replacement for readelf for PS4 / Orbis ELFs (OELFs).