forked from Mirrors/tinycc
Fix 'invalid relocation entry' problem on ubuntu - from Bernhard Fischer
parent
d13aa5426a
commit
2bcc187b1b
|
@ -1,5 +1,8 @@
|
||||||
version 0.9.24:
|
version 0.9.24:
|
||||||
|
|
||||||
|
- Fix "invalid relocation entry" problem on ubuntu - from Bernhard Fischer
|
||||||
|
http://lists.gnu.org/archive/html/tinycc-devel/2005-09/msg00051.html
|
||||||
|
|
||||||
- ignore AS_NEEDED ld command
|
- ignore AS_NEEDED ld command
|
||||||
- mark executable sections as executable when running in memory
|
- mark executable sections as executable when running in memory
|
||||||
- added support for win32 wchar_t (Filip Navara)
|
- added support for win32 wchar_t (Filip Navara)
|
||||||
|
|
8
tccelf.c
8
tccelf.c
|
@ -1874,7 +1874,6 @@ static int tcc_load_object_file(TCCState *s1,
|
||||||
|
|
||||||
/* second short pass to update sh_link and sh_info fields of new
|
/* second short pass to update sh_link and sh_info fields of new
|
||||||
sections */
|
sections */
|
||||||
sm = sm_table;
|
|
||||||
for(i = 1; i < ehdr.e_shnum; i++) {
|
for(i = 1; i < ehdr.e_shnum; i++) {
|
||||||
s = sm_table[i].s;
|
s = sm_table[i].s;
|
||||||
if (!s || !sm_table[i].new_section)
|
if (!s || !sm_table[i].new_section)
|
||||||
|
@ -1888,6 +1887,7 @@ static int tcc_load_object_file(TCCState *s1,
|
||||||
s1->sections[s->sh_info]->reloc = s;
|
s1->sections[s->sh_info]->reloc = s;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
sm = sm_table;
|
||||||
|
|
||||||
/* resolve symbols */
|
/* resolve symbols */
|
||||||
old_to_new_syms = tcc_mallocz(nb_syms * sizeof(int));
|
old_to_new_syms = tcc_mallocz(nb_syms * sizeof(int));
|
||||||
|
@ -1949,9 +1949,11 @@ static int tcc_load_object_file(TCCState *s1,
|
||||||
if (sym_index >= nb_syms)
|
if (sym_index >= nb_syms)
|
||||||
goto invalid_reloc;
|
goto invalid_reloc;
|
||||||
sym_index = old_to_new_syms[sym_index];
|
sym_index = old_to_new_syms[sym_index];
|
||||||
if (!sym_index) {
|
/* ignore link_once in rel section. */
|
||||||
|
if (!sym_index && !sm->link_once) {
|
||||||
invalid_reloc:
|
invalid_reloc:
|
||||||
error_noabort("Invalid relocation entry");
|
error_noabort("Invalid relocation entry [%2d] '%s' @ %.8x",
|
||||||
|
i, strsec + sh->sh_name, rel->r_offset);
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
rel->r_info = ELF32_R_INFO(sym_index, type);
|
rel->r_info = ELF32_R_INFO(sym_index, type);
|
||||||
|
|
Loading…
Reference in New Issue