aboutsummaryrefslogtreecommitdiffstats
path: root/arch/i386/boot/mca.c
diff options
context:
space:
mode:
authorH. Peter Anvin <hpa@zytor.com>2007-07-14 19:47:13 -0400
committerH. Peter Anvin <hpa@zytor.com>2007-07-18 14:36:17 -0400
commit5593eaa854d0b23c3b270933a93b9b82946df729 (patch)
treef1efc4a66fcc25749db43eaa77e3075c65b2a1ab /arch/i386/boot/mca.c
parent9aa3909c0ea33da41755e15182fa4f88ae036d83 (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.c2
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)