mirror of
https://github.com/Ed94/raddebugger.git
synced 2026-08-04 12:58:41 +00:00
clean up pass over symbol table
- rename functions for consistency - remove unused code
This commit is contained in:
committed by
Ryan Fleury
parent
222c220d99
commit
7cea036bc1
+39
-39
@@ -1512,8 +1512,8 @@ lnk_link_inputs_(TP_Context *tp,
|
||||
LNK_Symbol *symbol = c->v[i].symbol;
|
||||
if (symbol->is_lib_member_linked) { continue; }
|
||||
|
||||
LNK_ObjSymbolRef symbol_ref = lnk_get_obj_symbol_ref(symbol);
|
||||
COFF_ParsedSymbol symbol_parsed = lnk_parse_symbol(symbol);
|
||||
LNK_ObjSymbolRef symbol_ref = lnk_ref_from_symbol(symbol);
|
||||
COFF_ParsedSymbol symbol_parsed = lnk_parsed_from_symbol(symbol);
|
||||
COFF_SymbolValueInterpType symbol_interp = coff_interp_from_parsed_symbol(symbol_parsed);
|
||||
|
||||
if (symbol_interp == COFF_SymbolValueInterp_Undefined) {
|
||||
@@ -1577,8 +1577,8 @@ lnk_link_inputs_(TP_Context *tp,
|
||||
|
||||
// create import stub (later replaced with acutal import generated by linker)
|
||||
LNK_Symbol *import_stub = lnk_symbol_table_search(symtab, str8_lit(LNK_IMPORT_STUB));
|
||||
LNK_ObjSymbolRef import_symbol_ref = lnk_get_obj_symbol_ref(import_stub);
|
||||
LNK_Symbol *import_symbol = lnk_make_obj_ref_symbol(symtab->arena->v[0], link_symbol->name, import_symbol_ref.obj, import_symbol_ref.symbol_idx);
|
||||
LNK_ObjSymbolRef import_symbol_ref = lnk_ref_from_symbol(import_stub);
|
||||
LNK_Symbol *import_symbol = lnk_make_symbol(symtab->arena->v[0], link_symbol->name, import_symbol_ref.obj, import_symbol_ref.symbol_idx);
|
||||
lnk_symbol_table_push(symtab, import_symbol);
|
||||
|
||||
// search DLL symbol list
|
||||
@@ -1648,7 +1648,7 @@ lnk_link_inputs(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer
|
||||
for (LNK_AltNameNode *alt_name_n = config->alt_name_list.first; alt_name_n != 0; alt_name_n = alt_name_n->next) {
|
||||
LNK_SymbolHashTrie *symbol_ht = lnk_symbol_table_search_(symtab, alt_name_n->v.from);
|
||||
if (symbol_ht) {
|
||||
COFF_SymbolValueInterpType interp = lnk_interp_symbol(symbol_ht->symbol);
|
||||
COFF_SymbolValueInterpType interp = lnk_interp_from_symbol(symbol_ht->symbol);
|
||||
if (interp == COFF_SymbolValueInterp_Undefined) {
|
||||
// clear out slot so weak symbol can replace undefined symbol (general rule is
|
||||
// weak symbol is not allowed to replace undefined)
|
||||
@@ -1955,7 +1955,7 @@ lnk_link_image(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer
|
||||
LNK_SymbolHashTrieChunk *chunk = chunks[chunk_idx];
|
||||
for EachIndex(i, chunk->count) {
|
||||
LNK_Symbol *symbol = chunk->v[i].symbol;
|
||||
COFF_SymbolValueInterpType symbol_interp = lnk_interp_symbol(symbol);
|
||||
COFF_SymbolValueInterpType symbol_interp = lnk_interp_from_symbol(symbol);
|
||||
if (symbol_interp == COFF_SymbolValueInterp_Undefined) {
|
||||
unresolved_symbols_count += 1;
|
||||
}
|
||||
@@ -1969,7 +1969,7 @@ lnk_link_image(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer
|
||||
LNK_SymbolHashTrieChunk *chunk = chunks[chunk_idx];
|
||||
for EachIndex(i, chunk->count) {
|
||||
LNK_Symbol *symbol = chunk->v[i].symbol;
|
||||
if (lnk_interp_symbol(symbol) == COFF_SymbolValueInterp_Undefined) {
|
||||
if (lnk_interp_from_symbol(symbol) == COFF_SymbolValueInterp_Undefined) {
|
||||
unresolved_symbols[cursor++] = chunk->v[i].symbol;
|
||||
}
|
||||
}
|
||||
@@ -1990,7 +1990,7 @@ lnk_link_image(TP_Context *tp, TP_Arena *arena, LNK_Config *config, LNK_Inputer
|
||||
String8List supp_info = {0};
|
||||
{
|
||||
U64 refs_count = 0;
|
||||
LNK_ObjSymbolRef **refs = lnk_get_obj_symbol_ref_many(scratch.arena, symbol, &refs_count);
|
||||
LNK_ObjSymbolRef **refs = lnk_ref_from_symbol_many(scratch.arena, symbol, &refs_count);
|
||||
for EachIndex(ref_idx, refs_count) {
|
||||
LNK_ObjSymbolRef *ref = refs[ref_idx];
|
||||
LNK_Obj *obj = ref->obj;
|
||||
@@ -2136,7 +2136,7 @@ lnk_opt_ref(TP_Context *tp, LNK_SymbolTable *symtab, LNK_Config *config, LNK_Obj
|
||||
// push tasks for each root symbol
|
||||
for (LNK_IncludeSymbolNode *root_n = config->include_symbol_list.first; root_n != 0; root_n = root_n->next) {
|
||||
LNK_Symbol *root = lnk_symbol_table_search(symtab, root_n->v.name);
|
||||
LNK_ObjSymbolRef root_ref = lnk_get_obj_symbol_ref(root);
|
||||
LNK_ObjSymbolRef root_ref = lnk_ref_from_symbol(root);
|
||||
|
||||
struct Task *t = push_array(scratch.arena, struct Task, 1);
|
||||
t->obj = root_ref.obj;
|
||||
@@ -2195,20 +2195,20 @@ lnk_opt_ref(TP_Context *tp, LNK_SymbolTable *symtab, LNK_Config *config, LNK_Obj
|
||||
if (ref_interp == COFF_SymbolValueInterp_Regular) {
|
||||
LNK_Symbol *symlink = lnk_obj_get_comdat_symlink(ref_symbol.obj, ref_parsed.section_number);
|
||||
if (symlink) {
|
||||
ref_symbol = lnk_get_obj_symbol_ref(symlink);
|
||||
ref_symbol = lnk_ref_from_symbol(symlink);
|
||||
}
|
||||
break;
|
||||
} else if (ref_interp == COFF_SymbolValueInterp_Undefined) {
|
||||
if (reloc_parsed.storage_class == COFF_SymStorageClass_External) {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, ref_parsed.name);
|
||||
next_ref = lnk_get_obj_symbol_ref(defn);
|
||||
next_ref = lnk_ref_from_symbol(defn);
|
||||
} else {
|
||||
MemoryZeroStruct(&ref_symbol);
|
||||
break;
|
||||
}
|
||||
} else if (ref_interp == COFF_SymbolValueInterp_Weak) {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, ref_parsed.name);
|
||||
next_ref = lnk_get_obj_symbol_ref(defn);
|
||||
next_ref = lnk_ref_from_symbol(defn);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
@@ -2309,14 +2309,14 @@ lnk_resolve_symbol(LNK_SymbolTable *symtab, LNK_ObjSymbolRef symbol, LNK_ObjSymb
|
||||
switch (symbol_interp) {
|
||||
case COFF_SymbolValueInterp_Regular: {
|
||||
LNK_Symbol *symlink = lnk_obj_get_comdat_symlink(symbol.obj, symbol_parsed.section_number);
|
||||
*symbol_out = symlink ? lnk_get_obj_symbol_ref(symlink) : symbol;
|
||||
*symbol_out = symlink ? lnk_ref_from_symbol(symlink) : symbol;
|
||||
} break;
|
||||
case COFF_SymbolValueInterp_Weak: {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, symbol_parsed.name);
|
||||
COFF_ParsedSymbol defn_parsed = lnk_parse_symbol(defn);
|
||||
COFF_SymbolValueInterpType defn_interp = lnk_interp_symbol(defn);
|
||||
COFF_ParsedSymbol defn_parsed = lnk_parsed_from_symbol(defn);
|
||||
COFF_SymbolValueInterpType defn_interp = lnk_interp_from_symbol(defn);
|
||||
if (defn_interp != COFF_SymbolValueInterp_Undefined) {
|
||||
*symbol_out = lnk_get_obj_symbol_ref(defn);
|
||||
*symbol_out = lnk_ref_from_symbol(defn);
|
||||
} else {
|
||||
is_resolved = 0;
|
||||
}
|
||||
@@ -2324,19 +2324,19 @@ lnk_resolve_symbol(LNK_SymbolTable *symtab, LNK_ObjSymbolRef symbol, LNK_ObjSymb
|
||||
case COFF_SymbolValueInterp_Undefined: {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, symbol_parsed.name);
|
||||
if (defn) {
|
||||
*symbol_out = lnk_get_obj_symbol_ref(defn);
|
||||
*symbol_out = lnk_ref_from_symbol(defn);
|
||||
} else {
|
||||
is_resolved = 0;
|
||||
}
|
||||
} break;
|
||||
case COFF_SymbolValueInterp_Common: {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, symbol_parsed.name);
|
||||
*symbol_out = lnk_get_obj_symbol_ref(defn);
|
||||
*symbol_out = lnk_ref_from_symbol(defn);
|
||||
} break;
|
||||
case COFF_SymbolValueInterp_Abs: {
|
||||
if (symbol_parsed.storage_class == COFF_SymStorageClass_External) {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(symtab, symbol_parsed.name);
|
||||
*symbol_out = lnk_get_obj_symbol_ref(defn);
|
||||
*symbol_out = lnk_ref_from_symbol(defn);
|
||||
} else {
|
||||
*symbol_out = symbol;
|
||||
}
|
||||
@@ -2460,8 +2460,8 @@ THREAD_POOL_TASK_FUNC(lnk_set_comdat_leaders_contribs_task)
|
||||
LNK_Symbol *symlink = lnk_obj_get_comdat_symlink(obj, section_number);
|
||||
if (symlink == 0) { continue; }
|
||||
|
||||
COFF_ParsedSymbol symlink_parsed = lnk_parse_symbol(symlink);
|
||||
LNK_ObjSymbolRef symlink_ref = lnk_get_obj_symbol_ref(symlink);
|
||||
COFF_ParsedSymbol symlink_parsed = lnk_parsed_from_symbol(symlink);
|
||||
LNK_ObjSymbolRef symlink_ref = lnk_ref_from_symbol(symlink);
|
||||
task->sect_map[obj_idx][sect_idx] = task->sect_map[symlink_ref.obj->input_idx][symlink_parsed.section_number - 1];
|
||||
}
|
||||
ProfEnd();
|
||||
@@ -2506,13 +2506,13 @@ THREAD_POOL_TASK_FUNC(lnk_patch_comdat_leaders_task)
|
||||
if (interp == COFF_SymbolValueInterp_Regular) {
|
||||
LNK_Symbol *symlink = lnk_obj_get_comdat_symlink(obj, symbol.section_number);
|
||||
if (symlink) {
|
||||
LNK_ObjSymbolRef symlink_ref = lnk_get_obj_symbol_ref(symlink);
|
||||
LNK_ObjSymbolRef symlink_ref = lnk_ref_from_symbol(symlink);
|
||||
if (symlink_ref.obj != obj) {
|
||||
U32 section_number;
|
||||
U32 value;
|
||||
if (symbol.storage_class == COFF_SymStorageClass_External) {
|
||||
// COMDAT leader may be at a different offset, so update this symbol with leader's offset
|
||||
COFF_ParsedSymbol parsed_symlink = lnk_parse_symbol(symlink);
|
||||
COFF_ParsedSymbol parsed_symlink = lnk_parsed_from_symbol(symlink);
|
||||
section_number = symbol.section_number;
|
||||
value = parsed_symlink.value;
|
||||
} else {
|
||||
@@ -2590,8 +2590,8 @@ THREAD_POOL_TASK_FUNC(lnk_patch_common_block_leaders_task)
|
||||
for (U64 contrib_idx = contrib_range.min; contrib_idx < contrib_range.max; contrib_idx += 1) {
|
||||
LNK_CommonBlockContrib *contrib = &task->u.patch_symtabs.common_block_contribs[contrib_idx];
|
||||
LNK_Symbol *symbol = contrib->symbol;
|
||||
LNK_ObjSymbolRef symbol_ref = lnk_get_obj_symbol_ref(symbol);
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parse_symbol(symbol);
|
||||
LNK_ObjSymbolRef symbol_ref = lnk_ref_from_symbol(symbol);
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parsed_from_symbol(symbol);
|
||||
U64 section_number = task->u.patch_symtabs.common_block_sect->sect_idx + 1;
|
||||
|
||||
if (symbol_ref.obj->header.is_big_obj) {
|
||||
@@ -2624,8 +2624,8 @@ THREAD_POOL_TASK_FUNC(lnk_patch_common_block_symbols_task)
|
||||
COFF_SymbolValueInterpType interp = coff_interp_symbol(symbol.section_number, symbol.value, symbol.storage_class);
|
||||
if (interp == COFF_SymbolValueInterp_Common) {
|
||||
LNK_Symbol *defn = lnk_symbol_table_search(task->symtab, symbol.name);
|
||||
COFF_ParsedSymbol defn_parsed = lnk_parse_symbol(defn);
|
||||
Assert(lnk_interp_symbol(defn) == COFF_SymbolValueInterp_Regular);
|
||||
COFF_ParsedSymbol defn_parsed = lnk_parsed_from_symbol(defn);
|
||||
Assert(lnk_interp_from_symbol(defn) == COFF_SymbolValueInterp_Regular);
|
||||
if (defn) {
|
||||
if (obj->header.is_big_obj) {
|
||||
COFF_Symbol32 *symbol32 = symbol.raw_symbol;
|
||||
@@ -2902,7 +2902,7 @@ THREAD_POOL_TASK_FUNC(lnk_count_common_block_contribs_task)
|
||||
for (LNK_SymbolHashTrieChunk *chunk = symtab->chunks[task_id].first; chunk != 0; chunk = chunk->next) {
|
||||
for EachIndex(i, chunk->count) {
|
||||
LNK_Symbol *symbol = chunk->v[i].symbol;
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parse_symbol(symbol);
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parsed_from_symbol(symbol);
|
||||
COFF_SymbolValueInterpType parsed_interp = coff_interp_symbol(parsed_symbol.section_number, parsed_symbol.value, parsed_symbol.storage_class);
|
||||
if (parsed_interp == COFF_SymbolValueInterp_Common) {
|
||||
task->u.common_block.counts[task_id] += 1;
|
||||
@@ -2921,7 +2921,7 @@ THREAD_POOL_TASK_FUNC(lnk_fill_out_common_block_contribs_task)
|
||||
for (LNK_SymbolHashTrieChunk *chunk = symtab->chunks[task_id].first; chunk != 0; chunk = chunk->next) {
|
||||
for EachIndex(i, chunk->count) {
|
||||
LNK_Symbol *symbol = chunk->v[i].symbol;
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parse_symbol(symbol);
|
||||
COFF_ParsedSymbol parsed_symbol = lnk_parsed_from_symbol(symbol);
|
||||
COFF_SymbolValueInterpType parsed_interp = coff_interp_symbol(parsed_symbol.section_number, parsed_symbol.value, parsed_symbol.storage_class);
|
||||
if (parsed_interp == COFF_SymbolValueInterp_Common) {
|
||||
LNK_CommonBlockContrib *contrib = &task->u.common_block.contribs[cursor++];
|
||||
@@ -3856,7 +3856,7 @@ lnk_build_win32_header(Arena *arena, LNK_SymbolTable *symtab, LNK_Config *config
|
||||
|
||||
LNK_Symbol *entry_symbol = lnk_symbol_table_search(symtab, config->entry_point_name);
|
||||
if (entry_symbol) {
|
||||
*entry_point_va = safe_cast_u32(lnk_virt_off_from_symbol(section_table, entry_symbol));
|
||||
*entry_point_va = safe_cast_u32(lnk_voff_from_symbol(section_table, entry_symbol));
|
||||
}
|
||||
|
||||
scratch_end(scratch);
|
||||
@@ -4293,13 +4293,13 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
{
|
||||
LNK_Symbol *load_config_symbol = lnk_symbol_table_search(symtab, str8_lit(MSCRT_LOAD_CONFIG_SYMBOL_NAME));
|
||||
if (load_config_symbol) {
|
||||
U64 load_config_foff = lnk_file_off_from_symbol(image_section_table, load_config_symbol);
|
||||
U64 load_config_foff = lnk_foff_from_symbol(image_section_table, load_config_symbol);
|
||||
String8 load_config_data = str8_skip(image_data, load_config_foff);
|
||||
|
||||
U32 load_config_size = 0;
|
||||
if (sizeof(load_config_size) <= load_config_data.size) {
|
||||
PE_DataDirectory *load_config_dir = pe_data_directory_from_idx(image_data, pe, PE_DataDirectoryIndex_LOAD_CONFIG);
|
||||
load_config_dir->virt_off = lnk_virt_off_from_symbol(image_section_table, load_config_symbol);
|
||||
load_config_dir->virt_off = lnk_voff_from_symbol(image_section_table, load_config_symbol);
|
||||
load_config_dir->virt_size = load_config_size;
|
||||
} else {
|
||||
// TODO: report corrupted load config
|
||||
@@ -4348,13 +4348,13 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
LNK_Symbol *null_import_desc = lnk_symbol_table_searchf(symtab, "__NULL_IMPORT_DESCRIPTOR");
|
||||
LNK_Symbol *null_thunk_data = lnk_symbol_table_searchf(symtab, "\x7f%S_NULL_THUNK_DATA", lnk_get_image_name(config));
|
||||
if (idata_sect && null_import_desc && null_thunk_data) {
|
||||
COFF_ParsedSymbol null_import_desc_parsed = lnk_parse_symbol(null_import_desc);
|
||||
COFF_ParsedSymbol null_import_desc_parsed = lnk_parsed_from_symbol(null_import_desc);
|
||||
LNK_SectionContrib *idata_first_contrib = lnk_get_first_section_contrib(idata_sect);
|
||||
PE_DataDirectory *import_dir = pe_data_directory_from_idx(image_data, pe, PE_DataDirectoryIndex_IMPORT);
|
||||
import_dir->virt_off = image_section_table[idata_first_contrib->u.sect_idx + 1]->voff + idata_first_contrib->u.off;
|
||||
import_dir->virt_size = null_import_desc_parsed.value - idata_first_contrib->u.off;
|
||||
|
||||
COFF_ParsedSymbol null_thunk_data_parsed = lnk_parse_symbol(null_thunk_data);
|
||||
COFF_ParsedSymbol null_thunk_data_parsed = lnk_parsed_from_symbol(null_thunk_data);
|
||||
U64 null_thunk_data_voff = image_section_table[null_thunk_data_parsed.section_number]->voff + null_thunk_data_parsed.value;
|
||||
U64 first_import_foff = image_section_table[idata_first_contrib->u.sect_idx+1]->foff + idata_first_contrib->u.off;
|
||||
PE_ImportEntry *first_import = str8_deserial_get_raw_ptr(image_data, first_import_foff, sizeof(*first_import));
|
||||
@@ -4370,7 +4370,7 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
LNK_Symbol *null_import_desc = lnk_symbol_table_search(symtab, str8_lit("__NULL_DELAY_IMPORT_DESCRIPTOR"));
|
||||
LNK_Symbol *last_null_thunk = lnk_symbol_table_searchf(symtab,"\x7f%S_NULL_THUNK_DATA_DLA", lnk_get_image_name(config));
|
||||
if (didat_sect && null_import_desc && last_null_thunk) {
|
||||
COFF_ParsedSymbol null_import_desc_parsed = lnk_parse_symbol(null_import_desc);
|
||||
COFF_ParsedSymbol null_import_desc_parsed = lnk_parsed_from_symbol(null_import_desc);
|
||||
LNK_SectionContrib *didat_first_contrib = lnk_get_first_section_contrib(didat_sect);
|
||||
PE_DataDirectory *import_dir = pe_data_directory_from_idx(image_data, pe, PE_DataDirectoryIndex_DELAY_IMPORT);
|
||||
import_dir->virt_off = lnk_get_first_section_contrib_voff(image_section_table, didat_sect);
|
||||
@@ -4395,7 +4395,7 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
}
|
||||
|
||||
// patch-in align
|
||||
U64 tls_header_foff = lnk_file_off_from_symbol(image_section_table, tls_used_symbol);
|
||||
U64 tls_header_foff = lnk_foff_from_symbol(image_section_table, tls_used_symbol);
|
||||
B32 is_tls_header64 = coff_word_size_from_machine(config->machine) == 8;
|
||||
if (is_tls_header64) {
|
||||
PE_TLSHeader64 *tls_header = str8_deserial_get_raw_ptr(image_data, tls_header_foff, sizeof(*tls_header));
|
||||
@@ -4407,7 +4407,7 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
|
||||
// patch directory
|
||||
PE_DataDirectory *tls_dir = pe_data_directory_from_idx(image_data, pe, PE_DataDirectoryIndex_TLS);
|
||||
tls_dir->virt_off = lnk_virt_off_from_symbol(image_section_table, tls_used_symbol);
|
||||
tls_dir->virt_off = lnk_voff_from_symbol(image_section_table, tls_used_symbol);
|
||||
tls_dir->virt_size = is_tls_header64 ? sizeof(PE_TLSHeader64) : sizeof(PE_TLSHeader32);
|
||||
|
||||
ProfEnd();
|
||||
@@ -4476,13 +4476,13 @@ lnk_build_image(TP_Arena *arena, TP_Context *tp, LNK_Config *config, LNK_SymbolT
|
||||
}
|
||||
|
||||
if (guid_pdb_symbol) {
|
||||
U64 cv_guid_foff = lnk_file_off_from_symbol(image_section_table, guid_pdb_symbol);
|
||||
U64 cv_guid_foff = lnk_foff_from_symbol(image_section_table, guid_pdb_symbol);
|
||||
Guid *cv_guid = str8_deserial_get_raw_ptr(image_data, cv_guid_foff, sizeof(*cv_guid));
|
||||
*cv_guid = config->guid;
|
||||
}
|
||||
|
||||
if (guid_rdi_symbol) {
|
||||
U64 cv_guid_foff = lnk_file_off_from_symbol(image_section_table, guid_rdi_symbol);
|
||||
U64 cv_guid_foff = lnk_foff_from_symbol(image_section_table, guid_rdi_symbol);
|
||||
Guid *cv_guid = str8_deserial_get_raw_ptr(image_data, cv_guid_foff, sizeof(*cv_guid));
|
||||
*cv_guid = config->guid;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user