- /*
- * relocate `hdlr' and `int_return' entries
- */
- li r7,.L_CriticalInput - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_MachineCheck - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_DataStorage - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_InstStorage - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_ExtInterrupt - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_Alignment - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_ProgramCheck - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_FPUnavailable - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_Decrementer - _start + _START_OFFSET
- bl trap_reloc
- li r7,.L_IntervalTimer - _start + _START_OFFSET
- li r8,_end_of_vectors - _start + _START_OFFSET
-2:
- bl trap_reloc
- addi r7,r7,0x100 /* next exception vector */
- cmplw 0,r7,r8
- blt 2b
-
- /* Update IVORs as per relocated vector table address */
- li r7,0x0100
- mtspr IVOR0,r7 /* 0: Critical input */
- li r7,0x0200
- mtspr IVOR1,r7 /* 1: Machine check */
- li r7,0x0300
- mtspr IVOR2,r7 /* 2: Data storage */
- li r7,0x0400
- mtspr IVOR3,r7 /* 3: Instruction storage */
- li r7,0x0500
- mtspr IVOR4,r7 /* 4: External interrupt */
- li r7,0x0600
- mtspr IVOR5,r7 /* 5: Alignment */
- li r7,0x0700
- mtspr IVOR6,r7 /* 6: Program check */
- li r7,0x0800
- mtspr IVOR7,r7 /* 7: floating point unavailable */
- li r7,0x0900
- mtspr IVOR8,r7 /* 8: System call */
+ lwz r4,CriticalInput@got(r12)
+ mtspr IVOR0,r4 /* 0: Critical input */
+ lwz r4,MachineCheck@got(r12)
+ mtspr IVOR1,r4 /* 1: Machine check */
+ lwz r4,DataStorage@got(r12)
+ mtspr IVOR2,r4 /* 2: Data storage */
+ lwz r4,InstStorage@got(r12)
+ mtspr IVOR3,r4 /* 3: Instruction storage */
+ lwz r4,ExtInterrupt@got(r12)
+ mtspr IVOR4,r4 /* 4: External interrupt */
+ lwz r4,Alignment@got(r12)
+ mtspr IVOR5,r4 /* 5: Alignment */
+ lwz r4,ProgramCheck@got(r12)
+ mtspr IVOR6,r4 /* 6: Program check */
+ lwz r4,FPUnavailable@got(r12)
+ mtspr IVOR7,r4 /* 7: floating point unavailable */
+ lwz r4,SystemCall@got(r12)
+ mtspr IVOR8,r4 /* 8: System call */