OSDN Git Service

* config/score/crti.asm: add pic support.
[pf3gnuchains/gcc-fork.git] / gcc / config / score / crti.asm
index 65ffb15..2408596 100644 (file)
@@ -35,7 +35,8 @@
 # This file makes a stack frame for the contents of the .init and
 # .fini sections.
 
-.section .init,"ax", @progbits
+#ifndef __pic__
+.section .init, "ax", @progbits
         .weak   _start
         .ent    _start
         .frame  r0, 0, r3, 0
@@ -81,5 +82,62 @@ _init:
 _fini:
         addi    r0, -32
         sw      r3, [r0, 20]
+#else
+.section .init, "ax", @progbits
+        .set    pic
+        .weak   _start
+        .ent    _start
+        .frame  r0, 0, r3, 0
+        .mask   0x00000000,0
+_start:
+        la      r28, _gp
+        la      r8, __bss_start
+        la      r9, __bss_end__
+        sub!    r9, r8
+        srli!   r9, 2
+        addi    r9, -1
+        mtsr    r9, sr0
+        li      r9, 0
+1:
+        sw      r9, [r8]+, 4
+        bcnz    1b
+        la      r0, _stack
+#       jl      _init
+#       la      r4, _end
+#       jl      _init_argv
+        ldiu!   r4, 0
+        ldiu!   r5, 0
+#       jl      main
+        la      r29, main
+        brl     r29
+#       jl      exit
+        la      r29, exit
+        brl     r29
+        .end    _start
+
+        .weak   _init_argv
+        .ent
+        .frame  r0, 0, r3, 0
+        .mask   0x00000000, 0
+_init_argv:
+        ldiu!   r4, 0
+        ldiu!   r5, 0
+        j       main
+        .end    _init_argv
+
+        .globl  _init
+        .type   _init, %function
+_init:
+        addi    r0, -32
+        sw      r3, [r0, 20]
+
+.section .fini, "ax", @progbits
+        .globl  _fini
+        .type   _fini, %function
+_fini:
+        addi    r0, -32
+        sw      r3, [r0, 20]
+
+#endif