jak-project/common/link_types.h
water111 f9d8fcd6e4
[decomp] add mips2c converter (#842)
* mips 2 c basic version, not yet tested

* calling works without crashing, but the function doesn't

* it works

* add test

* cleanup and actually add the test

* dont use mips2c by default for font

* clean up formatting
2021-09-11 20:52:35 -04:00

56 lines
1.5 KiB
C++

#pragma once
/*!
* @file link_types.h
* Types used in the linking data, shared between the object file generator and the kernel's linker.
*/
#include "common_types.h"
enum LinkKind {
LINK_TABLE_END = 0, //! no more linking data
LINK_SYMBOL_OFFSET = 1, //! link a symbol (pointer to symbol table entry)
LINK_TYPE_PTR = 2, //! link a pointer to a type.
LINK_DISTANCE_TO_OTHER_SEG_64 = 3, //! link to another segment
LINK_DISTANCE_TO_OTHER_SEG_32 = 4, //! link to another segment
LINK_PTR = 5, //! link a pointer within this segment
};
enum SegmentTypes { MAIN_SEGMENT = 0, DEBUG_SEGMENT = 1, TOP_LEVEL_SEGMENT = 2 };
constexpr const char* SEGMENT_NAMES[3] = {"main", "debug", "top-level"};
constexpr int N_SEG = 3;
/*!
* Data at the front of the DGO.
*/
struct DgoHeader {
u32 object_count;
char name[60];
};
/*!
* Data at the front of each OBJ.
*/
struct ObjectHeader {
u32 size;
char name[60];
};
// Header for link data used for V2 linking data
// used in GOAL and OpenGOAL
struct LinkHeaderV2 {
uint32_t type_tag; // always -1
uint32_t length; // length of link data
uint32_t version; // always 2
};
// Header for link data used for V4
struct LinkHeaderV4 {
uint32_t type_tag; // always -1
uint32_t length; // length of V2 link data found after object.
uint32_t version; // always 4
uint32_t code_size; // length of object data before link data starts
};