Annotation of gcc/config/rs6000/eabi.asm, revision 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.