Hi, On Wed, 9 Nov 2016, Steffen Nurpmeso wrote:
> Hello. > > Michael Matz <[email protected]> wrote: > |On Tue, 8 Nov 2016, Steffen Nurpmeso wrote: > ... > |> cc': corrupted double-linked list: 0x000000000065c0f0 *** > | > |Something in tcc is probably overwriting random memory which happens to be > |meta info malloc is using for its own implementation leading to the > |ovserved abort (which basically is a consistency check on that internal > |data). valgrind often helps in identifying the real cause, so do: > > The attached diff fixes the issue for me. So, the patch was: > diff --git a/tccelf.c b/tccelf.c > index 9ed2484..52db06a 100644 > --- a/tccelf.c > +++ b/tccelf.c > @@ -128,9 +128,11 @@ ST_FUNC void tccelf_delete(TCCState *s1) > ST_FUNC Section *new_section(TCCState *s1, const char *name, int sh_type, > int sh_flags) > { > Section *sec; > + size_t len; > > - sec = tcc_mallocz(sizeof(Section) + strlen(name)); > - strcpy(sec->name, name); > + len = strlen(name) +1; > + sec = tcc_mallocz(sizeof(Section) + len); > + memcpy(sec->name, name, len); > sec->sh_type = sh_type; > sec->sh_flags = sh_flags; > switch(sh_type) { Maybe it helps but if so for unknown reasons. The type Section has as last member "char name[1]", that is, sizeof(Section) already contains the +1. The above merely overallocates the struct by another byte. Can you show use valgrind output, or alternatively give us the .o file that causes the crash? > @@ -695,8 +697,9 @@ ST_FUNC void relocate_section(TCCState *s1, Section *s) > #endif > > for_each_elem(sr, 0, rel, ElfW_Rel) { > - ptr = s->data + rel->r_offset; > + section_ptr_add(s, 8); > > + ptr = s->data + rel->r_offset; > sym_index = ELFW(R_SYM)(rel->r_info); > sym = &((ElfW(Sym) *)symtab_section->data)[sym_index]; > val = sym->st_value; No, that's certainly wrong. You don't want to enlarge a section by 8 bytes for every relocation applied to it. It must already be large enough to cover the relocations place, otherwise the one creating the reloc did something wrong. Ciao, Michael. _______________________________________________ Tinycc-devel mailing list [email protected] https://lists.nongnu.org/mailman/listinfo/tinycc-devel
