aboutsummaryrefslogtreecommitdiff
path: root/gcc/config
diff options
context:
space:
mode:
authorRichard Henderson <rth@gcc.gnu.org>2001-08-09 13:22:15 -0700
committerRichard Henderson <rth@gcc.gnu.org>2001-08-09 13:22:15 -0700
commitef8d8b8922a034dfac5cff9d5fa781dc57c49ed0 (patch)
tree1da9d8a8afe474422c00e74d9991395bd85720d9 /gcc/config
parent3b87de3d00a64485f6b72bfc448c17e799c83e30 (diff)
downloadgcc-ef8d8b8922a034dfac5cff9d5fa781dc57c49ed0.zip
gcc-ef8d8b8922a034dfac5cff9d5fa781dc57c49ed0.tar.gz
gcc-ef8d8b8922a034dfac5cff9d5fa781dc57c49ed0.tar.bz2
crtbegin.asm (__JCR_LIST__): New.
* config/alpha/crtbegin.asm (__JCR_LIST__): New. (__do_global_dtors_aux): Use gp-relative static data to avoid one dynamic relocation. (__do_frame_setup): Register Java classes. * config/alpha/crtend.asm (__JCR_END__): New. From-SVN: r44746
Diffstat (limited to 'gcc/config')
-rw-r--r--gcc/config/alpha/crtbegin.asm40
-rw-r--r--gcc/config/alpha/crtend.asm7
2 files changed, 30 insertions, 17 deletions
diff --git a/gcc/config/alpha/crtbegin.asm b/gcc/config/alpha/crtbegin.asm
index cbeba99..96725b0 100644
--- a/gcc/config/alpha/crtbegin.asm
+++ b/gcc/config/alpha/crtbegin.asm
@@ -44,16 +44,18 @@
application's lists. */
.section .ctors,"aw"
-
.align 3
__CTOR_LIST__:
- .quad -1
+ .quad -1
.section .dtors,"aw"
-
.align 3
__DTOR_LIST__:
- .quad -1
+ .quad -1
+
+.section .jcr,"aw"
+ .align 3
+__JCR_LIST__:
.section .eh_frame,"aw"
__EH_FRAME_BEGIN__:
@@ -96,9 +98,9 @@ __EH_FRAME_BEGIN__:
/* Support recursive calls to exit. */
.type dtor_ptr,@object
- .size dtor_ptr,8
+ .size dtor_ptr,4
dtor_ptr:
- .quad __DTOR_LIST__ + 8
+ .gprel32 __DTOR_LIST__ + 8
/* A globally unique widget for c++ local destructors to hang off.
@@ -150,12 +152,13 @@ __do_global_dtors_aux:
0: lda $9,dtor_ptr
br 2f
-1: stq $1,0($9)
+1: stl $1,0($9)
jsr $26,($27)
ldgp $29,0($26)
-2: ldq $1,0($9)
- ldq $27,0($1)
- addq $1,8,$1
+2: ldl $1,0($9)
+ addq $1,$29,$2
+ ldq $27,0($2)
+ addl $1,8,$1
bne $27,1b
/* Remove our frame info. */
@@ -173,11 +176,9 @@ __do_global_dtors_aux:
.end __do_global_dtors_aux
/*
- * Install our frame info.
+ * Install our frame info; register java classes, if any.
*/
-/* ??? How can we rationally keep this size correct? */
-
.section .bss
.type frame_object,@object
.size frame_object, 48
@@ -205,8 +206,16 @@ __do_frame_setup:
jsr $26,__register_frame_info
ldgp $29,0($26)
- ldq $26,0($30)
-0: lda $30,16($30)
+0: lda $1,_Jv_RegisterClasses
+ lda $16,__JCR_LIST__
+ beq $1,0f
+ ldq $2,8($16)
+ beq $2,0f
+ jsr $26,_Jv_RegisterClasses
+ ldgp $29,0($26)
+
+0: ldq $26,0($30)
+ lda $30,16($30)
ret
.end __do_frame_setup
@@ -216,3 +225,4 @@ __do_frame_setup:
#ifdef SHARED
.weak __cxa_finalize
#endif
+.weak _Jv_RegisterClasses
diff --git a/gcc/config/alpha/crtend.asm b/gcc/config/alpha/crtend.asm
index 662eb22..1ffd808 100644
--- a/gcc/config/alpha/crtend.asm
+++ b/gcc/config/alpha/crtend.asm
@@ -41,17 +41,20 @@
application's lists. */
.section .ctors,"aw"
-
.align 3
__CTOR_END__:
.quad 0
.section .dtors,"aw"
-
.align 3
__DTOR_END__:
.quad 0
+.section .jcr,"aw"
+ .align 3
+__JCR_END__:
+ .quad 0
+
.section .eh_frame,"aw"
__FRAME_END__:
.quad 0