diff options
Diffstat (limited to 'sysdeps')
36 files changed, 2275 insertions, 99 deletions
diff --git a/sysdeps/generic/dl-cache.c b/sysdeps/generic/dl-cache.c index 7b471787f4..c704fd869d 100644 --- a/sysdeps/generic/dl-cache.c +++ b/sysdeps/generic/dl-cache.c @@ -77,7 +77,8 @@ _dl_load_cache_lookup (const char *name) } for (i = 0; i < cache->nlibs; ++i) - if (cache->libs[i].flags == 1 && /* ELF library entry. */ + if ((cache->libs[i].flags == 1 || + cache->libs[i].flags == 3) && /* ELF library entry. */ /* Make sure string table indices are not bogus before using them. */ cache->libs[i].key < cachesize - sizeof *cache && cache->libs[i].value < cachesize - sizeof *cache && diff --git a/sysdeps/generic/netinet/in.h b/sysdeps/generic/netinet/in.h index 5531fc2ece..a59f584085 100644 --- a/sysdeps/generic/netinet/in.h +++ b/sysdeps/generic/netinet/in.h @@ -128,13 +128,13 @@ struct in_addr /* Address to send to all hosts. */ #define INADDR_BROADCAST ((unsigned) 0xffffffff) /* Address indicating an error return. */ -#define INADDR_NONE 0xffffffff +#define INADDR_NONE ((unsigned) 0xffffffff) /* Network number for local host loopback. */ #define IN_LOOPBACKNET 127 /* Address to loopback in software to local host. */ #ifndef INADDR_LOOPBACK -#define INADDR_LOOPBACK 0x7f000001 /* Internet address 127.0.0.1. */ +#define INADDR_LOOPBACK ((unsigned) 0x7f000001) /* Inet address 127.0.0.1. */ #endif diff --git a/sysdeps/libm-ieee754/w_cabs.c b/sysdeps/libm-ieee754/w_cabs.c deleted file mode 100644 index bf62f22be3..0000000000 --- a/sysdeps/libm-ieee754/w_cabs.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * cabs() wrapper for hypot(). - * - * Written by J.T. Conklin, <jtc@wimsey.com> - * Placed into the Public Domain, 1994. - */ - -#include <math.h> - -double -__cabs(z) - struct __cabs_complex z; -{ - return __hypot(z.x, z.y); -} -weak_alias (__cabs, cabs) - -#ifdef NO_LONG_DOUBLE -double -__cabsl(z) - struct __cabs_complexl z; -{ - return __hypotl(z.x, z.y); -} -weak_alias (__cabsl, cabsl) -#endif diff --git a/sysdeps/libm-ieee754/w_cabsf.c b/sysdeps/libm-ieee754/w_cabsf.c deleted file mode 100644 index 20ff5b7744..0000000000 --- a/sysdeps/libm-ieee754/w_cabsf.c +++ /dev/null @@ -1,17 +0,0 @@ -/* - * cabsf() wrapper for hypotf(). - * - * Written by J.T. Conklin, <jtc@wimsey.com> - * Placed into the Public Domain, 1994. - */ - -#include "math.h" -#include "math_private.h" - -float -__cabsf(z) - struct __cabs_complexf z; -{ - return __hypotf(z.x, z.y); -} -weak_alias (__cabsf, cabsf) diff --git a/sysdeps/libm-ieee754/w_cabsl.c b/sysdeps/libm-ieee754/w_cabsl.c deleted file mode 100644 index 21ef860a95..0000000000 --- a/sysdeps/libm-ieee754/w_cabsl.c +++ /dev/null @@ -1,18 +0,0 @@ -/* - * cabsl() wrapper for hypotl(). - * - * Written by J.T. Conklin, <jtc@wimsey.com> - * Conversion to long double by Ulrich Drepper, - * Cygnus Support, drepper@cygnus.com. - * Placed into the Public Domain, 1994. - */ - -#include <math.h> - -long double -__cabsl(z) - struct __cabs_complexl z; -{ - return __hypotl(z.x, z.y); -} -weak_alias (__cabsl, cabsl) diff --git a/sysdeps/m68k/fpu/__math.h b/sysdeps/m68k/fpu/__math.h index 1a29a56d92..fe01c254d7 100644 --- a/sysdeps/m68k/fpu/__math.h +++ b/sysdeps/m68k/fpu/__math.h @@ -43,7 +43,7 @@ suffixed with f and l for the float and long double version, resp). OP is the name of the fpu operation (without leading f). */ -#ifdef __USE_MISC +#if defined __USE_MISC || defined __USE_ISOC9X #define __inline_mathop(func, op) \ __inline_mathop1(double, func, op) \ __inline_mathop1(float, __CONCAT(func,f), op) \ @@ -81,7 +81,6 @@ __inline_mathop(__sin, sin) __inline_mathop(__tan, tan) __inline_mathop(__tanh, tanh) __inline_mathop(__fabs, abs) -__inline_mathop(__sqrt, sqrt) __inline_mathop(__rint, int) __inline_mathop(__expm1, etoxm1) @@ -89,6 +88,9 @@ __inline_mathop(__log1p, lognp1) __inline_mathop(__logb, log2) __inline_mathop(__significand, getman) +__inline_mathop(__log2, log2) +__inline_mathop(__exp2, twotox) + #if !defined __NO_MATH_INLINES && defined __OPTIMIZE__ __inline_mathop(atan, atan) @@ -96,10 +98,8 @@ __inline_mathop(cos, cos) __inline_mathop(sin, sin) __inline_mathop(tan, tan) __inline_mathop(tanh, tanh) -__inline_mathop(fabs, abs) -__inline_mathop(sqrt, sqrt) -#if defined(__USE_MISC) || defined(__USE_XOPEN_EXTENDED) +#if defined __USE_MISC || defined __USE_XOPEN_EXTENDED || defined __USE_ISOC9X __inline_mathop(rint, int) __inline_mathop(expm1, etoxm1) __inline_mathop(log1p, lognp1) @@ -110,6 +110,11 @@ __inline_mathop(logb, log2) __inline_mathop(significand, getman) #endif +#ifdef __USE_ISOC9X +__inline_mathop(log2, log2) +__inline_mathop(exp2, twotox) +#endif + #endif /* !__NO_MATH_INLINES && __OPTIMIZE__ */ /* This macro contains the definition for the rest of the inline @@ -375,11 +380,13 @@ __inline_forward_c(int,finite, (double __value), (__value)) __inline_forward_c(double,scalbn, (double __x, int __n), (__x, __n)) #endif #if defined __USE_MISC || defined __USE_XOPEN +#ifndef __USE_ISOC9X /* Conflict with macro of same name. */ __inline_forward_c(int,isnan, (double __value), (__value)) +#endif __inline_forward_c(int,ilogb, (double __value), (__value)) #endif -#ifdef __USE_MISC +#if defined __USE_MISC || defined __USE_ISOC9X __inline_forward(float,frexpf, (float __value, int *__expptr), (__value, __expptr)) @@ -387,11 +394,13 @@ __inline_forward_c(float,floorf, (float __x), (__x)) __inline_forward_c(float,ceilf, (float __x), (__x)) __inline_forward(float,modff, (float __value, float *__iptr), (__value, __iptr)) +#ifdef __USE_MISC __inline_forward_c(int,isinff, (float __value), (__value)) __inline_forward_c(int,finitef, (float __value), (__value)) __inline_forward_c(float,scalbnf, (float __x, int __n), (__x, __n)) __inline_forward_c(int,isnanf, (float __value), (__value)) __inline_forward_c(int,ilogbf, (float __value), (__value)) +#endif __inline_forward(long double,frexpl, (long double __value, int *__expptr), (__value, __expptr)) @@ -400,14 +409,16 @@ __inline_forward_c(long double,ceill, (long double __x), (__x)) __inline_forward(long double,modfl, (long double __value, long double *__iptr), (__value, __iptr)) +#ifdef __USE_MISC __inline_forward_c(int,isinfl, (long double __value), (__value)) __inline_forward_c(int,finitel, (long double __value), (__value)) __inline_forward_c(long double,scalbnl, (long double __x, int __n), (__x, __n)) __inline_forward_c(int,isnanl, (long double __value), (__value)) __inline_forward_c(int,ilogbl, (long double __value), (__value)) +#endif -#endif /* __USE_MISC */ +#endif /* Use misc or ISO C9X */ #undef __inline_forward #undef __inline_forward_c diff --git a/sysdeps/powerpc/Implies b/sysdeps/powerpc/Implies new file mode 100644 index 0000000000..d6acf04a82 --- /dev/null +++ b/sysdeps/powerpc/Implies @@ -0,0 +1,2 @@ +wordsize-32 +ieee754 diff --git a/sysdeps/powerpc/__longjmp.S b/sysdeps/powerpc/__longjmp.S new file mode 100644 index 0000000000..928b5c540a --- /dev/null +++ b/sysdeps/powerpc/__longjmp.S @@ -0,0 +1,66 @@ +/* longjmp for PowerPC. + Copyright (C) 1995, 1996, 1997 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#include <sysdep.h> +#define _ASM +#include <jmp_buf.h> + +ENTRY (__longjmp) + lwz 1,(JB_GPR1*4)(3) + lwz 2,(JB_GPR2*4)(3) + lwz 0,(JB_LR*4)(3) + lwz 14,((JB_GPRS+0)*4)(3) + lfd 14,((JB_FPRS+0*2)*4)(3) + lwz 15,((JB_GPRS+1)*4)(3) + lfd 15,((JB_FPRS+1*2)*4)(3) + lwz 16,((JB_GPRS+2)*4)(3) + lfd 16,((JB_FPRS+2*2)*4)(3) + lwz 17,((JB_GPRS+3)*4)(3) + lfd 17,((JB_FPRS+3*2)*4)(3) + lwz 18,((JB_GPRS+4)*4)(3) + lfd 18,((JB_FPRS+4*2)*4)(3) + lwz 19,((JB_GPRS+5)*4)(3) + lfd 19,((JB_FPRS+5*2)*4)(3) + lwz 20,((JB_GPRS+6)*4)(3) + lfd 20,((JB_FPRS+6*2)*4)(3) + mtlr 0 + lwz 21,((JB_GPRS+7)*4)(3) + lfd 21,((JB_FPRS+7*2)*4)(3) + lwz 22,((JB_GPRS+8)*4)(3) + lfd 22,((JB_FPRS+8*2)*4)(3) + lwz 23,((JB_GPRS+9)*4)(3) + lfd 23,((JB_FPRS+9*2)*4)(3) + lwz 24,((JB_GPRS+10)*4)(3) + lfd 24,((JB_FPRS+10*2)*4)(3) + lwz 25,((JB_GPRS+11)*4)(3) + lfd 25,((JB_FPRS+11*2)*4)(3) + lwz 26,((JB_GPRS+12)*4)(3) + lfd 26,((JB_FPRS+12*2)*4)(3) + lwz 27,((JB_GPRS+13)*4)(3) + lfd 27,((JB_FPRS+13*2)*4)(3) + lwz 28,((JB_GPRS+14)*4)(3) + lfd 28,((JB_FPRS+14*2)*4)(3) + lwz 29,((JB_GPRS+15)*4)(3) + lfd 29,((JB_FPRS+15*2)*4)(3) + lwz 30,((JB_GPRS+16)*4)(3) + lfd 30,((JB_FPRS+16*2)*4)(3) + lwz 31,((JB_GPRS+17)*4)(3) + lfd 31,((JB_FPRS+17*2)*4)(3) + blr +END (__longjmp) diff --git a/sysdeps/powerpc/__math.h b/sysdeps/powerpc/__math.h new file mode 100644 index 0000000000..9dc19a91a5 --- /dev/null +++ b/sysdeps/powerpc/__math.h @@ -0,0 +1,89 @@ +/* Inline math functions for powerpc. + Copyright (C) 1995, 1996, 1997 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#ifndef __MATH_H +#define __MATH_H + +#ifdef __GNUC__ +#ifndef __NO_MATH_INLINES + +#ifdef __cplusplus +#define __MATH_INLINE __inline +#else +#define __MATH_INLINE extern __inline +#endif + +__MATH_INLINE double __sgn1 (double __x); +__MATH_INLINE double +__sgn1 (double __x) +{ + return __x >= 0.0 ? 1.0 : -1.0; +} + +/* We'd want to use this if it was implemented in hardware, but + how can we tell? */ +#if 0 +__MATH_INLINE double sqrt (double __x); +__MATH_INLINE double +sqrt (double __x) +{ + register double __value; + __asm + ("fsqrt %0,%1" + : "=f" (__value) : "f" (__x)); + + return __value; +} +#endif + +__MATH_INLINE double fabs (double __x); +__MATH_INLINE double +fabs (double __x) +{ + register double __value; + __asm + ("fabs %0,%1" + : "=f" (__value) : "f" (__x)); + + return __value; +} + +/* Optimized versions for some non-standardized functions. */ +#ifdef __USE_MISC + +__MATH_INLINE double hypot (double __x, double __y); +__MATH_INLINE double +hypot (double __x, double __y) +{ + return sqrt (__x * __x + __y * __y); +} + +__MATH_INLINE double __sgn (double __x); +__MATH_INLINE double +sgn (double __x) +{ + return (__x == 0.0 ? 0.0 : (__x > 0.0 ? 1.0 : -1.0)); +} + +#endif /* __USE_MISC */ + +#endif /* __NO_MATH_INLINES */ +#endif /* __GNUC__ */ + +#endif /* __MATH_H */ diff --git a/sysdeps/powerpc/bsd-_setjmp.S b/sysdeps/powerpc/bsd-_setjmp.S new file mode 100644 index 0000000000..90171ea616 --- /dev/null +++ b/sysdeps/powerpc/bsd-_setjmp.S @@ -0,0 +1,29 @@ +/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. PowerPC version. + Copyright (C) 1994, 1997 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +/* This just does a tail-call to `__sigsetjmp (ARG, 0)'. + We cannot do it in C because it must be a tail-call, so frame-unwinding + in setjmp doesn't clobber the state restored by longjmp. */ + +#include <sysdep.h> + +ENTRY (_setjmp) + li 4,0 /* Set second argument to 0. */ + b C_SYMBOL_NAME(__sigsetjmp) +END (_setjmp) diff --git a/sysdeps/powerpc/dl-machine.h b/sysdeps/powerpc/dl-machine.h new file mode 100644 index 0000000000..a60a29723d --- /dev/null +++ b/sysdeps/powerpc/dl-machine.h @@ -0,0 +1,529 @@ +/* Machine-dependent ELF dynamic relocation inline functions. PowerPC version. + Copyright (C) 1995, 1996, 1997 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 + modify it under the terms of the GNU Library General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with the GNU C Library; see the file COPYING.LIB. If not, + write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. */ + +#define ELF_MACHINE_NAME "powerpc" + +#include <assert.h> +#include <string.h> +#include <link.h> + +/* stuff for the PLT */ +#define PLT_INITIAL_ENTRY_WORDS 18 +#define PLT_LONGBRANCH_ENTRY_WORDS 10 +#define OPCODE_ADDI(rd,ra,simm) \ + (0x38000000 | (rd) << 21 | (ra) << 16 | (simm) & 0xffff) +#define OPCODE_ADDIS(rd,ra,simm) \ + (0x3c000000 | (rd) << 21 | (ra) << 16 | (simm) & 0xffff) +#define OPCODE_ADD(rd,ra,rb) \ + (0x7c000214 | (rd) << 21 | (ra) << 16 | (rb) << 11) +#define OPCODE_B(target) (0x48000000 | (target) & 0x03fffffc) +#define OPCODE_BA(target) (0x48000002 | (target) & 0x03fffffc) +#define OPCODE_BCTR() 0x4e800420 +#define OPCODE_LWZ(rd,d,ra) \ + (0x80000000 | (rd) << 21 | (ra) << 16 | (d) & 0xffff) +#define OPCODE_MTCTR(rd) (0x7C0903A6 | (rd) << 21) +#define OPCODE_RLWINM(ra,rs,sh,mb,me) \ + (0x54000000 | (rs) << 21 | (ra) << 16 | (sh) << 11 | (mb) << 6 | (me) <& |
