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:
10
libtcc.c
10
libtcc.c
@ -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);
|
||||
}
|
||||
|
||||
/********************************************************/
|
||||
|
||||
Reference in New Issue
Block a user