Changeset 7614565 in mainline


Ignore:
Timestamp:
2005-12-27T21:40:02Z (19 years ago)
Author:
Jakub Jermar <jakub@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
feb5915
Parents:
1120276
Message:

sparc64 work.
Fix clean_window trap handler so that it clears output registers instead of input registers!
Fix interrupt handlers to save global registers.

Files:
9 edited

Legend:

Unmodified
Added
Removed
  • arch/sparc64/include/context.h

    r1120276 r7614565  
    5151        (c)->pc = ((__address) _pc) - 8;                                                                \
    5252        (c)->sp = ((__address) stack) + ALIGN_UP((size), STACK_ALIGNMENT) - (STACK_BIAS + SP_DELTA);    \
    53         (c)->fp = -STACK_BIAS
     53        (c)->fp = -STACK_BIAS;                                                                          \
     54        (c)->cleanwin = 0
    5455       
    5556
     
    7879        __u64 l7;
    7980        ipl_t ipl;
     81        __u64 cleanwin;
    8082};
    8183
  • arch/sparc64/include/context_offset.h

    r1120276 r7614565  
    1919#define OFFSET_L6  0x80
    2020#define OFFSET_L7  0x88
     21#define OFFSET_CLEANWIN  0x98
  • arch/sparc64/include/trap/interrupt.h

    r1120276 r7614565  
    3535
    3636#include <arch/trap/trap_table.h>
     37#include <arch/stack.h>
    3738
    3839#define TT_INTERRUPT_LEVEL_1                    0x41
     
    5960#ifdef __ASM__
    6061.macro INTERRUPT_LEVEL_N_HANDLER n
    61         save %sp, -128, %sp
     62        save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
    6263        mov \n - 1, %o0
    63         call exc_dispatch
    6464        mov %fp, %o1
    65         restore
    66         retry
     65        SAVING_HANDLER exc_dispatch
    6766.endm
    6867
  • arch/sparc64/include/trap/regwin.h

    r1120276 r7614565  
    119119        mov %r0, %l6
    120120        mov %r0, %l7
    121         mov %r0, %i0
    122         mov %r0, %i1
    123         mov %r0, %i2
    124         mov %r0, %i3
    125         mov %r0, %i4
    126         mov %r0, %i5
     121        mov %r0, %o0
     122        mov %r0, %o1
     123        mov %r0, %o2
     124        mov %r0, %o3
     125        mov %r0, %o4
     126        mov %r0, %o5
     127        mov %r0, %o6
     128        mov %r0, %o7
    127129        retry
    128130.endm
  • arch/sparc64/include/trap/trap_table.h

    r1120276 r7614565  
    3434#endif /* __ASM__ */
    3535
     36#include <arch/stack.h>
     37
    3638#define TRAP_TABLE_ENTRY_COUNT  1024
    3739#define TRAP_TABLE_ENTRY_SIZE   32
     
    4951#endif /* !__ASM__ */
    5052
     53#ifdef __ASM__
     54.macro SAVE_GLOBALS
     55        mov %g1, %l1
     56        mov %g2, %l2
     57        mov %g3, %l3
     58        mov %g4, %l4
     59        mov %g5, %l5
     60        mov %g6, %l6
     61        mov %g7, %l7
     62.endm
     63
     64.macro RESTORE_GLOBALS
     65        mov %l1, %g1
     66        mov %l2, %g2
     67        mov %l3, %g3
     68        mov %l4, %g4
     69        mov %l5, %g5
     70        mov %l6, %g6
     71        mov %l7, %g7
     72.endm
     73
     74.macro SAVING_HANDLER f
     75        set \f, %l0
     76        b saving_handler
     77        nop
     78.endm
     79#endif /* __ASM__ */
     80
    5181#endif
  • arch/sparc64/src/context.S

    r1120276 r7614565  
    6262        stx %l6, [\r + OFFSET_L6]
    6363        stx %l7, [\r + OFFSET_L7]
     64        rdpr %cleanwin, %g1
     65        stx %g1, [\r + OFFSET_CLEANWIN]
    6466.endm
    6567
     
    8385        ldx [\r + OFFSET_L6], %l6
    8486        ldx [\r + OFFSET_L7], %l7
     87        ldx [\r + OFFSET_CLEANWIN], %g1
     88        wrpr %g1, %g0, %cleanwin
    8589.endm
    8690
  • arch/sparc64/src/panic.S

    r1120276 r7614565  
    2929.text
    3030
     31#include <arch/stack.h>
     32
    3133.global panic_printf
    3234panic_printf:
     35        save %sp, -STACK_WINDOW_SAVE_AREA_SIZE, %sp
    3336        call printf
    3437        nop
     
    3639        nop
    3740        /* Not reached. */
     41        restore
     42
  • arch/sparc64/src/trap/trap_table.S

    r1120276 r7614565  
    3838 * link-time addresses which is good for debugging.
    3939 */
    40  
     40
     41.register %g2, #scratch
     42.register %g3, #scratch
     43.register %g6, #scratch
     44.register %g7, #scratch
     45
    4146.text
    4247
     
    203208trap_table_save:
    204209        .space TABLE_SIZE, 0
     210
     211
     212/* Trap handler that explicitly saves global registers.
     213 *
     214 * Input registers:
     215 *      %l0             Address of function to call.
     216 * Output registers:
     217 *       %l1 - %l7      Copy of %g1 - %g7
     218 */
     219.global saving_handler
     220saving_handler:
     221        SAVE_GLOBALS
     222        call %l0
     223        nop
     224        RESTORE_GLOBALS
     225        restore         /* matches the save instruction from the top-level handler */
     226        retry
  • tools/sparc64/gencontext.c

    r1120276 r7614565  
    4646        fprintf(f,"#define OFFSET_L6  0x%x\n",((int)&pctx->l6) - (int )pctx);
    4747        fprintf(f,"#define OFFSET_L7  0x%x\n",((int)&pctx->l7) - (int )pctx);
     48        fprintf(f,"#define OFFSET_CLEANWIN  0x%x\n",((int)&pctx->cleanwin) - (int )pctx);
    4849
    4950        fclose(f);
Note: See TracChangeset for help on using the changeset viewer.