5 ms·
> The flag can have arbitrary value in on entry to memcpy in an ordinary situation not involving threads or signals. It can not have arbitrary value on entry.
by olegolegovich 10y ago
> The flag can have arbitrary value in on entry to memcpy in an ordinary situation not involving threads or signals.
It can not have arbitrary value on entry. x86-64 ABI mandates that the flag is cleared before any function is called (3.2.1 Registers and the Stack Frame: "The direction flag in the %eflags register must be clear on function entry, and on function return.")
- kazinator 10y agoOK there we go, then. A compiler that conforms to the ABI generates code which clears the flag, if necessary. Interrupts preserve the flag. Thus, the flag should not be surprisingly set on entry into memcpy. If so, there is a bug.
- olegolegovich 10y ago> A compiler that conforms to the ABI generates code which clears the flag, if necessary. I'm sorry, I do not follow. The conforming compiler expects that the functions are called with the clear flag. The non-conforming kernel on the other hand does not clear the flag before calling the signal handler which breaks it.
- kazinator 10y agoBut that's obviously a bug. ABI says, caller clears flag. Ergo, all situations that trigger function calls shall clear flag.