[split] Add CFI ops, fix call/return prediction, other changes
Paolo Bonzini
bonzini@gnu.org
Wed Sep 30 15:25:00 GMT 2009
On 09/30/2009 05:15 PM, Ian Lance Taylor wrote:
> Paolo Bonzini<bonzini@gnu.org> writes:
>
>>> movl 4(%ebp), %eax # Increment return address
>>> inc %eax
>>> movl %eax, -8(%ebp) # Store it in an unused slot
>>>
>>> movl -4(%ebp), %eax # Restore 3rd register
>>>
>>> call *-8(%ebp) # Call our caller via slot
>>
>> Also, would it make sense to reserve 3 bytes for the ret, so that
>> stdcall functions could have split stack? Alternatively, you need to
>> disable split stack (with a sorry) for stdcall functions.
>
> stdcall functions don't work yet, but this isn't why. The ret we're
> skipping here is just magic inserted to make the call/return predictor
> line up. It's really the split_stack_return insn, not a regular
> return. The actual stack popping ret is at the end of the function as
> usual.
Yes, understood. But for stdcall functions to work you need a
stack-popping ret here too (you are returning to the caller and need to
clean up your arguments). This would consume more than one byte.
Paolo
More information about the Gcc-patches
mailing list