[Bug target/69575] New: [interrupt] The direction flag DF in the FLAGS register may be wrong in interrupt handler
hjl.tools at gmail dot com
gcc-bugzilla@gcc.gnu.org
Sun Jan 31 04:01:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69575
Bug ID: 69575
Summary: [interrupt] The direction flag DF in the FLAGS
register may be wrong in interrupt handler
Product: gcc
Version: 6.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: hjl.tools at gmail dot com
CC: vaalfreja at gmail dot com
Target Milestone: ---
Target: x86
The x86 psABI says
The direction flag DF in the FLAGS register must be clear (set to “forward”
direction) on function entry and return. Other user flags have no specified
role in the standard calling sequence and are not preserved across calls
Since the direction flag DF in the FLAGS register is unknown in interrupt
handler, the result will be wrong if DF isn't cleared:
[hjl@gnu-tools-1 gcc]$ cat /tmp/x.i
extern void *a;
extern int b;
__attribute__ ((interrupt))
void
foo (void *frame)
{
__builtin_memset (a, b, 40);
}
[hjl@gnu-tools-1 gcc]$ ./xgcc -B./ -c -Os /tmp/x.i
[hjl@gnu-tools-1 gcc]$ objdump -dwr x.o
x.o: file format elf64-x86-64
Disassembly of section .text:
0000000000000000 <foo>:
0: 57 push %rdi
1: 48 8b 3d 00 00 00 00 mov 0x0(%rip),%rdi # 8 <foo+0x8>
4: R_X86_64_PC32 a-0x4
8: 51 push %rcx
9: 50 push %rax
a: b9 28 00 00 00 mov $0x28,%ecx
f: 8a 05 00 00 00 00 mov 0x0(%rip),%al # 15 <foo+0x15>
11: R_X86_64_PC32 b-0x4
15: f3 aa rep stos %al,%es:(%rdi)
17: 58 pop %rax
18: 59 pop %rcx
19: 5f pop %rdi
1a: 48 cf iretq
[hjl@gnu-tools-1 gcc]$
More information about the Gcc-bugs
mailing list