[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Tinycc-devel] core dump because stack overwritten
From: |
Christian Jullien |
Subject: |
Re: [Tinycc-devel] core dump because stack overwritten |
Date: |
Wed, 23 Oct 2019 20:00:04 +0200 |
I'm not an official maintainer but as long is fixes a bug (with associated
test) and does break anything else, I would say yes (to push on mod).
If you do, please add the other test given by Pursuer.
C.
-----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 17:26
To: address@hidden; address@hidden
Cc: Herman ten Brugge
Subject: Re: [Tinycc-devel] core dump because stack overwritten
I looked at the website and see that -DTCC_TARGET_PE is used to compile
gcc on windows.
This uses 'tccpe.c' and not 'x86_64-gen.c x86_64-link.c i386-asm.c
x86_64-asm.h'.
I compiled the code with the x86_64-w64-mingw32-gcc compile on linux and
see different code with tccpe.c.
So I still believe my patch is correct. The other targets never touch
this code. So only x86_64 is using this.
Can I apply this patch? Or is there some one else who can confirm that
this is the correct or not.
Herman
On 2019-10-23 15:53, Christian Jullien wrote:
> Yes, it's fixed now. Thanks.
>
> There are different ways to build tcc for Windows.
> I personally wrote and maintain https://sourceforge.net/projects/wintcc/
>
> Which makes a reproducible native build on Windows with both 32/64 backend.
>
> It requires Cygwin only for first step bootstrap with gcc.
>
> C.
>
> -----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 13:20
> To: address@hidden; address@hidden
> Cc: Herman ten Brugge
> Subject: Re: [Tinycc-devel] core dump because stack overwritten
>
> I updated the Makefile. I hope it now works on all targets.
> How do I test the Windows port. I do not have any compilers installed. I
> use linux 99.999% of the time.
>
> Herman
>
> On 2019-10-23 11:50, Christian Jullien wrote:
>> 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
>>
>
> _______________________________________________
> 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
- [Tinycc-devel] core dump because stack overwritten, Herman ten Brugge, 2019/10/22
- Re: [Tinycc-devel] core dump because stack overwritten, Christian Jullien, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten, Herman ten Brugge, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten, Christian Jullien, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten, Herman ten Brugge, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten, Christian Jullien, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten, Herman ten Brugge, 2019/10/23
- Re: [Tinycc-devel] core dump because stack overwritten,
Christian Jullien <=
- Re: [Tinycc-devel] core dump because stack overwritten, Michael Matz, 2019/10/24