diff options
author | H. Peter Anvin <hpa@zytor.com> | 2007-07-14 19:47:13 -0400 |
---|---|---|
committer | H. Peter Anvin <hpa@zytor.com> | 2007-07-18 14:36:17 -0400 |
commit | 5593eaa854d0b23c3b270933a93b9b82946df729 (patch) | |
tree | f1efc4a66fcc25749db43eaa77e3075c65b2a1ab /arch/i386/boot/mca.c | |
parent | 9aa3909c0ea33da41755e15182fa4f88ae036d83 (diff) |
[x86 setup] Fix assembly constraints
Fix incorrect assembly constraints. In particular, fix memory
constraints used inside push..pop, which can cause invalid operation
since gcc may generate %esp-relative references.
Additionally:
outl() should have "dN" not "dn".
query_mca() shouldn't listen 16/32-bit registers in an 8-bit only
context.
has_eflag(): the "mask" is only used well after both the stack pointer
and the output registers have been touched; this requires the output
registers to be earlyclobbers (=&) and the input to exclude memory (so
"ri", not "g").
Thanks to Etienne Lorrain and Chuck Ebbert for prompting this review.
Cc: Etienne Lorrain <etienne_lorrain@yahoo.fr>
Cc: Chuck Ebbert <cebbert@redhat.com>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
Diffstat (limited to 'arch/i386/boot/mca.c')
-rw-r--r-- | arch/i386/boot/mca.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/i386/boot/mca.c b/arch/i386/boot/mca.c index 9b68bd1aef19..68222f2d4b67 100644 --- a/arch/i386/boot/mca.c +++ b/arch/i386/boot/mca.c | |||
@@ -26,7 +26,7 @@ int query_mca(void) | |||
26 | "setc %0 ; " | 26 | "setc %0 ; " |
27 | "movw %%es, %1 ; " | 27 | "movw %%es, %1 ; " |
28 | "popw %%es" | 28 | "popw %%es" |
29 | : "=acdSDm" (err), "=acdSDm" (es), "=b" (bx) | 29 | : "=acd" (err), "=acdSD" (es), "=b" (bx) |
30 | : "a" (0xc000)); | 30 | : "a" (0xc000)); |
31 | 31 | ||
32 | if (err) | 32 | if (err) |