trap_subr64.S (174599) | trap_subr64.S (176742) |
---|---|
1/* $FreeBSD: head/sys/powerpc/aim/trap_subr.S 174599 2007-12-14 22:39:35Z marcel $ */ | 1/* $FreeBSD: head/sys/powerpc/aim/trap_subr.S 176742 2008-03-02 17:05:57Z raj $ */ |
2/* $NetBSD: trap_subr.S,v 1.20 2002/04/22 23:20:08 kleink Exp $ */ 3 4/*- 5 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 6 * Copyright (C) 1995, 1996 TooLs GmbH. 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without --- 125 unchanged lines hidden (view full) --- 135 stw %r24, FRAME_24+8(%r1); \ 136 stw %r25, FRAME_25+8(%r1); \ 137 stw %r26, FRAME_26+8(%r1); \ 138 stw %r27, FRAME_27+8(%r1); \ 139 stw %r28, FRAME_28+8(%r1); \ 140 stw %r29, FRAME_29+8(%r1); \ 141 stw %r30, FRAME_30+8(%r1); \ 142 stw %r31, FRAME_31+8(%r1); \ | 2/* $NetBSD: trap_subr.S,v 1.20 2002/04/22 23:20:08 kleink Exp $ */ 3 4/*- 5 * Copyright (C) 1995, 1996 Wolfgang Solfrank. 6 * Copyright (C) 1995, 1996 TooLs GmbH. 7 * All rights reserved. 8 * 9 * Redistribution and use in source and binary forms, with or without --- 125 unchanged lines hidden (view full) --- 135 stw %r24, FRAME_24+8(%r1); \ 136 stw %r25, FRAME_25+8(%r1); \ 137 stw %r26, FRAME_26+8(%r1); \ 138 stw %r27, FRAME_27+8(%r1); \ 139 stw %r28, FRAME_28+8(%r1); \ 140 stw %r29, FRAME_29+8(%r1); \ 141 stw %r30, FRAME_30+8(%r1); \ 142 stw %r31, FRAME_31+8(%r1); \ |
143 lwz %r28,(savearea+CPUSAVE_DAR)(%r2); /* saved DAR */ \ 144 lwz %r29,(savearea+CPUSAVE_DSISR)(%r2);/* saved DSISR */ \ | 143 lwz %r28,(savearea+CPUSAVE_AIM_DAR)(%r2); /* saved DAR */ \ 144 lwz %r29,(savearea+CPUSAVE_AIM_DSISR)(%r2);/* saved DSISR */\ |
145 lwz %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ 146 lwz %r31,(savearea+CPUSAVE_SRR1)(%r2); /* saved SRR1 */ \ 147 mfxer %r3; \ 148 mfctr %r4; \ 149 mflr %r5; \ 150 andi. %r5,%r5,0xff00; /* convert LR to exc # */ \ 151 stw %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ 152 stw %r4, FRAME_CTR+8(1); \ 153 stw %r5, FRAME_EXC+8(1); \ | 145 lwz %r30,(savearea+CPUSAVE_SRR0)(%r2); /* saved SRR0 */ \ 146 lwz %r31,(savearea+CPUSAVE_SRR1)(%r2); /* saved SRR1 */ \ 147 mfxer %r3; \ 148 mfctr %r4; \ 149 mflr %r5; \ 150 andi. %r5,%r5,0xff00; /* convert LR to exc # */ \ 151 stw %r3, FRAME_XER+8(1); /* save xer/ctr/exc */ \ 152 stw %r4, FRAME_CTR+8(1); \ 153 stw %r5, FRAME_EXC+8(1); \ |
154 stw %r28,FRAME_DAR+8(1); \ 155 stw %r29,FRAME_DSISR+8(1); /* save dsisr/srr0/srr1 */ \ | 154 stw %r28,FRAME_AIM_DAR+8(1); \ 155 stw %r29,FRAME_AIM_DSISR+8(1); /* save dsisr/srr0/srr1 */ \ |
156 stw %r30,FRAME_SRR0+8(1); \ 157 stw %r31,FRAME_SRR1+8(1) 158 159#define FRAME_LEAVE(savearea) \ 160/* Now restore regs: */ \ 161 lwz %r2,FRAME_SRR0+8(%r1); \ 162 lwz %r3,FRAME_SRR1+8(%r1); \ 163 lwz %r4,FRAME_CTR+8(%r1); \ --- 103 unchanged lines hidden (view full) --- 267 mtsprg1 %r1 /* save SP */ 268 GET_CPUINFO(%r1) 269 stw %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ 270 stw %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) 271 stw %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) 272 stw %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) 273 mfdar %r30 274 mfdsisr %r31 | 156 stw %r30,FRAME_SRR0+8(1); \ 157 stw %r31,FRAME_SRR1+8(1) 158 159#define FRAME_LEAVE(savearea) \ 160/* Now restore regs: */ \ 161 lwz %r2,FRAME_SRR0+8(%r1); \ 162 lwz %r3,FRAME_SRR1+8(%r1); \ 163 lwz %r4,FRAME_CTR+8(%r1); \ --- 103 unchanged lines hidden (view full) --- 267 mtsprg1 %r1 /* save SP */ 268 GET_CPUINFO(%r1) 269 stw %r28,(PC_TEMPSAVE+CPUSAVE_R28)(%r1) /* free r28-r31 */ 270 stw %r29,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) 271 stw %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) 272 stw %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) 273 mfdar %r30 274 mfdsisr %r31 |
275 stw %r30,(PC_TEMPSAVE+CPUSAVE_DAR)(%r1) 276 stw %r31,(PC_TEMPSAVE+CPUSAVE_DSISR)(%r1) | 275 stw %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) 276 stw %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) |
277 mfsprg1 %r1 /* restore SP, in case of branch */ 278 mflr %r28 /* save LR */ 279 mfcr %r29 /* save CR */ 280/* Test whether we already had PR set */ 281 mfsrr1 %r31 282 mtcr %r31 283 bla s_trap /* LR & 0xff00 is exception # */ 284CNAME(alisize) = .-CNAME(alitrap) --- 66 unchanged lines hidden (view full) --- 351 lwz %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) 352 stw %r31,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) 353 lwz %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) 354 stw %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) 355 lwz %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) 356 stw %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) 357 mfdar %r30 358 mfdsisr %r31 | 277 mfsprg1 %r1 /* restore SP, in case of branch */ 278 mflr %r28 /* save LR */ 279 mfcr %r29 /* save CR */ 280/* Test whether we already had PR set */ 281 mfsrr1 %r31 282 mtcr %r31 283 bla s_trap /* LR & 0xff00 is exception # */ 284CNAME(alisize) = .-CNAME(alitrap) --- 66 unchanged lines hidden (view full) --- 351 lwz %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) 352 stw %r31,(PC_TEMPSAVE+CPUSAVE_R29)(%r1) 353 lwz %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) 354 stw %r30,(PC_TEMPSAVE+CPUSAVE_R30)(%r1) 355 lwz %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) 356 stw %r31,(PC_TEMPSAVE+CPUSAVE_R31)(%r1) 357 mfdar %r30 358 mfdsisr %r31 |
359 stw %r30,(PC_TEMPSAVE+CPUSAVE_DAR)(%r1) 360 stw %r31,(PC_TEMPSAVE+CPUSAVE_DSISR)(%r1) | 359 stw %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) 360 stw %r31,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) |
361 362#ifdef KDB 363 /* Try and detect a kernel stack overflow */ 364 mfsrr1 %r31 365 mtcr %r31 366 bt 17,realtrap /* branch is user mode */ 367 mfsprg1 %r31 /* get old SP */ 368 sub. %r30,%r31,%r30 /* SP - DAR */ 369 bge 1f 370 neg %r30,%r30 /* modulo value */ 3711: cmplwi %cr0,%r30,4096 /* is DAR within a page of SP? */ 372 bge %cr0,realtrap /* no, too far away. */ 373 374 /* Now convert this DSI into a DDB trap. */ 375 GET_CPUINFO(%r1) | 361 362#ifdef KDB 363 /* Try and detect a kernel stack overflow */ 364 mfsrr1 %r31 365 mtcr %r31 366 bt 17,realtrap /* branch is user mode */ 367 mfsprg1 %r31 /* get old SP */ 368 sub. %r30,%r31,%r30 /* SP - DAR */ 369 bge 1f 370 neg %r30,%r30 /* modulo value */ 3711: cmplwi %cr0,%r30,4096 /* is DAR within a page of SP? */ 372 bge %cr0,realtrap /* no, too far away. */ 373 374 /* Now convert this DSI into a DDB trap. */ 375 GET_CPUINFO(%r1) |
376 lwz %r30,(PC_TEMPSAVE+CPUSAVE_DAR)(%r1) /* get DAR */ 377 stw %r30,(PC_DBSAVE +CPUSAVE_DAR)(%r1) /* save DAR */ 378 lwz %r30,(PC_TEMPSAVE+CPUSAVE_DSISR)(%r1) /* get DSISR */ 379 lwz %r30,(PC_DBSAVE +CPUSAVE_DSISR)(%r1) /* save DSISR */ | 376 lwz %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DAR)(%r1) /* get DAR */ 377 stw %r30,(PC_DBSAVE +CPUSAVE_AIM_DAR)(%r1) /* save DAR */ 378 lwz %r30,(PC_TEMPSAVE+CPUSAVE_AIM_DSISR)(%r1) /* get DSISR */ 379 lwz %r30,(PC_DBSAVE +CPUSAVE_AIM_DSISR)(%r1) /* save DSISR */ |
380 lwz %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get r28 */ 381 stw %r30,(PC_DBSAVE +CPUSAVE_R28)(%r1) /* save r28 */ 382 lwz %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) /* get r29 */ 383 stw %r31,(PC_DBSAVE +CPUSAVE_R29)(%r1) /* save r29 */ 384 lwz %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) /* get r30 */ 385 stw %r30,(PC_DBSAVE +CPUSAVE_R30)(%r1) /* save r30 */ 386 lwz %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) /* get r31 */ 387 stw %r31,(PC_DBSAVE +CPUSAVE_R31)(%r1) /* save r31 */ --- 153 unchanged lines hidden --- | 380 lwz %r30,(PC_DISISAVE+CPUSAVE_R28)(%r1) /* get r28 */ 381 stw %r30,(PC_DBSAVE +CPUSAVE_R28)(%r1) /* save r28 */ 382 lwz %r31,(PC_DISISAVE+CPUSAVE_R29)(%r1) /* get r29 */ 383 stw %r31,(PC_DBSAVE +CPUSAVE_R29)(%r1) /* save r29 */ 384 lwz %r30,(PC_DISISAVE+CPUSAVE_R30)(%r1) /* get r30 */ 385 stw %r30,(PC_DBSAVE +CPUSAVE_R30)(%r1) /* save r30 */ 386 lwz %r31,(PC_DISISAVE+CPUSAVE_R31)(%r1) /* get r31 */ 387 stw %r31,(PC_DBSAVE +CPUSAVE_R31)(%r1) /* save r31 */ --- 153 unchanged lines hidden --- |