* sysdeps/powerpc/elf/libc-start.c: Use long in place of int for argc
authorRoland McGrath <roland@gnu.org>
Fri, 20 Sep 2002 21:39:29 +0000 (21:39 +0000)
committerRoland McGrath <roland@gnu.org>
Fri, 20 Sep 2002 21:39:29 +0000 (21:39 +0000)
load, so as to work on both 32-bit and 64-bit.  Remove unnecessary
casts.  Align __libc_stack_end to 8 bytes.

2002-09-20  Roland McGrath  <roland@redhat.com>

* sysdeps/powerpc/fpu/s_lrint.c: Use strong_alias/weak_alias macros
instead of asm for lrintf, __lrintf aliases.

* sysdeps/powerpc/fpu/s_lrint.c (__lrint): Change union long array to
int array for 32-/64-bit compatibility.
From Steven Munroe  <sjmunroe@us.ibm.com>.

ChangeLog
sysdeps/powerpc/elf/libc-start.c
sysdeps/powerpc/fpu/s_lrint.c

index dac9eae..79e594e 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2002-09-20  Steven Munroe  <sjmunroe@us.ibm.com>
+
+       * sysdeps/powerpc/elf/libc-start.c: Use long in place of int for argc
+       load, so as to work on both 32-bit and 64-bit.  Remove unnecessary
+       casts.  Align __libc_stack_end to 8 bytes.
+
+2002-09-20  Roland McGrath  <roland@redhat.com>
+
+       * sysdeps/powerpc/fpu/s_lrint.c: Use strong_alias/weak_alias macros
+       instead of asm for lrintf, __lrintf aliases.
+
+       * sysdeps/powerpc/fpu/s_lrint.c (__lrint): Change union long array to
+       int array for 32-/64-bit compatibility.
+       From Steven Munroe  <sjmunroe@us.ibm.com>.
+
 2002-09-17  Bruno Haible  <bruno@clisp.org>
 
        * sysdeps/generic/ifreq.h (__if_nextreq): New function.
index 9450fab..6751b9e 100644 (file)
@@ -104,7 +104,8 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
       /* ...in which case, we have argc as the top thing on the
         stack, followed by argv (NULL-terminated), envp (likewise),
         and the auxilary vector.  */
-      argc = *(int *__unbounded) stack_on_entry;
+      /* 32/64-bit agnostic load from stack */
+      argc = *(long int *__unbounded) stack_on_entry;
       ubp_av = stack_on_entry + 1;
       ubp_ev = ubp_av + argc + 1;
 #ifdef HAVE_AUX_VECTOR
@@ -113,9 +114,8 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
         ++temp;
       auxvec = (ElfW(auxv_t) *)++temp;
 
-
 # ifndef SHARED
-      _dl_aux_init ((ElfW(auxv_t) *) auxvec);
+      _dl_aux_init (auxvec);
 # endif
 #endif
       rtld_fini = NULL;
@@ -124,11 +124,12 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
   INIT_ARGV_and_ENVIRON;
 
   /* Initialize the __cache_line_size variable from the aux vector.  */
-  __aux_init_cache((ElfW(auxv_t) *) auxvec);
+  __aux_init_cache(auxvec);
 
   /* Store something that has some relationship to the end of the
-     stack, for backtraces.  This variable should be thread-specific.  */
-  __libc_stack_end = stack_on_entry + 4;
+     stack, for backtraces.  This variable should be thread-specific.
+     Use +8 so it works for both 32- and 64-bit.  */
+  __libc_stack_end = stack_on_entry + 8;
 
 #ifndef SHARED
   /* Initialize the thread library at least a bit since the libgcc
index 75d782e..c78fb03 100644 (file)
@@ -1,5 +1,5 @@
 /* Round floating-point to integer.  PowerPC version.
-   Copyright (C) 1997 Free Software Foundation, Inc.
+   Copyright (C) 1997,2002 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA.  */
 
+/* Kludge to avoid decls that will confuse strong_alias below.  */
+#define __lrintf XXX__lrintf
+#define __lrintl XXX__lrintl
+#define lrintf XXXlrintf
+#define lrintl XXXlrintl
+
 #include "math.h"
 
+#undef __lrintf
+#undef __lrintl
+#undef lrintf
+#undef lrintl
+
+
 long int
 __lrint (double x)
 {
-  union {
+  union
+  {
     double d;
-    long int ll[2];
+    int ll[2];
   } u;
   asm ("fctiw %0,%1" : "=f"(u.d) : "f"(x));
   return u.ll[1];
 }
 weak_alias (__lrint, lrint)
 
-/* This code will also work for a 'float' argument.  */
-asm ("\n\
-       .globl __lrintf \n\
-       .globl lrintf   \n\
-       .weak lrintf    \n\
-       .set __lrintf,__lrint   \n\
-       .set lrintf,__lrint     \n\
-");
+strong_alias (__lrint, __lrintf)
+weak_alias (__lrint, lrintf)
 
 #ifdef NO_LONG_DOUBLE
 strong_alias (__lrint, __lrintl)