mirror of
https://sourceware.org/git/glibc.git
synced 2025-08-05 19:35:52 +03:00
* 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>.
This commit is contained in:
15
ChangeLog
15
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>
|
2002-09-17 Bruno Haible <bruno@clisp.org>
|
||||||
|
|
||||||
* sysdeps/generic/ifreq.h (__if_nextreq): New function.
|
* sysdeps/generic/ifreq.h (__if_nextreq): New function.
|
||||||
|
@@ -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
|
/* ...in which case, we have argc as the top thing on the
|
||||||
stack, followed by argv (NULL-terminated), envp (likewise),
|
stack, followed by argv (NULL-terminated), envp (likewise),
|
||||||
and the auxilary vector. */
|
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_av = stack_on_entry + 1;
|
||||||
ubp_ev = ubp_av + argc + 1;
|
ubp_ev = ubp_av + argc + 1;
|
||||||
#ifdef HAVE_AUX_VECTOR
|
#ifdef HAVE_AUX_VECTOR
|
||||||
@@ -113,9 +114,8 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
|
|||||||
++temp;
|
++temp;
|
||||||
auxvec = (ElfW(auxv_t) *)++temp;
|
auxvec = (ElfW(auxv_t) *)++temp;
|
||||||
|
|
||||||
|
|
||||||
# ifndef SHARED
|
# ifndef SHARED
|
||||||
_dl_aux_init ((ElfW(auxv_t) *) auxvec);
|
_dl_aux_init (auxvec);
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
rtld_fini = NULL;
|
rtld_fini = NULL;
|
||||||
@@ -124,11 +124,12 @@ BP_SYM (__libc_start_main) (int argc, char *__unbounded *__unbounded ubp_av,
|
|||||||
INIT_ARGV_and_ENVIRON;
|
INIT_ARGV_and_ENVIRON;
|
||||||
|
|
||||||
/* Initialize the __cache_line_size variable from the aux vector. */
|
/* 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
|
/* Store something that has some relationship to the end of the
|
||||||
stack, for backtraces. This variable should be thread-specific. */
|
stack, for backtraces. This variable should be thread-specific.
|
||||||
__libc_stack_end = stack_on_entry + 4;
|
Use +8 so it works for both 32- and 64-bit. */
|
||||||
|
__libc_stack_end = stack_on_entry + 8;
|
||||||
|
|
||||||
#ifndef SHARED
|
#ifndef SHARED
|
||||||
/* Initialize the thread library at least a bit since the libgcc
|
/* Initialize the thread library at least a bit since the libgcc
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
/* Round floating-point to integer. PowerPC version.
|
/* 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.
|
This file is part of the GNU C Library.
|
||||||
|
|
||||||
The GNU C Library is free software; you can redistribute it and/or
|
The GNU C Library is free software; you can redistribute it and/or
|
||||||
@@ -17,28 +17,35 @@
|
|||||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||||
02111-1307 USA. */
|
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"
|
#include "math.h"
|
||||||
|
|
||||||
|
#undef __lrintf
|
||||||
|
#undef __lrintl
|
||||||
|
#undef lrintf
|
||||||
|
#undef lrintl
|
||||||
|
|
||||||
|
|
||||||
long int
|
long int
|
||||||
__lrint (double x)
|
__lrint (double x)
|
||||||
{
|
{
|
||||||
union {
|
union
|
||||||
|
{
|
||||||
double d;
|
double d;
|
||||||
long int ll[2];
|
int ll[2];
|
||||||
} u;
|
} u;
|
||||||
asm ("fctiw %0,%1" : "=f"(u.d) : "f"(x));
|
asm ("fctiw %0,%1" : "=f"(u.d) : "f"(x));
|
||||||
return u.ll[1];
|
return u.ll[1];
|
||||||
}
|
}
|
||||||
weak_alias (__lrint, lrint)
|
weak_alias (__lrint, lrint)
|
||||||
|
|
||||||
/* This code will also work for a 'float' argument. */
|
strong_alias (__lrint, __lrintf)
|
||||||
asm ("\n\
|
weak_alias (__lrint, lrintf)
|
||||||
.globl __lrintf \n\
|
|
||||||
.globl lrintf \n\
|
|
||||||
.weak lrintf \n\
|
|
||||||
.set __lrintf,__lrint \n\
|
|
||||||
.set lrintf,__lrint \n\
|
|
||||||
");
|
|
||||||
|
|
||||||
#ifdef NO_LONG_DOUBLE
|
#ifdef NO_LONG_DOUBLE
|
||||||
strong_alias (__lrint, __lrintl)
|
strong_alias (__lrint, __lrintl)
|
||||||
|
Reference in New Issue
Block a user