diff options
author | kmacy <kmacy@FreeBSD.org> | 2006-12-17 05:07:01 +0000 |
---|---|---|
committer | kmacy <kmacy@FreeBSD.org> | 2006-12-17 05:07:01 +0000 |
commit | ee539b99dcacb73703a09f64d8ada227bb88a165 (patch) | |
tree | 1efe0da4c2d3a8dd001c384ae0b90857bc051940 /sys/i386/isa | |
parent | 6795d7528dafe4542404d5c897996ab60825164e (diff) | |
download | FreeBSD-src-ee539b99dcacb73703a09f64d8ada227bb88a165.zip FreeBSD-src-ee539b99dcacb73703a09f64d8ada227bb88a165.tar.gz |
Evidently FreeBSD has long relied on the compiler to treat structures
passed by value (trap frames) as if they were in fact being passed by
reference. For better or worse, this incorrect behaviour is no longer
present in gcc 4.1. In this patch I convert all trapframe arguments to
be explicitly pass by reference. I also remove vm86_initflags, pushing
the very little work that it actually does up into vm86_prepcall.
Reviewed by: kan
Tested by: kan
Diffstat (limited to 'sys/i386/isa')
-rw-r--r-- | sys/i386/isa/atpic.c | 4 | ||||
-rw-r--r-- | sys/i386/isa/atpic_vector.s | 3 | ||||
-rw-r--r-- | sys/i386/isa/icu.h | 2 |
3 files changed, 5 insertions, 4 deletions
diff --git a/sys/i386/isa/atpic.c b/sys/i386/isa/atpic.c index 9dfaf0c..9cd3b33 100644 --- a/sys/i386/isa/atpic.c +++ b/sys/i386/isa/atpic.c @@ -558,7 +558,7 @@ atpic_init(void *dummy __unused) SYSINIT(atpic_init, SI_SUB_INTR, SI_ORDER_SECOND + 1, atpic_init, NULL) void -atpic_handle_intr(u_int vector, struct trapframe frame) +atpic_handle_intr(u_int vector, struct trapframe *frame) { struct intsrc *isrc; @@ -585,7 +585,7 @@ atpic_handle_intr(u_int vector, struct trapframe frame) if ((isr & IRQ_MASK(7)) == 0) return; } - intr_execute_handlers(isrc, &frame); + intr_execute_handlers(isrc, frame); } #ifdef DEV_ISA diff --git a/sys/i386/isa/atpic_vector.s b/sys/i386/isa/atpic_vector.s index 13b9b05..0e4e1b6 100644 --- a/sys/i386/isa/atpic_vector.s +++ b/sys/i386/isa/atpic_vector.s @@ -51,9 +51,10 @@ IDTVEC(vec_name) ; \ SET_KERNEL_SREGS ; \ ; \ FAKE_MCOUNT(TF_EIP(%esp)) ; \ + pushl %esp ; \ pushl $irq_num; /* pass the IRQ */ \ call atpic_handle_intr ; \ - addl $4, %esp ; /* discard the parameter */ \ + addl $8, %esp ; /* discard the parameters */ \ ; \ MEXITCOUNT ; \ jmp doreti diff --git a/sys/i386/isa/icu.h b/sys/i386/isa/icu.h index a74f183..bd9df08 100644 --- a/sys/i386/isa/icu.h +++ b/sys/i386/isa/icu.h @@ -47,7 +47,7 @@ #define ICU_IMR_OFFSET 1 #endif -void atpic_handle_intr(u_int vector, struct trapframe frame); +void atpic_handle_intr(u_int vector, struct trapframe *frame); void atpic_startup(void); #endif /* !_I386_ISA_ICU_H_ */ |