Use RELA relocations properly for R_DATA_PTR on x86_64.

libtcc.c: Add greloca, a generalisation of greloc that takes an addend.
tcc.h: Add greloca and put_elf_reloca.
tccelf.c: Add put_elf_reloca, a generalisation of put_elf_reloc.
tccgen.c: On x86_64, use greloca instead of greloc in init_putv.
This commit is contained in:
Edmund Grimley Evans
2015-02-21 21:29:03 +00:00
parent 86c850fc58
commit 738606dbd5
4 changed files with 46 additions and 13 deletions

View File

@ -536,7 +536,8 @@ ST_FUNC void put_extern_sym(Sym *sym, Section *section,
}
/* add a new relocation entry to symbol 'sym' in section 's' */
ST_FUNC void greloc(Section *s, Sym *sym, unsigned long offset, int type)
ST_FUNC void greloca(Section *s, Sym *sym, unsigned long offset, int type,
unsigned long addend)
{
int c = 0;
if (sym) {
@ -545,7 +546,12 @@ ST_FUNC void greloc(Section *s, Sym *sym, unsigned long offset, int type)
c = sym->c;
}
/* now we can add ELF relocation info */
put_elf_reloc(symtab_section, s, offset, type, c);
put_elf_reloca(symtab_section, s, offset, type, c, addend);
}
ST_FUNC void greloc(Section *s, Sym *sym, unsigned long offset, int type)
{
greloca(s, sym, offset, type, 0);
}
/********************************************************/