Changeset 3695f03b in rtems


Ignore:
Timestamp:
May 14, 2002, 3:13:52 PM (18 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Branches:
4.10, 4.11, 4.8, 4.9, master
Children:
6f0d0527
Parents:
da6b86a
Message:

2002-05-14 Thomas Doerfler <Thomas.Doerfler@…>

  • src/m68k/rdbg_cpu_asm.S: Per PR163, Fix incorrect assumption that exception stack frames on M68K members with VBR always are 6 byte long. The incorrect assumption resulted in some gdb commands like "next" to fail on the 68360.
Location:
c/src/librdbg
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/librdbg/ChangeLog

    rda6b86a r3695f03b  
     12002-05-14      Thomas Doerfler <Thomas.Doerfler@imd-systems.de>
     2
     3        * src/m68k/rdbg_cpu_asm.S: Per PR163, Fix incorrect assumption that
     4        exception stack frames on M68K members with VBR always are 6 byte long.
     5        The incorrect assumption resulted in some gdb commands like "next"
     6        to fail on the 68360.
     7
    182002-05-14      Ralf Corsepius <corsepiu@faw.uni-ulm.de>
    29
  • c/src/librdbg/src/m68k/rdbg_cpu_asm.S

    rda6b86a r3695f03b  
    9999        PUBLIC (BreakPointExcHdl)
    100100
     101SYM (excFormatLength): 
     102        /*
     103         * size of exception stack frame depending on format type
     104         * This is valid for m68k with VBR (68020/030/040/CPU32/CPU32+)
     105         *      size | format/name
     106         */
     107        dc.w     4*2 |  $0 standard                           
     108        dc.w     4*2 |  $1 throwaway stackframe               
     109        dc.w     6*2 |  $2 CHK/CHK2/TRAPcc/TRAPV/DIV0/TRACE   
     110        dc.w     6*2 |  $3 Coprocessor Post-Instruction (040)
     111        dc.w     4*2 |  $4 reserved
     112        dc.w     4*2 |  $5 reserved
     113        dc.w     4*2 |  $6 reserved
     114        dc.w    30*2 |  $7 Access Error (040)                 
     115        dc.w    29*2 |  $8 Bus Error    (020)                 
     116        dc.w    10*2 |  $9 Coprocessor Mid-Instruction (020) 
     117        dc.w    16*2 |  $A Short Bus-Error (020)             
     118        dc.w    46*2 |  $B Long  Bus-Error (020)             
     119        dc.w    12*2 |  $C Bus Error/Address Error (CPU32)   
     120        dc.w     4*2 |  $D reserved
     121        dc.w     4*2 |  $E reserved
     122        dc.w     4*2 |  $F reserved
     123       
    101124SYM (excHandler):       
    102 #if ( M68K_COLDFIRE_ARCH == 0 )
    103         moveml  d0-d1/a0-a1,a7@-         | save d0-d1,a0-a1
    104         movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
    105         andl    #0x0fff,d0               | d0 = vector offset in vbr
    106 #else
     125#if ( M68K_COLDFIRE_ARCH == 1 )
    107126        lea     a7@(-16),a7
    108127        movm.l  d0-d1/a0-a1,a7@          | save d0-d1,a0-a1
    109128        movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
    110129        andl    #0x0ffc,d0               | d0 = vector offset in vbr
    111 #endif
    112130        lsrl    #2,d0                    | d0 = vector number
    113131        lea     a7@(16),a1               | address of orig frame
    114132        lea     a7@(16),a0               | address of orig frame
    115 #if ( M68K_HAS_VBR == 0 )
    116         lea     a0@(2),a0                | skip vector
    117 #endif
    118         lea     a0@(6),a0                | a0 = orig sp
    119 #if ( M68K_COLDFIRE_ARCH == 0 )
    120         cmpiw   #3,d0                    | bus error or address error ?
    121 #else
     133        lea     a0@(8),a0                | skip exception frame
     134#else
     135        moveml  d0-d1/a0-a1,a7@-         | save d0-d1,a0-a1
     136        movew   a7@(16+FVO_OFFSET),d0    | d0 = F/VO
     137#if ( M68K_HAS_VBR == 1 )
     138        movew   d0,d1                    | d1 is copy of F/VO
     139        andl    #0x0ffc,d0               | d0 = vector offset in vbr
     140        lsrl    #2,d0                    | d0 = vector number
     141        lsrl    #8,d1
     142        lsrl    #3,d1
     143        andl    #0x001f,d1               | d1 is format number
     144        lea     SYM (excFormatLength),a1
     145        movew   a1@(d1),d1               | d1 = size of exc frame
     146        lea     a7@(16,d1),a0
     147        lea     a7@(16),a1               | address of orig frame
     148
     149#else /* (M68k_HAS_VBR == 0) */
     150        lea     a7@(16),a1               | address of orig frame
     151        lea     a1@(6),a0                | skip stack frame
     152/*
     153 * skip bus error stack frame...
     154 */     
    122155        cmpi.l  #3,d0
    123 #endif
    124156        bgt     1f                       | if >3 then normal exc
    125 #if ( M68K_HAS_VBR == 1 )
    126         lea     a1@(2*29),a0
    127 #else
    128157        lea     a1@(8),a0                | skip extra stuff
    129158        lea     a0@(6),a0                | a0 = orig sp
    130 #endif
    1311591:
     160#endif /* M68K_HAS_VBR */
     161#endif /* ( M68K_COLDFIRE_ARCH == 0 ) */
     162
     163        /*
     164        * at this point:
     165        * a0 points to stack above exception stack frame
     166        * a1 points to start of exception stack frame
     167        */
     168       
    132169        movew   a1@(SR_OFFSET),d1        | d1 = sr
    133170        andl    #0xffff,d1
    134171        lea     a7@(-76),a7              | reserve room for exception frame
    135 | build CPU_Exception_frame
    136         movel   d0,a7@                   | vecnum
     172|                                          build CPU_Exception_frame
     173        movel   d0,a7@                   | vecnum
    137174        movel   d1,a7@(4)                | sr
    138175        movel   a1@(PC_OFFSET),d1        | d1 = pc
Note: See TracChangeset for help on using the changeset viewer.