diff options
Diffstat (limited to 'sysdeps')
26 files changed, 195 insertions, 55 deletions
diff --git a/sysdeps/i386/add_n.S b/sysdeps/i386/add_n.S index a68fe2ed39..55c5dda446 100644 --- a/sysdeps/i386/add_n.S +++ b/sysdeps/i386/add_n.S @@ -32,6 +32,7 @@ .text ALIGN (3) .globl C_SYMBOL_NAME(__mpn_add_n) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_add_n),@function) C_SYMBOL_NAME(__mpn_add_n:) pushl %edi pushl %esi @@ -102,3 +103,5 @@ L(oop): movl (%esi),%eax popl %esi popl %edi ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_add_n)) \ No newline at end of file diff --git a/sysdeps/i386/addmul_1.S b/sysdeps/i386/addmul_1.S index 3e2c5cd616..8194ec495e 100644 --- a/sysdeps/i386/addmul_1.S +++ b/sysdeps/i386/addmul_1.S @@ -37,6 +37,7 @@ TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(__mpn_addmul_1) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_addmul_1),@function) C_SYMBOL_NAME(__mpn_addmul_1:) INSN1(push,l ,R(edi)) @@ -72,3 +73,5 @@ L(oop): INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_addmul_1)) diff --git a/sysdeps/i386/dl-machine.h b/sysdeps/i386/dl-machine.h index 3e0f9b126c..6efa32bcd1 100644 --- a/sysdeps/i386/dl-machine.h +++ b/sysdeps/i386/dl-machine.h @@ -253,7 +253,7 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, #endif *reloc_addr += map->l_addr; } - else + else if (ELF32_R_TYPE (reloc->r_info) != R_386_NONE) { const Elf32_Sym *const refsym = sym; Elf32_Addr value = RESOLVE (&sym, version, ELF32_R_TYPE (reloc->r_info)); @@ -305,8 +305,6 @@ elf_machine_rel (struct link_map *map, const Elf32_Rel *reloc, case R_386_PC32: *reloc_addr += (value - (Elf32_Addr) reloc_addr); break; - case R_386_NONE: /* Alright, Wilbur. */ - break; default: assert (! "unexpected dynamic reloc type"); break; diff --git a/sysdeps/i386/fpu/__math.h b/sysdeps/i386/fpu/__math.h index d5945e8ca2..9e1c23cec0 100644 --- a/sysdeps/i386/fpu/__math.h +++ b/sysdeps/i386/fpu/__math.h @@ -382,13 +382,17 @@ hypot (double __x, double __y) return sqrt (__x * __x + __y * __y); } +/* We cannot rely on M_SQRT being defined. So we do it for ourself + here. */ +#define __M_SQRT2 _Mldbl(1.41421356237309504880) /* sqrt(2) */ + __MATH_INLINE double log1p (double __x); __MATH_INLINE double log1p (double __x) { register double __value; - if (fabs (__x) >= 1.0 - 0.5 * M_SQRT2) + if (fabs (__x) >= 1.0 - 0.5 * __M_SQRT2) __value = log (1.0 + __x); else __asm __volatile__ diff --git a/sysdeps/i386/lshift.S b/sysdeps/i386/lshift.S index cd6d95b62e..2f629b0303 100644 --- a/sysdeps/i386/lshift.S +++ b/sysdeps/i386/lshift.S @@ -31,6 +31,7 @@ .text ALIGN (3) .globl C_SYMBOL_NAME(__mpn_lshift) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_lshift),@function) C_SYMBOL_NAME(__mpn_lshift:) pushl %edi pushl %esi @@ -81,3 +82,5 @@ L(end): shll %cl,%ebx /* compute least significant limb */ popl %esi popl %edi ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_lshift)) \ No newline at end of file diff --git a/sysdeps/i386/rshift.S b/sysdeps/i386/rshift.S index f00f9d59f2..a0382672de 100644 --- a/sysdeps/i386/rshift.S +++ b/sysdeps/i386/rshift.S @@ -31,6 +31,7 @@ .text ALIGN (3) .globl C_SYMBOL_NAME(__mpn_rshift) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_rshift),@function) C_SYMBOL_NAME(__mpn_rshift:) pushl %edi pushl %esi @@ -83,3 +84,5 @@ L(end): shrl %cl,%ebx /* compute most significant limb */ popl %esi popl %edi ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_rshift)) \ No newline at end of file diff --git a/sysdeps/i386/sub_n.S b/sysdeps/i386/sub_n.S index 229734c2e9..c41c9a6408 100644 --- a/sysdeps/i386/sub_n.S +++ b/sysdeps/i386/sub_n.S @@ -32,6 +32,7 @@ .text ALIGN (3) .globl C_SYMBOL_NAME(__mpn_sub_n) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_sub_n),@function) C_SYMBOL_NAME(__mpn_sub_n:) pushl %edi pushl %esi @@ -102,3 +103,5 @@ L(oop): movl (%esi),%eax popl %esi popl %edi ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_sub_n)) \ No newline at end of file diff --git a/sysdeps/i386/submul_1.S b/sysdeps/i386/submul_1.S index 8efef7609f..6bba494417 100644 --- a/sysdeps/i386/submul_1.S +++ b/sysdeps/i386/submul_1.S @@ -37,6 +37,7 @@ TEXT ALIGN (3) GLOBL C_SYMBOL_NAME(__mpn_submul_1) + ASM_TYPE_DIRECTIVE(C_SYMBOL_NAME(__mpn_submul_1),@function) C_SYMBOL_NAME(__mpn_submul_1:) INSN1(push,l ,R(edi)) @@ -72,3 +73,5 @@ L(oop): INSN1(pop,l ,R(esi)) INSN1(pop,l ,R(edi)) ret + + ASM_SIZE_DIRECTIVE(C_SYMBOL_NAME(__mpn_addmul_1)) diff --git a/sysdeps/libm-ieee754/s_fmin.c b/sysdeps/libm-ieee754/s_fmin.c index f9a937c850..b79e6eca5a 100644 --- a/sysdeps/libm-ieee754/s_fmin.c +++ b/sysdeps/libm-ieee754/s_fmin.c @@ -28,6 +28,6 @@ __fmin (double x, double y) } weak_alias (__fmin, fmin) #ifdef NO_LONG_DOUBLE -strong_alias (__fmim, __fminl) +strong_alias (__fmin, __fminl) weak_alias (__fmin, fminl) #endif diff --git a/sysdeps/powerpc/fenvbits.h b/sysdeps/powerpc/fenvbits.h index 867ea5f5b4..8acd0ab8a4 100644 --- a/sysdeps/powerpc/fenvbits.h +++ b/sysdeps/powerpc/fenvbits.h @@ -85,7 +85,7 @@ enum FE_INVALID_INTEGER_CONVERSION = 1 << 31-23, #define FE_INVALID_INTEGER_CONVERSION FE_INVALID_INTEGER_CONVERSION -#define __FE_ALL_INVALID \ +#define FE_ALL_INVALID \ (FE_INVALID_SNAN | FE_INVALID_ISI | FE_INVALID_IDI | FE_INVALID_ZDZ \ | FE_INVALID_IMZ | FE_INVALID_COMPARE | FE_INVALID_SOFTWARE \ | FE_INVALID_SQRT | FE_INVALID_INTEGER_CONVERSION) diff --git a/sysdeps/powerpc/fraiseexcpt.c b/sysdeps/powerpc/fraiseexcpt.c index aa8f1fcdc6..4305c3dcd2 100644 --- a/sysdeps/powerpc/fraiseexcpt.c +++ b/sysdeps/powerpc/fraiseexcpt.c @@ -34,9 +34,9 @@ feraiseexcept (int excepts) /* Add the exceptions */ u.l[1] = (u.l[1] - | excepts & __FPSCR_STICKY_BITS + | excepts & FPSCR_STICKY_BITS /* Turn FE_INVALID into FE_INVALID_SOFTWARE. */ - | excepts << (31 - 21) - (31 - 24) & __FE_INVALID_SOFTWARE); + | excepts << (31 - 21) - (31 - 24) & FE_INVALID_SOFTWARE); /* Store the new status word (along with the rest of the environment), triggering any appropriate exceptions. */ diff --git a/sysdeps/powerpc/strlen.s b/sysdeps/powerpc/strlen.s index fa1c670912..9d671cabc3 100644 --- a/sysdeps/powerpc/strlen.s +++ b/sysdeps/powerpc/strlen.s @@ -100,8 +100,8 @@ strlen: bne done0 # Handle second word of pair. Put addi between branches to avoid hurting # branch prediction. - addi %r6,%r6,0xfffffeff - + addi %r6,%r6,-0x101 + bne %cr1,loop lwzu %r8,4(%r4) and %r0,%r7,%r8 @@ -111,7 +111,7 @@ strlen: bne done0 # The loop. - + loop: lwz %r8,4(%r4) lwzu %r9,8(%r4) add %r0,%r6,%r8 @@ -127,12 +127,12 @@ loop: lwz %r8,4(%r4) add %r0,%r0,%r7 andc %r8,%r12,%r0 b done0 - + done1: and %r0,%r7,%r8 subi %r4,%r4,4 add %r0,%r0,%r7 andc %r8,%r10,%r0 - + # When we get to here, r4 points to the first word in the string that # contains a zero byte, and the most significant set bit in r8 is in that # byte. diff --git a/sysdeps/unix/arm/brk.S b/sysdeps/unix/arm/brk.S new file mode 100644 index 0000000000..a801674283 --- /dev/null +++ b/sysdeps/unix/arm/brk.S @@ -0,0 +1,43 @@ +/* Copyright (C) 1991, 1992, 1993, 1995 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., 675 Mass Ave, +Cambridge, MA 02139, USA. */ + +#include <sysdep.h> + +#ifndef SYS_brk +#define SYS_brk 17 +#endif + +.data +.globl C_SYMBOL_NAME(__curbrk) +C_LABEL(__curbrk) +#ifdef HAVE_GNU_LD + .long C_SYMBOL_NAME(_end) +#else + .long C_SYMBOL_NAME(end) +#endif + +.text +SYSCALL__ (brk, 1) + ldr r1, _cb_addr + str r0, [r1] + mov r0, $0 + RETINSTR(mov, pc, r14) +_cb_addr: .long C_SYMBOL_NAME(__curbrk) + + +weak_alias (__brk, brk) diff --git a/sysdeps/unix/arm/sysdep.S b/sysdeps/unix/arm/sysdep.S new file mode 100644 index 0000000000..5d3ad551c6 --- /dev/null +++ b/sysdeps/unix/arm/sysdep.S @@ -0,0 +1,49 @@ +/* Copyright (C) 1991, 92, 93, 94, 95, 96, 97 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 _ERRNO_H +#include <errnos.h> + +.globl C_SYMBOL_NAME(errno) +.globl syscall_error + +_errno_loc: .long C_SYMBOL_NAME(errno) + +#undef syscall_error +#ifdef NO_UNDERSCORES +__syscall_error: +#else +syscall_error: +#endif +#if defined (EWOULDBLOCK_sys) && EWOULDBLOCK_sys != EAGAIN + /* We translate the system's EWOULDBLOCK error into EAGAIN. + The GNU C library always defines EWOULDBLOCK==EAGAIN. + EWOULDBLOCK_sys is the original number. */ + cmp r0, $EWOULDBLOCK_sys /* Is it the old EWOULDBLOCK? */ + moveq r0, $EAGAIN /* Yes; translate it to EAGAIN. */ +#endif +#ifndef PIC + ldr r1, _errno_loc + str r0, [r1] +#endif + mvn r0, $0 + RETINSTR(mov, pc, r14) + +#undef __syscall_error +END (__syscall_error) diff --git a/sysdeps/unix/sysv/linux/Dist b/sysdeps/unix/sysv/linux/Dist index d4b6bac217..fc403871f3 100644 --- a/sysdeps/unix/sysv/linux/Dist +++ b/sysdeps/unix/sysv/linux/Dist @@ -13,8 +13,7 @@ net/if_ppp.h net/ppp-comp.h net/ppp_defs.h net/route.h -netatalk/atalk.h -netinet/icmp.h +netatalk/at.h netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 4e698ce1d8..c61904a3b8 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -55,7 +55,8 @@ endif ifeq ($(subdir),inet) sysdep_headers += netinet/in_systm.h netinet/udp.h \ netinet/if_fddi.h netinet/if_tr.h netinet/igmp.h \ - netinet/ip_fw.h netinet/ip_icmp.h sys/socketvar.h + netinet/ip_fw.h netinet/ip_icmp.h netipx/ipx.h \ + sys/socketvar.h endif # Don't compile the ctype glue code, since there is no old non-GNU C library. diff --git a/sysdeps/unix/sysv/linux/arm/sysdep.S b/sysdeps/unix/sysv/linux/arm/sysdep.S new file mode 100644 index 0000000000..a71181c911 --- /dev/null +++ b/sysdeps/unix/sysv/linux/arm/sysdep.S @@ -0,0 +1,51 @@ +/* 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> + +/* We define errno here, to be consistent with Linux/i386. */ + .bss + .globl errno + .type errno,@object + .size errno,4 +errno: .zero 4 + .globl _errno + .type _errno,@object +_errno = errno /* This name is expected by hj's libc.so.5 startup code. */ + .text + +/* The following code is only used in the shared library when we + compile the reentrant version. Otherwise each system call defines + each own version. */ + +#ifndef PIC + +/* The syscall stubs jump here when they detect an error. + The code for Linux is almost identical to the canonical Unix/i386 + code, except that the error number in %eax is negated. */ + +#undef CALL_MCOUNT +#define CALL_MCOUNT /* Don't insert the profiling call, it clobbers %eax. */ + +ENTRY (__syscall_error) + mvn r0, r0 + +#define __syscall_error __syscall_error_1 +#include <sysdeps/unix/arm/sysdep.S> + +#endif /* !PIC */ diff --git a/sysdeps/unix/sysv/linux/i386/sysdep.h b/sysdeps/unix/sysv/linux/i386/sysdep.h index a38e4b3531..66fbeca73e 100644 --- a/sysdeps/unix/sysv/linux/i386/sysdep.h +++ b/sysdeps/unix/sysv/linux/i386/sysdep.h @@ -62,6 +62,7 @@ /* Store (- %eax) into errno through the GOT. */ #ifdef _LIBC_REENTRANT #define SYSCALL_ERROR_HANDLER \ + .type syscall_error,@function; \ syscall_error: \ pushl %ebx; \ call 0f; \ @@ -77,11 +78,13 @@ syscall_error: \ popl %ebx; \ movl %ecx, (%eax); \ movl $-1, %eax; \ - ret; + ret; \ + .size syscall_error,.-syscall_error; /* A quick note: it is assumed that the call to `__errno_location' does not modify the stack! */ #else #define SYSCALL_ERROR_HANDLER \ + .type syscall_error,@function; \ syscall_error: \ call 0f; \ 0:popl %ecx; \ @@ -91,7 +94,8 @@ syscall_error: \ movl errno@GOT(%ecx), %ecx; \ movl %edx, (%ecx); \ movl $-1, %eax; \ - ret; + ret; \ + .size syscall_error,.-syscall_error; #endif /* _LIBC_REENTRANT */ #endif /* PIC */ diff --git a/sysdeps/unix/sysv/linux/net/if_arp.h b/sysdeps/unix/sysv/linux/net/if_arp.h index b1cd18360e..d784f0cfc7 100644 --- a/sysdeps/unix/sysv/linux/net/if_arp.h +++ b/sysdeps/unix/sysv/linux/net/if_arp.h @@ -90,6 +90,8 @@ struct arphdr #define ARPHRD_ROSE 270 #define ARPHRD_X25 271 /* CCITT X.25. */ #define ARPHRD_PPP 512 +#define ARPHRD_HDLC 513 /* (Cisco) HDLC. */ +#define ARPHRD_LAPB 516 /* LAPB. */ #define ARPHRD_TUNNEL 768 /* IPIP tunnel. */ #define ARPHRD_TUNNEL6 769 /* IPIP6 tunnel. */ diff --git a/sysdeps/unix/sysv/linux/powerpc/Dist b/sysdeps/unix/sysv/linux/powerpc/Dist index c8c265c474..27a951f169 100644 --- a/sysdeps/unix/sysv/linux/powerpc/Dist +++ b/sysdeps/unix/sysv/linux/powerpc/Dist @@ -1,7 +1,6 @@ clone.S ioctl-types.h termbits.h -termios.h kernel_stat.h kernel_termios.h sys/kernel_termios.h diff --git a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c b/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c index 1c79f6a93c..7280315933 100644 --- a/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c +++ b/sysdeps/unix/sysv/linux/powerpc/dl-sysdep.c @@ -149,38 +149,3 @@ _dl_sysdep_open_zero_fill (void) return __open ("/dev/zero", O_RDONLY); } #endif - -/* Read the whole contents of FILE into new mmap'd space with given - protections. *SIZEP gets the size of the file. */ - -void * -_dl_sysdep_read_whole_file (const char *file, size_t *sizep, int prot) -{ - void *result; - struct stat st; - int fd = __open (file, O_RDONLY); - if (fd < 0) - return NULL; - if (__fstat (fd, &st) < 0) - result = NULL; - else - { - /* Map a copy of the file contents. */ - result = __mmap (0, st.st_size, prot, -#ifdef MAP_COPY - MAP_COPY -#else - MAP_PRIVATE -#endif -#ifdef MAP_FILE - | MAP_FILE -#endif - , fd, 0); - if (result == (void *) -1) - result = NULL; - else - *sizep = st.st_size; - } - __close (fd); - return result; -} diff --git a/sysdeps/unix/sysv/linux/sparc/Dist b/sysdeps/unix/sysv/linux/sparc/Dist index ab22392c04..c31f140137 100644 --- a/sysdeps/unix/sysv/linux/sparc/Dist +++ b/sysdeps/unix/sysv/linux/sparc/Dist @@ -1,6 +1,5 @@ __sigtrampoline.S clone.S -start.c pipe.S fork.S kernel_stat.h diff --git a/sysdeps/wordsize-32/Dist b/sysdeps/wordsize-32/Dist new file mode 100644 index 0000000000..625e4d0fc7 --- /dev/null +++ b/sysdeps/wordsize-32/Dist @@ -0,0 +1 @@ +inttypes.h \ No newline at end of file diff --git a/sysdeps/wordsize-32/Makefile b/sysdeps/wordsize-32/Makefile new file mode 100644 index 0000000000..73b64ed054 --- /dev/null +++ b/sysdeps/wordsize-32/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),stdlib) +sysdep_headers += inttypes.h +endif \ No newline at end of file diff --git a/sysdeps/wordsize-64/Dist b/sysdeps/wordsize-64/Dist new file mode 100644 index 0000000000..625e4d0fc7 --- /dev/null +++ b/sysdeps/wordsize-64/Dist @@ -0,0 +1 @@ +inttypes.h \ No newline at end of file diff --git a/sysdeps/wordsize-64/Makefile b/sysdeps/wordsize-64/Makefile new file mode 100644 index 0000000000..73b64ed054 --- /dev/null +++ b/sysdeps/wordsize-64/Makefile @@ -0,0 +1,3 @@ +ifeq ($(subdir),stdlib) +sysdep_headers += inttypes.h +endif \ No newline at end of file |