51488
|
1
|
|
2 .text
|
|
3
|
|
4 .set linkageArea,24
|
|
5 .set params,4
|
|
6 .set alignment,4
|
|
7
|
|
8 .set spaceToSave,linkageArea+params+alignment
|
|
9 .set spaceToSave8,spaceToSave+8
|
|
10
|
|
11 ; Mark from machine registers that are saved by C compiler
|
|
12 .globl _GC_push_regs
|
|
13 _GC_push_regs:
|
|
14 ; PROLOG
|
|
15 mflr r0 ; get return address
|
|
16 stw r0,8(r1) ; save return address
|
|
17 stwu r1,-spaceToSave(r1) ; skip over caller save area
|
|
18 ;
|
|
19 mr r3,r2 ; mark from r2. Well Im not really sure
|
|
20 ; that this is necessary or even the right
|
|
21 ; thing to do - at least it doesnt harm...
|
|
22 ; According to Apples docs it points to
|
|
23 ; the direct data area, whatever that is...
|
|
24 bl L_GC_push_one$stub
|
|
25 mr r3,r13 ; mark from r13-r31
|
|
26 bl L_GC_push_one$stub
|
|
27 mr r3,r14
|
|
28 bl L_GC_push_one$stub
|
|
29 mr r3,r15
|
|
30 bl L_GC_push_one$stub
|
|
31 mr r3,r16
|
|
32 bl L_GC_push_one$stub
|
|
33 mr r3,r17
|
|
34 bl L_GC_push_one$stub
|
|
35 mr r3,r18
|
|
36 bl L_GC_push_one$stub
|
|
37 mr r3,r19
|
|
38 bl L_GC_push_one$stub
|
|
39 mr r3,r20
|
|
40 bl L_GC_push_one$stub
|
|
41 mr r3,r21
|
|
42 bl L_GC_push_one$stub
|
|
43 mr r3,r22
|
|
44 bl L_GC_push_one$stub
|
|
45 mr r3,r23
|
|
46 bl L_GC_push_one$stub
|
|
47 mr r3,r24
|
|
48 bl L_GC_push_one$stub
|
|
49 mr r3,r25
|
|
50 bl L_GC_push_one$stub
|
|
51 mr r3,r26
|
|
52 bl L_GC_push_one$stub
|
|
53 mr r3,r27
|
|
54 bl L_GC_push_one$stub
|
|
55 mr r3,r28
|
|
56 bl L_GC_push_one$stub
|
|
57 mr r3,r29
|
|
58 bl L_GC_push_one$stub
|
|
59 mr r3,r30
|
|
60 bl L_GC_push_one$stub
|
|
61 mr r3,r31
|
|
62 bl L_GC_push_one$stub
|
|
63 ; EPILOG
|
|
64 lwz r0,spaceToSave8(r1) ; get return address back
|
|
65 mtlr r0 ; reset link register
|
|
66 addic r1,r1,spaceToSave ; restore stack pointer
|
|
67 blr
|
|
68
|
|
69 .data
|
|
70 .picsymbol_stub
|
|
71 L_GC_push_one$stub:
|
|
72 .indirect_symbol _GC_push_one
|
|
73 mflr r0
|
|
74 bcl 20,31,L0$_GC_push_one
|
|
75 L0$_GC_push_one:
|
|
76 mflr r11
|
|
77 addis r11,r11,ha16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
|
|
78 mtlr r0
|
|
79 lwz r12,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)(r11)
|
|
80 mtctr r12
|
|
81 addi r11,r11,lo16(L_GC_push_one$lazy_ptr-L0$_GC_push_one)
|
|
82 bctr
|
|
83 .data
|
|
84 .lazy_symbol_pointer
|
|
85 L_GC_push_one$lazy_ptr:
|
|
86 .indirect_symbol _GC_push_one
|
|
87 .long dyld_stub_binding_helper
|
|
88 .non_lazy_symbol_pointer
|
|
89 L_GC_push_one$non_lazy_ptr:
|
|
90 .indirect_symbol _GC_push_one
|
|
91 .long 0
|
|
92
|
|
93
|
|
94
|
|
95
|