Annotation of qemu/roms/SLOF/clients/net-snk/kernel/lowmem.S, revision 1.1.1.1

1.1       root        1: /******************************************************************************
                      2:  * Copyright (c) 2004, 2008 IBM Corporation
                      3:  * All rights reserved.
                      4:  * This program and the accompanying materials
                      5:  * are made available under the terms of the BSD License
                      6:  * which accompanies this distribution, and is available at
                      7:  * http://www.opensource.org/licenses/bsd-license.php
                      8:  *
                      9:  * Contributors:
                     10:  *     IBM Corporation - initial implementation
                     11:  *****************************************************************************/
                     12: 
                     13: 
                     14: #include <macros.h>
                     15: .section        .lowmem,"aw",@progbits
                     16: 
                     17:        .irp i, 0x0200,0x0300,0x0380,0x0400,0x0480,0x0500,0x0600,0x0700, \
                     18:                0x0800,0x0900,0x0a00,0x0b00
                     19:        . = \i - 0x200
                     20: // 0   
                     21:        stdu    r1, -0x58(r1)
                     22:        std     r0, 0x30(r1)
                     23:        mflr    r0
                     24:        std     r0, 0x38(r1)
                     25: // 10
                     26:        mfsrr0  r0
                     27:        std     r0, 0x48(r1)    
                     28:        mfsrr1  r0
                     29:        std     r0, 0x50(r1)    
                     30: // 20
                     31:        std     r11, 0x40(r1)
                     32:        li      r0, \i
                     33:        ld      r11, 0x60 + \i(0)
                     34:        bl      _exception_handler
                     35: 
                     36: // 30
                     37:        ld      r0, 0x48(r1)    
                     38:        mtsrr0  r0
                     39:        ld      r0, 0x50(r1)    
                     40:        mtsrr1  r0
                     41: 
                     42: // 40
                     43:        ld      r0, 0x38(r1)
                     44:        mtlr    r0      
                     45:        ld      r0, 0x30(r1)
                     46:        ld      r11, 0x40(r1)
                     47: // 50
                     48:        addi    r1, r1, 0x58
                     49:        rfid
                     50:        nop
                     51:        nop
                     52: // 60  
                     53: //     .quad   \i+0x68 
                     54:        .quad   .exception_forward              
                     55: // 68
                     56:        blr
                     57:        .endr
                     58: 
                     59:        # System call entry
                     60:        . = 0xc00 - 0x200
                     61: 
                     62:        stdu    r1, -0x50(r1)
                     63:        mflr    r11
                     64:        std     r11, 0x30(r1)
                     65:        mfsrr0  r11
                     66:        std     r11, 0x40(r1)   
                     67:        mfsrr1  r11
                     68:        std     r11, 0x48(r1)   
                     69:        ld      r11, _system_call@got(r2)
                     70:        ld      r11, 0(r11)
                     71:        mtctr   r11
                     72:        mr      r10, r0
                     73:        bctrl
                     74:        ld      r11, 0x30(r1)
                     75:        mtlr    r11
                     76:        ld      r11, 0x40(r1)   
                     77:        mtsrr0  r11
                     78:        ld      r11, 0x48(r1)   
                     79:        mtsrr1  r11
                     80:        addi    r1, r1, 0x50
                     81:        rfid
                     82:        
                     83:        .irp i, 0x0d00,0x0e00,0x0f00, \
                     84:                0x1000,0x1100,0x1200,0x1300,0x1400,0x1500,0x1600,0x1700, \
                     85:                0x1800,0x1900,0x1a00,0x1b00,0x1c00,0x1d00,0x1e00,0x1f00, \
                     86:                0x2000,0x2100,0x2200,0x2300,0x2400,0x2500,0x2600,0x2700, \
                     87:                0x2800,0x2900,0x2a00,0x2b00,0x2c00,0x2d00,0x2e00,0x2f00
                     88:        . = \i - 0x200
                     89: // 0   
                     90:        stdu    r1, -0x58(r1)
                     91:        std     r0, 0x30(r1)
                     92:        mflr    r0
                     93:        std     r0, 0x38(r1)
                     94: // 10
                     95:        mfsrr0  r0
                     96:        std     r0, 0x48(r1)    
                     97:        mfsrr1  r0
                     98:        std     r0, 0x50(r1)    
                     99: // 20
                    100:        std     r11, 0x40(r1)
                    101:        li      r0, \i
                    102:        ld      r11, 0x60 + \i(0)
                    103:        bl      _exception_handler
                    104: 
                    105: // 30
                    106:        ld      r0, 0x48(r1)    
                    107:        mtsrr0  r0
                    108:        ld      r0, 0x50(r1)    
                    109:        mtsrr1  r0
                    110: 
                    111: // 40
                    112:        ld      r0, 0x38(r1)
                    113:        mtlr    r0      
                    114:        ld      r0, 0x30(r1)
                    115:        ld      r11, 0x40(r1)
                    116: // 50
                    117:        addi    r1, r1, 0x58
                    118:        rfid
                    119:        nop
                    120:        nop
                    121: // 60  
                    122: //     .quad   \i+0x68 
                    123:        .quad   .exception_forward              
                    124: // 68
                    125:        blr
                    126:        .endr
                    127: 
                    128: /* Saves all register potential clobbered in exception handler.
                    129:    In r0 the pointer to the function is passed.
                    130:  */
                    131: 
                    132: _exception_handler:
                    133:     stdu       r1, -0x130(r1)  
                    134:        .irp i, 2,3,4,5,6,7,8,9,10,11,12,13,14,15,16, \
                    135:                17, 18, 19, 20, 21, 22, 23, 24, 25, 26, \
                    136:                27, 28, 29, 30, 31
                    137:        std     r\i, 0x30+\i*8 (r1)
                    138:        .endr
                    139:        mfctr   r14
                    140:        std     r14,0x130(r1)
                    141:        mtctr   r11
                    142: 
                    143:        LOAD64(r3,_entry)
                    144:        ld      r2,8(r3)
                    145: 
                    146:        ld      r3,exception_stack_frame@got(r2)
                    147:        std     r1,0(r3)
                    148: 
                    149: 
                    150:        mflr    r14
                    151:        bctrl   
                    152:        mtlr    r14
                    153: 
                    154:        ld      r14,0x130(r1)
                    155:        mtctr   r14
                    156: /*
                    157:        mfsrr0  r2
                    158:        addi    r2, r2, 4
                    159:        mtsrr0  r2
                    160: */
                    161:        .irp i, 2,3,4,5,6,7,8,9,10,12,13,14,15,16, \
                    162:                17, 18, 19, 20, 21, 22, 23, 24, 25, 26, \
                    163:                27, 28, 29, 30, 31
                    164:        ld      r\i, 0x30+\i*8 (r1)
                    165:        .endr
                    166:     addi       r1, r1, 0x130
                    167:        blr 
                    168: 
                    169:        .text
                    170:        
                    171: /* Set exception handler for given exception vector.  
                    172:        r3:     exception vector offset
                    173:        r4:     exception handler
                    174: */     
                    175:        .globl .set_exception
                    176: .set_exception:
                    177:        .globl set_exception
                    178: set_exception:
                    179:     ld r4,0x0(r4)
                    180:        .globl .set_exception_asm
                    181: .set_exception_asm:
                    182:        .globl set_exception_asm
                    183: set_exception_asm:
                    184:        std     r4, 0x60(r3)    # fixme diff 1f - 0b
                    185:        blr     
                    186: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.