Hi team, I'm probably not too far to have a working tcc on OpenBSD.
- I've got a tcc which produces a .o: tcc -c foo.c
- The link sequence is /usr/lib/crtbegin.o foo.o /usr/lib/crtend.o
and tcc has already been modified to produce this sequence on OpenBSD
instead or crti.o/crtn.o
- The foo.o and crtend.o ELF look good but crtbegin.o is not
It fails with: crtbegin.o: error: Invalid relocation entry [ 2] '.rela.text'
@ 0000006a
You can reproduce this issue with tcc on Linux x64 with enclosed crtbegin.o
[jullien@fedora64 ~]$ tcc -o foo crtbegin.o foo.o
crtbegin.o: error: Invalid relocation entry [ 2] '.rela.text' @ 0000006a
[jullien@fedora64 ~]$
The code fails here with type == 2, I tried to filter this type with no
luck:
for_each_elem(s, (offset / sizeof(*rel)), rel, ElfW_Rel) {
int type;
unsigned sym_index;
/* convert symbol index */
type = ELFW(R_TYPE)(rel->r_info);
sym_index = ELFW(R_SYM)(rel->r_info);
/* NOTE: only one symtab assumed */
if (sym_index >= nb_syms)
goto invalid_reloc;
sym_index = old_to_new_syms[sym_index];
/* ignore link_once in rel section. */
if (!sym_index && !sm_table[sh->sh_info].link_once
#ifdef TCC_TARGET_ARM
&& type != R_ARM_V4BX
#elif defined TCC_TARGET_RISCV64
&& type != R_RISCV_ALIGN
&& type != R_RISCV_RELAX
#endif
) {
invalid_reloc:
tcc_error_noabort("Invalid relocation entry [%2d] '%s' @
%.\
8x",
i, strsec + sh->sh_name, (int)rel->r_offset);
goto fail;
}
I confess I'm an early bird with ELF.
Mod includes all required changes.
Your help is welcome.
C.
crtbegin.o
Description: Binary data
_______________________________________________ Tinycc-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/tinycc-devel
