1 .macro start, sym 2 .type \sym, @function 3 .pushsection .opd, "aw" 4\sym: .quad .L.\sym, .TOC.@tocbase, 0 5 .popsection 6.L.\sym: 7 mflr 0 8 std 31, -8(1) 9 std 0, 16(1) 10 stdu 1, -128(1) 11 mr 31, 1 12 .endm 13 14 15 .macro end, sym 16 addi 1,31,128 17 ld 0, 16(1) 18 mtlr 0 19 ld 31, -8(1) 20 blr 21 .size \sym, . - .L.\sym 22 .endm 23 24 25 .macro forward, from, to 26 start \from 27 bl \to 28 nop 29 end \from 30 .endm 31 32 33 .macro usegot, sym 34 .pushsection .data 35\sym\@: .quad \@ 36 .popsection 37 .pushsection .toc, "aw" 38.LT\@: .tc \sym\@[TC], \sym\@ 39 .popsection 40 ld 3,.LT\@@toc(2) 41 .endm 42 43 44 .macro in123 45 .pushsection .toc, "aw" 46.LThello: 47 .tc hello[TC],hello 48 .popsection 49 50 .pushsection .rodata 51hello: .asciz "Hello, world!\n" 52 .popsection 53 54 .pushsection .text.in123, "axG", @progbits, in123, comdat 55 .weak in123 56 start in123 57 ld 3, .LThello@toc(2) 58 #bl printf 59 nop 60 end in123 61 .popsection 62 .endm 63 64 65 .macro in23 66 .pushsection .text 67 forward local, in123 68 .popsection 69 70 .pushsection .text.in23, "axG", @progbits, in23, comdat 71 .weak in23 72 forward in23, local 73 .popsection 74 .endm 75 76 77 .macro gobblegot, sym 78 .pushsection .text 79 .globl \sym 80 start \sym 81 .rept 5000 82 usegot a 83 .endr 84 end \sym 85 .popsection 86 .endm 87