diff options
author | Mitya Selivanov <automainint@guattari.tech> | 2024-07-30 16:00:36 +0200 |
---|---|---|
committer | Mitya Selivanov <automainint@guattari.tech> | 2024-07-30 16:00:36 +0200 |
commit | 3341c4823a35bb9ca37e2bdc3864ce1ebd78d62c (patch) | |
tree | 948304a5bf2854dfd778b50ed85fe4f2bc8fb61e /bxgen.c | |
parent | 41b51baf9b14bae073aff088e624c139e47a1d62 (diff) | |
download | bxgen-3341c4823a35bb9ca37e2bdc3864ce1ebd78d62c.zip |
Fix symbol search
Diffstat (limited to 'bxgen.c')
-rwxr-xr-x | bxgen.c | 94 |
1 files changed, 47 insertions, 47 deletions
@@ -2360,7 +2360,7 @@ i64 unit_write_in_memory( i64 rotext_address = base_address + program_offset; i64 entry = rotext_address + codegen->entry_point; - BX_LOG(VERBOSE, "Entry point: %08llx (%lld)", entry, entry); + BX_LOG(VERBOSE, "Entry point: 0x%08llx (%lld)", entry, entry); i64 rotext_size = codegen->offset_code; i64 rwzval_size = 0; @@ -2654,47 +2654,47 @@ i64 unit_write_in_memory( #define TODO_ BX_FAIL("Not implemented", 0) - case R_X86_64_NONE: /* Do nothing */ break; - case R_X86_64_64: ADD_(64, 0); break; // 64, S + A - case R_X86_64_PC32: ADD_(32, S + A - P); break; // 32, S + A - P - case R_X86_64_GOT32: TODO_; break; // 32, G + A - case R_X86_64_PLT32: ADD_(32, L + A - P); break; // 32, L + A - P - case R_X86_64_COPY: /* Do nothing */ break; - case R_X86_64_GLOB_DAT: TODO_; break; // 64, S - case R_X86_64_JUMP_SLOT: TODO_; break; // 64, S - case R_X86_64_RELATIVE: TODO_; break; // 64, B + A - case R_X86_64_GOTPCREL: ADD_(32, 0); break; // 32, G + GOT + A - P - case R_X86_64_32: TODO_; break; // 32, S + A - case R_X86_64_32S: TODO_; break; // 32, S + A - case R_X86_64_16: TODO_; break; // 16, S + A - case R_X86_64_PC16: TODO_; break; // 16, S + A - P - case R_X86_64_8: TODO_; break; // 8, S + A - case R_X86_64_PC8: TODO_; break; // 8, S + A - P - case R_X86_64_DTPMOD64: TODO_; break; - case R_X86_64_DTPOFF64: TODO_; break; - case R_X86_64_TPOFF64: TODO_; break; - case R_X86_64_TLSGD: TODO_; break; - case R_X86_64_TLSLD: TODO_; break; - case R_X86_64_DTPOFF32: TODO_; break; - case R_X86_64_GOTTPOFF: ADD_(32, 0); break; // 32, S - GOT - case R_X86_64_TPOFF32: ADD_(32, 0); break; // 32, S + A - B - case R_X86_64_PC64: TODO_; break; // 64, S + A - P - case R_X86_64_GOTOFF64: TODO_; break; - case R_X86_64_GOTPC32: TODO_; break; // 32, GOT + A - P - case R_X86_64_GOT64: TODO_; break; - case R_X86_64_GOTPCREL64: TODO_; break; - case R_X86_64_GOTPC64: TODO_; break; // 64, GOT + A - P - case R_X86_64_GOTPLT64: TODO_; break; - case R_X86_64_PLTOFF64: TODO_; break; - case R_X86_64_SIZE32: TODO_; break; // 32, Z + A - case R_X86_64_SIZE64: TODO_; break; // 64, Z + A - case R_X86_64_GOTPC32_TLSDESC: TODO_; break; - case R_X86_64_TLSDESC_CALL: TODO_; break; - case R_X86_64_TLSDESC: TODO_; break; - case R_X86_64_IRELATIVE: TODO_; break; - case R_X86_64_RELATIVE64: TODO_; break; - case R_X86_64_GOTPCRELX: TODO_; break; - case R_X86_64_REX_GOTPCRELX: ADD_(32, 0); break; // 32, GOT - P + G - 4 + case R_X86_64_NONE: /* Do nothing */ break; + case R_X86_64_64: ADD_(64, 0); break; // 64, S + A + case R_X86_64_PC32: ADD_(32, S + A - P); break; // 32, S + A - P + case R_X86_64_GOT32: TODO_; break; // 32, G + A + case R_X86_64_PLT32: ADD_(32, L + A - P); break; // 32, L + A - P + case R_X86_64_COPY: /* Do nothing */ break; + case R_X86_64_GLOB_DAT: TODO_; break; // 64, S + case R_X86_64_JUMP_SLOT: TODO_; break; // 64, S + case R_X86_64_RELATIVE: TODO_; break; // 64, B + A + case R_X86_64_GOTPCREL: ADD_(32, 0); break; // 32, G + GOT + A - P + case R_X86_64_32: TODO_; break; // 32, S + A + case R_X86_64_32S: TODO_; break; // 32, S + A + case R_X86_64_16: TODO_; break; // 16, S + A + case R_X86_64_PC16: TODO_; break; // 16, S + A - P + case R_X86_64_8: TODO_; break; // 8, S + A + case R_X86_64_PC8: TODO_; break; // 8, S + A - P + case R_X86_64_DTPMOD64: TODO_; break; + case R_X86_64_DTPOFF64: TODO_; break; + case R_X86_64_TPOFF64: TODO_; break; + case R_X86_64_TLSGD: TODO_; break; + case R_X86_64_TLSLD: TODO_; break; + case R_X86_64_DTPOFF32: TODO_; break; + case R_X86_64_GOTTPOFF: ADD_(32, 0); break; // 32, S - GOT + case R_X86_64_TPOFF32: ADD_(32, 0); break; // 32, S + A - B + case R_X86_64_PC64: TODO_; break; // 64, S + A - P + case R_X86_64_GOTOFF64: TODO_; break; + case R_X86_64_GOTPC32: TODO_; break; // 32, GOT + A - P + case R_X86_64_GOT64: TODO_; break; + case R_X86_64_GOTPCREL64: TODO_; break; + case R_X86_64_GOTPC64: TODO_; break; // 64, GOT + A - P + case R_X86_64_GOTPLT64: TODO_; break; + case R_X86_64_PLTOFF64: TODO_; break; + case R_X86_64_SIZE32: TODO_; break; // 32, Z + A + case R_X86_64_SIZE64: TODO_; break; // 64, Z + A + case R_X86_64_GOTPC32_TLSDESC: TODO_; break; + case R_X86_64_TLSDESC_CALL: TODO_; break; + case R_X86_64_TLSDESC: TODO_; break; + case R_X86_64_IRELATIVE: TODO_; break; + case R_X86_64_RELATIVE64: TODO_; break; + case R_X86_64_GOTPCRELX: TODO_; break; + case R_X86_64_REX_GOTPCRELX: ADD_(32, 0); break; // 32, GOT - P + G - 4 default: BX_LAX(0, "Unknown relocation type"); #undef ADD_ @@ -2735,13 +2735,13 @@ i64 unit_write_in_memory( b8 found = 0; for (i64 i = 0; i < num_symbols; ++i) - if (linker->symbols[i].section != 0 && - linker->symbols[i].name_size == rel.name_size && - bx_mem_eq(linker->symbols[i].name, rel.name, 6)) { + if (linker->symbols[i].section != 0 && + linker->symbols[i].name_size == rel.name_size && + bx_mem_eq(linker->symbols[i].name, rel.name, rel.name_size)) { i64 value = rel.value + linker->symbols[i].address; write_i64(LE, value, begin, end); found = 1; - BX_LOG(VERBOSE, "Found %.*s: %08llx", rel.name_size, rel.name, value); + BX_LOG(VERBOSE, "Found %.*s: 0x%08llx", rel.name_size, rel.name, value); break; } @@ -3428,7 +3428,7 @@ int main(int argc, char **argv) { n_call_by_name( mainproc, CONV_CDECL, // calling convention - "_IO_puts", // proc name + "puts", // proc name 1, // number of arguments (Var[]) {{ .node = n_str(mainproc, "hello sailor"), // the first argument |