Annotation of gcc/config/rs6000/eabi.asm, revision 1.1.1.1

1.1       root        1: # File to either setup register 2 to point to the GOT, or to adjust the
                      2: # pointers in the .got2 section to point to their new addresses.
                      3: 
                      4:        .file   "eabi.asm"
                      5:        .section ".text"
                      6:        .globl   __eabi
                      7: 
                      8:         .section ".got2","aw"
                      9: .LCTOC1 = . # +32768
                     10: 
                     11: # Table of addresses
                     12: .Ltable = .-.LCTOC1
                     13:        .long   .LCTOC1                         # address we are really at
                     14: 
                     15: .Lgot = .-.LCTOC1
                     16:        .long   _GLOBAL_OFFSET_TABLE_           # normal GOT address
                     17: 
                     18: .Lgots = .-.LCTOC1
                     19:        .long   _GOT_START_                     # start of .got section
                     20: 
                     21: .Lgote = .-.LCTOC1
                     22:        .long   _GOT_END_                       # end of .got section
                     23: 
                     24: .Lgot2s = .-.LCTOC1
                     25:        .long   _GOT2_START_                    # -mrelocatable GOT pointers start
                     26: 
                     27: .Lgot2e = .-.LCTOC1
                     28:        .long   _GOT2_END_                      # -mrelocatable GOT pointers end
                     29: 
                     30: .Lfixups = .-.LCTOC1
                     31:        .long   _FIXUP_START_                   # start of .fixup section
                     32: 
                     33: .Lfixupe = .-.LCTOC1
                     34:        .long   _FIXUP_END_                     # end of .fixup section
                     35: 
                     36:        .text
                     37: .Lptr:
                     38:        .long   .LCTOC1-.Laddr                  # PC relative pointer to .got2
                     39:        .long   0x4000                          # traceback table
                     40: 
                     41: __eabi:        mflr    0
                     42:        bl      .Laddr                          # get current address
                     43: .Laddr:
                     44:        mflr    12                              # real address of .Laddr
                     45:        lwz     11,(.Lptr-.Laddr)(12)           # linker generated address of .LCTOC1
                     46:        add     11,11,12                        # correct to real pointer
                     47:        lwz     12,.Ltable(11)                  # get linker's idea of where .Laddr is
                     48:        subf.   12,12,11                        # calculate difference
                     49:        mtlr    0                               # restore link register
                     50:        bc      4,2,.Lreloc                     # skip if we need to relocate
                     51: 
                     52: # Only load up register 2 if there is a .got section
                     53: 
                     54:        lwz     3,.Lgots(11)                    # start of .got section
                     55:        lwz     4,.Lgote(11)                    # end of .got section
                     56:        cmpw    1,3,4                           # .got section non-empty?
                     57:        bc      12,6,.Ldone
                     58: 
                     59: # Normal program, load up register 2
                     60: 
                     61:        lwz     2,.Lgot(11)                     # normal GOT address (obsolete in register 2)
                     62:        mr      13,2                            # also same as _SDA_BASE_ (V.4 small data ptr)
                     63:        b       __do_global_ctors               # do any C++ global constructors (which returns to caller)
                     64: 
                     65: # We need to relocate the .got2 pointers.  Don't load register 2
                     66: 
                     67: .Lreloc:
                     68:        lwz     3,.Lgot2s(11)                   # GOT pointers start
                     69:        lwz     4,.Lgot2e(11)                   # GOT pointers end
                     70:        add     3,12,3                          # adjust pointers
                     71:        add     4,12,4
                     72: 
                     73:        cmpw    1,3,4                           # any pointers to adjust
                     74:        bc      12,6,.Lfix
                     75: 
                     76: .Lloop:
                     77:        lwz     5,0(3)                          # next pointer
                     78:        add     5,5,12                          # adjust
                     79:        stw     5,0(3)
                     80:        addi    3,3,4                           # bump to next word
                     81:        cmpw    1,3,4                           # more pointers to adjust?
                     82:        bc      4,6,.Lloop
                     83: 
                     84: # Fixup any user initialized pointers now (the compiler drops pointers to
                     85: # each of the relocs that it does in the .fixup section).  Note, the pointers
                     86: # themselves have already been fixed up by the previous loop.
                     87: 
                     88: .Lfix:
                     89:        lwz     3,.Lfixups(11)                  # fixup pointers start
                     90:        lwz     4,.Lfixupe(11)                  # fixup pointers end
                     91: 
                     92:        cmpw    1,3,4                           # any user pointers to adjust
                     93:        bc      12,6,.Ldone
                     94: 
                     95: .Lfloop:
                     96:        lwz     5,0(3)                          # next pointer
                     97:        lwz     6,0(5)                          # get the pointer it points to
                     98:        add     6,6,12                          # adjust
                     99:        stw     6,0(5)
                    100:        addi    3,3,4                           # bump to next word
                    101:        cmpw    1,3,4                           # more pointers to adjust?
                    102:        bc      4,6,.Lfloop
                    103: 
                    104: # Done adjusting pointers, return
                    105: 
                    106: .Ldone:
                    107:        b       __do_global_ctors               # do any C++ global constructors (which returns to caller)
                    108: 
                    109: # Routines for saving floating point registers, called by the compiler.
                    110: # Called with r11 pointing to the stack header word of the caller of the
                    111: # function, just beyond the end of the floating point save area.
                    112: 
                    113:        .globl  _savefpr_14
                    114:        .globl  _savefpr_15
                    115:        .globl  _savefpr_16
                    116:        .globl  _savefpr_17
                    117:        .globl  _savefpr_18
                    118:        .globl  _savefpr_19
                    119:        .globl  _savefpr_20
                    120:        .globl  _savefpr_21
                    121:        .globl  _savefpr_22
                    122:        .globl  _savefpr_23
                    123:        .globl  _savefpr_24
                    124:        .globl  _savefpr_25
                    125:        .globl  _savefpr_26
                    126:        .globl  _savefpr_27
                    127:        .globl  _savefpr_28
                    128:        .globl  _savefpr_29
                    129:        .globl  _savefpr_30
                    130:        .globl  _savefpr_31
                    131: 
                    132:                .long   0x00400000      # traceback tag
                    133: _savefpr_14:   stfd    14,-144(11)     # save fp registers
                    134: _savefpr_15:   stfd    15,-136(11)
                    135: _savefpr_16:   stfd    16,-128(11)
                    136: _savefpr_17:   stfd    17,-120(11)
                    137: _savefpr_18:   stfd    18,-112(11)
                    138: _savefpr_19:   stfd    19,-104(11)
                    139: _savefpr_20:   stfd    20,-96(11)
                    140: _savefpr_21:   stfd    21,-88(11)
                    141: _savefpr_22:   stfd    22,-80(11)
                    142: _savefpr_23:   stfd    23,-72(11)
                    143: _savefpr_24:   stfd    24,-64(11)
                    144: _savefpr_25:   stfd    25,-56(11)
                    145: _savefpr_26:   stfd    26,-48(11)
                    146: _savefpr_27:   stfd    27,-40(11)
                    147: _savefpr_28:   stfd    28,-32(11)
                    148: _savefpr_29:   stfd    29,-24(11)
                    149: _savefpr_30:   stfd    30,-16(11)
                    150: _savefpr_31:   stfd    31,-8(11)
                    151:                blr
                    152: 
                    153: # Routines for saving integer registers, called by the compiler.
                    154: # Called with r11 pointing to the stack header word of the caller of the
                    155: # function, just beyond the end of the integer save area.
                    156: 
                    157:        .globl  _savegpr_14
                    158:        .globl  _savegpr_15
                    159:        .globl  _savegpr_16
                    160:        .globl  _savegpr_17
                    161:        .globl  _savegpr_18
                    162:        .globl  _savegpr_19
                    163:        .globl  _savegpr_20
                    164:        .globl  _savegpr_21
                    165:        .globl  _savegpr_22
                    166:        .globl  _savegpr_23
                    167:        .globl  _savegpr_24
                    168:        .globl  _savegpr_25
                    169:        .globl  _savegpr_26
                    170:        .globl  _savegpr_27
                    171:        .globl  _savegpr_28
                    172:        .globl  _savegpr_29
                    173:        .globl  _savegpr_30
                    174:        .globl  _savegpr_31
                    175: 
                    176:                .long   0x00400000      # traceback tag
                    177: _savegpr_14:   stw     14,-72(11)      # save gp registers
                    178: _savegpr_15:   stw     15,-68(11)
                    179: _savegpr_16:   stw     16,-64(11)
                    180: _savegpr_17:   stw     17,-60(11)
                    181: _savegpr_18:   stw     18,-56(11)
                    182: _savegpr_19:   stw     19,-52(11)
                    183: _savegpr_20:   stw     20,-48(11)
                    184: _savegpr_21:   stw     21,-44(11)
                    185: _savegpr_22:   stw     22,-40(11)
                    186: _savegpr_23:   stw     23,-36(11)
                    187: _savegpr_24:   stw     24,-32(11)
                    188: _savegpr_25:   stw     25,-28(11)
                    189: _savegpr_26:   stw     26,-24(11)
                    190: _savegpr_27:   stw     27,-20(11)
                    191: _savegpr_28:   stw     28,-16(11)
                    192: _savegpr_29:   stw     29,-12(11)
                    193: _savegpr_30:   stw     30,-8(11)
                    194: _savegpr_31:   stw     31,-4(11)
                    195:                blr
                    196: 
                    197: # Routines for restoring floating point registers, called by the compiler.
                    198: # Called with r11 pointing to the stack header word of the caller of the
                    199: # function, just beyond the end of the floating point save area.
                    200: 
                    201:        .globl  _restfpr_14
                    202:        .globl  _restfpr_15
                    203:        .globl  _restfpr_16
                    204:        .globl  _restfpr_17
                    205:        .globl  _restfpr_18
                    206:        .globl  _restfpr_19
                    207:        .globl  _restfpr_20
                    208:        .globl  _restfpr_21
                    209:        .globl  _restfpr_22
                    210:        .globl  _restfpr_23
                    211:        .globl  _restfpr_24
                    212:        .globl  _restfpr_25
                    213:        .globl  _restfpr_26
                    214:        .globl  _restfpr_27
                    215:        .globl  _restfpr_28
                    216:        .globl  _restfpr_29
                    217:        .globl  _restfpr_30
                    218:        .globl  _restfpr_31
                    219: 
                    220:                .long   0x00600000      # traceback tag
                    221: _restfpr_14:   lfd     14,-144(11)     # restore fp registers
                    222: _restfpr_15:   lfd     15,-136(11)
                    223: _restfpr_16:   lfd     16,-128(11)
                    224: _restfpr_17:   lfd     17,-120(11)
                    225: _restfpr_18:   lfd     18,-112(11)
                    226: _restfpr_19:   lfd     19,-104(11)
                    227: _restfpr_20:   lfd     20,-96(11)
                    228: _restfpr_21:   lfd     21,-88(11)
                    229: _restfpr_22:   lfd     22,-80(11)
                    230: _restfpr_23:   lfd     23,-72(11)
                    231: _restfpr_24:   lfd     24,-64(11)
                    232: _restfpr_25:   lfd     25,-56(11)
                    233: _restfpr_26:   lfd     26,-48(11)
                    234: _restfpr_27:   lfd     27,-40(11)
                    235: _restfpr_28:   lfd     28,-32(11)
                    236: _restfpr_29:   lfd     29,-24(11)
                    237: _restfpr_30:   lfd     30,-16(11)
                    238: _restfpr_31:   lfd     31,-8(11)
                    239:                blr
                    240: 
                    241: # Routines for restoring integer registers, called by the compiler.
                    242: # Called with r11 pointing to the stack header word of the caller of the
                    243: # function, just beyond the end of the integer restore area.
                    244: 
                    245:        .globl  _restgpr_14
                    246:        .globl  _restgpr_15
                    247:        .globl  _restgpr_16
                    248:        .globl  _restgpr_17
                    249:        .globl  _restgpr_18
                    250:        .globl  _restgpr_19
                    251:        .globl  _restgpr_20
                    252:        .globl  _restgpr_21
                    253:        .globl  _restgpr_22
                    254:        .globl  _restgpr_23
                    255:        .globl  _restgpr_24
                    256:        .globl  _restgpr_25
                    257:        .globl  _restgpr_26
                    258:        .globl  _restgpr_27
                    259:        .globl  _restgpr_28
                    260:        .globl  _restgpr_29
                    261:        .globl  _restgpr_30
                    262:        .globl  _restgpr_31
                    263: 
                    264:                .long   0x00600000      # traceback tag
                    265: _restgpr_14:   lwz     14,-72(11)      # rest gp registers
                    266: _restgpr_15:   lwz     15,-68(11)
                    267: _restgpr_16:   lwz     16,-64(11)
                    268: _restgpr_17:   lwz     17,-60(11)
                    269: _restgpr_18:   lwz     18,-56(11)
                    270: _restgpr_19:   lwz     19,-52(11)
                    271: _restgpr_20:   lwz     20,-48(11)
                    272: _restgpr_21:   lwz     21,-44(11)
                    273: _restgpr_22:   lwz     22,-40(11)
                    274: _restgpr_23:   lwz     23,-36(11)
                    275: _restgpr_24:   lwz     24,-32(11)
                    276: _restgpr_25:   lwz     25,-28(11)
                    277: _restgpr_26:   lwz     26,-24(11)
                    278: _restgpr_27:   lwz     27,-20(11)
                    279: _restgpr_28:   lwz     28,-16(11)
                    280: _restgpr_29:   lwz     29,-12(11)
                    281: _restgpr_30:   lwz     30,-8(11)
                    282: _restgpr_31:   lwz     31,-4(11)
                    283:                blr
                    284: 
                    285: # Routines for restoring floating point registers, called by the compiler.
                    286: # Called with r11 pointing to the stack header word of the caller of the
                    287: # function, just beyond the end of the floating point save area.
                    288: # In addition to restoring the fp registers, it will return to the caller's
                    289: # caller
                    290: 
                    291:        .globl  _restfpr_14_x
                    292:        .globl  _restfpr_15_x
                    293:        .globl  _restfpr_16_x
                    294:        .globl  _restfpr_17_x
                    295:        .globl  _restfpr_18_x
                    296:        .globl  _restfpr_19_x
                    297:        .globl  _restfpr_20_x
                    298:        .globl  _restfpr_21_x
                    299:        .globl  _restfpr_22_x
                    300:        .globl  _restfpr_23_x
                    301:        .globl  _restfpr_24_x
                    302:        .globl  _restfpr_25_x
                    303:        .globl  _restfpr_26_x
                    304:        .globl  _restfpr_27_x
                    305:        .globl  _restfpr_28_x
                    306:        .globl  _restfpr_29_x
                    307:        .globl  _restfpr_30_x
                    308:        .globl  _restfpr_31_x
                    309: 
                    310:                .long   0x00600000      # traceback tag
                    311: _restfpr_14_x: lfd     14,-144(11)     # restore fp registers
                    312: _restfpr_15_x: lfd     15,-136(11)
                    313: _restfpr_16_x: lfd     16,-128(11)
                    314: _restfpr_17_x: lfd     17,-120(11)
                    315: _restfpr_18_x: lfd     18,-112(11)
                    316: _restfpr_19_x: lfd     19,-104(11)
                    317: _restfpr_20_x: lfd     20,-96(11)
                    318: _restfpr_21_x: lfd     21,-88(11)
                    319: _restfpr_22_x: lfd     22,-80(11)
                    320: _restfpr_23_x: lfd     23,-72(11)
                    321: _restfpr_24_x: lfd     24,-64(11)
                    322: _restfpr_25_x: lfd     25,-56(11)
                    323: _restfpr_26_x: lfd     26,-48(11)
                    324: _restfpr_27_x: lfd     27,-40(11)
                    325: _restfpr_28_x: lfd     28,-32(11)
                    326: _restfpr_29_x: lfd     29,-24(11)
                    327: _restfpr_30_x: lfd     30,-16(11)
                    328: _restfpr_31_x: lwz     0,4(11)
                    329:                lfd     31,-8(11)
                    330:                mtlr    0
                    331:                mr      1,11
                    332:                blr
                    333: 
                    334: # Routines for restoring integer registers, called by the compiler.
                    335: # Called with r11 pointing to the stack header word of the caller of the
                    336: # function, just beyond the end of the integer restore area.
                    337: 
                    338:        .globl  _restgpr_14_x
                    339:        .globl  _restgpr_15_x
                    340:        .globl  _restgpr_16_x
                    341:        .globl  _restgpr_17_x
                    342:        .globl  _restgpr_18_x
                    343:        .globl  _restgpr_19_x
                    344:        .globl  _restgpr_20_x
                    345:        .globl  _restgpr_21_x
                    346:        .globl  _restgpr_22_x
                    347:        .globl  _restgpr_23_x
                    348:        .globl  _restgpr_24_x
                    349:        .globl  _restgpr_25_x
                    350:        .globl  _restgpr_26_x
                    351:        .globl  _restgpr_27_x
                    352:        .globl  _restgpr_28_x
                    353:        .globl  _restgpr_29_x
                    354:        .globl  _restgpr_30_x
                    355:        .globl  _restgpr_31_x
                    356: 
                    357:                .long   0x00600000      # traceback tag
                    358: _restgpr_14_x: lwz     14,-72(11)      # rest gp registers
                    359: _restgpr_15_x: lwz     15,-68(11)
                    360: _restgpr_16_x: lwz     16,-64(11)
                    361: _restgpr_17_x: lwz     17,-60(11)
                    362: _restgpr_18_x: lwz     18,-56(11)
                    363: _restgpr_19_x: lwz     19,-52(11)
                    364: _restgpr_20_x: lwz     20,-48(11)
                    365: _restgpr_21_x: lwz     21,-44(11)
                    366: _restgpr_22_x: lwz     22,-40(11)
                    367: _restgpr_23_x: lwz     23,-36(11)
                    368: _restgpr_24_x: lwz     24,-32(11)
                    369: _restgpr_25_x: lwz     25,-28(11)
                    370: _restgpr_26_x: lwz     26,-24(11)
                    371: _restgpr_27_x: lwz     27,-20(11)
                    372: _restgpr_28_x: lwz     28,-16(11)
                    373: _restgpr_29_x: lwz     29,-12(11)
                    374: _restgpr_30_x: lwz     30,-8(11)
                    375: _restgpr_31_x: lwz     0,4(11)
                    376:                lwz     31,-4(11)
                    377:                mtlr    0
                    378:                mr      1,11
                    379:                blr

unix.superglobalmegacorp.com

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