Hello, I have made somes tests and the commit :
http://repo.or.cz/tinycc.git/commitdiff/ca92bfc3c64128872793c167de3a58 a78b9a1299 reintroduces the problem. Thanks in advance. Best regards, Thomas 2017-04-26 16:27 GMT+02:00 Thomas Stalder <[email protected]>: > Hello, > > I have the same issue with latest mob version : > > reloc 1: x=0xfffffe val=0x1ec4c newx=0xfdeebc9c name=printf > tcc: error: can't relocate value at 2132fa8,1 > > I try this : > > --- arm-link.c_ori 2017-04-26 15:55:23.427465166 +0200 > +++ arm-link.c 2017-04-26 16:20:03.018798813 +0200 > @@ -183,6 +183,10 @@ > { > int x, is_thumb, is_call, h, blx_avail, is_bl, th_ko; > x = (*(int *) ptr) & 0xffffff; > + if (s1->output_type == TCC_OUTPUT_MEMORY){ > + printf("TEST RELOC\n"); > + val = s1->plt->sh_addr; > + } > #ifdef DEBUG_RELOC > printf ("reloc %d: x=0x%x val=0x%x ", type, x, val); > #endif > > but cause a segmentation fault. > > The problem was describe in the thread : > > Out of range jump because no PLT is used for defined symbols, which can be > a problem when compiling to memory and running from there when the > compiled code calls functions defined in the executable itself but the > code buffer is allocated too far away from those definitions. > > If someone had an idea or can help me? > > Thanks in advance. > > Best regards, > Thomas > > 2016-11-09 16:18 GMT+01:00 Michael Matz <[email protected]>: > >> Hello, >> >> On Mon, 7 Nov 2016, Thomas Stalder wrote: >> >> > I have tested with latests TinyCC git commit and sometimes i have the >> error >> > (with DEBUG_RELOC) : >> > >> > reloc 1: x=0xfffffe val=0x1eddc newx=0xfdaf7d70 name=printf >> > tcc: error: can't relocate value at 2527064,1 >> >> Out of range jump because no PLT is used for defined symbols, which can be >> a problem when compiling to memory and running from there when the >> compiled code calls functions defined in the executable itself but the >> code buffer is allocated too far away from those definitions. I fixed a >> similar problem for aarch64 in 682ecc17, probably arm needs something >> similar. Untested patch below, which possibly works around this, please >> try. >> >> >> Ciao, >> Michael. >> >> diff --git a/tccelf.c b/tccelf.c >> index 1e05bfb..a027700 100644 >> --- a/tccelf.c >> +++ b/tccelf.c >> @@ -828,7 +828,8 @@ ST_FUNC void relocate_section(TCCState *s1, Section >> *s) >> { >> int x, is_thumb, is_call, h, blx_avail, is_bl, th_ko; >> x = (*(int *) ptr) & 0xffffff; >> - if (sym->st_shndx == SHN_UNDEF) >> + if (sym->st_shndx == SHN_UNDEF >> + || s1->output_type == TCC_OUTPUT_MEMORY) >> val = s1->plt->sh_addr; >> #ifdef DEBUG_RELOC >> printf ("reloc %d: x=0x%x val=0x%x ", type, x, val); >> @@ -1578,7 +1579,8 @@ ST_FUNC void build_got_entries(TCCState *s1) >> sym_index = ELFW(R_SYM)(rel->r_info); >> sym = &((ElfW(Sym) *)symtab_section->data)[sym_index]; >> if (type != R_ARM_GOTOFF && type != R_ARM_GOTPC >> - && sym->st_shndx == SHN_UNDEF) { >> + && (sym->st_shndx == SHN_UNDEF >> + || s1->output_type == TCC_OUTPUT_MEMORY)) { >> unsigned long ofs; >> /* look at the symbol got offset. If none, then add >> one */ >> if (type == R_ARM_GOT32) >> >> _______________________________________________ >> Tinycc-devel mailing list >> [email protected] >> https://lists.nongnu.org/mailman/listinfo/tinycc-devel >> > >
_______________________________________________ Tinycc-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/tinycc-devel
