mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-06-22 19:54:59 -07:00
2b02f5cec6
- fully serialize the lib because we cannot guarantee that its members will have the same lifetime as the serialized lib - put import stub symbols on the symbol table arena
70 lines
2.5 KiB
C
70 lines
2.5 KiB
C
// Copyright (c) 2025 Epic Games Tools
|
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
|
|
|
#ifndef COFF_LIB_WRITER_H
|
|
#define COFF_LIB_WRITER_H
|
|
|
|
typedef struct COFF_LibWriterMember
|
|
{
|
|
String8 name;
|
|
String8 data;
|
|
} COFF_LibWriterMember;
|
|
|
|
typedef struct COFF_LibWriterMemberNode
|
|
{
|
|
COFF_LibWriterMember data;
|
|
struct COFF_LibWriterMemberNode *next;
|
|
} COFF_LibWriterMemberNode;
|
|
|
|
typedef struct COFF_LibWriterMemberList
|
|
{
|
|
U64 count;
|
|
COFF_LibWriterMemberNode *first;
|
|
COFF_LibWriterMemberNode *last;
|
|
} COFF_LibWriterMemberList;
|
|
|
|
typedef struct COFF_LibWriterSymbol
|
|
{
|
|
String8 name;
|
|
U64 member_idx;
|
|
} COFF_LibWriterSymbol;
|
|
|
|
typedef struct COFF_LibWriterSymbolNode
|
|
{
|
|
COFF_LibWriterSymbol data;
|
|
struct COFF_LibWriterSymbolNode *next;
|
|
} COFF_LibWriterSymbolNode;
|
|
|
|
typedef struct COFF_LibWriterSymbolList
|
|
{
|
|
U64 count;
|
|
COFF_LibWriterSymbolNode *first;
|
|
COFF_LibWriterSymbolNode *last;
|
|
} COFF_LibWriterSymbolList;
|
|
|
|
typedef struct COFF_LibWriter
|
|
{
|
|
Arena *arena;
|
|
COFF_LibWriterMemberList member_list;
|
|
COFF_LibWriterSymbolList symbol_list;
|
|
} COFF_LibWriter;
|
|
|
|
////////////////////////////////
|
|
|
|
internal COFF_LibWriterSymbolNode * coff_lib_writer_symbol_list_push(Arena *arena, COFF_LibWriterSymbolList *list, COFF_LibWriterSymbol symbol);
|
|
internal COFF_LibWriterMemberNode * coff_lib_writer_member_list_push(Arena *arena, COFF_LibWriterMemberList *list, COFF_LibWriterMember member);
|
|
|
|
internal COFF_LibWriterSymbol * coff_lib_writer_symbol_array_from_list(Arena *arena, COFF_LibWriterSymbolList list);
|
|
internal COFF_LibWriterMember * coff_lib_writer_member_array_from_list(Arena *arena, COFF_LibWriterMemberList list);
|
|
|
|
internal void coff_lib_writer_symbol_array_sort(COFF_LibWriterSymbol *arr, U64 count);
|
|
|
|
internal COFF_LibWriter * coff_lib_writer_alloc(void);
|
|
internal void coff_lib_writer_release(COFF_LibWriter **writer_ptr);
|
|
internal U64 coff_lib_writer_push_obj(COFF_LibWriter *writer, String8 obj_path, String8 obj_data);
|
|
internal void coff_lib_writer_push_import(COFF_LibWriter *lib_writer, COFF_MachineType machine, COFF_TimeStamp time_stamp, String8 dll_name, COFF_ImportByType import_by, String8 name, U16 hint_or_ordinal, COFF_ImportType import_type);
|
|
internal String8 coff_lib_writer_serialize(Arena *arena, COFF_LibWriter *lib_writer, COFF_TimeStamp time_stamp, U16 mode, B32 emit_second_member);
|
|
|
|
#endif // COFF_LIB_WRITER_H
|
|
|