* Fixed a bug regarding storing/restoring FPSCR in the interrupt
code. The stack pointer was not adjusted, hence we were overwriting the previous register value. But it looks like I missed to check in the arch_cpu.h with the iframe structure including the floating point registers anyway. * Backported the ELF PPC relocation code from the boot loader to the kernel. * Fixed the PPC version of arch_thread_switch_kstack_and_call(). Apparently the signature had changed, but the assembly implementation was not adjusted accordingly. * sc prints more registers now (LR, CR, CTR, XER,...). * Fixed several occurences of not-working fault handlers. Apparently the compiler realized, that the "error" label was never jumped to (by the code it knew), and optimized the respective code away. Now we use a trick to make it think the error label might actually be jumped to. I wonder whether the x86 version has the same problem when being compiled with GCC4. * Adopted the x86 page fault handling interrupt code. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@15933 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -22,6 +22,7 @@ struct iframe {
|
||||
uint32 cr;
|
||||
uint32 xer;
|
||||
uint32 ctr;
|
||||
uint32 fpscr;
|
||||
uint32 r31;
|
||||
uint32 r30;
|
||||
uint32 r29;
|
||||
@@ -54,6 +55,38 @@ struct iframe {
|
||||
uint32 r2;
|
||||
uint32 r1;
|
||||
uint32 r0;
|
||||
double f31;
|
||||
double f30;
|
||||
double f29;
|
||||
double f28;
|
||||
double f27;
|
||||
double f26;
|
||||
double f25;
|
||||
double f24;
|
||||
double f23;
|
||||
double f22;
|
||||
double f21;
|
||||
double f20;
|
||||
double f19;
|
||||
double f18;
|
||||
double f17;
|
||||
double f16;
|
||||
double f15;
|
||||
double f14;
|
||||
double f13;
|
||||
double f12;
|
||||
double f11;
|
||||
double f10;
|
||||
double f9;
|
||||
double f8;
|
||||
double f7;
|
||||
double f6;
|
||||
double f5;
|
||||
double f4;
|
||||
double f3;
|
||||
double f2;
|
||||
double f1;
|
||||
double f0;
|
||||
};
|
||||
|
||||
enum machine_state {
|
||||
@@ -113,6 +146,9 @@ int64 __ppc_get_time_base(void);
|
||||
|
||||
extern void ppc_context_switch(void **_oldStackPointer, void *newStackPointer);
|
||||
|
||||
extern bool ppc_set_fault_handler(addr_t *handlerLocation, addr_t handler)
|
||||
__attribute__((noinline));
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user