|
|
@ -126,13 +126,15 @@ std::optional<recomp::symbol_table_t*> decomp_t::decompose(
|
|
|
|
|
|
|
|
|
|
|
|
auto syms = rtn.decompose();
|
|
|
|
auto syms = rtn.decompose();
|
|
|
|
m_syms->put_symbols(syms);
|
|
|
|
m_syms->put_symbols(syms);
|
|
|
|
|
|
|
|
// else the symbol isnt a function and its public or private (some data
|
|
|
|
|
|
|
|
// symbols are private)...
|
|
|
|
} else if (sym->storage_class == coff::storage_class_id::public_symbol ||
|
|
|
|
} else if (sym->storage_class == coff::storage_class_id::public_symbol ||
|
|
|
|
sym->storage_class == coff::storage_class_id::private_symbol) {
|
|
|
|
sym->storage_class == coff::storage_class_id::private_symbol) {
|
|
|
|
auto scn = img->get_section(sym->section_index - 1);
|
|
|
|
auto scn = img->get_section(sym->section_index - 1);
|
|
|
|
auto scn_sym = m_syms->sym_from_hash(m_scn_hash_tbl[scn]);
|
|
|
|
auto scn_sym = m_syms->sym_from_hash(m_scn_hash_tbl[scn]);
|
|
|
|
|
|
|
|
|
|
|
|
// if the section doesnt have a symbol then make one and put it into
|
|
|
|
// if the section containing this symbol doesnt have a symbol then make
|
|
|
|
// the symbol table...
|
|
|
|
// one and put it into the symbol table...
|
|
|
|
//
|
|
|
|
//
|
|
|
|
if (!scn_sym.has_value()) {
|
|
|
|
if (!scn_sym.has_value()) {
|
|
|
|
auto scn_sym_name =
|
|
|
|
auto scn_sym_name =
|
|
|
@ -153,6 +155,8 @@ std::optional<recomp::symbol_table_t*> decomp_t::decompose(
|
|
|
|
scn->size_raw_data);
|
|
|
|
scn->size_raw_data);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// extract the relocations needed for this section...
|
|
|
|
|
|
|
|
//
|
|
|
|
std::vector<recomp::reloc_t> relocs;
|
|
|
|
std::vector<recomp::reloc_t> relocs;
|
|
|
|
auto scn_relocs = reinterpret_cast<coff::reloc_t*>(
|
|
|
|
auto scn_relocs = reinterpret_cast<coff::reloc_t*>(
|
|
|
|
scn->ptr_relocs + reinterpret_cast<std::uint8_t*>(img));
|
|
|
|
scn->ptr_relocs + reinterpret_cast<std::uint8_t*>(img));
|
|
|
@ -167,6 +171,8 @@ std::optional<recomp::symbol_table_t*> decomp_t::decompose(
|
|
|
|
sym_hash, sym_name.data()));
|
|
|
|
sym_hash, sym_name.data()));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// create a new section symbol...
|
|
|
|
|
|
|
|
//
|
|
|
|
decomp::symbol_t new_scn_sym(img, scn_sym_name, 0, scn_data, scn, {},
|
|
|
|
decomp::symbol_t new_scn_sym(img, scn_sym_name, 0, scn_data, scn, {},
|
|
|
|
relocs, sym_type_t::section);
|
|
|
|
relocs, sym_type_t::section);
|
|
|
|
|
|
|
|
|
|
|
|