From f0b7566181d8cf3407a6aaef51703b62b07ce2a6 Mon Sep 17 00:00:00 2001 From: Edmund Grimley Evans Date: Fri, 16 Oct 2015 20:33:41 +0100 Subject: [PATCH] tccelf.c: Reset sym after call to build_got. The call to build_got can cause symtab_section->data to be reallocated (build_got -> add_elf_sym -> put_elf_sym -> section_ptr_add -> section_realloc -> tcc_realloc). This is not obvious on a cursory inspection, but fortunately Valgrind spotted it immediately. Are there other, similar bugs that Valgrind did not detect? --- tccelf.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tccelf.c b/tccelf.c index 1f879465..f9a8ceda 100644 --- a/tccelf.c +++ b/tccelf.c @@ -1446,8 +1446,10 @@ ST_FUNC void build_got_entries(TCCState *s1) break; } - if (!s1->got) + if (!s1->got) { build_got(s1); + sym = &((ElfW(Sym) *)symtab_section->data)[sym_index]; + } if (type == R_X86_64_GOT32 || type == R_X86_64_GOTPCREL || type == R_X86_64_PLT32) { unsigned long ofs;