tinycc-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Tinycc-devel] BUG: code generation problem in i386-gen.c:gcall_or_j


From: Christian Jullien
Subject: Re: [Tinycc-devel] BUG: code generation problem in i386-gen.c:gcall_or_jmp()
Date: Sun, 10 Sep 2017 15:21:58 +0200

Just tested on Windows 32 and 64 + on Rpi.
No error detected. Very god job.

Thanks

-----Original Message-----
From: Tinycc-devel [mailto:address@hidden On Behalf Of ???
Sent: dimanche 10 septembre 2017 13:37
To: address@hidden
Subject: Re: [Tinycc-devel] BUG: code generation problem in 
i386-gen.c:gcall_or_jmp()

Tests added :)

However, for the AL/AX problem and the fastcall problem, they are i386 
specific, so I removed them from other platforms.

For the "calling function pointers casted from integers" problem, I think it is 
trivial and hard to test, so I haven't add test for it. (I can't assume some 
fixed address is not occupied by other modules, also, compiling as DLL and 
force DLL relocation to happen is not portable.)



在 2017年09月09日 23:59, Christian Jullien 写道:
> Zhang,
> Thank you for commits.
> 
> I don't really know if they make tcc better or not but I sure that:
> 
> - Windows 32/64 has no regression
> - RPi has no regression
> - Your commit messages and patch are clear very easy to understand.
> 
> To me (again I'm not a maintainer) they seem to be good contributions. To be 
> perfect, they lack of new tests that show why tcc was wrong before your 
> commits and why now it is doing right.
> With those new tests, we can better tell you if your fixes work on all 
> supported platforms. Feel free to add them. No one will protest to see new 
> tests on a tcc.
> 
> Christian
> 
> -----Original Message-----
> From: Tinycc-devel [mailto:address@hidden On Behalf Of ???
> Sent: samedi 9 septembre 2017 14:56
> To: address@hidden
> Subject: Re: [Tinycc-devel] BUG: code generation problem in 
> i386-gen.c:gcall_or_jmp()
> 
> OK, I will push my modifications to the mob branch.
> 
> 
> 在 2017年09月09日 18:26, Christian Jullien 写道:
>> Hello Zhang
>>
>> First I'm not an official maintainer of tcc but a regular user and observer 
>> of its evolutions. I also check that it does not regress on the platforms I 
>> use.
>>
>> That said, your recent proposals seem strongly argumented with associated 
>> tests. Since no one commented your proposal (that sad!).
>> I suggest you to push them in mod so that we can see if we have regression 
>> or not with them. Please make one commit at a time for a given fix so that 
>> we can better insulate regression (if any).
>>
>> I any cases, many thanks to participate to this project and to try to make 
>> it better.
>>
>> Christian
>>
>> -----Original Message-----
>> From: Tinycc-devel [mailto:address@hidden On Behalf Of ???
>> Sent: samedi 9 septembre 2017 05:03
>> To: address@hidden
>> Subject: [Tinycc-devel] BUG: code generation problem in 
>> i386-gen.c:gcall_or_jmp()
>>
>> Hello,
>>
>> I found 3 problems in i386-gen.c:gcall_or_jmp().
>>
>> (1) There is a fix for extending return value to whole register, however, 
>> this fix is in the constant case only, if a call is indirect, this fix will 
>> not be applied and the result will be wrong.
>>
>> (2) The fix is for 'call' and if 'is_jmp' == 1, it will generate redundant 
>> code.
>>
>> (3) Calling constant should use the indirect way. For example, if someone 
>> write "((void (*)(void)) 0x12345678)()" in a DLL, the generated code will be 
>> "CALL 0x12345678". However, because the imm in CALL instruction is PC 
>> related, when the DLL is relocated, the call target will be wrong.
>>
>>
>>
>> I provided a patch and two testcase.
>>
>>
>>
>> 'test-movzx-movsx.c' is for problem (1) and (2).
>> run it with:
>>      tcc -run test-movzx-movsx.c
>>
>> expected output is:
>>      0000ABCE 0000ABCE
>>      FFFFABCE FFFFABCE
>>      000000CE 000000CE
>>      FFFFFFCE FFFFFFCE
>>
>>      0000ABCE 0000ABCE
>>      FFFFABCE FFFFABCE
>>      000000CE 000000CE
>>      FFFFFFCE FFFFFFCE
>>
>>
>>
>>
>> the other two files are for problem (3).
>> run it with:
>>
>> # set DLL base at 0x400000 to force a relocation tcc -shared 
>> -Wl,-Ttext=0x00400000 test-call-constant-dll.c
>>
>> tcc -L. -ltest-call-constant-dll -run test-call-constant-run.c
>>
>> expected output is:
>>      by pointer variable: FEEDBEEF
>>      by pointer constant: FEEDBEEF
>>
>>
>>
>>
>> Thanks
>> Zhang Boyang
>>
>>
>> _______________________________________________
>> Tinycc-devel mailing list
>> address@hidden
>> https://lists.nongnu.org/mailman/listinfo/tinycc-devel
>>
> 

--
张博洋 - 复旦大学2014级计算机科学与技术
我的手机: 18600020982
我的个人网站: http://www.zbyzbyzby.com

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]