mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-01-11 22:55:38 +08:00
crtbegin.asm (dtor_ptr): Make gp-relative.
* config/ia64/crtbegin.asm (dtor_ptr): Make gp-relative. (__do_global_dtors_aux): Update to match. (__JCR_LIST__, __do_jv_register_classes): New. (.init): Call it. * config/ia64/crtend.asm (__JCR_END__): New. (__do_global_ctors_aux): Use a GPREL64I reloc to __CTOR_END__ instead of an indirect LTOFF22 reloc. From-SVN: r45023
This commit is contained in:
parent
213f974a3a
commit
3dff7ed031
@ -5,6 +5,14 @@
|
|||||||
(frame_dummy, __frame_dummy): Do java registration here ...
|
(frame_dummy, __frame_dummy): Do java registration here ...
|
||||||
(__do_global_ctors_aux): ... not here.
|
(__do_global_ctors_aux): ... not here.
|
||||||
|
|
||||||
|
* config/ia64/crtbegin.asm (dtor_ptr): Make gp-relative.
|
||||||
|
(__do_global_dtors_aux): Update to match.
|
||||||
|
(__JCR_LIST__, __do_jv_register_classes): New.
|
||||||
|
(.init): Call it.
|
||||||
|
* config/ia64/crtend.asm (__JCR_END__): New.
|
||||||
|
(__do_global_ctors_aux): Use a GPREL64I reloc to __CTOR_END__
|
||||||
|
instead of an indirect LTOFF22 reloc.
|
||||||
|
|
||||||
2001-08-18 Richard Henderson <rth@redhat.com>
|
2001-08-18 Richard Henderson <rth@redhat.com>
|
||||||
|
|
||||||
* flow.c (mark_regs_live_at_end): Use regs_invalidated_by_call.
|
* flow.c (mark_regs_live_at_end): Use regs_invalidated_by_call.
|
||||||
|
@ -26,11 +26,15 @@ __CTOR_LIST__:
|
|||||||
__DTOR_LIST__:
|
__DTOR_LIST__:
|
||||||
data8 -1
|
data8 -1
|
||||||
|
|
||||||
|
.section .jcr,"aw","progbits"
|
||||||
|
.align 8
|
||||||
|
__JCR_LIST__:
|
||||||
|
|
||||||
.section .sdata
|
.section .sdata
|
||||||
.type dtor_ptr#,@object
|
.type dtor_ptr#,@object
|
||||||
.size dtor_ptr#,8
|
.size dtor_ptr#,8
|
||||||
dtor_ptr:
|
dtor_ptr:
|
||||||
data8 __DTOR_LIST__# + 8
|
data8 @gprel(__DTOR_LIST__# + 8)
|
||||||
|
|
||||||
/* A handle for __cxa_finalize to manage c++ local destructors. */
|
/* A handle for __cxa_finalize to manage c++ local destructors. */
|
||||||
.global __dso_handle#
|
.global __dso_handle#
|
||||||
@ -77,6 +81,24 @@ __dso_handle:
|
|||||||
;;
|
;;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Likewise for _init. */
|
||||||
|
|
||||||
|
.section .init,"ax","progbits"
|
||||||
|
{ .mlx
|
||||||
|
movl r2 = @pcrel(__do_jv_register_classes# - 16)
|
||||||
|
}
|
||||||
|
{ .mii
|
||||||
|
mov r3 = ip
|
||||||
|
;;
|
||||||
|
add r2 = r2, r3
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mib
|
||||||
|
mov b6 = r2
|
||||||
|
br.call.sptk.many b0 = b6
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
|
||||||
.section .text
|
.section .text
|
||||||
.align 16
|
.align 16
|
||||||
.proc __do_global_dtors_aux#
|
.proc __do_global_dtors_aux#
|
||||||
@ -150,17 +172,20 @@ __do_global_dtors_aux:
|
|||||||
{ .mmi
|
{ .mmi
|
||||||
ld8 r15 = [loc0]
|
ld8 r15 = [loc0]
|
||||||
;;
|
;;
|
||||||
ld8 r16 = [r15], 8
|
add r16 = r15, gp
|
||||||
|
adds r15 = 8, r15
|
||||||
;;
|
;;
|
||||||
}
|
}
|
||||||
{ .mfb
|
{ .mmi
|
||||||
cmp.ne p6, p0 = r0, r16
|
ld8 r16 = [r16]
|
||||||
(p6) br.cond.sptk.few 0b
|
|
||||||
}
|
|
||||||
{ .mii
|
|
||||||
mov gp = loc2
|
mov gp = loc2
|
||||||
mov b0 = loc1
|
mov b0 = loc1
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mib
|
||||||
|
cmp.ne p6, p0 = r0, r16
|
||||||
mov ar.pfs = loc3
|
mov ar.pfs = loc3
|
||||||
|
(p6) br.cond.sptk.few 0b
|
||||||
}
|
}
|
||||||
{ .bbb
|
{ .bbb
|
||||||
br.ret.sptk.many b0
|
br.ret.sptk.many b0
|
||||||
@ -168,6 +193,54 @@ __do_global_dtors_aux:
|
|||||||
}
|
}
|
||||||
.endp __do_global_dtors_aux#
|
.endp __do_global_dtors_aux#
|
||||||
|
|
||||||
|
.align 16
|
||||||
|
.proc __do_jv_register_classes#
|
||||||
|
__do_jv_register_classes:
|
||||||
|
{ .mlx
|
||||||
|
alloc loc2 = ar.pfs, 0, 3, 1, 0
|
||||||
|
movl out0 = @gprel(__JCR_LIST__)
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mmi
|
||||||
|
addl r14 = @ltoff(@fptr(_Jv_RegisterClasses)), gp
|
||||||
|
add out0 = out0, gp
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mmi
|
||||||
|
ld8 r14 = [r14]
|
||||||
|
ld8 r15 = [out0]
|
||||||
|
cmp.ne p6, p0 = r0, r0
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mib
|
||||||
|
cmp.eq.or p6, p0 = r0, r14
|
||||||
|
cmp.eq.or p6, p0 = r0, r15
|
||||||
|
(p6) br.ret.sptk.many b0
|
||||||
|
}
|
||||||
|
{ .mii
|
||||||
|
ld8 r15 = [r14], 8
|
||||||
|
mov loc0 = b0
|
||||||
|
mov loc1 = gp
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mib
|
||||||
|
ld8 gp = [r14]
|
||||||
|
mov b6 = r15
|
||||||
|
br.call.sptk.many b0 = b6
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
{ .mii
|
||||||
|
mov gp = loc1
|
||||||
|
mov b0 = loc0
|
||||||
|
mov ar.pfs = loc2
|
||||||
|
}
|
||||||
|
{ .bbb
|
||||||
|
br.ret.sptk.many b0
|
||||||
|
;;
|
||||||
|
}
|
||||||
|
.endp __do_jv_register_classes#
|
||||||
|
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
.weak __cxa_finalize#
|
.weak __cxa_finalize#
|
||||||
#endif
|
#endif
|
||||||
|
.weak _Jv_RegisterClasses
|
||||||
|
@ -26,6 +26,11 @@ __CTOR_END__:
|
|||||||
__DTOR_END__:
|
__DTOR_END__:
|
||||||
data8 0
|
data8 0
|
||||||
|
|
||||||
|
.section .jcr,"aw","progbits"
|
||||||
|
.align 8
|
||||||
|
__JCR_END__:
|
||||||
|
data8 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Fragment of the ELF _init routine that invokes our dtor cleanup.
|
* Fragment of the ELF _init routine that invokes our dtor cleanup.
|
||||||
*
|
*
|
||||||
@ -63,15 +68,18 @@ __do_global_ctors_aux:
|
|||||||
for (loc0 = __CTOR_END__-1; *p != -1; --p)
|
for (loc0 = __CTOR_END__-1; *p != -1; --p)
|
||||||
(*p) ();
|
(*p) ();
|
||||||
*/
|
*/
|
||||||
{ .mii
|
{ .mlx
|
||||||
alloc loc4 = ar.pfs, 0, 5, 0, 0
|
alloc loc4 = ar.pfs, 0, 5, 0, 0
|
||||||
addl loc0 = @ltoff(__CTOR_END__# - 8), gp
|
movl loc0 = @gprel(__CTOR_END__# - 8)
|
||||||
mov loc1 = b0
|
|
||||||
;;
|
;;
|
||||||
}
|
}
|
||||||
{ .mmi
|
{ .mmi
|
||||||
ld8 loc0 = [loc0]
|
add loc0 = loc0, gp
|
||||||
|
mov loc1 = b0
|
||||||
;;
|
;;
|
||||||
|
}
|
||||||
|
{
|
||||||
|
.mmi
|
||||||
ld8 loc3 = [loc0], -8
|
ld8 loc3 = [loc0], -8
|
||||||
mov loc2 = gp
|
mov loc2 = gp
|
||||||
;;
|
;;
|
||||||
|
Loading…
Reference in New Issue
Block a user