|From:||Domingo Alvarez Duarte|
|Subject:||Re: [Tinycc-devel] Tinycc from git still can't compile fossil-scm|
|Date:||Sat, 29 Mar 2014 21:33:12 +0000|
Hello,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.
On Fri, 28 Mar 2014, Domingo Alvarez Duarte wrote:
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
void __va_end(struct __va_list_struct *ap)
To see it breaking try e.g. this:
% cat vatest.c
static int passdown (const char *str, va_list ap)
va_copy (ap2, ap);
ret = vprintf (str, ap2);
static int myprintf (const char *str, ...)
va_start (ap, str);
passdown (str, ap);
int main ()
myprintf ("%s %i %f\n", "bla", 42, 0.4);
When executed it must print:
bla 42 0.400000
Before your patch it does, after your patch it prints garbage (on my system " 134514261 0.000000") (without the va_copy and ap2 it even just segfaults now, though strictly speaking that's invalid stdarg usage). Please revert.
If you could please _discuss_ changes in parts you don't completely understand on the list before making nilly-willy changes? Just because fossil-scm "works" after your patching doesn't mean much if you don't know _why_ fossil-scm didn't work before, and especially doesn't mean that the change was even correct.
Tinycc-devel mailing list
|[Prev in Thread]||Current Thread||[Next in Thread]|