mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-10-14 12:59:41 -07:00
move lib member queue state to the link step and release it after link step is done
This commit is contained in:
1 parent
d1b055c62f
commit
1c0e9030fa
5 files changed
+107
-77
No files matched your search
+27
-4
@@ -77,8 +77,23 @@ typedef struct LNK_Inputer
|
||||
#define LNK_SECTION_FLAG_LIVE (1 << 0)
|
||||
#define LNK_SECTION_FLAG_DEBUG (1 << 1)
|
||||
|
||||
typedef U8 LNK_LibMemberFlags;
|
||||
enum
|
||||
{
|
||||
LNK_LibMemberFlag_LinkedRegular = (1 << 0),
|
||||
LNK_LibMemberFlag_LinkedImp = (1 << 1),
|
||||
LNK_LibMemberFlag_WasGenQueued = (1 << 2),
|
||||
};
|
||||
|
||||
typedef struct LNK_LibMemberInfo
|
||||
{
|
||||
LNK_Symbol *link;
|
||||
LNK_LibMemberFlags flags;
|
||||
} LNK_LibMemberInfo;
|
||||
|
||||
typedef struct LNK_Link
|
||||
{
|
||||
Arena *arena;
|
||||
LNK_ObjList objs;
|
||||
LNK_LibList libs;
|
||||
LNK_ObjNode **last_symbol_input;
|
||||
@@ -86,10 +101,17 @@ typedef struct LNK_Link
|
||||
String8Node **last_cmd_lib;
|
||||
String8Node **last_default_lib;
|
||||
String8Node **last_obj_lib;
|
||||
HashTable *lib_member_infos_ht;
|
||||
LNK_LibMemberRefList imports;
|
||||
B32 try_to_resolve_entry_point;
|
||||
} LNK_Link;
|
||||
|
||||
typedef struct LNK_LinkResult
|
||||
{
|
||||
LNK_ObjList objs;
|
||||
LNK_LibList libs;
|
||||
} LNK_LinkResult;
|
||||
|
||||
// -- Image Layout ------------------------------------------------------------
|
||||
|
||||
#define LNK_REMOVED_SECTION_NUMBER_32 (U32)-3
|
||||
@@ -186,6 +208,7 @@ typedef struct
|
||||
LNK_SymbolTable *symtab;
|
||||
LNK_Symbol *import_stub;
|
||||
LNK_Lib *lib;
|
||||
LNK_LibMemberInfo *lib_member_infos;
|
||||
LNK_LibMemberRefList *member_ref_lists;
|
||||
} LNK_SearchLibTask;
|
||||
|
||||
@@ -342,10 +365,10 @@ internal void lnk_lib_member_ref_list_concat_in_place_array(LNK_L
|
||||
internal int lnk_lib_member_ref_is_before(void *raw_a, void *raw_b);
|
||||
internal LNK_LibMemberRef ** lnk_array_from_lib_member_list(Arena *arena, LNK_LibMemberRefList list);
|
||||
|
||||
internal LNK_ObjNode * lnk_load_objs (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab, LNK_Link *link, U64 *objs_count_out);
|
||||
internal void lnk_load_libs (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_Link *link);
|
||||
internal void lnk_link_inputs(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab, LNK_Link *link);
|
||||
internal LNK_Link * lnk_link_image (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab);
|
||||
internal LNK_ObjNode * lnk_load_objs (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab, LNK_Link *link, U64 *objs_count_out);
|
||||
internal void lnk_load_libs (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_Link *link);
|
||||
internal void lnk_link_inputs(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab, LNK_Link *link);
|
||||
internal LNK_LinkResult lnk_link_image (TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer *inputer, LNK_SymbolTable *symtab);
|
||||
|
||||
// --- Optimizations -----------------------------------------------------------
|
||||
|
||||
|
||||
Reference in new issue
Block a user