Hi Segher,
a small gcc related question for x86/x86_64 if I may.
On 29.07.2009 05:24, ron minnich wrote:
On Tue, Jul 28, 2009 at 5:44 PM, Robert Millanrmh@aybabtu.com wrote:
Isn't C code allowed to set it back?
my understanding of all this is:
- if you want it set a certain way, you have to set it
- don't ever assume it has any particular value.
There is an excellent LWN.net article about this: http://lwn.net/Articles/272048/
"GCC relies on the ABI mandate that the direction flag is cleared before entry to a function"
That means if you call the payload via a pointer, gcc will make sure the direction flag is cleared (either by clearing it directly before the call or by never changing it after the start of the program).
AFAIK calling a function via inline asm is not something gcc can see, so this special case might be an exception. Then again, it's pretty unlikely that gcc sets the direction flag for some operations and defers clearing to the last possible moment.
Regards, Carl-Daniel