mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-11-14 10:10:11 -08:00
116 lines
2.3 KiB
C
116 lines
2.3 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#ifndef OBJ_H
|
|
#define OBJ_H
|
|
|
|
typedef enum
|
|
{
|
|
OBJ_RefKind_Null,
|
|
OBJ_RefKind_Section,
|
|
} OBJ_RefKind;
|
|
|
|
typedef enum
|
|
{
|
|
OBJ_SymbolScope_Null,
|
|
OBJ_SymbolScope_Local,
|
|
OBJ_SymbolScope_Global,
|
|
} OBJ_SymbolScope;
|
|
|
|
typedef struct OBJ_Symbol
|
|
{
|
|
String8 name;
|
|
OBJ_SymbolScope scope;
|
|
OBJ_RefKind ref_kind;
|
|
void *ref;
|
|
} OBJ_Symbol;
|
|
|
|
typedef struct OBJ_SymbolNode
|
|
{
|
|
OBJ_Symbol v;
|
|
struct OBJ_SymbolNode *next;
|
|
} OBJ_SymbolNode;
|
|
|
|
typedef struct OBJ_SymbolList
|
|
{
|
|
U64 count;
|
|
OBJ_SymbolNode *first;
|
|
OBJ_SymbolNode *last;
|
|
} OBJ_SymbolList;
|
|
|
|
typedef enum
|
|
{
|
|
OBJ_RelocKind_Null,
|
|
OBJ_RelocKind_SecRel,
|
|
} OBJ_RelocKind;
|
|
|
|
typedef struct OBJ_Reloc
|
|
{
|
|
OBJ_RelocKind kind;
|
|
U64 offset;
|
|
OBJ_Symbol *symbol;
|
|
} OBJ_Reloc;
|
|
|
|
typedef struct OBJ_RelocNode
|
|
{
|
|
OBJ_Reloc v;
|
|
struct OBJ_RelocNode *next;
|
|
} OBJ_RelocNode;
|
|
|
|
typedef struct OBJ_RelocList
|
|
{
|
|
U64 count;
|
|
OBJ_RelocNode *first;
|
|
OBJ_RelocNode *last;
|
|
} OBJ_RelocList;
|
|
|
|
typedef enum OBJ_SectionFlags
|
|
{
|
|
OBJ_SectionFlag_Read = (1 << 0),
|
|
OBJ_SectionFlag_Write = (1 << 1),
|
|
OBJ_SectionFlag_Exec = (1 << 2),
|
|
OBJ_SectionFlag_Load = (1 << 3),
|
|
} OBJ_SectionFlags;
|
|
|
|
typedef struct OBJ_Section
|
|
{
|
|
String8 name;
|
|
String8List data;
|
|
OBJ_SectionFlags flags;
|
|
OBJ_RelocList relocs;
|
|
OBJ_Symbol *symbol;
|
|
} OBJ_Section;
|
|
|
|
typedef struct OBJ_SectionNode
|
|
{
|
|
OBJ_Section v;
|
|
struct OBJ_SectionNode *next;
|
|
} OBJ_SectionNode;
|
|
|
|
typedef struct OBJ_SectionList
|
|
{
|
|
U64 count;
|
|
OBJ_SectionNode *first;
|
|
OBJ_SectionNode *last;
|
|
} OBJ_SectionList;
|
|
|
|
typedef struct OBJ
|
|
{
|
|
Arena *arena;
|
|
U64 time_stamp;
|
|
Arch arch;
|
|
OBJ_SectionList sections;
|
|
OBJ_SymbolList symbols;
|
|
} OBJ;
|
|
|
|
////////////////////////////////
|
|
|
|
internal OBJ * obj_alloc(U64 time_stamp, Arch arch);
|
|
internal void obj_release(OBJ **obj_ptr);
|
|
internal OBJ_Symbol * obj_push_symbol(OBJ *obj, String8 name, OBJ_SymbolScope scope, OBJ_RefKind ref_kind, void *ref);
|
|
internal OBJ_Section * obj_push_section(OBJ *obj, String8 name, OBJ_SectionFlags flags);
|
|
internal OBJ_Reloc * obj_push_reloc(OBJ *obj, OBJ_Section *sec, OBJ_RelocKind kind, U64 offset, OBJ_Symbol *symbol);
|
|
|
|
#endif // OBJ_H
|
|
|