Again I've no idea of the best patch to apply, but two remarks:
* First, 106_pthread.c fails on Windows because of:
Test: 106_pthread...
--- 106_pthread.expect 2019-10-22 20:47:55.982574300 +0200
+++ 106_pthread.output 2019-10-23 11:40:46.742218000 +0200
@@ -1 +1,2 @@
-ok
+In file included from 106_pthread.c:2:
+106_pthread.c:2: error: include file 'pthread.h' not found
You should run this test only on Linux systems
* Your new patch test TCC_TARGET_X86_64, how do you explain that with or without this
patch your test case looks to work on Windows x64 and produces "42 42"?
-----Original Message-----
From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=address@hidden] On
Behalf Of Herman ten Brugge via Tinycc-devel
Sent: Wednesday, October 23, 2019 11:23
To: address@hidden; address@hidden
Cc: Herman ten Brugge
Subject: Re: [Tinycc-devel] core dump because stack overwritten
How about this patch:
--------------------------
--- a/tccgen.c 2019-10-22 19:52:48.761977245 +0200
+++ b/tccgen.c 2019-10-23 11:18:14.871290060 +0200
@@ -2627,7 +2627,9 @@ static void gen_cvt_ftoi1(int t)
gfunc_call(1);
vpushi(0);
vtop->r = REG_IRET;
+#if !defined(TCC_TARGET_X86_64) /* REG_LRET only for VT_QLONG */
vtop->r2 = REG_LRET;
+#endif
} else {
gen_cvt_ftoi(t);
}
--------------------------
According to https://en.wikipedia.org/wiki/X86_calling_conventions the
x86_64 only uses rax for 64 bits returns.
Herman
On 2019-10-23 07:20, Christian Jullien wrote:
I confirm your test case fails on Linux x64. It looks your patch pay attention
to PTR_SIZE == 4 (i.e. it now enters if only with 32bit processor).
However, w.o. the patch I can't reproduce the core dump on aarch64 Linux nor with Windows
x64 which are also a 64bit processors. They both correctly display "42 42"
No core dumps does not mean it works, memory may be corrupted somewhere else.
Either your patch is only required for Linux x64 or there is something to
investigate more carefully.
I can only test on different platforms but I'm unable to give you further
advices.
M2c
C.
-----Original Message-----
From: Tinycc-devel [mailto:tinycc-devel-bounces+eligis=address@hidden] On
Behalf Of Herman ten Brugge via Tinycc-devel
Sent: Tuesday, October 22, 2019 22:15
To: address@hidden
Cc: Herman ten Brugge
Subject: [Tinycc-devel] core dump because stack overwritten
I have a small testcase:
--------------
#include <stdio.h>
#include <stdlib.h>
#include <inttypes.h>
int
main(void)
{
struct tst_struct { uint64_t cnt; } *tst =
(struct tst_struct *) malloc (sizeof (struct tst_struct));
tst->cnt = 42;
printf ("%" PRIu64 " %" PRIu64 "\n", tst->cnt, (uint64_t) (tst->cnt /
1.0));
return 0;
}
----------------
when I compile this with tcc and run it I get a core dump. The problem
is that the stack is overwritten.
I have a fix.
------------------------
--- a/tccgen.c 2019-10-22 19:52:48.761977245 +0200
+++ b/tccgen.c 2019-10-22 22:08:08.465825842 +0200
@@ -1203,7 +1203,7 @@ ST_FUNC void save_reg_upstack(int r, int
}
#endif
/* special long long case */
- if ((p->r2 & VT_VALMASK) < VT_CONST) {
+ if (PTR_SIZE == 4 && (p->r2 & VT_VALMASK) < VT_CONST) {
sv.c.i += PTR_SIZE;
store(p->r2, &sv);
}
---------------------
But am not sure if this is the correct fix. The code generator is quite
complex.
Herman
_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel
_______________________________________________
Tinycc-devel mailing list
address@hidden
https://lists.nongnu.org/mailman/listinfo/tinycc-devel