Simplify and fix GOT32 + PLT32 reloc commit

Introduce a new attribute to check the existence of a PLT entry for a
given symbol has the presence of an entry for that symbol in the dynsym
section is not proof that a PLT entry exists.

This fixes commit dc8ea93b13.
master
Thomas Preud'homme 2014-03-26 22:13:20 +08:00
parent bed865275d
commit aa561d7011
2 changed files with 3 additions and 3 deletions

1
tcc.h
View File

@ -522,6 +522,7 @@ typedef struct ASMOperand {
struct sym_attr {
unsigned long got_offset;
unsigned char has_plt_entry:1;
#ifdef TCC_TARGET_ARM
unsigned char plt_thumb_stub:1;
#endif

View File

@ -1042,10 +1042,9 @@ static void put_got_entry(TCCState *s1,
if (s1->dynsym) {
sym = &((ElfW(Sym) *)symtab_section->data)[sym_index];
name = (char *) symtab_section->link->data + sym->st_name;
if (!find_elf_sym(s1->dynsym, name))
need_plt_entry = 1;
else
if (s1->sym_attrs[sym_index].has_plt_entry)
return;
s1->sym_attrs[sym_index].has_plt_entry = 1;
offset = sym->st_value;
#if defined(TCC_TARGET_I386) || defined(TCC_TARGET_X86_64)
if (need_plt_entry) {