mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-13 20:39:41 -07:00
69 lines
1.7 KiB
C
69 lines
1.7 KiB
C
// Copyright (c) Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
internal OBJ *
|
|
obj_alloc(U64 time_stamp, Arch arch)
|
|
{
|
|
Arena *arena = arena_alloc();
|
|
OBJ *obj = push_array(arena, OBJ, 1);
|
|
obj->arena = arena;
|
|
obj->time_stamp = time_stamp;
|
|
obj->arch = arch;
|
|
return obj;
|
|
}
|
|
|
|
internal void
|
|
obj_release(OBJ **obj_ptr)
|
|
{
|
|
arena_release((*obj_ptr)->arena);
|
|
*obj_ptr = 0;
|
|
}
|
|
|
|
internal OBJ_Symbol *
|
|
obj_push_symbol(OBJ *obj, String8 name, OBJ_SymbolScope scope, OBJ_RefKind ref_kind, void *ref)
|
|
{
|
|
OBJ_SymbolNode *n = push_array(obj->arena, OBJ_SymbolNode, 1);
|
|
SLLQueuePush(obj->symbols.first, obj->symbols.last, n);
|
|
obj->symbols.count += 1;
|
|
|
|
OBJ_Symbol *v = &n->v;
|
|
v->name = push_str8_copy(obj->arena, name);
|
|
v->scope = scope;
|
|
v->ref_kind = ref_kind;
|
|
v->ref = ref;
|
|
|
|
return v;
|
|
}
|
|
|
|
internal OBJ_Section *
|
|
obj_push_section(OBJ *obj, String8 name, OBJ_SectionFlags flags)
|
|
{
|
|
OBJ_SectionNode *n = push_array(obj->arena, OBJ_SectionNode, 1);
|
|
SLLQueuePush(obj->sections.first, obj->sections.last, n);
|
|
obj->sections.count += 1;
|
|
|
|
OBJ_Section *v = &n->v;
|
|
v->name = push_str8_copy(obj->arena, name);
|
|
v->flags = flags;
|
|
v->symbol = obj_push_symbol(obj, name, OBJ_SymbolScope_Local, OBJ_RefKind_Section, v);
|
|
str8_serial_begin(obj->arena, &v->data);
|
|
|
|
return v;
|
|
}
|
|
|
|
internal OBJ_Reloc *
|
|
obj_push_reloc(OBJ *obj, OBJ_Section *sec, OBJ_RelocKind kind, U64 offset, OBJ_Symbol *symbol)
|
|
{
|
|
OBJ_RelocNode *n = push_array(obj->arena, OBJ_RelocNode, 1);
|
|
SLLQueuePush(sec->relocs.first, sec->relocs.last, n);
|
|
sec->relocs.count += 1;
|
|
|
|
OBJ_Reloc *v = &n->v;
|
|
v->kind = kind;
|
|
v->offset = offset;
|
|
v->symbol = symbol;
|
|
|
|
return v;
|
|
}
|
|
|