Ticket #163: m68k_rdbg_cpu_asm.diff

File m68k_rdbg_cpu_asm.diff, 4.3 KB (added by thomas.doerfler, on 12/03/06 at 13:31:13)

m68k_rdbg_cpu_asm.diff

Line 
1*** /usr/local/src/rtems/rtems-ss-20020205/tools/rtems-ss-20020205/c/src/librdbg/src/m68k/rdbg_cpu_asm.S        Tue Oct 30 19:28:34 2001
2--- rdbg_cpu_asm.S      Wed Apr 17 20:24:06 2002
3***************
4*** 98,139 ****
5          PUBLIC (excHandler)
6          PUBLIC (BreakPointExcHdl)
7 
8  SYM (excHandler):     
9! #if ( M68K_COLDFIRE_ARCH == 0 )
10!         moveml  d0-d1/a0-a1,a7@-         | save d0-d1,a0-a1
11!         movew   a7@(16+FVO_OFFSET),d0  | d0 = F/VO
12!         andl    #0x0fff,d0               | d0 = vector offset in vbr
13! #else
14        lea     a7@(-16),a7
15        movm.l  d0-d1/a0-a1,a7@          | save d0-d1,a0-a1
16        movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
17        andl    #0x0ffc,d0               | d0 = vector offset in vbr
18- #endif
19          lsrl    #2,d0                    | d0 = vector number
20        lea     a7@(16),a1               | address of orig frame
21        lea     a7@(16),a0               | address of orig frame
22! #if ( M68K_HAS_VBR == 0 )
23!       lea     a0@(2),a0                | skip vector
24! #endif
25!       lea     a0@(6),a0                | a0 = orig sp
26! #if ( M68K_COLDFIRE_ARCH == 0 )
27!         cmpiw   #3,d0                  | bus error or address error ?
28  #else
29          cmpi.l  #3,d0
30- #endif
31          bgt     1f                     | if >3 then normal exc
32- #if ( M68K_HAS_VBR == 1 )
33-       lea     a1@(2*29),a0
34- #else
35        lea     a1@(8),a0                | skip extra stuff
36        lea     a0@(6),a0                | a0 = orig sp
37- #endif
38  1:
39        movew   a1@(SR_OFFSET),d1        | d1 = sr
40        andl    #0xffff,d1
41        lea     a7@(-76),a7              | reserve room for exception frame
42! | build CPU_Exception_frame
43!       movel   d0,a7@                   | vecnum
44        movel   d1,a7@(4)                | sr
45        movel   a1@(PC_OFFSET),d1        | d1 = pc
46  #if ( M68K_COLDFIRE_ARCH == 0 )
47--- 98,176 ----
48          PUBLIC (excHandler)
49          PUBLIC (BreakPointExcHdl)
50 
51+ SYM (excFormatLength):       
52+       /*
53+        * size of exception stack frame depending on format type
54+        * This is valid for m68k with VBR (68020/030/040/CPU32/CPU32+)
55+        *      size | format/name
56+        */
57+       dc.w     4*2 |  $0 standard                           
58+       dc.w     4*2 |  $1 throwaway stackframe               
59+       dc.w     6*2 |  $2 CHK/CHK2/TRAPcc/TRAPV/DIV0/TRACE   
60+       dc.w     6*2 |  $3 Coprocessor Post-Instruction (040)
61+       dc.w     4*2 |  $4 reserved
62+       dc.w     4*2 |  $5 reserved
63+       dc.w     4*2 |  $6 reserved
64+       dc.w    30*2 |  $7 Access Error (040)                 
65+       dc.w    29*2 |  $8 Bus Error    (020)                 
66+       dc.w    10*2 |  $9 Coprocessor Mid-Instruction (020) 
67+       dc.w    16*2 |  $A Short Bus-Error (020)             
68+       dc.w    46*2 |  $B Long  Bus-Error (020)             
69+       dc.w    12*2 |  $C Bus Error/Address Error (CPU32)   
70+       dc.w     4*2 |  $D reserved
71+       dc.w     4*2 |  $E reserved
72+       dc.w     4*2 |  $F reserved
73+       
74  SYM (excHandler):     
75! #if ( M68K_COLDFIRE_ARCH == 1 )
76        lea     a7@(-16),a7
77        movm.l  d0-d1/a0-a1,a7@          | save d0-d1,a0-a1
78        movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
79        andl    #0x0ffc,d0               | d0 = vector offset in vbr
80          lsrl    #2,d0                    | d0 = vector number
81        lea     a7@(16),a1               | address of orig frame
82        lea     a7@(16),a0               | address of orig frame
83!       lea     a0@(8),a0                | skip exception frame
84  #else
85+         moveml  d0-d1/a0-a1,a7@-         | save d0-d1,a0-a1
86+       movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
87+ #if ( M68K_HAS_VBR == 1 )
88+       movew   d0,d1                    | d1 is copy of F/VO
89+       andl    #0x0ffc,d0               | d0 = vector offset in vbr
90+         lsrl    #2,d0                    | d0 = vector number
91+       lsrl    #8,d1
92+       lsrl    #3,d1
93+       andl    #0x001f,d1               | d1 is format number
94+       lea     SYM (excFormatLength),a1
95+       movew   a1@(d1),d1               | d1 = size of exc frame
96+       lea     a7@(16,d1),a0
97+       lea     a7@(16),a1               | address of orig frame
98+
99+ #else /* (M68k_HAS_VBR == 0) */
100+       lea     a7@(16),a1               | address of orig frame
101+       lea     a1@(6),a0                | skip stack frame
102+ /*
103+  * skip bus error stack frame...
104+  */   
105          cmpi.l  #3,d0
106          bgt     1f                     | if >3 then normal exc
107        lea     a1@(8),a0                | skip extra stuff
108        lea     a0@(6),a0                | a0 = orig sp
109  1:
110+ #endif /* M68K_HAS_VBR */
111+ #endif /* ( M68K_COLDFIRE_ARCH == 0 ) */
112+
113+       /*
114+       * at this point:
115+       * a0 points to stack above exception stack frame
116+       * a1 points to start of exception stack frame
117+       */
118+       
119        movew   a1@(SR_OFFSET),d1        | d1 = sr
120        andl    #0xffff,d1
121        lea     a7@(-76),a7              | reserve room for exception frame
122! |                                          build CPU_Exception_frame
123!       movel   d0,a7@                   | vecnum
124        movel   d1,a7@(4)                | sr
125        movel   a1@(PC_OFFSET),d1        | d1 = pc
126  #if ( M68K_COLDFIRE_ARCH == 0 )