mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-05 13:28:40 +00:00
update code block dividers
This commit is contained in:
committed by
Ryan Fleury
parent
46663688e2
commit
0aadf60359
+8
-19
@@ -1,18 +1,16 @@
|
|||||||
// Copyright (c) 2025 Epic Games Tools
|
// Copyright (c) 2025 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Build Options -----------------------------------------------------------
|
||||||
// Build Options
|
|
||||||
|
|
||||||
#define BUILD_CONSOLE_INTERFACE 1
|
#define BUILD_CONSOLE_INTERFACE 1
|
||||||
#define BUILD_TITLE "Epic Games Tools (R) RAD PE/COFF Linker"
|
#define BUILD_TITLE "Epic Games Tools (R) RAD PE/COFF Linker"
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Arena -------------------------------------------------------------------
|
||||||
|
|
||||||
#define ARENA_FREE_LIST 1
|
#define ARENA_FREE_LIST 1
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Third Party -------------------------------------------------------------
|
||||||
// Third Party
|
|
||||||
|
|
||||||
#include "base_ext/base_blake3.h"
|
#include "base_ext/base_blake3.h"
|
||||||
#include "base_ext/base_blake3.c"
|
#include "base_ext/base_blake3.c"
|
||||||
@@ -22,8 +20,7 @@
|
|||||||
#include "third_party/xxHash/xxhash.h"
|
#include "third_party/xxHash/xxhash.h"
|
||||||
#include "third_party/radsort/radsort.h"
|
#include "third_party/radsort/radsort.h"
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Code Base ---------------------------------------------------------------
|
||||||
// Code Base
|
|
||||||
|
|
||||||
#if defined(__clang__)
|
#if defined(__clang__)
|
||||||
# pragma clang diagnostic push
|
# pragma clang diagnostic push
|
||||||
@@ -78,8 +75,7 @@
|
|||||||
# pragma clang diagnostic pop
|
# pragma clang diagnostic pop
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RDI ---------------------------------------------------------------------
|
||||||
// RDI
|
|
||||||
|
|
||||||
#include "rdi/rdi_overrides.h"
|
#include "rdi/rdi_overrides.h"
|
||||||
#include "lib_rdi_format/rdi_format.h"
|
#include "lib_rdi_format/rdi_format.h"
|
||||||
@@ -87,8 +83,7 @@
|
|||||||
#include "lib_rdi_format/rdi_format.c"
|
#include "lib_rdi_format/rdi_format.c"
|
||||||
#include "rdi/rdi.c"
|
#include "rdi/rdi.c"
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Code Base Extensions ----------------------------------------------------
|
||||||
// Code Base Extensions
|
|
||||||
|
|
||||||
#include "base_ext/base_inc.h"
|
#include "base_ext/base_inc.h"
|
||||||
#include "thread_pool/thread_pool.h"
|
#include "thread_pool/thread_pool.h"
|
||||||
@@ -106,8 +101,7 @@
|
|||||||
#include "pdb_ext/pdb_helpers.c"
|
#include "pdb_ext/pdb_helpers.c"
|
||||||
#include "pdb_ext/pdb_builder.c"
|
#include "pdb_ext/pdb_builder.c"
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RDI Builder -------------------------------------------------------------
|
||||||
// RDI Builder
|
|
||||||
|
|
||||||
#include "rdi/rdi_builder.h"
|
#include "rdi/rdi_builder.h"
|
||||||
#include "rdi/rdi_coff.h"
|
#include "rdi/rdi_coff.h"
|
||||||
@@ -117,8 +111,7 @@
|
|||||||
#include "rdi/rdi_coff.c"
|
#include "rdi/rdi_coff.c"
|
||||||
#include "rdi/rdi_cv.c"
|
#include "rdi/rdi_cv.c"
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Linker ------------------------------------------------------------------
|
||||||
// Linker
|
|
||||||
|
|
||||||
#include "lnk_error.h"
|
#include "lnk_error.h"
|
||||||
#include "lnk_log.h"
|
#include "lnk_log.h"
|
||||||
@@ -149,12 +142,8 @@
|
|||||||
#include "lnk_lib.c"
|
#include "lnk_lib.c"
|
||||||
#include "lnk_debug_info.c"
|
#include "lnk_debug_info.c"
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
global read_only LNK_SectionContrib g_null_sc;
|
global read_only LNK_SectionContrib g_null_sc;
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal LNK_Config *
|
internal LNK_Config *
|
||||||
lnk_config_from_argcv(Arena *arena, int argc, char **argv)
|
lnk_config_from_argcv(Arena *arena, int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
// Copyright (c) 2025 Epic Games Tools
|
// Copyright (c) 2025 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal
|
internal
|
||||||
THREAD_POOL_TASK_FUNC(lnk_parse_debug_s_task)
|
THREAD_POOL_TASK_FUNC(lnk_parse_debug_s_task)
|
||||||
{
|
{
|
||||||
@@ -802,10 +800,6 @@ lnk_make_code_view_input(TP_Context *tp, TP_Arena *tp_arena, LNK_IO_Flags io_fla
|
|||||||
return cv;
|
return cv;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
// Leaf Deduper
|
|
||||||
|
|
||||||
|
|
||||||
internal LNK_LeafRef
|
internal LNK_LeafRef
|
||||||
lnk_leaf_ref(U32 enc_loc_idx, U32 enc_leaf_idx)
|
lnk_leaf_ref(U32 enc_loc_idx, U32 enc_leaf_idx)
|
||||||
{
|
{
|
||||||
@@ -1451,8 +1445,6 @@ lnk_leaf_hash_table_search(LNK_LeafHashTable *ht, LNK_CodeViewInput *input, LNK_
|
|||||||
return match;
|
return match;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal
|
internal
|
||||||
THREAD_POOL_TASK_FUNC(lnk_count_per_source_leaf_task)
|
THREAD_POOL_TASK_FUNC(lnk_count_per_source_leaf_task)
|
||||||
{
|
{
|
||||||
@@ -2674,9 +2666,6 @@ lnk_replace_type_names_with_hashes(TP_Context *tp, TP_Arena *arena, CV_DebugT de
|
|||||||
ProfEnd();
|
ProfEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
// PDB Builder
|
|
||||||
|
|
||||||
internal
|
internal
|
||||||
THREAD_POOL_TASK_FUNC(lnk_filter_out_gsi_symbols_task)
|
THREAD_POOL_TASK_FUNC(lnk_filter_out_gsi_symbols_task)
|
||||||
{
|
{
|
||||||
@@ -3034,8 +3023,6 @@ THREAD_POOL_TASK_FUNC(lnk_push_dbi_sec_contrib_task)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal
|
internal
|
||||||
THREAD_POOL_TASK_FUNC(lnk_build_pdb_public_symbols_defined_task)
|
THREAD_POOL_TASK_FUNC(lnk_build_pdb_public_symbols_defined_task)
|
||||||
{
|
{
|
||||||
@@ -3369,9 +3356,6 @@ lnk_build_pdb(TP_Context *tp,
|
|||||||
return page_data_list;
|
return page_data_list;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
// RAD Debug Info
|
|
||||||
|
|
||||||
internal U64
|
internal U64
|
||||||
lnk_udt_name_hash_table_hash(String8 string)
|
lnk_udt_name_hash_table_hash(String8 string)
|
||||||
{
|
{
|
||||||
|
|||||||
+11
-16
@@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Code View Input ---------------------------------------------------------
|
||||||
|
|
||||||
typedef struct LNK_PchInfo
|
typedef struct LNK_PchInfo
|
||||||
{
|
{
|
||||||
@@ -60,7 +60,7 @@ typedef struct LNK_CodeViewInput
|
|||||||
Rng1U64 external_obj_range;
|
Rng1U64 external_obj_range;
|
||||||
} LNK_CodeViewInput;
|
} LNK_CodeViewInput;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Leaf Ref ----------------------------------------------------------------
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
@@ -118,7 +118,7 @@ typedef union
|
|||||||
U128Array **v[CV_TypeIndexSource_COUNT];
|
U128Array **v[CV_TypeIndexSource_COUNT];
|
||||||
} LNK_LeafHashes;
|
} LNK_LeafHashes;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Symbol Parsing Tasks ----------------------------------------------------
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -155,7 +155,7 @@ typedef struct
|
|||||||
B8 *is_corrupted;
|
B8 *is_corrupted;
|
||||||
} LNK_GetExternalLeavesTask;
|
} LNK_GetExternalLeavesTask;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Leaf Deduping Tasks -----------------------------------------------------
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -261,7 +261,7 @@ typedef struct
|
|||||||
Arena **fixed_arena_arr;
|
Arena **fixed_arena_arr;
|
||||||
} LNK_PatchLeavesTask;
|
} LNK_PatchLeavesTask;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Code View Processing Trasks ---------------------------------------------
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -378,8 +378,7 @@ typedef struct
|
|||||||
String8List *maps;
|
String8List *maps;
|
||||||
} LNK_TypeNameReplacer;
|
} LNK_TypeNameReplacer;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RAD Debug Info ----------------------------------------------------------
|
||||||
// RAD Debug Info
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -405,7 +404,7 @@ typedef struct
|
|||||||
CV_TypeIndex *fwdmap;
|
CV_TypeIndex *fwdmap;
|
||||||
} LNK_BuildUDTFwdMapTask;
|
} LNK_BuildUDTFwdMapTask;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RDI Conversion Tasks ----------------------------------------------------
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
@@ -492,8 +491,7 @@ typedef struct
|
|||||||
RDIB_LineTableChunkList *line_tables;
|
RDIB_LineTableChunkList *line_tables;
|
||||||
} LNK_ConvertUnitToRDITask;
|
} LNK_ConvertUnitToRDITask;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- CodeView ----------------------------------------------------------------
|
||||||
// CodeView
|
|
||||||
|
|
||||||
internal CV_DebugS * lnk_parse_debug_s_sections(TP_Context *tp, TP_Arena *arena, U64 obj_count, LNK_Obj **obj_arr, String8List *sect_list_arr);
|
internal CV_DebugS * lnk_parse_debug_s_sections(TP_Context *tp, TP_Arena *arena, U64 obj_count, LNK_Obj **obj_arr, String8List *sect_list_arr);
|
||||||
internal CV_DebugT * lnk_parse_debug_t_sections(TP_Context *tp, TP_Arena *arena, U64 obj_count, LNK_Obj **obj_arr, String8List *debug_t_list_arr);
|
internal CV_DebugT * lnk_parse_debug_t_sections(TP_Context *tp, TP_Arena *arena, U64 obj_count, LNK_Obj **obj_arr, String8List *debug_t_list_arr);
|
||||||
@@ -536,8 +534,7 @@ internal CV_DebugT * lnk_import_types(TP_Context *tp, TP_Arena *tp_temp,
|
|||||||
|
|
||||||
internal void lnk_replace_type_names_with_hashes(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, LNK_TypeNameHashMode mode, U64 hash_length, String8 map_name);
|
internal void lnk_replace_type_names_with_hashes(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, LNK_TypeNameHashMode mode, U64 hash_length, String8 map_name);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RAD Debug info ----------------------------------------------------------
|
||||||
// RAD Debug info
|
|
||||||
|
|
||||||
internal U64 lnk_udt_name_hash_table_hash(String8 string);
|
internal U64 lnk_udt_name_hash_table_hash(String8 string);
|
||||||
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_debug_t(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, U64 *buckets_cap_out);
|
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_debug_t(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, U64 *buckets_cap_out);
|
||||||
@@ -563,8 +560,7 @@ internal String8List lnk_build_rad_debug_info(TP_Context *tp,
|
|||||||
CV_SymbolListArray *parsed_symbols,
|
CV_SymbolListArray *parsed_symbols,
|
||||||
CV_DebugT types[CV_TypeIndexSource_COUNT]);
|
CV_DebugT types[CV_TypeIndexSource_COUNT]);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- PDB ---------------------------------------------------------------------
|
||||||
// PDB
|
|
||||||
|
|
||||||
internal LNK_ProcessedCodeViewC11Data lnk_process_c11_data(TP_Context *tp, TP_Arena *arena, U64 obj_count, CV_DebugS *debug_s_arr, U64 string_data_base_offset, CV_StringHashTable string_ht, MSF_Context *msf, PDB_DbiModule **mod_arr);
|
internal LNK_ProcessedCodeViewC11Data lnk_process_c11_data(TP_Context *tp, TP_Arena *arena, U64 obj_count, CV_DebugS *debug_s_arr, U64 string_data_base_offset, CV_StringHashTable string_ht, MSF_Context *msf, PDB_DbiModule **mod_arr);
|
||||||
internal LNK_ProcessedCodeViewC13Data lnk_process_c13_data(TP_Context *tp, TP_Arena *arena, U64 obj_count, CV_DebugS *debug_s_arr, U64 string_data_base_offset, CV_StringHashTable string_ht, MSF_Context *msf, PDB_DbiModule **mod_arr);
|
internal LNK_ProcessedCodeViewC13Data lnk_process_c13_data(TP_Context *tp, TP_Arena *arena, U64 obj_count, CV_DebugS *debug_s_arr, U64 string_data_base_offset, CV_StringHashTable string_ht, MSF_Context *msf, PDB_DbiModule **mod_arr);
|
||||||
@@ -586,8 +582,7 @@ internal String8List lnk_build_pdb(TP_Context *tp,
|
|||||||
CV_SymbolListArray *parsed_symbols,
|
CV_SymbolListArray *parsed_symbols,
|
||||||
CV_DebugT types[CV_TypeIndexSource_COUNT]);
|
CV_DebugT types[CV_TypeIndexSource_COUNT]);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- RAD Debug Info ----------------------------------------------------------
|
||||||
// RAD Debug Info
|
|
||||||
|
|
||||||
internal U64 lnk_udt_name_hash_table_hash(String8 string);
|
internal U64 lnk_udt_name_hash_table_hash(String8 string);
|
||||||
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_debug_t(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, U64 *buckets_cap_out);
|
internal LNK_UDTNameBucket ** lnk_udt_name_hash_table_from_debug_t(TP_Context *tp, TP_Arena *arena, CV_DebugT debug_t, U64 *buckets_cap_out);
|
||||||
|
|||||||
+6
-12
@@ -1,6 +1,3 @@
|
|||||||
////////////////////////////////
|
|
||||||
// Shared File API
|
|
||||||
|
|
||||||
shared_function int
|
shared_function int
|
||||||
lnk_open_file_read(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max)
|
lnk_open_file_read(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max)
|
||||||
{
|
{
|
||||||
@@ -51,8 +48,6 @@ lnk_write_file(void *raw_handle, uint64_t offset, void *buffer, uint64_t buffer_
|
|||||||
return write_size;
|
return write_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal String8List
|
internal String8List
|
||||||
lnk_file_search(Arena *arena, String8List dir_list, String8 file_path)
|
lnk_file_search(Arena *arena, String8List dir_list, String8 file_path)
|
||||||
{
|
{
|
||||||
@@ -104,7 +99,7 @@ internal OS_Handle
|
|||||||
lnk_file_open_with_rename_permissions(String8 path)
|
lnk_file_open_with_rename_permissions(String8 path)
|
||||||
{
|
{
|
||||||
OS_Handle file_handle = os_handle_zero();
|
OS_Handle file_handle = os_handle_zero();
|
||||||
#if _WIN32
|
#if OS_WINDOWS
|
||||||
Temp scratch = scratch_begin(0,0);
|
Temp scratch = scratch_begin(0,0);
|
||||||
|
|
||||||
// open file with permissions to rename
|
// open file with permissions to rename
|
||||||
@@ -123,7 +118,7 @@ lnk_file_open_with_rename_permissions(String8 path)
|
|||||||
|
|
||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
#else
|
#else
|
||||||
#error "TODO: file rename"
|
# error "TODO: file rename"
|
||||||
#endif
|
#endif
|
||||||
return file_handle;
|
return file_handle;
|
||||||
}
|
}
|
||||||
@@ -131,12 +126,12 @@ lnk_file_open_with_rename_permissions(String8 path)
|
|||||||
internal B32
|
internal B32
|
||||||
lnk_file_set_delete_on_close(OS_Handle handle, B32 delete_file)
|
lnk_file_set_delete_on_close(OS_Handle handle, B32 delete_file)
|
||||||
{
|
{
|
||||||
#if _WIN32
|
#if OS_WINDOWS
|
||||||
FILE_DISPOSITION_INFO file_disposition = {0};
|
FILE_DISPOSITION_INFO file_disposition = {0};
|
||||||
file_disposition.DeleteFile = (BOOL)delete_file;
|
file_disposition.DeleteFile = (BOOL)delete_file;
|
||||||
B32 is_set = SetFileInformationByHandle((HANDLE)handle.u64[0], FileDispositionInfo, &file_disposition, sizeof(file_disposition));
|
B32 is_set = SetFileInformationByHandle((HANDLE)handle.u64[0], FileDispositionInfo, &file_disposition, sizeof(file_disposition));
|
||||||
#else
|
#else
|
||||||
#error "TODO: file rename"
|
# error "TODO: file rename"
|
||||||
#endif
|
#endif
|
||||||
return is_set;
|
return is_set;
|
||||||
}
|
}
|
||||||
@@ -145,7 +140,7 @@ internal B32
|
|||||||
lnk_file_rename(OS_Handle handle, String8 new_name)
|
lnk_file_rename(OS_Handle handle, String8 new_name)
|
||||||
{
|
{
|
||||||
Temp scratch = scratch_begin(0,0);
|
Temp scratch = scratch_begin(0,0);
|
||||||
#if _WIN32
|
#if OS_WINDOWS
|
||||||
String16 new_name16 = str16_from_8(scratch.arena, new_name);
|
String16 new_name16 = str16_from_8(scratch.arena, new_name);
|
||||||
|
|
||||||
U64 file_rename_info_size = sizeof(FILE_RENAME_INFO);
|
U64 file_rename_info_size = sizeof(FILE_RENAME_INFO);
|
||||||
@@ -218,7 +213,7 @@ internal
|
|||||||
THREAD_POOL_TASK_FUNC(lnk_memory_map_file_task)
|
THREAD_POOL_TASK_FUNC(lnk_memory_map_file_task)
|
||||||
{
|
{
|
||||||
LNK_DiskReader *task = raw_task;
|
LNK_DiskReader *task = raw_task;
|
||||||
#if _WIN32
|
#if OS_WINDOWS
|
||||||
Temp scratch = scratch_begin(&arena, 1);
|
Temp scratch = scratch_begin(&arena, 1);
|
||||||
String16 path16 = str16_from_8(scratch.arena, task->path_arr.v[task_id]);
|
String16 path16 = str16_from_8(scratch.arena, task->path_arr.v[task_id]);
|
||||||
HANDLE file_handle = CreateFileW(path16.str, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
HANDLE file_handle = CreateFileW(path16.str, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
|
||||||
@@ -376,4 +371,3 @@ lnk_write_data_to_file_path(String8 path, String8 temp_path, String8 data)
|
|||||||
scratch_end(scratch);
|
scratch_end(scratch);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-7
@@ -1,15 +1,11 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
typedef U32 LNK_IO_Flags;
|
typedef U32 LNK_IO_Flags;
|
||||||
enum
|
enum
|
||||||
{
|
{
|
||||||
LNK_IO_Flags_MemoryMapFiles = (1 << 0),
|
LNK_IO_Flags_MemoryMapFiles = (1 << 0),
|
||||||
};
|
};
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
LNK_IO_Flags io_flags;
|
LNK_IO_Flags io_flags;
|
||||||
@@ -21,8 +17,7 @@ typedef struct
|
|||||||
U8 *buffer;
|
U8 *buffer;
|
||||||
} LNK_DiskReader;
|
} LNK_DiskReader;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Shared File API ---------------------------------------------------------
|
||||||
// Shared File API
|
|
||||||
|
|
||||||
shared_function int lnk_open_file_read(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max);
|
shared_function int lnk_open_file_read(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max);
|
||||||
shared_function int lnk_open_file_write(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max);
|
shared_function int lnk_open_file_write(char *path, uint64_t path_size, void *handle_buffer, uint64_t handle_buffer_max);
|
||||||
@@ -31,7 +26,7 @@ shared_function uint64_t lnk_size_from_file(void *raw_handle);
|
|||||||
shared_function uint64_t lnk_read_file(void *raw_handle, void *buffer, uint64_t buffer_max);
|
shared_function uint64_t lnk_read_file(void *raw_handle, void *buffer, uint64_t buffer_max);
|
||||||
shared_function uint64_t lnk_write_file(void *raw_handle, uint64_t offset, void *buffer, uint64_t buffer_size);
|
shared_function uint64_t lnk_write_file(void *raw_handle, uint64_t offset, void *buffer, uint64_t buffer_size);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- IO Functions ------------------------------------------------------------
|
||||||
|
|
||||||
internal String8List lnk_file_search(Arena *arena, String8List dir_list, String8 file_path);
|
internal String8List lnk_file_search(Arena *arena, String8List dir_list, String8 file_path);
|
||||||
|
|
||||||
|
|||||||
@@ -34,8 +34,6 @@ typedef struct LNK_LibList
|
|||||||
struct LNK_LibNode *last;
|
struct LNK_LibNode *last;
|
||||||
} LNK_LibList;
|
} LNK_LibList;
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
LNK_LibNode *node_arr;
|
LNK_LibNode *node_arr;
|
||||||
@@ -44,8 +42,6 @@ typedef struct
|
|||||||
U64 base_input_idx;
|
U64 base_input_idx;
|
||||||
} LNK_LibIniter;
|
} LNK_LibIniter;
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal LNK_Lib lnk_lib_from_data(Arena *arena, String8 data, String8 path);
|
internal LNK_Lib lnk_lib_from_data(Arena *arena, String8 data, String8 path);
|
||||||
internal LNK_LibNodeArray lnk_lib_list_push_parallel(TP_Context *tp, TP_Arena *arena, LNK_LibList *list, String8Array data_arr, String8Array path_arr);
|
internal LNK_LibNodeArray lnk_lib_list_push_parallel(TP_Context *tp, TP_Arena *arena, LNK_LibList *list, String8Array data_arr, String8Array path_arr);
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,6 @@
|
|||||||
// Copyright (c) 2025 Epic Games Tools
|
// Copyright (c) 2025 Epic Games Tools
|
||||||
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
// Licensed under the MIT license (https://opensource.org/license/mit/)
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal LNK_Symbol *
|
internal LNK_Symbol *
|
||||||
lnk_make_defined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj, U32 symbol_idx)
|
lnk_make_defined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj, U32 symbol_idx)
|
||||||
{
|
{
|
||||||
@@ -45,8 +43,6 @@ lnk_make_import_symbol(Arena *arena, String8 name, String8 import_header)
|
|||||||
return symbol;
|
return symbol;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal void
|
internal void
|
||||||
lnk_symbol_list_push_node(LNK_SymbolList *list, LNK_SymbolNode *node)
|
lnk_symbol_list_push_node(LNK_SymbolList *list, LNK_SymbolNode *node)
|
||||||
{
|
{
|
||||||
@@ -107,50 +103,6 @@ lnk_symbol_array_from_list(Arena *arena, LNK_SymbolList list)
|
|||||||
return arr;
|
return arr;
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal ISectOff
|
|
||||||
lnk_sc_from_symbol(LNK_Symbol *symbol)
|
|
||||||
{
|
|
||||||
COFF_ParsedSymbol parsed_symbol = lnk_parsed_symbol_from_coff_symbol_idx(symbol->u.defined.obj, symbol->u.defined.symbol_idx);
|
|
||||||
|
|
||||||
ISectOff sc = {0};
|
|
||||||
sc.isect = parsed_symbol.section_number;
|
|
||||||
sc.off = parsed_symbol.value;
|
|
||||||
|
|
||||||
return sc;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U64
|
|
||||||
lnk_isect_from_symbol(LNK_Symbol *symbol)
|
|
||||||
{
|
|
||||||
return lnk_sc_from_symbol(symbol).isect;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U64
|
|
||||||
lnk_sect_off_from_symbol(LNK_Symbol *symbol)
|
|
||||||
{
|
|
||||||
return lnk_sc_from_symbol(symbol).off;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U64
|
|
||||||
lnk_virt_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol)
|
|
||||||
{
|
|
||||||
ISectOff sc = lnk_sc_from_symbol(symbol);
|
|
||||||
U64 voff = section_table[sc.isect]->voff + sc.off;
|
|
||||||
return voff;
|
|
||||||
}
|
|
||||||
|
|
||||||
internal U64
|
|
||||||
lnk_file_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol)
|
|
||||||
{
|
|
||||||
ISectOff sc = lnk_sc_from_symbol(symbol);
|
|
||||||
U64 foff = section_table[sc.isect]->foff + sc.off;
|
|
||||||
return foff;
|
|
||||||
}
|
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal LNK_SymbolHashTrie *
|
internal LNK_SymbolHashTrie *
|
||||||
lnk_symbol_hash_trie_chunk_list_push(Arena *arena, LNK_SymbolHashTrieChunkList *list, U64 cap)
|
lnk_symbol_hash_trie_chunk_list_push(Arena *arena, LNK_SymbolHashTrieChunkList *list, U64 cap)
|
||||||
{
|
{
|
||||||
@@ -498,8 +450,6 @@ lnk_symbol_hash_trie_remove(LNK_SymbolHashTrie *trie)
|
|||||||
ins_atomic_ptr_eval_assign(&trie->symbol, 0);
|
ins_atomic_ptr_eval_assign(&trie->symbol, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal U64
|
internal U64
|
||||||
lnk_symbol_hash(String8 string)
|
lnk_symbol_hash(String8 string)
|
||||||
{
|
{
|
||||||
@@ -607,3 +557,44 @@ lnk_symbol_table_push_alt_name(LNK_SymbolTable *symtab, LNK_Obj *obj, String8 fr
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
internal ISectOff
|
||||||
|
lnk_sc_from_symbol(LNK_Symbol *symbol)
|
||||||
|
{
|
||||||
|
COFF_ParsedSymbol parsed_symbol = lnk_parsed_symbol_from_coff_symbol_idx(symbol->u.defined.obj, symbol->u.defined.symbol_idx);
|
||||||
|
|
||||||
|
ISectOff sc = {0};
|
||||||
|
sc.isect = parsed_symbol.section_number;
|
||||||
|
sc.off = parsed_symbol.value;
|
||||||
|
|
||||||
|
return sc;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
lnk_isect_from_symbol(LNK_Symbol *symbol)
|
||||||
|
{
|
||||||
|
return lnk_sc_from_symbol(symbol).isect;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
lnk_sect_off_from_symbol(LNK_Symbol *symbol)
|
||||||
|
{
|
||||||
|
return lnk_sc_from_symbol(symbol).off;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
lnk_virt_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol)
|
||||||
|
{
|
||||||
|
ISectOff sc = lnk_sc_from_symbol(symbol);
|
||||||
|
U64 voff = section_table[sc.isect]->voff + sc.off;
|
||||||
|
return voff;
|
||||||
|
}
|
||||||
|
|
||||||
|
internal U64
|
||||||
|
lnk_file_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol)
|
||||||
|
{
|
||||||
|
ISectOff sc = lnk_sc_from_symbol(symbol);
|
||||||
|
U64 foff = section_table[sc.isect]->foff + sc.off;
|
||||||
|
return foff;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,8 +3,6 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
typedef enum
|
typedef enum
|
||||||
{
|
{
|
||||||
LNK_Symbol_Null,
|
LNK_Symbol_Null,
|
||||||
@@ -111,24 +109,14 @@ typedef struct LNK_SymbolTable
|
|||||||
HashTable *alt_names;
|
HashTable *alt_names;
|
||||||
} LNK_SymbolTable;
|
} LNK_SymbolTable;
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Symbol Make -------------------------------------------------------------
|
||||||
// parallel for wrappers
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
LNK_SymbolTable *symtab;
|
|
||||||
Rng1U64 *ranges;
|
|
||||||
LNK_Symbol *arr;
|
|
||||||
} LNK_LazySymbolInserter;
|
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal LNK_Symbol * lnk_make_defined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj, U32 symbol_idx);
|
internal LNK_Symbol * lnk_make_defined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj, U32 symbol_idx);
|
||||||
internal LNK_Symbol * lnk_make_lib_symbol(Arena *arena, String8 name, struct LNK_Lib *lib, U64 member_offset);
|
internal LNK_Symbol * lnk_make_lib_symbol(Arena *arena, String8 name, struct LNK_Lib *lib, U64 member_offset);
|
||||||
internal LNK_Symbol * lnk_make_undefined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj);
|
internal LNK_Symbol * lnk_make_undefined_symbol(Arena *arena, String8 name, struct LNK_Obj *obj);
|
||||||
internal LNK_Symbol * lnk_make_import_symbol(Arena *arena, String8 name, String8 import_header);
|
internal LNK_Symbol * lnk_make_import_symbol(Arena *arena, String8 name, String8 import_header);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Symbol List -------------------------------------------------------------
|
||||||
|
|
||||||
internal void lnk_symbol_list_push_node(LNK_SymbolList *list, LNK_SymbolNode *node);
|
internal void lnk_symbol_list_push_node(LNK_SymbolList *list, LNK_SymbolNode *node);
|
||||||
internal LNK_SymbolNode * lnk_symbol_list_push(Arena *arena, LNK_SymbolList *list, LNK_Symbol *symbol);
|
internal LNK_SymbolNode * lnk_symbol_list_push(Arena *arena, LNK_SymbolList *list, LNK_Symbol *symbol);
|
||||||
@@ -137,21 +125,13 @@ internal LNK_SymbolList lnk_symbol_list_from_array(Arena *arena, LNK_Symbol
|
|||||||
internal LNK_SymbolNodeArray lnk_symbol_node_array_from_list(Arena *arena, LNK_SymbolList list);
|
internal LNK_SymbolNodeArray lnk_symbol_node_array_from_list(Arena *arena, LNK_SymbolList list);
|
||||||
internal LNK_SymbolArray lnk_symbol_array_from_list(Arena *arena, LNK_SymbolList list);
|
internal LNK_SymbolArray lnk_symbol_array_from_list(Arena *arena, LNK_SymbolList list);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Symbol Hash Trie --------------------------------------------------------
|
||||||
|
|
||||||
internal ISectOff lnk_sc_from_symbol (LNK_Symbol *symbol);
|
|
||||||
internal U64 lnk_isect_from_symbol (LNK_Symbol *symbol);
|
|
||||||
internal U64 lnk_sect_off_from_symbol(LNK_Symbol *symbol);
|
|
||||||
internal U64 lnk_virt_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol);
|
|
||||||
internal U64 lnk_file_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol);
|
|
||||||
|
|
||||||
////////////////////////////////
|
|
||||||
|
|
||||||
internal void lnk_symbol_hash_trie_insert_or_replace(Arena *arena, LNK_SymbolHashTrieChunkList *chunks, LNK_SymbolHashTrie **trie, U64 hash, LNK_Symbol *symbol);
|
internal void lnk_symbol_hash_trie_insert_or_replace(Arena *arena, LNK_SymbolHashTrieChunkList *chunks, LNK_SymbolHashTrie **trie, U64 hash, LNK_Symbol *symbol);
|
||||||
internal LNK_SymbolHashTrie * lnk_symbol_hash_trie_search(LNK_SymbolHashTrie *trie, U64 hash, String8 name);
|
internal LNK_SymbolHashTrie * lnk_symbol_hash_trie_search(LNK_SymbolHashTrie *trie, U64 hash, String8 name);
|
||||||
internal void lnk_symbol_hash_trie_remove(LNK_SymbolHashTrie *trie);
|
internal void lnk_symbol_hash_trie_remove(LNK_SymbolHashTrie *trie);
|
||||||
|
|
||||||
////////////////////////////////
|
// --- Symbol Table ------------------------------------------------------------
|
||||||
|
|
||||||
internal U64 lnk_symbol_hash(String8 string);
|
internal U64 lnk_symbol_hash(String8 string);
|
||||||
|
|
||||||
@@ -165,3 +145,10 @@ internal void lnk_symbol_table_remove(LNK_SymbolTable *symtab, LNK_
|
|||||||
|
|
||||||
internal void lnk_symbol_table_push_alt_name(LNK_SymbolTable *symtab, struct LNK_Obj *obj, String8 from, String8 to);
|
internal void lnk_symbol_table_push_alt_name(LNK_SymbolTable *symtab, struct LNK_Obj *obj, String8 from, String8 to);
|
||||||
|
|
||||||
|
// --- Symbol Contrib Helpers --------------------------------------------------
|
||||||
|
|
||||||
|
internal ISectOff lnk_sc_from_symbol (LNK_Symbol *symbol);
|
||||||
|
internal U64 lnk_isect_from_symbol (LNK_Symbol *symbol);
|
||||||
|
internal U64 lnk_sect_off_from_symbol(LNK_Symbol *symbol);
|
||||||
|
internal U64 lnk_virt_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol);
|
||||||
|
internal U64 lnk_file_off_from_symbol(COFF_SectionHeader **section_table, LNK_Symbol *symbol);
|
||||||
|
|||||||
Reference in New Issue
Block a user