Fix -msdata init code; Make sure correct endian flag is defined
authorMichael Meissner <meissner@gcc.gnu.org>
Tue, 11 Jun 1996 18:43:19 +0000 (18:43 +0000)
committerMichael Meissner <meissner@gcc.gnu.org>
Tue, 11 Jun 1996 18:43:19 +0000 (18:43 +0000)
From-SVN: r12274

gcc/config/rs6000/eabi.asm
gcc/config/rs6000/sysv4.h

index b09d14242451b5b370c48d538dcb96c68ec4c1d4..62c483cf06223a396ee5f176ea482ebbad10ce86 100644 (file)
@@ -126,26 +126,30 @@ FUNC_START(__eabi)
        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 */
        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 */
+       addis   10,0,.Linit_p@ha                /* init flag */
        addis   11,0,.LCTOC1@ha                 /* load address of .LCTOC1 */
+       lwz     9,.Linit_p@l(10)                /* init flag */
        addi    11,11,.LCTOC1@l
-       lwz     10,.Linit(11)                   /* init flag */
-#endif /* !-mrelocatable */
-
        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 */
+       stw     1,.Linit_p@l(10)                /* store a non-zero value in the done flag */
+
+#endif /* !-mrelocatable */
 
 /* Only load up register 13 if there is a .sdata and/or .sbss section */
 
        lwz     3,.Lsdas(11)                    /* start of .sdata/.sbss section */
        lwz     4,.Lsdae(11)                    /* end of .sdata/.sbss section */
        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 */
 
@@ -155,14 +159,14 @@ FUNC_START(__eabi)
        lwz     3,.Lsda2s(11)                   /* start of .sdata/.sbss section */
        lwz     4,.Lsda2e(11)                   /* end of .sdata/.sbss section */
        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 */
        b       FUNC_NAME(__do_global_ctors)    /* do any C++ global constructors (which returns to caller) */
 
-.Lreloc:
 
 #ifdef _RELOCATABLE
+.Lreloc:
 /* We need to relocate the .got2 pointers.  Don't load registers 2 or 13 */
 
        lwz     3,.Lgot2s(11)                   /* GOT pointers start */
index 31067856d9eec3c5bfcb23f05ecfb88ff236d6d0..e6b79dd5676264b2318caee1b4a5a05b355d98bb 100644 (file)
@@ -1059,7 +1059,7 @@ do {                                                                      \
     %{mcall-nt: -D_LITTLE_ENDIAN -Amachine(littleendian)} \
     %{mcall-linux: -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
 #define        CPP_ENDIAN_DEFAULT_SPEC "-D_BIG_ENDIAN -Amachine(bigendian)"