Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-30 Thread Domingo Alvarez Duarte
First of all thanks for Daniel for the fix !

I followed the code on fossil-scm with printfs on va_start/va_end using the
previous tcc stdargs implementation and it showed me that both the parent
and child do va_end on the same pointer that's why the segfault.

And as I looked on the generated code by gcc/clang/pcc all of then do not
us alloc/call all is inlined so no problem of double free.

So I'll not bother look any further on fossil-scm to find why it happens
with the old tcc stdarg implementation.

Thanks again for all of you for this great work !


On Sat, Mar 29, 2014 at 11:37 PM, Michael Matz matz@frakked.de wrote:

 Hi,


 On Sat, 29 Mar 2014, Domingo Alvarez Duarte wrote:

  clang and pcc also generates inline assembly instead of call/alloc.


 Yes.  I haven't said the relevant stdarg functions have to use malloc.
 They just need to interoperate with what the ABI says (and that's passing
 by pointer).  Daniel downthread is correct in that va_list itself doesn't
 have to be a pointer, that was merely TCCs way of fulfilling the ABI
 requirements.  So he fixed it meanwhile, so I'm fine.

 The fossil-scm issue should still be investigated somewhen.  TCCs old
 implementation of stdarg was conforming, so changing it to something else
 shouldn't affect any correctly written code (meaning that I'd suspect
 either some different bug in TCC that now is merely hidden, or a bug in
 fossil-scm (perhaps in their usage of stdarg functions) that's now hidden).



 Ciao,
 Michael.

 ___
 Tinycc-devel mailing list
 Tinycc-devel@nongnu.org
 https://lists.nongnu.org/mailman/listinfo/tinycc-devel

___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-30 Thread Daniel Glöckner
On Sun, Mar 30, 2014 at 04:10:48PM +0100, Domingo Alvarez Duarte wrote:
 I followed the code on fossil-scm with printfs on va_start/va_end using the
 previous tcc stdargs implementation and it showed me that both the parent
 and child do va_end on the same pointer that's why the segfault.

As long as fossil-scm uses fork and not vfork, calling va_end in the
parent and child can't be the reason for the segfault.

Best regards,

  Daniel

___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-29 Thread Daniel Glöckner
 Errr.  I see you now fiddled with that on mob.  Commit c025478d7c03,
 rewriting va* to not use malloc.  That's completely wrong.  You've
 effectively changed the ABI of stdarg, and hence interoperability
 with every non-TCC compiler.  The public va_list on x86_64 _must_ be
 a pointer.

Actually sizeof(va_list) is 24 on x86_64 GCC although va_list is passed
as a pointer. So we should

typedef void *va_list[3];

and cast that to struct __va_list_struct as needed.

Best regards,

  Daniel

___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-29 Thread Daniel Glöckner
On Sat, Mar 29, 2014 at 11:46:26PM +0100, Daniel Glöckner wrote:
 Actually sizeof(va_list) is 24 on x86_64 GCC although va_list is passed
 as a pointer. So we should
 
 typedef void *va_list[3];

Or simply

typedef struct __va_list_struct va_list[1];

___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-29 Thread Daniel Glöckner
On Sat, Mar 29, 2014 at 11:52:42PM +0100, Daniel Glöckner wrote:
 Or simply
 
 typedef struct __va_list_struct va_list[1];

Fixed in mob.

___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-29 Thread Michael Matz

Hi,

On Sat, 29 Mar 2014, Domingo Alvarez Duarte wrote:


Thanks for pointing it and show an example to test !
Now going back to the original problem the original tcc implementation leaks
memory on:

void *__va_copy(struct __va_list_struct *src)
{
    struct __va_list_struct *dest =
        (struct __va_list_struct *)malloc(sizeof(struct __va_list_struct));
    *dest = *src;
    return dest;
}



No, that's not leaking memory, because a va_copy _must_ be paired with a 
va_end call in client code.  And that one will release the 
allocated memory.


And I'll continue investigating a way to make it work with fossil-scm 
for the X86_64, the problem that I saw is that there is a double free 
when the process fork somehow the fossil compiled by tcc seem to not 
duplicate the malloced strioneng and both the parent and child free the 
same string.


That's no double free, because the process space will be unshared after 
fork.  I don't know what tool you used that pointed out a double free in 
this specific situation, but if it really thought this situation is a 
double free then it's buggy.



Ciao,
Michael.___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel


Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm

2014-03-28 Thread Domingo Alvarez Duarte
I found that on X86_64 linux if I do not free the memory on __va_end(), the
compiled fossil-scm server works, I suspect is something with the
fork/threads.
---
void __va_end(struct __va_list_struct *ap)
{
//free(ap);
}

Cheers !


On Thu, Mar 27, 2014 at 12:23 PM, Domingo Alvarez Duarte mingo...@gmail.com
 wrote:

 When I say that fossil-scm compiled with tcc segfault I mean on linux
 X86_64, but on linux 32bits it does compile and work fine.
 So it's something specific to 64 bits.

 Cheers !


 On Thu, Mar 27, 2014 at 11:50 AM, Domingo Alvarez Duarte 
 mingo...@gmail.com wrote:

 Hello !

 Even with our latest bug fixes tinycc fail to compile fossil-scm, I mean
 it does compile but segfault after a few malloc calls.

 Cheers !



___
Tinycc-devel mailing list
Tinycc-devel@nongnu.org
https://lists.nongnu.org/mailman/listinfo/tinycc-devel