insure eabi destructors get called

From-SVN: r10962
This commit is contained in:
Michael Meissner 1996-01-11 16:36:41 +00:00
parent ffc1e7b2e9
commit 0780f386d7
3 changed files with 27 additions and 5 deletions

View File

@ -34,6 +34,11 @@ extern func_ptr __CTOR_END__ [];
extern func_ptr __DTOR_LIST__[];
extern func_ptr __DTOR_END__ [];
extern void __do_global_ctors (void);
extern void __do_global_dtors (void);
void (*__atexit)(func_ptr);
/* Call all global constructors */
void
__do_global_ctors (void)
@ -41,8 +46,12 @@ __do_global_ctors (void)
func_ptr *ptr = &__CTOR_LIST__[0];
func_ptr *end = &__CTOR_END__[0];
if (__atexit)
__atexit (__do_global_dtors);
for ( ; ptr != end; ptr++)
(*ptr)();
if (*ptr)
(*ptr)();
}
/* Call all global destructors */
@ -53,6 +62,7 @@ __do_global_dtors (void)
func_ptr *end = &__DTOR_END__[0];
for ( ; ptr != end; ptr++)
(*ptr)();
if (*ptr)
(*ptr)();
}

View File

@ -80,6 +80,13 @@
.Ldtore = .-.LCTOC1
.long __DTOR_END__ /* end of .dtor section */
.Linit = .-.LCTOC1
.long .Linit_p /* address of variable to say we've been called */
.data
.Linit_p:
.long 0
.text
.Lptr:
.long .LCTOC1-.Laddr /* PC relative pointer to .got2 */
@ -92,9 +99,14 @@ FUNC_START(__eabi)
lwz 11,(.Lptr-.Laddr)(12) /* linker generated address of .LCTOC1 */
add 11,11,12 /* correct to real pointer */
lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */
lwz 10,.Linit(11) /* address of init flag */
subf. 12,12,11 /* calculate difference */
mtlr 0 /* restore link register */
bc 4,2,.Lreloc /* skip if we need to relocate */
lwzx 9,10,12 /* done flag */
cmplwi 2,9,0 /* init flag != 0? */
bnelr 2 /* return now, if we've been called already */
stwx 1,10,12 /* store a non-zero value in the done flag */
bne 0,.Lreloc /* skip if we need to relocate */
/* Only load up register 2 if there is a .got section */

View File

@ -2917,7 +2917,7 @@
(match_operand:SF 2 "gpc_reg_operand" "f")))]
"! TARGET_POWERPC && TARGET_HARD_FLOAT"
"{fm|fmul} %0,%1,%2"
[(set_attr "type" "fp")])
[(set_attr "type" "dmul")])
(define_expand "divsf3"
[(set (match_operand:SF 0 "gpc_reg_operand" "")
@ -2940,7 +2940,7 @@
(match_operand:SF 2 "gpc_reg_operand" "f")))]
"! TARGET_POWERPC && TARGET_HARD_FLOAT"
"{fd|fdiv} %0,%1,%2"
[(set_attr "type" "sdiv")])
[(set_attr "type" "ddiv")])
(define_insn ""
[(set (match_operand:SF 0 "gpc_reg_operand" "=f")