insure eabi destructors get called
From-SVN: r10962
This commit is contained in:
parent
ffc1e7b2e9
commit
0780f386d7
@ -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)();
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user