[Issue 12085] New: PIC code on X86 should use thunk to get PC
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Wed Feb 5 11:49:07 PST 2014
https://d.puremagic.com/issues/show_bug.cgi?id=12085
Summary: PIC code on X86 should use thunk to get PC
Product: D
Version: unspecified
Platform: x86
OS/Version: Linux
Status: NEW
Keywords: dll
Severity: enhancement
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: code at dawg.eu
--- Comment #0 from Martin Nowak <code at dawg.eu> 2014-02-05 11:49:00 PST ---
If one looks at GCC output of PIC code they use a small function to obtain the
PC, like so.
__x86.get_pc_thunk.bx LABEL NEAR
mov ebx, dword ptr [esp] ; 0430 _ 8B. 1C 24
ret ; 0433 _ C3
Then the thunk is called to get the PC into EBX.
call __x86.get_pc_thunk.bx ; 0444 _ E8, FFFFFFE7
What we currently do looks like this.
push ebx ; 0564 _ 53
call ?_014 ; 0565 _ E8, 00000000
?_014 LABEL NEAR
pop ebx ; 056A _ 5B
This is suboptimal for two reasons, first we're wasting 2 bytes per call for
the push and pop of ebx, second we invalidate the return stack buffer for each
of these calls, because there is no matching return.
I suggest to switch to the same technique that GCC is using.
We could even use the exact same naming so that the thunks produced by GCC for
C code and dmd for D code could be merged at link time.
--
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list