Commit 68ea97b4 by Michael Meissner

Fix -msdata init code; Make sure correct endian flag is defined

From-SVN: r12274
parent 8bc6cf9b
...@@ -126,26 +126,30 @@ FUNC_START(__eabi) ...@@ -126,26 +126,30 @@ FUNC_START(__eabi)
lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */ lwz 12,.Ltable(11) /* get linker's idea of where .Laddr is */
lwz 10,.Linit(11) /* address of init flag */ lwz 10,.Linit(11) /* address of init flag */
subf. 12,12,11 /* calculate difference */ subf. 12,12,11 /* calculate difference */
mtlr 0 /* restore link register */
lwzx 9,10,12 /* done flag */ lwzx 9,10,12 /* done flag */
mtlr 0 /* restore link register */
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 */
#else /* !-mrelocatable */ #else /* !-mrelocatable */
addis 10,0,.Linit_p@ha /* init flag */
addis 11,0,.LCTOC1@ha /* load address of .LCTOC1 */ addis 11,0,.LCTOC1@ha /* load address of .LCTOC1 */
lwz 9,.Linit_p@l(10) /* init flag */
addi 11,11,.LCTOC1@l addi 11,11,.LCTOC1@l
lwz 10,.Linit(11) /* init flag */
#endif /* !-mrelocatable */
cmplwi 2,9,0 /* init flag != 0? */ cmplwi 2,9,0 /* init flag != 0? */
bnelr 2 /* return now, if we've been called already */ bnelr 2 /* return now, if we've been called already */
stwx 1,10,12 /* store a non-zero value in the done flag */ stw 1,.Linit_p@l(10) /* store a non-zero value in the done flag */
bne 0,.Lreloc /* skip if we need to relocate */
#endif /* !-mrelocatable */
/* Only load up register 13 if there is a .sdata and/or .sbss section */ /* Only load up register 13 if there is a .sdata and/or .sbss section */
lwz 3,.Lsdas(11) /* start of .sdata/.sbss section */ lwz 3,.Lsdas(11) /* start of .sdata/.sbss section */
lwz 4,.Lsdae(11) /* end of .sdata/.sbss section */ lwz 4,.Lsdae(11) /* end of .sdata/.sbss section */
cmpw 1,3,4 /* .sdata/.sbss section non-empty? */ cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
beq 1,.Lsda2l /* skip loading r13 */ beq- 1,.Lsda2l /* skip loading r13 */
lwz 13,.Lsda(11) /* load r13 with _SDA_BASE address */ lwz 13,.Lsda(11) /* load r13 with _SDA_BASE address */
...@@ -155,14 +159,14 @@ FUNC_START(__eabi) ...@@ -155,14 +159,14 @@ FUNC_START(__eabi)
lwz 3,.Lsda2s(11) /* start of .sdata/.sbss section */ lwz 3,.Lsda2s(11) /* start of .sdata/.sbss section */
lwz 4,.Lsda2e(11) /* end of .sdata/.sbss section */ lwz 4,.Lsda2e(11) /* end of .sdata/.sbss section */
cmpw 1,3,4 /* .sdata/.sbss section non-empty? */ cmpw 1,3,4 /* .sdata/.sbss section non-empty? */
beq 1,.Ldone /* skip loading r2 */ beq+ 1,.Ldone /* skip loading r2 */
lwz 2,.Lsda2(11) /* load r2 with _SDA2_BASE address */ lwz 2,.Lsda2(11) /* load r2 with _SDA2_BASE address */
b FUNC_NAME(__do_global_ctors) /* do any C++ global constructors (which returns to caller) */ b FUNC_NAME(__do_global_ctors) /* do any C++ global constructors (which returns to caller) */
.Lreloc:
#ifdef _RELOCATABLE #ifdef _RELOCATABLE
.Lreloc:
/* We need to relocate the .got2 pointers. Don't load registers 2 or 13 */ /* We need to relocate the .got2 pointers. Don't load registers 2 or 13 */
lwz 3,.Lgot2s(11) /* GOT pointers start */ lwz 3,.Lgot2s(11) /* GOT pointers start */
......
...@@ -1059,7 +1059,7 @@ do { \ ...@@ -1059,7 +1059,7 @@ do { \
%{mcall-nt: -D_LITTLE_ENDIAN -Amachine(littleendian)} \ %{mcall-nt: -D_LITTLE_ENDIAN -Amachine(littleendian)} \
%{mcall-linux: -D_BIG_ENDIAN -Amachine(bigendian)} \ %{mcall-linux: -D_BIG_ENDIAN -Amachine(bigendian)} \
%{mcall-aixdesc: -D_BIG_ENDIAN -Amachine(bigendian)} \ %{mcall-aixdesc: -D_BIG_ENDIAN -Amachine(bigendian)} \
%{!mcall-solaris: %{!mcall-linux: %{!mcall-nt: %{!mcall-aixdesc: %(cpp_endian_default_spec) }}}}}}}}" %{!mcall-solaris: %{!mcall-linux: %{!mcall-nt: %{!mcall-aixdesc: %(cpp_endian_default) }}}}}}}}"
#undef CPP_ENDIAN_DEFAULT_SPEC #undef CPP_ENDIAN_DEFAULT_SPEC
#define CPP_ENDIAN_DEFAULT_SPEC "-D_BIG_ENDIAN -Amachine(bigendian)" #define CPP_ENDIAN_DEFAULT_SPEC "-D_BIG_ENDIAN -Amachine(bigendian)"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment