diff options
author | Carlos O'Donell <carlos@systemhalted.org> | 2014-04-29 03:08:48 -0400 |
---|---|---|
committer | Carlos O'Donell <carlos@systemhalted.org> | 2014-04-29 04:20:39 -0400 |
commit | 5abebba403181de898bbea4ee1bcce5f088c663b (patch) | |
tree | 0c4a8eac85e1f2db87621b524bfcbdeb24c2c8f9 /ports | |
parent | 4e4a58f4ee45cea6f3083af8f12d3834bb999555 (diff) | |
download | glibc-5abebba403181de898bbea4ee1bcce5f088c663b.tar.gz glibc-5abebba403181de898bbea4ee1bcce5f088c663b.tar.xz glibc-5abebba403181de898bbea4ee1bcce5f088c663b.zip |
Relocate hppa from ports to libc.
Diffstat (limited to 'ports')
150 files changed, 0 insertions, 11964 deletions
diff --git a/ports/sysdeps/hppa/Makefile b/ports/sysdeps/hppa/Makefile deleted file mode 100644 index fa9bc206a2..0000000000 --- a/ports/sysdeps/hppa/Makefile +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (C) 2000-2014 Free Software Foundation, Inc. -# This file is part of the GNU C Library. -# Contributed by David Huggins-Daines (dhd@debian.org) - -# The GNU C Library is free software; you can redistribute it and/or -# modify it under the terms of the GNU Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 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 -# Lesser General Public License for more details. - -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# <http://www.gnu.org/licenses/>. - -# We used to need this since the build process uses ld -r. Now we use -# ld -r --unique=.text* which does more or less the same thing, but better. -# CFLAGS-.os += -ffunction-sections -LDFLAGS-c_pic.os += -Wl,--unique=.text* - -ifeq ($(subdir),elf) -CFLAGS-rtld.c += -mdisable-fpregs -sysdep-dl-routines += dl-symaddr dl-fptr -sysdep_routines += $(sysdep-dl-routines) -sysdep-rtld-routines += $(sysdep-dl-routines) -endif - -ifeq ($(subdir),csu) -ifeq (yes,$(build-shared)) -# Compatibility -ifeq (yes,$(have-protected)) -CPPFLAGS-libgcc-compat.c = -DHAVE_DOT_HIDDEN -endif -sysdep_routines += libgcc-compat -shared-only-routines += libgcc-compat -endif -endif - -# We implement a 64-bit `long double'. The standard says we can do this. -# This means our `long double' and `double' are identical. -long-double-fcts = no - diff --git a/ports/sysdeps/hppa/Versions b/ports/sysdeps/hppa/Versions deleted file mode 100644 index 2ae3cbdf17..0000000000 --- a/ports/sysdeps/hppa/Versions +++ /dev/null @@ -1,12 +0,0 @@ -ld { - GLIBC_PRIVATE { - # hppa specific functions in the dynamic linker, but used by libc.so. - _dl_symbol_address; _dl_unmap; _dl_lookup_address; - _dl_function_address; - } -} -libc { - GLIBC_2.2 { - __clz_tab; - } -} diff --git a/ports/sysdeps/hppa/__longjmp.c b/ports/sysdeps/hppa/__longjmp.c deleted file mode 100644 index cb1aed1c5c..0000000000 --- a/ports/sysdeps/hppa/__longjmp.c +++ /dev/null @@ -1,84 +0,0 @@ -/* longjmp for PA-RISC. - Copyright (C) 1997-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <setjmp.h> -#include <stdlib.h> - -/* Jump to the position specified by ENV, causing the - setjmp call there to return VAL, or 1 if VAL is 0. */ -void -__longjmp (__jmp_buf env, int val) -{ - /* We must use one of the non-callee saves registers - for env. */ - register unsigned long r26 asm ("r26") = (unsigned long)&env[0]; - register unsigned long r25 asm ("r25") = (unsigned long)(val == 0 ? 1 : val); - -#ifdef CHECK_SP - CHECK_SP (env[0].__jmp_buf.__sp); -#endif - - asm volatile( - /* Set return value. */ - "copy %0, %%r28\n\t" - /* Load callee saves from r3 to r18. */ - "ldw 0(%1), %%r3\n\t" - "ldw 8(%1), %%r4\n\t" - "ldw 12(%1), %%r5\n\t" - "ldw 16(%1), %%r6\n\t" - "ldw 20(%1), %%r7\n\t" - "ldw 24(%1), %%r8\n\t" - "ldw 28(%1), %%r9\n\t" - "ldw 32(%1), %%r10\n\t" - "ldw 36(%1), %%r11\n\t" - "ldw 40(%1), %%r12\n\t" - "ldw 44(%1), %%r13\n\t" - "ldw 48(%1), %%r14\n\t" - "ldw 52(%1), %%r15\n\t" - "ldw 56(%1), %%r16\n\t" - "ldw 60(%1), %%r17\n\t" - "ldw 64(%1), %%r18\n\t" - /* Load PIC register. */ - "ldw 68(%1), %%r19\n\t" - /* Load static link register. */ - "ldw 72(%1), %%r27\n\t" - /* Load stack pointer. */ - "ldw 76(%1), %%r30\n\t" - /* Load return pointer. */ - "ldw 80(%1), %%rp\n\t" - /* Ues a spare caller saves register. */ - "ldo 88(%1),%%r25\n\t" - /* Load callee saves from fr12 to fr21. */ - "fldds,ma 8(%%r25), %%fr12\n\t" - "fldds,ma 8(%%r25), %%fr13\n\t" - "fldds,ma 8(%%r25), %%fr14\n\t" - "fldds,ma 8(%%r25), %%fr15\n\t" - "fldds,ma 8(%%r25), %%fr16\n\t" - "fldds,ma 8(%%r25), %%fr17\n\t" - "fldds,ma 8(%%r25), %%fr18\n\t" - "fldds,ma 8(%%r25), %%fr19\n\t" - "fldds,ma 8(%%r25), %%fr20\n\t" - "fldds 0(%%r25), %%fr21\n\t" - /* Jump back to stored return address. */ - "bv,n %%r0(%%r2)\n\t" - : /* No outputs. */ - : "r" (r25), "r" (r26) - : /* No point in clobbers. */ ); - /* Avoid `volatile function does return' warnings. */ - for (;;); -} diff --git a/ports/sysdeps/hppa/abort-instr.h b/ports/sysdeps/hppa/abort-instr.h deleted file mode 100644 index c13b0e5a4c..0000000000 --- a/ports/sysdeps/hppa/abort-instr.h +++ /dev/null @@ -1,6 +0,0 @@ -/* An instruction privileged instruction to crash a userspace program. - - We go with iitlbp because it has a history of being used to crash - programs. */ - -#define ABORT_INSTRUCTION asm ("iitlbp %r0,(%sr0, %r0)") diff --git a/ports/sysdeps/hppa/add_n.S b/ports/sysdeps/hppa/add_n.S deleted file mode 100644 index 29a169cb70..0000000000 --- a/ports/sysdeps/hppa/add_n.S +++ /dev/null @@ -1,57 +0,0 @@ -;! HP-PA __mpn_add_n -- Add two limb vectors of the same length > 0 and store -;! sum in a third limb vector. - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s1_ptr gr25 -;! s2_ptr gr24 -;! size gr23 - -;! One might want to unroll this as for other processors, but it turns -;! out that the data cache contention after a store makes such -;! unrolling useless. We can't come under 5 cycles/limb anyway. - - .text - .export __mpn_add_n -__mpn_add_n: - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - - addib,= -1,%r23,L$end ;! check for (SIZE == 1) - add %r21,%r20,%r28 ;! add first limbs ignoring cy - -L$loop: ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - stws,ma %r28,4(%r26) - addib,<> -1,%r23,L$loop - addc %r21,%r20,%r28 - -L$end: stws %r28,0(%r26) - bv 0(%r2) - addc %r0,%r0,%r28 - - .exit - .procend diff --git a/ports/sysdeps/hppa/bits/endian.h b/ports/sysdeps/hppa/bits/endian.h deleted file mode 100644 index 585db0c0fa..0000000000 --- a/ports/sysdeps/hppa/bits/endian.h +++ /dev/null @@ -1,7 +0,0 @@ -/* hppa1.1 big-endian. */ - -#ifndef _ENDIAN_H -# error "Never use <bits/endian.h> directly; include <endian.h> instead." -#endif - -#define __BYTE_ORDER __BIG_ENDIAN diff --git a/ports/sysdeps/hppa/bits/link.h b/ports/sysdeps/hppa/bits/link.h deleted file mode 100644 index fa6e1ebe70..0000000000 --- a/ports/sysdeps/hppa/bits/link.h +++ /dev/null @@ -1,56 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _LINK_H -# error "Never include <bits/link.h> directly; use <link.h> instead." -#endif - -/* Registers for entry into PLT on hppa. */ -typedef struct La_hppa_regs -{ - uint32_t lr_reg[4]; - double lr_fpreg[4]; - uint32_t lr_sp; - uint32_t lr_ra; -} La_hppa_regs; - -/* Return values for calls from PLT on hppa. */ -typedef struct La_hppa_retval -{ - uint32_t lrv_r28; - uint32_t lrv_r29; - double lr_fr4; -} La_hppa_retval; - - -__BEGIN_DECLS - -extern Elf32_Addr la_hppa_gnu_pltenter (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - La_hppa_regs *__regs, - unsigned int *__flags, - const char *__symname, - long int *__framesizep); -extern unsigned int la_hppa_gnu_pltexit (Elf32_Sym *__sym, unsigned int __ndx, - uintptr_t *__refcook, - uintptr_t *__defcook, - const La_hppa_regs *__inregs, - La_hppa_retval *__outregs, - const char *symname); - -__END_DECLS diff --git a/ports/sysdeps/hppa/bits/linkmap.h b/ports/sysdeps/hppa/bits/linkmap.h deleted file mode 100644 index 54842b2299..0000000000 --- a/ports/sysdeps/hppa/bits/linkmap.h +++ /dev/null @@ -1,6 +0,0 @@ -/* Used to store the function descriptor table */ -struct link_map_machine - { - size_t fptr_table_len; - ElfW(Addr) *fptr_table; - }; diff --git a/ports/sysdeps/hppa/bits/setjmp.h b/ports/sysdeps/hppa/bits/setjmp.h deleted file mode 100644 index 9a404e7c1e..0000000000 --- a/ports/sysdeps/hppa/bits/setjmp.h +++ /dev/null @@ -1,60 +0,0 @@ -/* Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Define the machine-dependent type `jmp_buf'. HPPA version. */ -#ifndef _BITS_SETJMP_H -#define _BITS_SETJMP_H 1 - -#if !defined _SETJMP_H && !defined _PTHREAD_H -# error "Never include <bits/setjmp.h> directly; use <setjmp.h> instead." -#endif - -#ifndef _ASM -/* The entire jump buffer must be 168 bytes long and laid - out in exactly as follows for ABI consistency. - * 20 x 32-bit gprs, with 8-bytes of padding, arranged so: - - r3 (callee saves) - - 4 bytes of padding. - - r4-r18 (callee saves) - - r19 (PIC register) - - r27 (static link register) - - r30 (stcack pointer) - - r2 (return pointer) - - 4 bytes of padding. - * 10 x 64-bit fprs in this order: - - fr12-fr21 (callee saves) - Note: We have 8 bytes of free space for future uses. */ -typedef union - { - struct __jmp_buf_internal_tag - { - int __r3; - int __pad0; - int __r4_r18[15]; - int __r19; - int __r27; - int __sp; - int __rp; - int __pad1; - double __fr12_fr21[10]; - } __jmp_buf; - /* Legacy definition. Ensures double alignment for fpsrs. */ - double __align[21]; - } __jmp_buf[1]; -#endif - -#endif /* bits/setjmp.h */ diff --git a/ports/sysdeps/hppa/bsd-_setjmp.S b/ports/sysdeps/hppa/bsd-_setjmp.S deleted file mode 100644 index 4795ceff36..0000000000 --- a/ports/sysdeps/hppa/bsd-_setjmp.S +++ /dev/null @@ -1,38 +0,0 @@ -/* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. HPPA version. - Copyright (C) 2001-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - 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. */ - - .text - .align 4 - .globl _setjmp - .export _setjmp, code - .level 2.0 - .proc - .callinfo - .import __sigsetjmp -_setjmp: - b __sigsetjmp - ldi 0, %r25 - - .procend -libc_hidden_def (_setjmp) diff --git a/ports/sysdeps/hppa/bsd-setjmp.S b/ports/sysdeps/hppa/bsd-setjmp.S deleted file mode 100644 index dd776f4e1c..0000000000 --- a/ports/sysdeps/hppa/bsd-setjmp.S +++ /dev/null @@ -1,35 +0,0 @@ -/* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. HPPA version. - Copyright (C) 2001-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* This just does a tail-call to `__sigsetjmp (ARG, 1)'. - 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. */ - - .text - .align 4 - .globl setjmp - .export setjmp, code - .level 2.0 - .proc - .callinfo - .import __sigsetjmp -setjmp: - b __sigsetjmp - ldi 1, %r25 - - .procend diff --git a/ports/sysdeps/hppa/configure b/ports/sysdeps/hppa/configure deleted file mode 100644 index d78e1bcd64..0000000000 --- a/ports/sysdeps/hppa/configure +++ /dev/null @@ -1,89 +0,0 @@ -# This file is generated from configure.ac by Autoconf. DO NOT EDIT! - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for assembler line separator" >&5 -$as_echo_n "checking for assembler line separator... " >&6; } -if ${libc_cv_asm_line_sep+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<EOF -nop ; is_old_puffin -EOF -if { ac_try='${CC-cc} -c $ASFLAGS conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_asm_line_sep='!' -else - if test -z "$enable_hacker_mode"; then - echo "*** You need a newer assembler to compile glibc" - rm -f conftest* - exit 1 - fi - libc_cv_asm_line_sep=';' -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_asm_line_sep" >&5 -$as_echo "$libc_cv_asm_line_sep" >&6; } -cat >>confdefs.h <<_ACEOF -#define ASM_LINE_SEP $libc_cv_asm_line_sep -_ACEOF - - -# Check for support of thread-local storage handling in assembler and -# linker. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for hppa TLS support" >&5 -$as_echo_n "checking for hppa TLS support... " >&6; } -if ${libc_cv_hppa_tls+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat > conftest.s <<\EOF -; Setup tls data -.section ".tdata","awT",@progbits -foo: .data 32 - .text -; Test general dyanmic relocations -test0: - addil LT'foo-$tls_gdidx$, %r19 - ldo RT'foo-$tls_gdidx$(%r1), %r26 - b __tls_get_addr - nop -; Test local dynamic relocations -test1: - addil LT'foo-$tls_ldidx$, %r19 - b __tls_get_addr - ldo RT'foo-$tls_ldidx$(%r1), %r26 - ldo RR'foo-$tls_dtpoff$(%r1), %r25 - ; More variables can be loaded... -; Test initial exec reloctiosn -test2: - mfctl %cr27, %r26 - addil LT'foo-$tls_ieoff$, %r19 - ldw RT'foo-$tls_ieoff$(%r1), %r25 - add %r26, %r25, %r24 -; Test local exec relocations -test3: - mfctl %cr27, %r26 - addil LR'foo-$tls_leoff$, %r26 - ldo RR'foo-$tls_leoff$(%r1), %r25 -; Done all the TLS tests. -EOF -if { ac_try='${CC-cc} -c $CFLAGS conftest.s 1>&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5 - (eval $ac_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - libc_cv_hppa_tls=yes -else - libc_cv_hppa_tls=no -fi -rm -f conftest* -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $libc_cv_hppa_tls" >&5 -$as_echo "$libc_cv_hppa_tls" >&6; } -if test $libc_cv_hppa_tls = no; then - as_fn_error $? "the assembler must support TLS" "$LINENO" 5 -fi diff --git a/ports/sysdeps/hppa/configure.ac b/ports/sysdeps/hppa/configure.ac deleted file mode 100644 index 40f33603e3..0000000000 --- a/ports/sysdeps/hppa/configure.ac +++ /dev/null @@ -1,66 +0,0 @@ -GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. - -dnl The standard hppa assembler uses `;' to start comments and `!' -dnl as a line separator. -AC_CACHE_CHECK(for assembler line separator, - libc_cv_asm_line_sep, [dnl -cat > conftest.s <<EOF -nop ; is_old_puffin -EOF -if AC_TRY_COMMAND(${CC-cc} -c $ASFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_asm_line_sep='!' -else - if test -z "$enable_hacker_mode"; then - echo "*** You need a newer assembler to compile glibc" - rm -f conftest* - exit 1 - fi - libc_cv_asm_line_sep=';' -fi -rm -f conftest*]) -AC_DEFINE_UNQUOTED(ASM_LINE_SEP, $libc_cv_asm_line_sep) - -# Check for support of thread-local storage handling in assembler and -# linker. -AC_CACHE_CHECK(for hppa TLS support, libc_cv_hppa_tls, [dnl -cat > conftest.s <<\EOF -; Setup tls data -.section ".tdata","awT",@progbits -foo: .data 32 - .text -; Test general dyanmic relocations -test0: - addil LT'foo-$tls_gdidx$, %r19 - ldo RT'foo-$tls_gdidx$(%r1), %r26 - b __tls_get_addr - nop -; Test local dynamic relocations -test1: - addil LT'foo-$tls_ldidx$, %r19 - b __tls_get_addr - ldo RT'foo-$tls_ldidx$(%r1), %r26 - ldo RR'foo-$tls_dtpoff$(%r1), %r25 - ; More variables can be loaded... -; Test initial exec reloctiosn -test2: - mfctl %cr27, %r26 - addil LT'foo-$tls_ieoff$, %r19 - ldw RT'foo-$tls_ieoff$(%r1), %r25 - add %r26, %r25, %r24 -; Test local exec relocations -test3: - mfctl %cr27, %r26 - addil LR'foo-$tls_leoff$, %r26 - ldo RR'foo-$tls_leoff$(%r1), %r25 -; Done all the TLS tests. -EOF -dnl -if AC_TRY_COMMAND(${CC-cc} -c $CFLAGS conftest.s 1>&AS_MESSAGE_LOG_FD); then - libc_cv_hppa_tls=yes -else - libc_cv_hppa_tls=no -fi -rm -f conftest*]) -if test $libc_cv_hppa_tls = no; then - AC_MSG_ERROR([the assembler must support TLS]) -fi diff --git a/ports/sysdeps/hppa/crti.S b/ports/sysdeps/hppa/crti.S deleted file mode 100644 index c1d129a94c..0000000000 --- a/ports/sysdeps/hppa/crti.S +++ /dev/null @@ -1,80 +0,0 @@ -/* Special .init and .fini section support for HPPA - Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* crti.S puts a function prologue at the beginning of the .init and - .fini sections and defines global symbols for those addresses, so - they can be called as functions. The symbols _init and _fini are - magic and cause the linker to emit DT_INIT and DT_FINI. */ - -#include <libc-symbols.h> -#include <sysdep.h> - -#ifndef PREINIT_FUNCTION -# define PREINIT_FUNCTION __gmon_start__ -#endif - -#ifndef PREINIT_FUNCTION_WEAK -# define PREINIT_FUNCTION_WEAK 1 -#endif - -/* _init prologue. */ - .section .init, "ax", %progbits - .align 4 - .globl _init - .type _init,@function -_init: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) -#if PREINIT_FUNCTION_WEAK - bl PREINIT_FUNCTION,%rp - copy %r19,%r4 /* delay slot */ -#else - bl PREINIT_FUNCTION,%rp - copy %r19,%r4 /* delay slot */ -#endif - copy %r4,%r19 - -/* _fini prologue. */ - .section .fini,"ax",%progbits - .align 4 - .globl _fini - .type _fini,@function -_fini: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - copy %r19,%r4 - diff --git a/ports/sysdeps/hppa/crtn.S b/ports/sysdeps/hppa/crtn.S deleted file mode 100644 index 296f3e83ee..0000000000 --- a/ports/sysdeps/hppa/crtn.S +++ /dev/null @@ -1,88 +0,0 @@ -/* Special .init and .fini section support for HPPA - Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* crtn.S puts function epilogues in the .init and .fini sections - corresponding to the prologues in crti.S. */ - -/* Note that we cannot have a weak undefined __gmon_start__, because - that would require this to be PIC, and the linker is currently not - able to generate a proper procedure descriptor for _init. Sad but - true. Anyway, HPPA is one of those horrible architectures where - making the comparison and indirect call is quite expensive (see the - comment in sysdeps/generic/initfini.c). */ - .text - .align 4 - .weak __gmon_start__ - .type __gmon_start__,@function -__gmon_start__: - .proc - .callinfo - .entry - bv,n %r0(%r2) - .exit - .procend - -/* Here is the tail end of _init. We put __gmon_start before this so - that the assembler creates the .PARISC.unwind section for us, ie. - with the right attributes. */ - .section .init, "ax", @progbits - ldw -84(%sp),%rp - copy %r4,%r19 - bv %r0(%rp) -_end_init: - ldwm -64(%sp),%r4 - -/* Our very own unwind info, because the assembler can't handle - functions split into two or more pieces. */ - .section .PARISC.unwind - .extern _init - .word _init, _end_init - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 - -/* Here is the tail end of _fini. */ - .section .fini, "ax", @progbits - ldw -84(%sp),%rp - copy %r4,%r19 - bv %r0(%rp) -_end_fini: - ldwm -64(%sp),%r4 - - .section .PARISC.unwind - .extern _fini - .word _fini, _end_fini - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 - diff --git a/ports/sysdeps/hppa/dl-fptr.c b/ports/sysdeps/hppa/dl-fptr.c deleted file mode 100644 index f975664dd6..0000000000 --- a/ports/sysdeps/hppa/dl-fptr.c +++ /dev/null @@ -1,337 +0,0 @@ -/* Manage function descriptors. Generic version. - Copyright (C) 1999-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#include <libintl.h> -#include <unistd.h> -#include <string.h> -#include <sys/param.h> -#include <sys/mman.h> -#include <link.h> -#include <ldsodefs.h> -#include <elf/dynamic-link.h> -#include <dl-fptr.h> -#include <dl-unmap-segments.h> -#include <atomic.h> - -#ifndef ELF_MACHINE_BOOT_FPTR_TABLE_LEN -/* ELF_MACHINE_BOOT_FPTR_TABLE_LEN should be greater than the number of - dynamic symbols in ld.so. */ -# define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 256 -#endif - -#ifndef ELF_MACHINE_LOAD_ADDRESS -# error "ELF_MACHINE_LOAD_ADDRESS is not defined." -#endif - -#ifndef COMPARE_AND_SWAP -# define COMPARE_AND_SWAP(ptr, old, new) \ - (catomic_compare_and_exchange_bool_acq (ptr, new, old) == 0) -#endif - -ElfW(Addr) _dl_boot_fptr_table [ELF_MACHINE_BOOT_FPTR_TABLE_LEN]; - -static struct local - { - struct fdesc_table *root; - struct fdesc *free_list; - unsigned int npages; /* # of pages to allocate */ - /* the next to members MUST be consecutive! */ - struct fdesc_table boot_table; - struct fdesc boot_fdescs[1024]; - } -local = - { -#ifdef SHARED - /* Address of .boot_table is not known until runtime. */ - .root = 0, -#else - .root = &local.boot_table, -#endif - .npages = 2, - .boot_table = - { - .len = sizeof (local.boot_fdescs) / sizeof (local.boot_fdescs[0]), - .first_unused = 0 - } - }; - -/* Create a new fdesc table and return a pointer to the first fdesc - entry. The fdesc lock must have been acquired already. */ - -static struct fdesc_table * -new_fdesc_table (struct local *l, size_t *size) -{ - size_t old_npages = l->npages; - size_t new_npages = old_npages + old_npages; - struct fdesc_table *new_table; - - /* If someone has just created a new table, we return NULL to tell - the caller to use the new table. */ - if (! COMPARE_AND_SWAP (&l->npages, old_npages, new_npages)) - return (struct fdesc_table *) NULL; - - *size = old_npages * GLRO(dl_pagesize); - new_table = __mmap (NULL, *size, - PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); - if (new_table == MAP_FAILED) - _dl_signal_error (errno, NULL, NULL, - N_("cannot map pages for fdesc table")); - - new_table->len - = (*size - sizeof (*new_table)) / sizeof (struct fdesc); - new_table->first_unused = 1; - return new_table; -} - -/* Must call _dl_fptr_init before using any other function. */ -void -_dl_fptr_init (void) -{ - struct local *l; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - l->root = &l->boot_table; -} - -static ElfW(Addr) -make_fdesc (ElfW(Addr) ip, ElfW(Addr) gp) -{ - struct fdesc *fdesc = NULL; - struct fdesc_table *root; - unsigned int old; - struct local *l; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - - retry: - root = l->root; - while (1) - { - old = root->first_unused; - if (old >= root->len) - break; - else if (COMPARE_AND_SWAP (&root->first_unused, old, old + 1)) - { - fdesc = &root->fdesc[old]; - goto install; - } - } - - if (l->free_list) - { - /* Get it from free-list. */ - do - { - fdesc = l->free_list; - if (fdesc == NULL) - goto retry; - } - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->free_list, - (ElfW(Addr)) fdesc, fdesc->ip)); - } - else - { - /* Create a new fdesc table. */ - size_t size; - struct fdesc_table *new_table = new_fdesc_table (l, &size); - - if (new_table == NULL) - goto retry; - - new_table->next = root; - if (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->root, - (ElfW(Addr)) root, - (ElfW(Addr)) new_table)) - { - /* Someone has just installed a new table. Return NULL to - tell the caller to use the new table. */ - __munmap (new_table, size); - goto retry; - } - - /* Note that the first entry was reserved while allocating the - memory for the new page. */ - fdesc = &new_table->fdesc[0]; - } - - install: - fdesc->ip = ip; - fdesc->gp = gp; - - return (ElfW(Addr)) fdesc; -} - - -static inline ElfW(Addr) * __attribute__ ((always_inline)) -make_fptr_table (struct link_map *map) -{ - const ElfW(Sym) *symtab - = (const void *) D_PTR (map, l_info[DT_SYMTAB]); - const char *strtab = (const void *) D_PTR (map, l_info[DT_STRTAB]); - ElfW(Addr) *fptr_table; - size_t size; - size_t len; - - /* XXX Apparently the only way to find out the size of the dynamic - symbol section is to assume that the string table follows right - afterwards... */ - len = ((strtab - (char *) symtab) - / map->l_info[DT_SYMENT]->d_un.d_val); - size = ((len * sizeof (fptr_table[0]) + GLRO(dl_pagesize) - 1) - & -GLRO(dl_pagesize)); - /* XXX We don't support here in the moment systems without MAP_ANON. - There probably are none for IA-64. In case this is proven wrong - we will have to open /dev/null here and use the file descriptor - instead of the hard-coded -1. */ - fptr_table = __mmap (NULL, size, - PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, - -1, 0); - if (fptr_table == MAP_FAILED) - _dl_signal_error (errno, NULL, NULL, - N_("cannot map pages for fptr table")); - - if (COMPARE_AND_SWAP ((ElfW(Addr) *) &map->l_mach.fptr_table, - (ElfW(Addr)) NULL, (ElfW(Addr)) fptr_table)) - map->l_mach.fptr_table_len = len; - else - __munmap (fptr_table, len * sizeof (fptr_table[0])); - - return map->l_mach.fptr_table; -} - - -ElfW(Addr) -_dl_make_fptr (struct link_map *map, const ElfW(Sym) *sym, - ElfW(Addr) ip) -{ - ElfW(Addr) *ftab = map->l_mach.fptr_table; - const ElfW(Sym) *symtab; - Elf_Symndx symidx; - struct local *l; - - if (__builtin_expect (ftab == NULL, 0)) - ftab = make_fptr_table (map); - - symtab = (const void *) D_PTR (map, l_info[DT_SYMTAB]); - symidx = sym - symtab; - - if (symidx >= map->l_mach.fptr_table_len) - _dl_signal_error (0, NULL, NULL, - N_("internal error: symidx out of range of fptr table")); - - while (ftab[symidx] == 0) - { - /* GOT has already been relocated in elf_get_dynamic_info - - don't try to relocate it again. */ - ElfW(Addr) fdesc - = make_fdesc (ip, map->l_info[DT_PLTGOT]->d_un.d_ptr); - - if (__builtin_expect (COMPARE_AND_SWAP (&ftab[symidx], (ElfW(Addr)) NULL, - fdesc), 1)) - { - /* Noone has updated the entry and the new function - descriptor has been installed. */ -#if 0 - const char *strtab - = (const void *) D_PTR (map, l_info[DT_STRTAB]); - - ELF_MACHINE_LOAD_ADDRESS (l, local); - if (l->root != &l->boot_table - || l->boot_table.first_unused > 20) - _dl_debug_printf ("created fdesc symbol `%s' at %lx\n", - strtab + sym->st_name, ftab[symidx]); -#endif - break; - } - else - { - /* We created a duplicated function descriptor. We put it on - free-list. */ - struct fdesc *f = (struct fdesc *) fdesc; - - ELF_MACHINE_LOAD_ADDRESS (l, local); - - do - f->ip = (ElfW(Addr)) l->free_list; - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &l->free_list, - f->ip, fdesc)); - } - } - - return ftab[symidx]; -} - - -void -_dl_unmap (struct link_map *map) -{ - ElfW(Addr) *ftab = map->l_mach.fptr_table; - struct fdesc *head = NULL, *tail = NULL; - size_t i; - - _dl_unmap_segments (map); - - if (ftab == NULL) - return; - - /* String together the fdesc structures that are being freed. */ - for (i = 0; i < map->l_mach.fptr_table_len; ++i) - { - if (ftab[i]) - { - *(struct fdesc **) ftab[i] = head; - head = (struct fdesc *) ftab[i]; - if (tail == NULL) - tail = head; - } - } - - /* Prepend the new list to the free_list: */ - if (tail) - do - tail->ip = (ElfW(Addr)) local.free_list; - while (! COMPARE_AND_SWAP ((ElfW(Addr) *) &local.free_list, - tail->ip, (ElfW(Addr)) head)); - - __munmap (ftab, (map->l_mach.fptr_table_len - * sizeof (map->l_mach.fptr_table[0]))); - - map->l_mach.fptr_table = NULL; -} - - -ElfW(Addr) -_dl_lookup_address (const void *address) -{ - ElfW(Addr) addr = (ElfW(Addr)) address; - struct fdesc_table *t; - unsigned long int i; - - for (t = local.root; t != NULL; t = t->next) - { - i = (struct fdesc *) addr - &t->fdesc[0]; - if (i < t->first_unused && addr == (ElfW(Addr)) &t->fdesc[i]) - { - addr = t->fdesc[i].ip; - break; - } - } - - return addr; -} diff --git a/ports/sysdeps/hppa/dl-fptr.h b/ports/sysdeps/hppa/dl-fptr.h deleted file mode 100644 index f8ce73cf05..0000000000 --- a/ports/sysdeps/hppa/dl-fptr.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Function descriptors. HPPA version. - Copyright (C) 2003-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef dl_hppa_fptr_h -#define dl_hppa_fptr_h 1 - -#include <sysdeps/generic/dl-fptr.h> - -/* Initialize function pointer code. Call before relocation processing. */ -extern void _dl_fptr_init (void); - -/* There are currently 33 dynamic symbols in ld.so. - ELF_MACHINE_BOOT_FPTR_TABLE_LEN needs to be at least that big. */ -#define ELF_MACHINE_BOOT_FPTR_TABLE_LEN 64 - -#define ELF_MACHINE_LOAD_ADDRESS(var, symbol) \ - asm ( \ -" b,l 1f,%0\n" \ -" depi 0,31,2,%0\n" \ -"1: addil L'" #symbol " - ($PIC_pcrel$0 - 8),%0\n" \ -" ldo R'" #symbol " - ($PIC_pcrel$0 - 12)(%%r1),%0\n" \ - : "=&r" (var) : : "r1"); - -#endif /* !dl_hppa_fptr_h */ diff --git a/ports/sysdeps/hppa/dl-irel.h b/ports/sysdeps/hppa/dl-irel.h deleted file mode 100644 index beefff42fe..0000000000 --- a/ports/sysdeps/hppa/dl-irel.h +++ /dev/null @@ -1,47 +0,0 @@ -/* Machine-dependent ELF indirect relocation inline functions. - HP-PARISC version. - Copyright (C) 2012-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _DL_IREL_H -#define _DL_IREL_H - -#include <stdio.h> -#include <unistd.h> -#include <dl-fptr.h> - -#define ELF_MACHINE_IREL 1 - -/* Implement enough to get the build going again. */ -#warning "NEED STT_GNU_IFUNC IMPLEMENTATION" - -static inline struct fdesc -__attribute ((always_inline)) -elf_ifunc_invoke (uintptr_t addr) -{ - return ((struct fdesc) {0, 0}); -} - -static inline void -__attribute ((always_inline)) -elf_irel (const Elf32_Rel *reloc) -{ - return; -} - -#endif /* dl-irel.h */ diff --git a/ports/sysdeps/hppa/dl-lookupcfg.h b/ports/sysdeps/hppa/dl-lookupcfg.h deleted file mode 100644 index 666483659c..0000000000 --- a/ports/sysdeps/hppa/dl-lookupcfg.h +++ /dev/null @@ -1,83 +0,0 @@ -/* Configuration of lookup functions. - Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define ELF_FUNCTION_PTR_IS_SPECIAL -#define DL_UNMAP_IS_SPECIAL - -#include <dl-fptr.h> - -/* Forward declaration. */ -struct link_map; - -void *_dl_symbol_address (struct link_map *map, const ElfW(Sym) *ref); - -#define DL_SYMBOL_ADDRESS(map, ref) _dl_symbol_address(map, ref) - -Elf32_Addr _dl_lookup_address (const void *address); - -/* Clear the bottom two bits so generic code can find the fdesc entry */ -#define DL_LOOKUP_ADDRESS(addr) \ - (_dl_lookup_address ((void *)((unsigned long)addr & ~3))) - -void _dl_unmap (struct link_map *map); - -#define DL_UNMAP(map) _dl_unmap (map) - -#define DL_DT_FUNCTION_ADDRESS(map, start, attr, addr) \ - attr volatile unsigned int fptr[2]; \ - /* The test for "start & 2" below is to accommodate old binaries which \ - violated the ELF ABI by pointing DT_INIT and DT_FINI at a function \ - descriptor. */ \ - if ((ElfW(Addr)) (start) & 2) \ - addr = (ElfW(Addr)) start; \ - else \ - { \ - fptr[0] = (unsigned int) (start); \ - fptr[1] = (map)->l_info[DT_PLTGOT]->d_un.d_ptr; \ - /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. */ \ - addr = (ElfW(Addr))((unsigned int)fptr | 2); \ - } \ - -#define DL_CALL_DT_INIT(map, start, argc, argv, env) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - init_t init = (init_t) addr; \ - init (argc, argv, env); \ -} - -#define DL_CALL_DT_FINI(map, start) \ -{ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, , addr) \ - fini_t fini = (fini_t) addr; \ - fini (); \ -} - -/* The type of the return value of fixup/profile_fixup */ -#define DL_FIXUP_VALUE_TYPE struct fdesc - -/* Construct a fixup value from the address and linkmap */ -#define DL_FIXUP_MAKE_VALUE(map, addr) \ - ((struct fdesc) { (addr), (map)->l_info[DT_PLTGOT]->d_un.d_ptr }) - -/* Extract the code address from a fixup value */ -#define DL_FIXUP_VALUE_CODE_ADDR(value) ((value).ip) -#define DL_FIXUP_VALUE_ADDR(value) ((uintptr_t) &(value)) -#define DL_FIXUP_ADDR_VALUE(addr) (*(struct fdesc *) (addr)) - diff --git a/ports/sysdeps/hppa/dl-machine.h b/ports/sysdeps/hppa/dl-machine.h deleted file mode 100644 index 6bab0ad07f..0000000000 --- a/ports/sysdeps/hppa/dl-machine.h +++ /dev/null @@ -1,782 +0,0 @@ -/* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version. - Copyright (C) 1995-2014 Free Software Foundation, Inc. - Contributed by David Huggins-Daines <dhd@debian.org> - 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef dl_machine_h -#define dl_machine_h 1 - -#define ELF_MACHINE_NAME "hppa" - -#include <sys/param.h> -#include <assert.h> -#include <string.h> -#include <link.h> -#include <errno.h> -#include <dl-fptr.h> -#include <abort-instr.h> -#include <tls.h> - -/* These two definitions must match the definition of the stub in - bfd/elf32-hppa.c (see plt_stub[]). - - a. Define the size of the *entire* stub we place at the end of the PLT - table (right up against the GOT). - - b. Define the number of bytes back from the GOT to the entry point of - the PLT stub. You see the PLT stub must be entered in the middle - so it can depwi to find it's own address (long jump stub) - - c. Define the size of a single PLT entry so we can jump over the - last entry to get the stub address */ - -#define SIZEOF_PLT_STUB (7*4) -#define GOT_FROM_PLT_STUB (4*4) -#define PLT_ENTRY_SIZE (2*4) - -/* Initialize the function descriptor table before relocations */ -static inline void -__hppa_init_bootstrap_fdesc_table (struct link_map *map) -{ - ElfW(Addr) *boot_table; - - /* Careful: this will be called before got has been relocated... */ - ELF_MACHINE_LOAD_ADDRESS(boot_table,_dl_boot_fptr_table); - - map->l_mach.fptr_table_len = ELF_MACHINE_BOOT_FPTR_TABLE_LEN; - map->l_mach.fptr_table = boot_table; -} - -#define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __hppa_init_bootstrap_fdesc_table (&bootstrap_map); \ - _dl_fptr_init(); - -/* Return nonzero iff ELF header is compatible with the running host. */ -static inline int -elf_machine_matches_host (const Elf32_Ehdr *ehdr) -{ - return ehdr->e_machine == EM_PARISC; -} - -/* Return the link-time address of _DYNAMIC. */ -static inline Elf32_Addr -elf_machine_dynamic (void) __attribute__ ((const)); - -static inline Elf32_Addr -elf_machine_dynamic (void) -{ - Elf32_Addr dynamic; - - asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 8),%0\n" -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 12)(%%r1),%0\n" - : "=r" (dynamic) : : "r1"); - - return dynamic; -} - -/* Return the run-time load address of the shared object. */ -static inline Elf32_Addr -elf_machine_load_address (void) __attribute__ ((const)); - -static inline Elf32_Addr -elf_machine_load_address (void) -{ - Elf32_Addr dynamic; - - asm ( -" b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%%r1),%0\n" - : "=r" (dynamic) : : "r1"); - - return dynamic - elf_machine_dynamic (); -} - -/* Fixup a PLT entry to bounce directly to the function at VALUE. */ -static inline struct fdesc __attribute__ ((always_inline)) -elf_machine_fixup_plt (struct link_map *map, lookup_t t, - const Elf32_Rela *reloc, - Elf32_Addr *reloc_addr, struct fdesc value) -{ - volatile Elf32_Addr *rfdesc = reloc_addr; - /* map is the link_map for the caller, t is the link_map for the object - being called */ - rfdesc[1] = value.gp; - /* Need to ensure that the gp is visible before the code - entry point is updated */ - rfdesc[0] = value.ip; - return value; -} - -/* Return the final value of a plt relocation. */ -static inline struct fdesc -elf_machine_plt_value (struct link_map *map, const Elf32_Rela *reloc, - struct fdesc value) -{ - /* We are rela only, return a function descriptor as a plt entry. */ - return (struct fdesc) { value.ip + reloc->r_addend, value.gp }; -} - -/* Set up the loaded object described by L so its unrelocated PLT - entries will jump to the on-demand fixup code in dl-runtime.c. */ - -static inline int -elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) -{ - Elf32_Addr *got = NULL; - Elf32_Addr l_addr, iplt, jmprel, end_jmprel, r_type, r_sym; - const Elf32_Rela *reloc; - struct fdesc *fptr; - static union { - unsigned char c[8]; - Elf32_Addr i[2]; - } sig = {{0x00,0xc0,0xff,0xee, 0xde,0xad,0xbe,0xef}}; - - /* If we don't have a PLT we can just skip all this... */ - if (__builtin_expect (l->l_info[DT_JMPREL] == NULL,0)) - return lazy; - - /* All paths use these values */ - l_addr = l->l_addr; - jmprel = D_PTR(l, l_info[DT_JMPREL]); - end_jmprel = jmprel + l->l_info[DT_PLTRELSZ]->d_un.d_val; - - extern void _dl_runtime_resolve (void); - extern void _dl_runtime_profile (void); - - /* Linking lazily */ - if (lazy) - { - /* FIXME: Search for the got, but backwards through the relocs, technically we should - find it on the first try. However, assuming the relocs got out of order the - routine is made a bit more robust by searching them all in case of failure. */ - for (iplt = (end_jmprel - sizeof(Elf32_Rela)); iplt >= jmprel; iplt -= sizeof (Elf32_Rela)) - { - - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - got = (Elf32_Addr *) (reloc->r_offset + l_addr + PLT_ENTRY_SIZE + SIZEOF_PLT_STUB); - - /* If we aren't an IPLT, and we aren't NONE then it's a bad reloc */ - if (__builtin_expect (r_type != R_PARISC_IPLT, 0)) - { - if (__builtin_expect (r_type != R_PARISC_NONE, 0)) - _dl_reloc_bad_type (l, r_type, 1); - continue; - } - - /* Check for the plt_stub that binutils placed here for us - to use with _dl_runtime_resolve */ - if (got[-2] != sig.i[0] || got[-1] != sig.i[1]) - { - got = NULL; /* Not the stub... keep looking */ - } - else - { - /* Found the GOT! */ - register Elf32_Addr ltp __asm__ ("%r19"); - - /* Identify this shared object. Second entry in the got. */ - got[1] = (Elf32_Addr) l; - - /* This function will be called to perform the relocation. */ - if (__builtin_expect (!profile, 1)) - { - /* If a static application called us, then _dl_runtime_resolve is not - a function descriptor, but the *real* address of the function... */ - if((unsigned long) &_dl_runtime_resolve & 3) - { - got[-2] = (Elf32_Addr) ((struct fdesc *) - ((unsigned long) &_dl_runtime_resolve & ~3))->ip; - } - else - { - /* Static executable! */ - got[-2] = (Elf32_Addr) &_dl_runtime_resolve; - } - } - else - { - if (GLRO(dl_profile) != NULL - && _dl_name_match_p (GLRO(dl_profile), l)) - { - /* This is the object we are looking for. Say that - we really want profiling and the timers are - started. */ - GL(dl_profile_map) = l; - } - - if((unsigned long) &_dl_runtime_profile & 3) - { - got[-2] = (Elf32_Addr) ((struct fdesc *) - ((unsigned long) &_dl_runtime_profile & ~3))->ip; - } - else - { - /* Static executable */ - got[-2] = (Elf32_Addr) &_dl_runtime_profile; - } - } - /* Plunk in the gp of this function descriptor so we - can make the call to _dl_runtime_xxxxxx */ - got[-1] = ltp; - break; - /* Done looking for the GOT, and stub is setup */ - } /* else we found the GOT */ - } /* for, walk the relocs backwards */ - - if(!got) - return 0; /* No lazy linking for you! */ - - /* Process all the relocs, now that we know the GOT... */ - for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela)) - { - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - if (__builtin_expect (r_type == R_PARISC_IPLT, 1)) - { - fptr = (struct fdesc *) (reloc->r_offset + l_addr); - if (r_sym != 0) - { - /* Relocate the pointer to the stub. */ - fptr->ip = (Elf32_Addr) got - GOT_FROM_PLT_STUB; - - /* Instead of the LTP value, we put the reloc offset - here. The trampoline code will load the proper - LTP and pass the reloc offset to the fixup - function. */ - fptr->gp = iplt - jmprel; - } /* r_sym != 0 */ - else - { - /* Relocate this *ABS* entry. */ - fptr->ip = reloc->r_addend + l_addr; - fptr->gp = D_PTR (l, l_info[DT_PLTGOT]); - } - } /* r_type == R_PARISC_IPLT */ - } /* for all the relocations */ - } /* if lazy */ - else - { - for (iplt = jmprel; iplt < end_jmprel; iplt += sizeof (Elf32_Rela)) - { - reloc = (const Elf32_Rela *) iplt; - r_type = ELF32_R_TYPE (reloc->r_info); - r_sym = ELF32_R_SYM (reloc->r_info); - - if (__builtin_expect ((r_type == R_PARISC_IPLT) && (r_sym == 0), 1)) - { - fptr = (struct fdesc *) (reloc->r_offset + l_addr); - /* Relocate this *ABS* entry, set only the gp, the rest is set later - when elf_machine_rela_relative is called (WITHOUT the linkmap) */ - fptr->gp = D_PTR (l, l_info[DT_PLTGOT]); - } /* r_type == R_PARISC_IPLT */ - } /* for all the relocations */ - } - return lazy; -} - - -/* Names of the architecture-specific auditing callback functions. */ -#define ARCH_LA_PLTENTER hppa_gnu_pltenter -#define ARCH_LA_PLTEXIT hppa_gnu_pltexit - -/* Initial entry point code for the dynamic linker. - The C function `_dl_start' is the real entry point; - its return value is the user program's entry point. */ - -#define RTLD_START \ -/* Set up dp for any non-PIC lib constructors that may be called. */ \ -static struct link_map * __attribute__((used)) \ -set_dp (struct link_map *map) \ -{ \ - register Elf32_Addr dp asm ("%r27"); \ - dp = D_PTR (map, l_info[DT_PLTGOT]); \ - asm volatile ("" : : "r" (dp)); \ - return map; \ -} \ - \ -asm ( \ -" .text\n" \ -" .globl _start\n" \ -" .type _start,@function\n" \ -"_start:\n" \ - /* The kernel does not give us an initial stack frame. */ \ -" ldo 64(%sp),%sp\n" \ - /* Save the relevant arguments (yes, those are the correct \ - registers, the kernel is weird) in their stack slots. */ \ -" stw %r25,-40(%sp)\n" /* argc */ \ -" stw %r24,-44(%sp)\n" /* argv */ \ - \ - /* We need the LTP, and we need it now. \ - $PIC_pcrel$0 points 8 bytes past the current instruction, \ - just like a branch reloc. This sequence gets us the \ - runtime address of _DYNAMIC. */ \ -" bl 0f,%r19\n" \ -" depi 0,31,2,%r19\n" /* clear priviledge bits */ \ -"0: addil L'_DYNAMIC - ($PIC_pcrel$0 - 8),%r19\n" \ -" ldo R'_DYNAMIC - ($PIC_pcrel$0 - 12)(%r1),%r26\n" \ - \ - /* The link time address is stored in the first entry of the \ - GOT. */ \ -" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 16),%r19\n" \ -" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 20)(%r1),%r20\n" \ - \ -" sub %r26,%r20,%r20\n" /* Calculate load offset */ \ - \ - /* Rummage through the dynamic entries, looking for \ - DT_PLTGOT. */ \ -" ldw,ma 8(%r26),%r19\n" \ -"1: cmpib,=,n 3,%r19,2f\n" /* tag == DT_PLTGOT? */ \ -" cmpib,<>,n 0,%r19,1b\n" \ -" ldw,ma 8(%r26),%r19\n" \ - \ - /* Uh oh! We didn't find one. Abort. */ \ -" iitlbp %r0,(%sr0,%r0)\n" \ - \ -"2: ldw -4(%r26),%r19\n" /* Found it, load value. */ \ -" add %r19,%r20,%r19\n" /* And add the load offset. */ \ - \ - /* Our initial stack layout is rather different from everyone \ - else's due to the unique PA-RISC ABI. As far as I know it \ - looks like this: \ - \ - ----------------------------------- (this frame created above) \ - | 32 bytes of magic | \ - |---------------------------------| \ - | 32 bytes argument/sp save area | \ - |---------------------------------| ((current->mm->env_end) \ - | N bytes of slack | + 63 & ~63) \ - |---------------------------------| \ - | envvar and arg strings | \ - |---------------------------------| \ - | ELF auxiliary info | \ - | (up to 28 words) | \ - |---------------------------------| \ - | Environment variable pointers | \ - | upwards to NULL | \ - |---------------------------------| \ - | Argument pointers | \ - | upwards to NULL | \ - |---------------------------------| \ - | argc (1 word) | \ - ----------------------------------- \ - \ - So, obviously, we can't just pass %sp to _dl_start. That's \ - okay, argv-4 will do just fine. \ - \ - The pleasant part of this is that if we need to skip \ - arguments we can just decrement argc and move argv, because \ - the stack pointer is utterly unrelated to the location of \ - the environment and argument vectors. */ \ - \ - /* This is always within range so we'll be okay. */ \ -" bl _dl_start,%rp\n" \ -" ldo -4(%r24),%r26\n" \ - \ -" .globl _dl_start_user\n" \ -" .type _dl_start_user,@function\n" \ -"_dl_start_user:\n" \ - /* Save the entry point in %r3. */ \ -" copy %ret0,%r3\n" \ - \ - /* Remember the lowest stack address. */ \ -" addil LT'__libc_stack_end,%r19\n" \ -" ldw RT'__libc_stack_end(%r1),%r20\n" \ -" stw %sp,0(%r20)\n" \ - \ - /* See if we were called as a command with the executable file \ - name as an extra leading argument. */ \ -" addil LT'_dl_skip_args,%r19\n" \ -" ldw RT'_dl_skip_args(%r1),%r20\n" \ -" ldw 0(%r20),%r20\n" \ - \ -" ldw -40(%sp),%r25\n" /* argc */ \ -" comib,= 0,%r20,.Lnofix\n" /* FIXME: Mispredicted branch */\ -" ldw -44(%sp),%r24\n" /* argv (delay slot) */ \ - \ -" sub %r25,%r20,%r25\n" \ -" stw %r25,-40(%sp)\n" \ -" sh2add %r20,%r24,%r24\n" \ -" stw %r24,-44(%sp)\n" \ - \ -".Lnofix:\n" \ -" addil LT'_rtld_local,%r19\n" \ -" ldw RT'_rtld_local(%r1),%r26\n" \ -" bl set_dp, %r2\n" \ -" ldw 0(%r26),%r26\n" \ - \ - /* Call _dl_init(_dl_loaded, argc, argv, envp). */ \ -" copy %r28,%r26\n" \ - \ - /* envp = argv + argc + 1 */ \ -" sh2add %r25,%r24,%r23\n" \ -" bl _dl_init_internal,%r2\n" \ -" ldo 4(%r23),%r23\n" /* delay slot */ \ - \ - /* Reload argc, argv to the registers start.S expects. */ \ -" ldw -40(%sp),%r25\n" \ -" ldw -44(%sp),%r24\n" \ - \ - /* _dl_fini is a local function in the loader, so we construct \ - a false OPD here and pass this to the application. */ \ - /* FIXME: Should be able to use P%, and LR RR to have the \ - the linker construct a proper OPD. */ \ -" .section .data\n" \ -"__dl_fini_plabel:\n" \ -" .word _dl_fini\n" \ -" .word 0xdeadbeef\n" \ -" .previous\n" \ - \ - /* %r3 contains a function pointer, we need to mask out the \ - lower bits and load the gp and jump address. */ \ -" depi 0,31,2,%r3\n" \ -" ldw 0(%r3),%r2\n" \ -" addil LT'__dl_fini_plabel,%r19\n" \ -" ldw RT'__dl_fini_plabel(%r1),%r23\n" \ -" stw %r19,4(%r23)\n" \ -" ldw 4(%r3),%r19\n" /* load the object's gp */ \ -" bv %r0(%r2)\n" \ -" depi 2,31,2,%r23\n" /* delay slot */ \ -); - -/* ELF_RTYPE_CLASS_PLT iff TYPE describes relocation of a PLT entry or - a TLS variable, so references should not be allowed to define the value. - ELF_RTYPE_CLASS_NOCOPY iff TYPE should not be allowed to resolve to one - of the main executable's symbols, as for a COPY reloc. */ -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP || USE___THREAD) -# define elf_machine_type_class(type) \ - ((((type) == R_PARISC_IPLT \ - || (type) == R_PARISC_EPLT \ - || (type) == R_PARISC_TLS_DTPMOD32 \ - || (type) == R_PARISC_TLS_DTPOFF32 \ - || (type) == R_PARISC_TLS_TPREL32) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PARISC_COPY) * ELF_RTYPE_CLASS_COPY)) -#else -#define elf_machine_type_class(type) \ - ((((type) == R_PARISC_IPLT \ - || (type) == R_PARISC_EPLT) \ - * ELF_RTYPE_CLASS_PLT) \ - | (((type) == R_PARISC_COPY) * ELF_RTYPE_CLASS_COPY)) -#endif - -/* Used by the runtime in fixup to figure out if reloc is *really* PLT */ -#define ELF_MACHINE_JMP_SLOT R_PARISC_IPLT -#define ELF_MACHINE_SIZEOF_JMP_SLOT PLT_ENTRY_SIZE - -/* We only use RELA. */ -#define ELF_MACHINE_NO_REL 1 - -/* Return the address of the entry point. */ -#define ELF_MACHINE_START_ADDRESS(map, start) \ -({ \ - ElfW(Addr) addr; \ - DL_DT_FUNCTION_ADDRESS(map, start, static, addr) \ - addr; \ -}) - -/* We define an initialization functions. This is called very early in - * _dl_sysdep_start. */ -#define DL_PLATFORM_INIT dl_platform_init () - -static inline void __attribute__ ((unused)) -dl_platform_init (void) -{ - if (GLRO(dl_platform) != NULL && *GLRO(dl_platform) == '\0') - /* Avoid an empty string which would disturb us. */ - GLRO(dl_platform) = NULL; -} - -#endif /* !dl_machine_h */ - -/* These are only actually used where RESOLVE_MAP is defined, anyway. */ -#ifdef RESOLVE_MAP - -#define reassemble_21(as21) \ - ( (((as21) & 0x100000) >> 20) \ - | (((as21) & 0x0ffe00) >> 8) \ - | (((as21) & 0x000180) << 7) \ - | (((as21) & 0x00007c) << 14) \ - | (((as21) & 0x000003) << 12)) - -#define reassemble_14(as14) \ - ( (((as14) & 0x1fff) << 1) \ - | (((as14) & 0x2000) >> 13)) - -auto void __attribute__((always_inline)) -elf_machine_rela (struct link_map *map, - const Elf32_Rela *reloc, - const Elf32_Sym *sym, - const struct r_found_version *version, - void *const reloc_addr_arg, - int skip_ifunc) -{ - Elf32_Addr *const reloc_addr = reloc_addr_arg; - const Elf32_Sym *const refsym = sym; - unsigned long const r_type = ELF32_R_TYPE (reloc->r_info); - struct link_map *sym_map; - Elf32_Addr value; - -# if !defined RTLD_BOOTSTRAP && !defined HAVE_Z_COMBRELOC && !defined SHARED - /* This is defined in rtld.c, but nowhere in the static libc.a; make the - reference weak so static programs can still link. This declaration - cannot be done when compiling rtld.c (i.e. #ifdef RTLD_BOOTSTRAP) - because rtld.c contains the common defn for _dl_rtld_map, which is - incompatible with a weak decl in the same file. */ - weak_extern (GL(dl_rtld_map)); -# endif - - /* RESOLVE_MAP will return a null value for undefined syms, and - non-null for all other syms. In particular, relocs with no - symbol (symbol index of zero), also called *ABS* relocs, will be - resolved to MAP. (The first entry in a symbol table is all - zeros, and an all zero Elf32_Sym has a binding of STB_LOCAL.) - See RESOLVE_MAP definition in elf/dl-reloc.c */ -# ifdef RTLD_BOOTSTRAP - /* RESOLVE_MAP in rtld.c doesn't have the local sym test. */ - sym_map = (ELF32_ST_BIND (sym->st_info) != STB_LOCAL - ? RESOLVE_MAP (&sym, version, r_type) : map); -# else - sym_map = RESOLVE_MAP (&sym, version, r_type); -# endif - - if (sym_map) - { - value = sym ? sym_map->l_addr + sym->st_value : 0; - value += reloc->r_addend; - } - else - value = 0; - - switch (r_type) - { - case R_PARISC_DIR32: - /* .eh_frame can have unaligned relocs. */ - if ((unsigned long) reloc_addr_arg & 3) - { - char *rel_addr = (char *) reloc_addr_arg; - rel_addr[0] = value >> 24; - rel_addr[1] = value >> 16; - rel_addr[2] = value >> 8; - rel_addr[3] = value; - return; - } - break; - - case R_PARISC_DIR21L: - { - unsigned int insn = *(unsigned int *)reloc_addr; - value = sym_map->l_addr + sym->st_value - + ((reloc->r_addend + 0x1000) & -0x2000); - value = value >> 11; - insn = (insn &~ 0x1fffff) | reassemble_21 (value); - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_DIR14R: - { - unsigned int insn = *(unsigned int *)reloc_addr; - value = ((sym_map->l_addr + sym->st_value) & 0x7ff) - + (((reloc->r_addend & 0x1fff) ^ 0x1000) - 0x1000); - insn = (insn &~ 0x3fff) | reassemble_14 (value); - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_PLABEL32: - /* Easy rule: If there is a symbol and it is global, then we - need to make a dynamic function descriptor. Otherwise we - have the address of a PLT slot for a local symbol which we - know to be unique. */ - if (sym == NULL - || sym_map == NULL - || ELF32_ST_BIND (sym->st_info) == STB_LOCAL) - { - break; - } - /* Set bit 30 to indicate to $$dyncall that this is a PLABEL. - We have to do this outside of the generic function descriptor - code, since it doesn't know about our requirement for setting - protection bits */ - value = (Elf32_Addr)((unsigned int)_dl_make_fptr (sym_map, sym, value) | 2); - break; - - case R_PARISC_PLABEL21L: - case R_PARISC_PLABEL14R: - { - unsigned int insn = *(unsigned int *)reloc_addr; - - if (__builtin_expect (sym == NULL, 0)) - break; - - value = (Elf32_Addr)((unsigned int)_dl_make_fptr (sym_map, sym, value) | 2); - - if (r_type == R_PARISC_PLABEL21L) - { - value >>= 11; - insn = (insn &~ 0x1fffff) | reassemble_21 (value); - } - else - { - value &= 0x7ff; - insn = (insn &~ 0x3fff) | reassemble_14 (value); - } - - *(unsigned int *)reloc_addr = insn; - } - return; - - case R_PARISC_IPLT: - if (__builtin_expect (sym_map != NULL, 1)) - { - elf_machine_fixup_plt (NULL, sym_map, reloc, reloc_addr, - DL_FIXUP_MAKE_VALUE(sym_map, value)); - } - else - { - /* If we get here, it's a (weak) undefined sym. */ - elf_machine_fixup_plt (NULL, map, reloc, reloc_addr, - DL_FIXUP_MAKE_VALUE(map, value)); - } - return; - - case R_PARISC_COPY: - if (__builtin_expect (sym == NULL, 0)) - /* This can happen in trace mode if an object could not be - found. */ - break; - if (__builtin_expect (sym->st_size > refsym->st_size, 0) - || (__builtin_expect (sym->st_size < refsym->st_size, 0) - && __builtin_expect (GLRO(dl_verbose), 0))) - { - const char *strtab; - - strtab = (const char *) D_PTR (map, l_info[DT_STRTAB]); - _dl_error_printf ("%s: Symbol `%s' has different size in shared object, " - "consider re-linking\n", - RTLD_PROGNAME, strtab + refsym->st_name); - } - memcpy (reloc_addr_arg, (void *) value, - MIN (sym->st_size, refsym->st_size)); - return; - -#if defined USE_TLS && (!defined RTLD_BOOTSTRAP) - case R_PARISC_TLS_DTPMOD32: - value = sym_map->l_tls_modid; - break; - - case R_PARISC_TLS_DTPOFF32: - /* During relocation all TLS symbols are defined and used. - Therefore the offset is already correct. */ - if (sym != NULL) - *reloc_addr = sym->st_value; - return; - - case R_PARISC_TLS_TPREL32: - /* The offset is negative, forward from the thread pointer */ - if (sym != NULL) - { - CHECK_STATIC_TLS (map, sym_map); - value = sym_map->l_tls_offset + sym->st_value + reloc->r_addend; - } - break; -#endif /* use TLS */ - - case R_PARISC_NONE: /* Alright, Wilbur. */ - return; - - default: - _dl_reloc_bad_type (map, r_type, 0); - } - - *reloc_addr = value; -} - -/* hppa doesn't have an R_PARISC_RELATIVE reloc, but uses relocs with - ELF32_R_SYM (info) == 0 for a similar purpose. */ -auto void __attribute__((always_inline)) -elf_machine_rela_relative (Elf32_Addr l_addr, - const Elf32_Rela *reloc, - void *const reloc_addr_arg) -{ - unsigned long const r_type = ELF32_R_TYPE (reloc->r_info); - Elf32_Addr *const reloc_addr = reloc_addr_arg; - static char msgbuf[] = { "Unknown" }; - struct link_map map; - Elf32_Addr value; - - value = l_addr + reloc->r_addend; - - if (ELF32_R_SYM (reloc->r_info) != 0){ - _dl_error_printf ("%s: In elf_machine_rela_relative " - "ELF32_R_SYM (reloc->r_info) != 0. Aborting.", - RTLD_PROGNAME); - ABORT_INSTRUCTION; /* Crash. */ - } - - switch (r_type) - { - case R_PARISC_DIR32: - /* .eh_frame can have unaligned relocs. */ - if ((unsigned long) reloc_addr_arg & 3) - { - char *rel_addr = (char *) reloc_addr_arg; - rel_addr[0] = value >> 24; - rel_addr[1] = value >> 16; - rel_addr[2] = value >> 8; - rel_addr[3] = value; - return; - } - break; - - case R_PARISC_PLABEL32: - break; - - case R_PARISC_IPLT: /* elf_machine_runtime_setup already set gp */ - break; - - case R_PARISC_NONE: - return; - - default: /* Bad reloc, map unknown (really it's the current map) */ - map.l_name = msgbuf; - _dl_reloc_bad_type (&map, r_type, 0); - return; - } - - *reloc_addr = value; -} - -auto void __attribute__((always_inline)) -elf_machine_lazy_rel (struct link_map *map, - Elf32_Addr l_addr, const Elf32_Rela *reloc, - int skip_ifunc) -{ - /* We don't have anything to do here. elf_machine_runtime_setup has - done all the relocs already. */ -} - -#endif /* RESOLVE_MAP */ diff --git a/ports/sysdeps/hppa/dl-symaddr.c b/ports/sysdeps/hppa/dl-symaddr.c deleted file mode 100644 index 7c62c9597c..0000000000 --- a/ports/sysdeps/hppa/dl-symaddr.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Get the symbol address. HPPA version. - Copyright (C) 1999-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <ldsodefs.h> -#include <dl-machine.h> - -void * -_dl_symbol_address (struct link_map *map, const ElfW(Sym) *ref) -{ - /* Find the "ip" from the "map" and symbol "ref" */ - Elf32_Addr value = (map ? map->l_addr : 0) + ref->st_value; - - /* On hppa, we have to return the pointer to function descriptor. - This involves an "| 2" to inform $$dyncall that this is a plabel32 */ - if (ELFW(ST_TYPE) (ref->st_info) == STT_FUNC){ - return (void *)((unsigned long)_dl_make_fptr (map, ref, value) | 2); - } - else - return (void *) value; -} diff --git a/ports/sysdeps/hppa/dl-tls.h b/ports/sysdeps/hppa/dl-tls.h deleted file mode 100644 index 71b984390b..0000000000 --- a/ports/sysdeps/hppa/dl-tls.h +++ /dev/null @@ -1,31 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - - -/* Type used for the representation of TLS information in the GOT. */ -typedef struct -{ - unsigned long int ti_module; - unsigned long int ti_offset; -} tls_index; - - -extern void *__tls_get_addr (tls_index *ti); - -/* Value used for dtv entries for which the allocation is delayed. */ -#define TLS_DTV_UNALLOCATED ((void *) -1l) diff --git a/ports/sysdeps/hppa/dl-trampoline.S b/ports/sysdeps/hppa/dl-trampoline.S deleted file mode 100644 index 1a3b97b315..0000000000 --- a/ports/sysdeps/hppa/dl-trampoline.S +++ /dev/null @@ -1,288 +0,0 @@ -/* PLT trampolines. hppa version. - Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -/* This code gets called via the .plt stub, and is used in - dl-runtime.c to call the `_dl_fixup' function and then redirect - to the address it returns. `_dl_fixup' takes two arguments, however - `_dl_profile_fixup' takes a number of parameters for use with - library auditing (LA). - - WARNING: This template is also used by gcc's __cffc, and expects - that the "bl" for _dl_runtime_resolve exist at a particular offset. - Do not change this template without changing gcc, while the prefix - "bl" should fix everything so gcc finds the right spot, it will - slow down __cffc when it attempts to call fixup to resolve function - descriptor references. Please refer to gcc/gcc/config/pa/fptr.c - - Enter with r19 = reloc offset, r20 = got-8, r21 = fixup ltp. */ - - /* RELOCATION MARKER: bl to provide gcc's __cffc with fixup loc. */ - .text - /* THIS CODE DOES NOT EXECUTE */ - bl _dl_fixup, %r2 - .text - .global _dl_runtime_resolve - .type _dl_runtime_resolve,@function - cfi_startproc - .align 4 -_dl_runtime_resolve: - .PROC - .CALLINFO FRAME=128,CALLS,SAVE_RP,ENTRY_GR=3 - .ENTRY - /* SAVE_RP says we do */ - stw %rp, -20(%sp) - - /* Save static link register */ - stw %r29,-16(%sp) - /* Save argument registers */ - stw %r26,-36(%sp) - stw %r25,-40(%sp) - stw %r24,-44(%sp) - stw %r23,-48(%sp) - - /* Build a call frame, and save structure pointer. */ - copy %sp, %r1 /* Copy previous sp */ - /* Save function result address (on entry) */ - stwm %r28,128(%sp) - /* Fillin some frame info to follow ABI */ - stw %r1,-4(%sp) /* Previous sp */ - stw %r21,-32(%sp) /* PIC register value */ - - /* Save input floating point registers. This must be done - in the new frame since the previous frame doesn't have - enough space */ - ldo -56(%sp),%r1 - fstd,ma %fr4,-8(%r1) - fstd,ma %fr5,-8(%r1) - fstd,ma %fr6,-8(%r1) - fstd,ma %fr7,-8(%r1) - - /* Set up args to fixup func, needs only two arguments */ - ldw 8+4(%r20),%r26 /* (1) got[1] == struct link_map */ - copy %r19,%r25 /* (2) reloc offset */ - - /* Call the real address resolver. */ - bl _dl_fixup,%rp - copy %r21,%r19 /* set fixup func ltp */ - - /* Load up the returned func descriptor */ - copy %r28, %r22 - copy %r29, %r19 - - /* Reload arguments fp args */ - ldo -56(%sp),%r1 - fldd,ma -8(%r1),%fr4 - fldd,ma -8(%r1),%fr5 - fldd,ma -8(%r1),%fr6 - fldd,ma -8(%r1),%fr7 - - /* Adjust sp, and restore function result address*/ - ldwm -128(%sp),%r28 - - /* Reload static link register */ - ldw -16(%sp),%r29 - /* Reload general args */ - ldw -36(%sp),%r26 - ldw -40(%sp),%r25 - ldw -44(%sp),%r24 - ldw -48(%sp),%r23 - - /* Jump to new function, but return to previous function */ - bv %r0(%r22) - ldw -20(%sp),%rp - .EXIT - .PROCEND - cfi_endproc - .size _dl_runtime_resolve, . - _dl_runtime_resolve - - .text - .global _dl_runtime_profile - .type _dl_runtime_profile,@function - cfi_startproc - .align 4 -_dl_runtime_profile: - .PROC - .CALLINFO FRAME=192,CALLS,SAVE_RP,ENTRY_GR=3 - .ENTRY - - /* SAVE_RP says we do */ - stw %rp, -20(%sp) - /* Save static link register */ - stw %r29,-16(%sp) - - /* Build a call frame, and save structure pointer. */ - copy %sp, %r1 /* Copy previous sp */ - /* Save function result address (on entry) */ - stwm %r28,192(%sp) - /* Fillin some frame info to follow ABI */ - stw %r1,-4(%sp) /* Previous sp */ - stw %r21,-32(%sp) /* PIC register value */ - - /* Create La_hppa_retval */ - /* -140, lrv_r28 - -136, lrv_r29 - -132, 4 byte pad - -128, lr_fr4 (8 bytes) */ - - /* Create save space for _dl_profile_fixup arguments - -120, Saved reloc offset - -116, Saved struct link_map - -112, *framesizep */ - - /* Create La_hppa_regs */ - /* 32-bit registers */ - stw %r26,-108(%sp) - stw %r25,-104(%sp) - stw %r24,-100(%sp) - stw %r23,-96(%sp) - /* -92, 4 byte pad */ - /* 64-bit floating point registers */ - ldo -88(%sp),%r1 - fstd,ma %fr4,8(%r1) - fstd,ma %fr5,8(%r1) - fstd,ma %fr6,8(%r1) - fstd,ma %fr7,8(%r1) - /* 32-bit stack pointer and return register */ - stw %sp,-56(%sp) - stw %r2,-52(%sp) - - - /* Set up args to fixup func, needs five arguments */ - ldw 8+4(%r20),%r26 /* (1) got[1] == struct link_map */ - stw %r26,-116(%sp) /* Save struct link_map */ - copy %r19,%r25 /* (2) reloc offset */ - stw %r25,-120(%sp) /* Save reloc offset */ - copy %rp,%r24 /* (3) profile_fixup needs rp */ - ldo -56(%sp),%r23 /* (4) La_hppa_regs */ - ldo -112(%sp), %r1 - stw %r1, -52(%sp) /* (5) long int *framesizep */ - - /* Call the real address resolver. */ - bl _dl_profile_fixup,%rp - copy %r21,%r19 /* set fixup func ltp */ - - /* Load up the returned function descriptor */ - copy %r28, %r22 - copy %r29, %r19 - - /* Restore gr/fr/sp/rp */ - ldw -108(%sp),%r26 - ldw -104(%sp),%r25 - ldw -100(%sp),%r24 - ldw -96(%sp),%r23 - /* -92, 4 byte pad, skip */ - ldo -88(%sp),%r1 - fldd,ma 8(%r1),%fr4 - fldd,ma 8(%r1),%fr5 - fldd,ma 8(%r1),%fr6 - fldd,ma 8(%r1),%fr7 - ldw -52(%sp),%rp - - /* Reload static link register -(192+16) without adjusting stack */ - ldw -208(%sp),%r29 - - /* *framesizep is >= 0 if we have to run pltexit */ - ldw -112(%sp),%r28 - cmpb,>>=,N %r0,%r28,L(cpe) - - /* Adjust sp, and restore function result address*/ - ldwm -192(%sp),%r28 - /* Jump to new function, but return to previous function */ - bv %r0(%r22) - ldw -20(%sp),%rp - /* NO RETURN */ - -L(nf): - /* Call the returned function descriptor */ - bv %r0(%r22) - nop - b,n L(cont) - -L(cpe): - /* We are going to call the resolved function, but we have a - stack frame in the middle. We use the value of framesize to - guess how much extra frame we need, and how much frame to - copy forward. */ - - /* Round to nearest multiple of 64 */ - addi 63, %r28, %r28 - depi 0, 27, 6, %r28 - - /* Calcualte start of stack copy */ - ldo -192(%sp),%r2 - - /* Increate the stack by *framesizep */ - copy %sp, %r1 - add %sp, %r28, %sp - /* Save stack pointer */ - stw %r1, -4(%sp) - - /* Single byte copy of prevous stack onto newly allocated stack */ -1: ldb %r28(%r2), %r1 - add %r28, %sp, %r26 - stb %r1, 0(%r26) - addi,< -1,%r28,%r28 - b,n 1b - - /* Retore r28 and r27 and r2 already points at -192(%sp) */ - ldw 0(%r2),%r28 - ldw 84(%r2),%r26 - - /* Calculate address of L(cont) */ - b,l L(nf),%r2 - depwi 0,31,2,%r2 -L(cont): - /* Undo fake stack */ - ldw -4(%sp),%r1 - copy %r1, %sp - - /* Arguments to _dl_call_pltexit */ - ldw -116(%sp), %r26 /* (1) got[1] == struct link_map */ - ldw -120(%sp), %r25 /* (2) reloc offsets */ - ldo -56(%sp), %r24 /* (3) *La_hppa_regs */ - ldo -124(%sp), %r23 /* (4) *La_hppa_retval */ - - /* Fill *La_hppa_retval */ - stw %r28,-140(%sp) - stw %r29,-136(%sp) - ldo -128(%sp), %r1 - fstd %fr4,0(%r1) - - /* Call _dl_call_pltexit */ - bl _dl_call_pltexit,%rp - nop - - /* Restore *La_hppa_retval */ - ldw -140(%sp), %r28 - ldw -136(%sp), %r29 - ldo -128(%sp), %r1 - fldd 0(%r1), %fr4 - - /* Unwind the stack */ - ldo 192(%sp),%sp - /* Retore callers rp */ - ldw -20(%sp),%rp - /* Return */ - bv,n 0(%r2) - .EXIT - .PROCEND - cfi_endproc - .size _dl_runtime_profile, . - _dl_runtime_profile - diff --git a/ports/sysdeps/hppa/entry.h b/ports/sysdeps/hppa/entry.h deleted file mode 100644 index b024db2be7..0000000000 --- a/ports/sysdeps/hppa/entry.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef __ASSEMBLY__ -extern void _start (void); -#endif - -/* The function's entry point is stored in the first word of the - function descriptor (plabel) of _start(). */ -#define ENTRY_POINT __canonicalize_funcptr_for_compare(_start) - -/* We have to provide a special declaration. */ -#define ENTRY_POINT_DECL(class) class void _start (void); diff --git a/ports/sysdeps/hppa/fpu/bits/fenv.h b/ports/sysdeps/hppa/fpu/bits/fenv.h deleted file mode 100644 index b675ea4c15..0000000000 --- a/ports/sysdeps/hppa/fpu/bits/fenv.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _FENV_H -# error "Never use <bits/fenv.h> directly; include <fenv.h> instead." -#endif - -/* Define bits representing the exception. We use the values of the - appropriate enable bits in the FPU status word (which, - coincidentally, are the same as the flag bits, but shifted right by - 27 bits). */ -enum -{ - FE_INVALID = -#define FE_INVALID (1<<4) /* V */ - FE_INVALID, - FE_DIVBYZERO = -#define FE_DIVBYZERO (1<<3) /* Z */ - FE_DIVBYZERO, - FE_OVERFLOW = -#define FE_OVERFLOW (1<<2) /* O */ - FE_OVERFLOW, - FE_UNDERFLOW = -#define FE_UNDERFLOW (1<<1) /* U */ - FE_UNDERFLOW, - FE_INEXACT = -#define FE_INEXACT (1<<0) /* I */ - FE_INEXACT, -}; - -#define FE_ALL_EXCEPT \ - (FE_INEXACT | FE_DIVBYZERO | FE_UNDERFLOW | FE_OVERFLOW | FE_INVALID) - -/* The PA-RISC FPU supports all of the four defined rounding modes. - We use the values of the RM field in the floating point status - register for the appropriate macros. */ -enum - { - FE_TONEAREST = -#define FE_TONEAREST (0 << 9) - FE_TONEAREST, - FE_TOWARDZERO = -#define FE_TOWARDZERO (1 << 9) - FE_TOWARDZERO, - FE_UPWARD = -#define FE_UPWARD (2 << 9) - FE_UPWARD, - FE_DOWNWARD = -#define FE_DOWNWARD (3 << 9) - FE_DOWNWARD, - }; - -/* Type representing exception flags. */ -typedef unsigned int fexcept_t; - -/* Type representing floating-point environment. This structure - corresponds to the layout of the status and exception words in the - register file. The exception registers are never saved/stored by - userspace. This structure is also not correctly aligned ever, in - an ABI error we left out __aligned(8) and subsequently all of our - fenv functions must accept unaligned input, align the input, and - then use assembly to store fr0. This is a performance hit, but - means the ABI is stable. */ -typedef struct -{ - unsigned int __status_word; - unsigned int __exception[7]; -} fenv_t; - -/* If the default argument is used we use this value. */ -#define FE_DFL_ENV ((const fenv_t *) -1) - -#ifdef __USE_GNU -/* Floating-point environment where none of the exceptions are masked. */ -# define FE_NOMASK_ENV ((const fenv_t *) -2) -#endif diff --git a/ports/sysdeps/hppa/fpu/bits/mathdef.h b/ports/sysdeps/hppa/fpu/bits/mathdef.h deleted file mode 100644 index 875bd44089..0000000000 --- a/ports/sysdeps/hppa/fpu/bits/mathdef.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#if !defined _MATH_H && !defined _COMPLEX_H -# error "Never use <bits/mathdef.h> directly; include <math.h> instead" -#endif - -#if defined __USE_ISOC99 && defined _MATH_H && !defined _MATH_H_MATHDEF -# define _MATH_H_MATHDEF 1 - -/* GCC does not promote `float' values to `double'. */ -typedef float float_t; /* `float' expressions are evaluated as - `float'. */ -typedef double double_t; /* `double' expressions are evaluated as - `double'. */ - -/* The values returned by `ilogb' for 0 and NaN respectively. */ -# define FP_ILOGB0 (-2147483647) -# define FP_ILOGBNAN (2147483647) - -#endif /* ISO C99 */ - -/* On hppa `long double' is 64-bits. */ -#undef __NO_LONG_DOUBLE_MATH - diff --git a/ports/sysdeps/hppa/fpu/fclrexcpt.c b/ports/sysdeps/hppa/fpu/fclrexcpt.c deleted file mode 100644 index ee097b4522..0000000000 --- a/ports/sysdeps/hppa/fpu/fclrexcpt.c +++ /dev/null @@ -1,36 +0,0 @@ -/* Clear given exceptions in current floating-point environment. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -feclearexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - /* Clear all the relevant bits. */ - s.sw[0] &= ~((excepts & FE_ALL_EXCEPT) << 27); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - /* Success. */ - return 0; -} -libm_hidden_def (feclearexcept) diff --git a/ports/sysdeps/hppa/fpu/fedisblxcpt.c b/ports/sysdeps/hppa/fpu/fedisblxcpt.c deleted file mode 100644 index 892c78c987..0000000000 --- a/ports/sysdeps/hppa/fpu/fedisblxcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Disable floating-point exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fedisableexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - unsigned int old_exc; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - - old_exc = s.sw[0] & FE_ALL_EXCEPT; - - s.sw[0] &= ~(excepts & FE_ALL_EXCEPT); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return old_exc; -} diff --git a/ports/sysdeps/hppa/fpu/feenablxcpt.c b/ports/sysdeps/hppa/fpu/feenablxcpt.c deleted file mode 100644 index b0f1d9235b..0000000000 --- a/ports/sysdeps/hppa/fpu/feenablxcpt.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Enable floating-point exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -feenableexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - unsigned int old_exc; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - - old_exc = s.sw[0] & FE_ALL_EXCEPT; - - s.sw[0] |= (excepts & FE_ALL_EXCEPT); - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return old_exc; -} diff --git a/ports/sysdeps/hppa/fpu/fegetenv.c b/ports/sysdeps/hppa/fpu/fegetenv.c deleted file mode 100644 index 7028fe4a22..0000000000 --- a/ports/sysdeps/hppa/fpu/fegetenv.c +++ /dev/null @@ -1,35 +0,0 @@ -/* Store current floating-point environment. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> -#include <string.h> - -int -fegetenv (fenv_t *envp) -{ - unsigned long long buf[4], *bufptr = buf; - - __asm__ ( - "fstd,ma %%fr0,8(%1) \n\t" - "fldd -8(%1),%%fr0 \n\t" - : "=m" (buf), "+r" (bufptr) : : "%r0"); - memcpy(envp, buf, sizeof (*envp)); - return 0; -} -libm_hidden_def (fegetenv) diff --git a/ports/sysdeps/hppa/fpu/fegetexcept.c b/ports/sysdeps/hppa/fpu/fegetexcept.c deleted file mode 100644 index 1c4b62d1a6..0000000000 --- a/ports/sysdeps/hppa/fpu/fegetexcept.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Get enabled floating-point exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fegetexcept (void) -{ - union { unsigned long long l; unsigned int sw[2] } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l) : "%r0"); - - return (s.sw[0] & FE_ALL_EXCEPT); -} diff --git a/ports/sysdeps/hppa/fpu/fegetround.c b/ports/sysdeps/hppa/fpu/fegetround.c deleted file mode 100644 index 85ae2f42fd..0000000000 --- a/ports/sysdeps/hppa/fpu/fegetround.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Return current rounding direction. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <get-rounding-mode.h> - -int -fegetround (void) -{ - return get_rounding_mode (); -} -libm_hidden_def (fegetround) diff --git a/ports/sysdeps/hppa/fpu/feholdexcpt.c b/ports/sysdeps/hppa/fpu/feholdexcpt.c deleted file mode 100644 index b12138720f..0000000000 --- a/ports/sysdeps/hppa/fpu/feholdexcpt.c +++ /dev/null @@ -1,54 +0,0 @@ -/* Store current floating-point environment and clear exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> -#include <string.h> - -int -feholdexcept (fenv_t *envp) -{ - union { unsigned long long buf[4]; fenv_t env; } clear; - unsigned long long *bufptr; - - /* Store the environment. */ - bufptr = clear.buf; - __asm__ ( - "fstd,ma %%fr0,8(%1)\n" - : "=m" (clear), "+r" (bufptr) : : "%r0"); - memcpy (envp, &clear.env, sizeof (fenv_t)); - - /* Clear exception queues */ - memset (clear.env.__exception, 0, sizeof (clear.env.__exception)); - /* And set all exceptions to non-stop. */ - clear.env.__status_word &= ~FE_ALL_EXCEPT; - /* Now clear all flags */ - clear.env.__status_word &= ~(FE_ALL_EXCEPT << 27); - - /* Load the new environment. Note: fr0 must load last to enable T-bit - Thus we start bufptr at the end and work backwards */ - bufptr = (unsigned long long *)((unsigned int)(clear.buf) + sizeof(unsigned int)*4); - __asm__ ( - "fldd,mb -8(%0),%%fr0\n" - : : "r" (bufptr), "m" (clear) : "%r0"); - - return 0; -} - -libm_hidden_def (feholdexcept) - diff --git a/ports/sysdeps/hppa/fpu/fesetenv.c b/ports/sysdeps/hppa/fpu/fesetenv.c deleted file mode 100644 index c967bd505c..0000000000 --- a/ports/sysdeps/hppa/fpu/fesetenv.c +++ /dev/null @@ -1,63 +0,0 @@ -/* Install given floating-point environment. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - Based on the m68k version by - Andreas Schwab <schwab@suse.de> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fesetenv (const fenv_t *envp) -{ - union { unsigned long long buf[4]; fenv_t env; } temp; - unsigned long long *bufptr; - - /* Install the environment specified by ENVP. But there are a few - values which we do not want to come from the saved environment. - Therefore, we get the current environment and replace the values - we want to use from the environment specified by the parameter. */ - bufptr = temp.buf; - __asm__ ( - "fstd,ma %%fr0,8(%1)\n" - : "=m" (temp) : "r" (bufptr) : "%r0"); - - temp.env.__status_word &= ~(FE_ALL_EXCEPT - | (FE_ALL_EXCEPT << 27) - | FE_DOWNWARD); - if (envp == FE_DFL_ENV) - temp.env.__status_word = 0; - else if (envp == FE_NOMASK_ENV) - temp.env.__status_word |= FE_ALL_EXCEPT; - else - temp.env.__status_word |= (envp->__status_word - & (FE_ALL_EXCEPT - | FE_DOWNWARD - | (FE_ALL_EXCEPT << 27))); - - /* Load the new environment. We use bufptr again since the - initial asm has modified the value of the register and here - we take advantage of that to load in reverse order so fr0 - is loaded last and T-Bit is enabled. */ - __asm__ ( - "fldd,mb -8(%1),%%fr0\n" - : : "m" (temp), "r" (bufptr) : "%r0" ); - - /* Success. */ - return 0; -} -libm_hidden_def (fesetenv) diff --git a/ports/sysdeps/hppa/fpu/fesetround.c b/ports/sysdeps/hppa/fpu/fesetround.c deleted file mode 100644 index 15becdb24b..0000000000 --- a/ports/sysdeps/hppa/fpu/fesetround.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Set current rounding direction. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fesetround (int round) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - if (round & ~FE_DOWNWARD) - /* round is not a valid rounding mode. */ - return 1; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - s.sw[0] &= ~FE_DOWNWARD; - s.sw[0] |= round & FE_DOWNWARD; - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - return 0; -} - -libm_hidden_def (fesetround) diff --git a/ports/sysdeps/hppa/fpu/feupdateenv.c b/ports/sysdeps/hppa/fpu/feupdateenv.c deleted file mode 100644 index 07757aebd3..0000000000 --- a/ports/sysdeps/hppa/fpu/feupdateenv.c +++ /dev/null @@ -1,40 +0,0 @@ -/* Install given floating-point environment and raise exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> -#include <string.h> - -int -feupdateenv (const fenv_t *envp) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - fenv_t temp; - /* Get the current exception status */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l)); - memcpy(&temp, envp, sizeof(fenv_t)); - /* Currently raised exceptions not cleared */ - temp.__status_word |= s.sw[0] & (FE_ALL_EXCEPT << 27); - /* Install new environment. */ - fesetenv (&temp); - /* Success. */ - return 0; -} -libm_hidden_def (feupdateenv) diff --git a/ports/sysdeps/hppa/fpu/fgetexcptflg.c b/ports/sysdeps/hppa/fpu/fgetexcptflg.c deleted file mode 100644 index 291e151c6b..0000000000 --- a/ports/sysdeps/hppa/fpu/fgetexcptflg.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Store current representation for exceptions. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fegetexceptflag (fexcept_t *flagp, int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l) : "%r0"); - - *flagp = (s.sw[0] >> 27) & excepts & FE_ALL_EXCEPT; - - /* Success. */ - return 0; -} - diff --git a/ports/sysdeps/hppa/fpu/fpu_control.h b/ports/sysdeps/hppa/fpu/fpu_control.h deleted file mode 100644 index 8f855207df..0000000000 --- a/ports/sysdeps/hppa/fpu/fpu_control.h +++ /dev/null @@ -1,66 +0,0 @@ -/* FPU control word definitions. HP-PARISC version. - Copyright (C) 2012-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _FPU_CONTROL_H -#define _FPU_CONTROL_H - -/* Masking of interrupts */ -#define _FPU_MASK_PM 0x00000001 /* Inexact (I) */ -#define _FPU_MASK_UM 0x00000002 /* Underflow (U) */ -#define _FPU_MASK_OM 0x00000004 /* Overflow (O) */ -#define _FPU_MASK_ZM 0x00000008 /* Divide by zero (Z) */ -#define _FPU_MASK_IM 0x00000010 /* Invalid operation (V) */ - -/* Masking of rounding modes. */ -#define _FPU_HPPA_MASK_RM 0x00000600 /* Rounding mode mask */ -/* Masking of interrupt enable bits. */ -#define _FPU_HPPA_MASK_INT 0x0000001f /* Interrupt mask */ - -/* There are no reserved bits in the PA fpsr (though some are undefined). */ -#define _FPU_RESERVED 0x00000000 -/* Default is: No traps enabled, no flags set, round to nearest. */ -#define _FPU_DEFAULT 0x00000000 -/* Default + exceptions (FE_ALL_EXCEPT) enabled. */ -#define _FPU_IEEE (_FPU_DEFAULT | _FPU_HPPA_MASK_INT) - -/* Type of the control word. */ -typedef unsigned int fpu_control_t; - -/* Macros for accessing the hardware control word. */ -#define _FPU_GETCW(cw) \ -({ \ - union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ - /* Get the current status word. */ \ - __asm__ ("fstd %%fr0,0(%1)\n\t" \ - "fldd 0(%1),%%fr0\n\t" \ - : "=m" (__fullfp.__fpreg) : "r" (&__fullfp.__fpreg) : "%r0"); \ - cw = __fullfp.__halfreg[0]; \ -}) - -#define _FPU_SETCW(cw) \ -({ \ - union { __extension__ unsigned long long __fpreg; unsigned int __halfreg[2]; } __fullfp; \ - __fullfp.__halfreg[0] = cw; \ - __asm__ ("fldd 0(%1),%%fr0\n\t" \ - : : "m" (__fullfp.__fpreg), "r" (&__fullfp.__fpreg) : "%r0" ); \ -}) - -/* Default control word set at startup. */ -extern fpu_control_t __fpu_control; - -#endif /* _FPU_CONTROL_H */ diff --git a/ports/sysdeps/hppa/fpu/fraiseexcpt.c b/ports/sysdeps/hppa/fpu/fraiseexcpt.c deleted file mode 100644 index 74e93508f3..0000000000 --- a/ports/sysdeps/hppa/fpu/fraiseexcpt.c +++ /dev/null @@ -1,101 +0,0 @@ -/* Raise given exceptions. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org> - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> -#include <float.h> -#include <math.h> - -/* Please see section 10, - page 10-5 "Delayed Trapping" in the PA-RISC 2.0 Architecture manual */ - -int -feraiseexcept (int excepts) -{ - /* Raise exceptions represented by EXCEPTS. But we must raise only one - signal at a time. It is important that if the overflow/underflow - exception and the divide by zero exception are given at the same - time, the overflow/underflow exception follows the divide by zero - exception. */ - - /* We do these bits in assembly to be certain GCC doesn't optimize - away something important, and so we can force delayed traps to - occur. */ - - /* We use "fldd 0(%%sr0,%%sp),%0" to flush the delayed exception */ - - /* First: Invalid exception. */ - if (excepts & FE_INVALID) - { - /* One example of an invalid operation is 0 * Infinity. */ - double d = HUGE_VAL; - __asm__ __volatile__ ( - " fcpy,dbl %%fr0,%%fr22\n" - " fmpy,dbl %0,%%fr22,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : : "%fr22" ); - } - - /* Second: Division by zero. */ - if (excepts & FE_DIVBYZERO) - { - double d = 1.0; - __asm__ __volatile__ ( - " fcpy,dbl %%fr0,%%fr22\n" - " fdiv,dbl %0,%%fr22,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : : "%fr22" ); - } - - /* Third: Overflow. */ - if (excepts & FE_OVERFLOW) - { - double d = DBL_MAX; - __asm__ __volatile__ ( - " fadd,dbl %0,%0,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) ); - } - - /* Fourth: Underflow. */ - if (excepts & FE_UNDERFLOW) - { - double d = DBL_MIN; - double e = 3.0; - __asm__ __volatile__ ( - " fdiv,dbl %0,%1,%0\n" - " fldd 0(%%sr0,%%sp),%0" - : "+f" (d) : "f" (e) ); - } - - /* Fifth: Inexact */ - if (excepts & FE_INEXACT) - { - double d = M_PI; - double e = 69.69; - __asm__ __volatile__ ( - " fdiv,dbl %0,%1,%%fr22\n" - " fcnvfxt,dbl,sgl %%fr22,%%fr22L\n" - " fldd 0(%%sr0,%%sp),%%fr22" - : : "f" (d), "f" (e) : "%fr22" ); - } - - /* Success. */ - return 0; -} -libm_hidden_def (feraiseexcept) diff --git a/ports/sysdeps/hppa/fpu/fsetexcptflg.c b/ports/sysdeps/hppa/fpu/fsetexcptflg.c deleted file mode 100644 index 246b66f8a3..0000000000 --- a/ports/sysdeps/hppa/fpu/fsetexcptflg.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Set floating-point environment exception handling. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> -#include <math.h> - -int -fesetexceptflag (const fexcept_t *flagp, int excepts) -{ - union { unsigned long long l; unsigned int sw[2]; } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1)" : "=m" (s.l) : "r" (&s.l) : "%r0"); - /* Install new raised trap bits */ - s.sw[0] |= (*flagp & excepts & FE_ALL_EXCEPT) << 27; - /* Store the new status word. */ - __asm__ ("fldd 0(%0),%%fr0" : : "r" (&s.l), "m" (s.l) : "%r0"); - - /* Success. */ - return 0; -} diff --git a/ports/sysdeps/hppa/fpu/ftestexcept.c b/ports/sysdeps/hppa/fpu/ftestexcept.c deleted file mode 100644 index b8d41b44ef..0000000000 --- a/ports/sysdeps/hppa/fpu/ftestexcept.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Test exception in current environment. - Copyright (C) 2000-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000 - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <fenv.h> - -int -fetestexcept (int excepts) -{ - union { unsigned long long l; unsigned int sw[2] } s; - - /* Get the current status word. */ - __asm__ ("fstd %%fr0,0(%1) \n\t" - "fldd 0(%1),%%fr0 \n\t" - : "=m" (s.l) : "r" (&s.l)); - - return (s.sw[0] >> 27) & excepts & FE_ALL_EXCEPT; -} -libm_hidden_def (fetestexcept) diff --git a/ports/sysdeps/hppa/fpu/libm-test-ulps b/ports/sysdeps/hppa/fpu/libm-test-ulps deleted file mode 100644 index 162edde0f6..0000000000 --- a/ports/sysdeps/hppa/fpu/libm-test-ulps +++ /dev/null @@ -1,717 +0,0 @@ -# Begin of automatic generation - -# Maximal error of functions: -Function: "acos_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "acos_upward": -double: 1 -idouble: 1 - -Function: "acosh": -double: 1 -idouble: 1 - -Function: "asin_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "asinh": -double: 1 -float: 1 -ifloat: 1 - -Function: "atan2": -float: 1 -ifloat: 1 - -Function: "atanh": -float: 1 -ifloat: 1 - -Function: Real part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacos": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Imaginary part of "cacosh": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "casin": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "casinh": -double: 5 -float: 2 -idouble: 5 -ifloat: 2 -ildouble: 5 -ldouble: 5 - -Function: Imaginary part of "casinh": -double: 3 -float: 1 -idouble: 3 -ifloat: 1 -ildouble: 3 -ldouble: 3 - -Function: Real part of "catan": -float: 1 -ifloat: 1 - -Function: Imaginary part of "catan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "catanh": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 -ildouble: 4 -ldouble: 4 - -Function: Imaginary part of "catanh": -float: 1 -ifloat: 1 - -Function: "cbrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ccosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "cexp": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "cexp": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "clog": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "clog": -float: 1 -ifloat: 1 - -Function: Real part of "clog10": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "clog10": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "cos": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "cos_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cos_tonearest": -float: 1 -ifloat: 1 - -Function: "cos_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cos_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "cosh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "cosh_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: Real part of "cpow": -double: 2 -float: 4 -idouble: 2 -ifloat: 4 -ildouble: 2 -ldouble: 2 - -Function: Imaginary part of "cpow": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: Real part of "csin": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "csinh": -float: 1 -ifloat: 1 - -Function: Imaginary part of "csinh": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "csqrt": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Real part of "ctan": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Real part of "ctan_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Imaginary part of "ctan_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: Imaginary part of "ctan_tonearest": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Real part of "ctan_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Imaginary part of "ctan_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctan_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Real part of "ctanh": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: Imaginary part of "ctanh": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_downward": -double: 4 -float: 1 -idouble: 4 -ifloat: 1 - -Function: Imaginary part of "ctanh_downward": -double: 6 -float: 5 -idouble: 6 -ifloat: 5 - -Function: Real part of "ctanh_tonearest": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 - -Function: Imaginary part of "ctanh_tonearest": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Real part of "ctanh_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 - -Function: Imaginary part of "ctanh_towardzero": -double: 5 -float: 3 -idouble: 5 -ifloat: 3 - -Function: Real part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: Imaginary part of "ctanh_upward": -double: 2 -float: 3 -idouble: 2 -ifloat: 3 - -Function: "erf": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "erfc": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "exp10": -double: 6 -float: 2 -idouble: 6 -ifloat: 2 -ildouble: 6 -ldouble: 6 - -Function: "exp10_downward": -double: 1 -idouble: 1 - -Function: "exp10_tonearest": -double: 1 -idouble: 1 - -Function: "exp10_towardzero": -double: 1 -idouble: 1 - -Function: "exp10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "exp_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "expm1_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "expm1_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "gamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "hypot": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "j0": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 -ildouble: 2 -ldouble: 2 - -Function: "j1": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "jn": -double: 4 -float: 5 -idouble: 4 -ifloat: 5 -ildouble: 4 -ldouble: 4 - -Function: "lgamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log": -float: 1 -ifloat: 1 - -Function: "log10": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 -ildouble: 1 -ldouble: 1 - -Function: "log1p": -float: 1 -ifloat: 1 - -Function: "pow": -float: 1 -ifloat: 1 - -Function: "pow10": -double: 1 -idouble: 1 - -Function: "pow_downward": -float: 1 -ifloat: 1 - -Function: "pow_tonearest": -float: 1 -ifloat: 1 - -Function: "pow_towardzero": -float: 1 -ifloat: 1 - -Function: "pow_upward": -float: 1 -ifloat: 1 - -Function: "sin": -float: 1 -ifloat: 1 - -Function: "sin_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sin_tonearest": -float: 1 -ifloat: 1 - -Function: "sin_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sin_upward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "sincos": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 -ildouble: 1 -ldouble: 1 - -Function: "sinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "sinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan": -double: 1 -idouble: 1 -ildouble: 1 -ldouble: 1 - -Function: "tan_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 - -Function: "tan_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tan_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tgamma": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 -ildouble: 1 -ldouble: 1 - -Function: "y0": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 -ildouble: 2 -ldouble: 2 - -Function: "y1": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -Function: "yn": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 -ildouble: 3 -ldouble: 3 - -# end of automatic generation diff --git a/ports/sysdeps/hppa/frame.h b/ports/sysdeps/hppa/frame.h deleted file mode 100644 index c079fb0aff..0000000000 --- a/ports/sysdeps/hppa/frame.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Definition of stack frame structure. HPPA version. - Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* PA stacks grow upwards. */ -#define INNER_THAN > - -/* FIXME: will verify this later */ -struct layout -{ - void *next; - void *return_address; -}; diff --git a/ports/sysdeps/hppa/gccframe.h b/ports/sysdeps/hppa/gccframe.h deleted file mode 100644 index b633eaf302..0000000000 --- a/ports/sysdeps/hppa/gccframe.h +++ /dev/null @@ -1,22 +0,0 @@ -/* Definition of object in frame unwind info. hppa version. - Copyright (C) 2001-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Note: For hppa64 this is 61 */ -#define DWARF_FRAME_REGISTERS 89 - -#include <sysdeps/generic/gccframe.h> diff --git a/ports/sysdeps/hppa/get-rounding-mode.h b/ports/sysdeps/hppa/get-rounding-mode.h deleted file mode 100644 index ffcd35b3f1..0000000000 --- a/ports/sysdeps/hppa/get-rounding-mode.h +++ /dev/null @@ -1,35 +0,0 @@ -/* Determine floating-point rounding mode within libc. HP-PARISC version. - Copyright (C) 2012-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _HPPA_GET_ROUNDING_MODE_H -#define _HPPA_GET_ROUNDING_MODE_H 1 - -#include <fenv.h> -#include <fpu_control.h> - -/* Return the floating-point rounding mode. */ - -static inline int -get_rounding_mode (void) -{ - fpu_control_t fc; - _FPU_GETCW (fc); - return fc & _FPU_HPPA_MASK_RM; -} - -#endif /* get-rounding-mode.h */ diff --git a/ports/sysdeps/hppa/hppa1.1/Implies b/ports/sysdeps/hppa/hppa1.1/Implies deleted file mode 100644 index 780c4e2467..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/Implies +++ /dev/null @@ -1,3 +0,0 @@ -wordsize-32 -ieee754/flt-32 -ieee754/dbl-64 diff --git a/ports/sysdeps/hppa/hppa1.1/addmul_1.S b/ports/sysdeps/hppa/hppa1.1/addmul_1.S deleted file mode 100644 index 666b8ca3c1..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/addmul_1.S +++ /dev/null @@ -1,103 +0,0 @@ -;! HP-PA-1.1 __mpn_addmul_1 -- Multiply a limb vector with a limb and -;! add the result to a second limb vector. - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 11 cycles/limb on a PA7000. With the used instructions, it -;! can not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 10 cycles/limb, and that can not be improved either, -;! since only the xmpyu does not need the integer pipeline, so the only -;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -;! on the PA7100. - -;! There are some ideas described in mul_1.s that applies to this code too. - - .text - .export __mpn_addmul_1 -__mpn_addmul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - ldw 0(%r26),%r29 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - add %r29,%r20,%r20 - stws,ma %r20,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - add %r29,%r1,%r20 - stw %r20,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - - .exit - .procend diff --git a/ports/sysdeps/hppa/hppa1.1/mul_1.S b/ports/sysdeps/hppa/hppa1.1/mul_1.S deleted file mode 100644 index dc1f7e2adb..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/mul_1.S +++ /dev/null @@ -1,99 +0,0 @@ -;! HP-PA-1.1 __mpn_mul_1 -- Multiply a limb vector with a limb and store -;! the result in a second limb vector. - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 9 cycles/limb on a PA7000. With the used instructions, it can -;! not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 7 cycles/limb, and that can not be improved either, since -;! only the xmpyu does not need the integer pipeline, so the only dual-issue -;! we will get are addc+xmpyu. Unrolling would not help either CPU. - -;! We could use fldds to read two limbs at a time from the S1 array, and that -;! could bring down the times to 8.5 and 6.5 cycles/limb for the PA7000 and -;! PA7100, respectively. We don't do that since it does not seem worth the -;! (alignment) troubles... - -;! At least the PA7100 is rumored to be able to deal with cache-misses -;! without stalling instruction issue. If this is true, and the cache is -;! actually also lockup-free, we should use a deeper software pipeline, and -;! load from S1 very early; (The loads and stores to -12(sp) will surely be -;! in the cache.) - - .text - .export __mpn_mul_1 -__mpn_mul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - fldws,ma 4(%r25),%fr5 - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - stws,ma %r20,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - stws,ma %r20,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - fstds %fr6,-16(%r30) - ldw -16(%r30),%r28 - ldo -64(%r30),%r30 - bv 0(%r2) - fstws %fr6R,0(%r26) - - .exit - .procend diff --git a/ports/sysdeps/hppa/hppa1.1/s_signbit.c b/ports/sysdeps/hppa/hppa1.1/s_signbit.c deleted file mode 100644 index 12278ea869..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/s_signbit.c +++ /dev/null @@ -1,34 +0,0 @@ -/* Return nonzero value if number is negative. - Copyright (C) 1997-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <math.h> - -#include <math_private.h> - -int -__signbit (double x) -{ - int32_t hx; - - GET_HIGH_WORD (hx, x); - return hx & 0x80000000; -} -#ifdef NO_LONG_DOUBLE -strong_alias (__signbit, __signbitl) -#endif diff --git a/ports/sysdeps/hppa/hppa1.1/submul_1.S b/ports/sysdeps/hppa/hppa1.1/submul_1.S deleted file mode 100644 index 3b843e7701..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/submul_1.S +++ /dev/null @@ -1,112 +0,0 @@ -;! HP-PA-1.1 __mpn_submul_1 -- Multiply a limb vector with a limb and -;! subtract the result from a second limb vector. - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr r26 -;! s1_ptr r25 -;! size r24 -;! s2_limb r23 - -;! This runs at 12 cycles/limb on a PA7000. With the used instructions, it -;! can not become faster due to data cache contention after a store. On the -;! PA7100 it runs at 11 cycles/limb, and that can not be improved either, -;! since only the xmpyu does not need the integer pipeline, so the only -;! dual-issue we will get are addc+xmpyu. Unrolling could gain a cycle/limb -;! on the PA7100. - -;! There are some ideas described in mul_1.s that applies to this code too. - -;! It seems possible to make this run as fast as __mpn_addmul_1, if we use -;! sub,>>= %r29,%r20,%r22 -;! addi 1,%r28,%r28 -;! but that requires reworking the hairy software pipeline... - - .text - .export __mpn_submul_1 -__mpn_submul_1: - .proc - .callinfo frame=64,no_calls - .entry - - ldo 64(%r30),%r30 - fldws,ma 4(%r25),%fr5 - stw %r23,-16(%r30) ;! move s2_limb ... - addib,= -1,%r24,L$just_one_limb - fldws -16(%r30),%fr4 ;! ... into fr4 - add %r0,%r0,%r0 ;! clear carry - xmpyu %fr4,%fr5,%fr6 - fldws,ma 4(%r25),%fr7 - fstds %fr6,-16(%r30) - xmpyu %fr4,%fr7,%fr8 - ldw -12(%r30),%r20 ;! least significant limb in product - ldw -16(%r30),%r28 - - fstds %fr8,-16(%r30) - addib,= -1,%r24,L$end - ldw -12(%r30),%r1 - -;! Main loop -L$loop: - ldws 0(%r26),%r29 - fldws,ma 4(%r25),%fr5 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r20 - xmpyu %fr4,%fr5,%fr6 - ldw -16(%r30),%r28 - fstds %fr6,-16(%r30) - addc %r0,%r28,%r28 - addib,<> -1,%r24,L$loop - ldw -12(%r30),%r1 - -L$end: - ldw 0(%r26),%r29 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r28,%r1,%r20 - ldw -16(%r30),%r28 - ldws 0(%r26),%r29 - addc %r0,%r28,%r28 - sub %r29,%r20,%r22 - add %r22,%r20,%r0 - stws,ma %r22,4(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - -L$just_one_limb: - xmpyu %fr4,%fr5,%fr6 - ldw 0(%r26),%r29 - fstds %fr6,-16(%r30) - ldw -12(%r30),%r1 - ldw -16(%r30),%r28 - sub %r29,%r1,%r22 - add %r22,%r1,%r0 - stw %r22,0(%r26) - addc %r0,%r28,%r28 - bv 0(%r2) - ldo -64(%r30),%r30 - - .exit - .procend diff --git a/ports/sysdeps/hppa/hppa1.1/udiv_qrnnd.S b/ports/sysdeps/hppa/hppa1.1/udiv_qrnnd.S deleted file mode 100644 index 6008a62945..0000000000 --- a/ports/sysdeps/hppa/hppa1.1/udiv_qrnnd.S +++ /dev/null @@ -1,77 +0,0 @@ -;! HP-PA __udiv_qrnnd division support, used from longlong.h. -;! This version runs fast on PA 7000 and later. - -;! Copyright (C) 1993-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! rem_ptr gr26 -;! n1 gr25 -;! n0 gr24 -;! d gr23 - - .text -L$0000: - .word 0x43f00000 - .word 0x0 - .export __udiv_qrnnd -__udiv_qrnnd: - .proc - .callinfo frame=64,no_calls - .entry - ldo 64(%r30),%r30 - - stws %r25,-16(%r30) ;! n_hi - stws %r24,-12(%r30) ;! n_lo - b,l L$0,%r1 - ldo L$0000-L$0(%r1),%r1 -L$0: - fldds -16(%r30),%fr5 - stws %r23,-12(%r30) - comib,<= 0,%r25,L$1 - fcnvxf,dbl,dbl %fr5,%fr5 - fldds 0(%r1),%fr4 - fadd,dbl %fr4,%fr5,%fr5 -L$1: - fcpy,sgl %fr0,%fr6L - fldws -12(%r30),%fr6R - fcnvxf,dbl,dbl %fr6,%fr4 - - fdiv,dbl %fr5,%fr4,%fr5 - - fcnvfx,dbl,dbl %fr5,%fr4 - fstws %fr4R,-16(%r30) - xmpyu %fr4R,%fr6R,%fr6 - ldws -16(%r30),%r28 - fstds %fr6,-16(%r30) - ldws -12(%r30),%r21 - ldws -16(%r30),%r20 - sub %r24,%r21,%r22 - subb %r25,%r20,%r1 - comib,= 0,%r1,L$2 - ldo -64(%r30),%r30 - - add %r22,%r23,%r22 - ldo -1(%r28),%r28 -L$2: - bv 0(%r2) - stws %r22,0(%r26) - - .exit - .procend diff --git a/ports/sysdeps/hppa/jmpbuf-offsets.h b/ports/sysdeps/hppa/jmpbuf-offsets.h deleted file mode 100644 index bed0e0636d..0000000000 --- a/ports/sysdeps/hppa/jmpbuf-offsets.h +++ /dev/null @@ -1,19 +0,0 @@ -/* Private macros for accessing __jmp_buf contents. HPPA version. - Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define JB_SP (76/4) diff --git a/ports/sysdeps/hppa/jmpbuf-unwind.h b/ports/sysdeps/hppa/jmpbuf-unwind.h deleted file mode 100644 index 2a6788de6c..0000000000 --- a/ports/sysdeps/hppa/jmpbuf-unwind.h +++ /dev/null @@ -1,26 +0,0 @@ -/* Examine __jmp_buf for unwinding frames. HPPA version. - Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <setjmp.h> -#include <jmpbuf-offsets.h> - -/* Test if longjmp to JMPBUF would unwind the frame containing a local - variable at ADDRESS. */ -#define _JMPBUF_UNWINDS(_jmpbuf, _address, _demangle) \ - ((void *) (_address) > \ - (void *) _demangle ((((unsigned long *) _jmpbuf)[JB_SP]))) diff --git a/ports/sysdeps/hppa/ldsodefs.h b/ports/sysdeps/hppa/ldsodefs.h deleted file mode 100644 index 128f2be25a..0000000000 --- a/ports/sysdeps/hppa/ldsodefs.h +++ /dev/null @@ -1,41 +0,0 @@ -/* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _HPPA_LDSODEFS_H -#define _HPPA_LDSODEFS_H 1 - -#include <elf.h> - -struct La_hppa_regs; -struct La_hppa_retval; - -#define ARCH_PLTENTER_MEMBERS \ - Elf32_Addr (*hppa_gnu_pltenter) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, struct La_hppa_regs *, \ - unsigned int *, const char *name, \ - long int *framesizep); - -#define ARCH_PLTEXIT_MEMBERS \ - unsigned int (*hppa_gnu_pltexit) (Elf32_Sym *, unsigned int, uintptr_t *, \ - uintptr_t *, \ - const struct La_hppa_regs *, \ - struct La_hppa_retval *, const char *); - -#include_next <ldsodefs.h> - -#endif diff --git a/ports/sysdeps/hppa/libc-tls.c b/ports/sysdeps/hppa/libc-tls.c deleted file mode 100644 index 855227b761..0000000000 --- a/ports/sysdeps/hppa/libc-tls.c +++ /dev/null @@ -1,37 +0,0 @@ -/* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <csu/libc-tls.c> -#include <dl-tls.h> - -#if USE_TLS - -/* On hppa, linker optimizations are not required, so __tls_get_addr - can be called even in statically linked binaries. In this case module - must be always 1 and PT_TLS segment exist in the binary, otherwise it - would not link. */ - -void * -__tls_get_addr (tls_index *ti) -{ - dtv_t *dtv = THREAD_DTV (); - return (char *) dtv[1].pointer.val + ti->ti_offset; -} - -#endif - diff --git a/ports/sysdeps/hppa/libgcc-compat.c b/ports/sysdeps/hppa/libgcc-compat.c deleted file mode 100644 index 1a54981dd2..0000000000 --- a/ports/sysdeps/hppa/libgcc-compat.c +++ /dev/null @@ -1,42 +0,0 @@ -/* pre-.hidden libgcc compatibility - Copyright (C) 2002-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Randolph Chung - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - - -#include <stdint.h> -#include <shlib-compat.h> - -#if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_2_6) - -symbol_version (__clz_tab_internal, __clz_tab, GLIBC_2.2); - -typedef unsigned int UQItype __attribute__ ((mode (QI))); - -const UQItype __clz_tab_internal[] = -{ - 0,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5, - 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, - 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8, -}; - -#endif diff --git a/ports/sysdeps/hppa/lshift.S b/ports/sysdeps/hppa/lshift.S deleted file mode 100644 index f0debff415..0000000000 --- a/ports/sysdeps/hppa/lshift.S +++ /dev/null @@ -1,65 +0,0 @@ -;! HP-PA __mpn_lshift -- - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s_ptr gr25 -;! size gr24 -;! cnt gr23 - - .text - .export __mpn_lshift -__mpn_lshift: - .proc - .callinfo frame=64,no_calls - .entry - - sh2add %r24,%r25,%r25 - sh2add %r24,%r26,%r26 - ldws,mb -4(%r25),%r22 - subi 32,%r23,%r1 - mtsar %r1 - addib,= -1,%r24,L$0004 - vshd %r0,%r22,%r28 ;! compute carry out limb - ldws,mb -4(%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r22,%r29,%r20 - -L$loop: ldws,mb -4(%r25),%r22 - stws,mb %r20,-4(%r26) - addib,= -1,%r24,L$0003 - vshd %r29,%r22,%r20 - ldws,mb -4(%r25),%r29 - stws,mb %r20,-4(%r26) - addib,<> -1,%r24,L$loop - vshd %r22,%r29,%r20 - -L$0002: stws,mb %r20,-4(%r26) - vshd %r29,%r0,%r20 - bv 0(%r2) - stw %r20,-4(%r26) -L$0003: stws,mb %r20,-4(%r26) -L$0004: vshd %r22,%r0,%r20 - bv 0(%r2) - stw %r20,-4(%r26) - - .exit - .procend diff --git a/ports/sysdeps/hppa/machine-gmon.h b/ports/sysdeps/hppa/machine-gmon.h deleted file mode 100644 index 2f3edc2d9e..0000000000 --- a/ports/sysdeps/hppa/machine-gmon.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Machine-specific calling sequence for `mcount' profiling function. PA-RISC - Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* We can call _mcount directly since gcc supplies the correct - * arguments */ -#define _MCOUNT_DECL(from, self) \ - void _mcount (u_long from, u_long self) - -#define MCOUNT diff --git a/ports/sysdeps/hppa/math_private.h b/ports/sysdeps/hppa/math_private.h deleted file mode 100644 index f7d41417dc..0000000000 --- a/ports/sysdeps/hppa/math_private.h +++ /dev/null @@ -1,27 +0,0 @@ -/* Internal math stuff. HPPA version. - Copyright (C) 2013-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _MATH_PRIVATE_H - -/* One of the few architectures where the meaning of the quiet/signaling bit is - inverse to IEEE 754-2008 (as well as common practice for IEEE 754-1985). */ -#define HIGH_ORDER_BIT_IS_SET_FOR_SNAN - -#include_next <math_private.h> - -#endif diff --git a/ports/sysdeps/hppa/memusage.h b/ports/sysdeps/hppa/memusage.h deleted file mode 100644 index d361356d25..0000000000 --- a/ports/sysdeps/hppa/memusage.h +++ /dev/null @@ -1,21 +0,0 @@ -/* Copyright (C) 2000-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define GETSP() ({ register uintptr_t stack_ptr asm ("%r30"); stack_ptr; }) -#define STACK_GROWS_UPWARD 1 - -#include <sysdeps/generic/memusage.h> diff --git a/ports/sysdeps/hppa/mp_clz_tab.c b/ports/sysdeps/hppa/mp_clz_tab.c deleted file mode 100644 index 52d06383c1..0000000000 --- a/ports/sysdeps/hppa/mp_clz_tab.c +++ /dev/null @@ -1 +0,0 @@ -/* __clz_tab not needed on hppa. */ diff --git a/ports/sysdeps/hppa/nptl/Makefile b/ports/sysdeps/hppa/nptl/Makefile deleted file mode 100644 index 143850e6c8..0000000000 --- a/ports/sysdeps/hppa/nptl/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (C) 2005-2014 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 Lesser General Public -# License as published by the Free Software Foundation; either -# version 2.1 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 -# Lesser General Public License for more details. -# -# You should have received a copy of the GNU Lesser General Public -# License along with the GNU C Library. If not, see -# <http://www.gnu.org/licenses/>. - -ifeq ($(subdir),csu) -gen-as-const-headers += tcb-offsets.sym -endif diff --git a/ports/sysdeps/hppa/nptl/jmpbuf-unwind.h b/ports/sysdeps/hppa/nptl/jmpbuf-unwind.h deleted file mode 100644 index 01f5870694..0000000000 --- a/ports/sysdeps/hppa/nptl/jmpbuf-unwind.h +++ /dev/null @@ -1,30 +0,0 @@ -/* Copyright (C) 2003-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <setjmp.h> -#include <jmpbuf-offsets.h> -#include <stdint.h> -#include <unwind.h> - -#define _JMPBUF_CFA_UNWINDS_ADJ(_jmpbuf, _context, _adj) \ - _JMPBUF_UNWINDS_ADJ (_jmpbuf, (void *) _Unwind_GetCFA (_context), _adj) - -#define _JMPBUF_UNWINDS_ADJ(_jmpbuf, _address, _adj) \ - ((uintptr_t) (_address) - (_adj) > (uintptr_t)(((unsigned long *) _jmpbuf)[JB_SP]) - (_adj)) - -/* We use the normal longjmp for unwinding. */ -#define __libc_unwind_longjmp(buf, val) __libc_longjmp (buf, val) diff --git a/ports/sysdeps/hppa/nptl/pthread_spin_init.c b/ports/sysdeps/hppa/nptl/pthread_spin_init.c deleted file mode 100644 index c83669eb91..0000000000 --- a/ports/sysdeps/hppa/nptl/pthread_spin_init.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include "pthreadP.h" - -int -pthread_spin_init (pthread_spinlock_t *lock, int pshared) -{ - int tmp = 0; - /* This should be a memory barrier to newer compilers */ - __asm__ __volatile__ ("stw,ma %1,0(%0)" - : : "r" (lock), "r" (tmp) : "memory"); - return 0; -} diff --git a/ports/sysdeps/hppa/nptl/pthread_spin_lock.c b/ports/sysdeps/hppa/nptl/pthread_spin_lock.c deleted file mode 100644 index b29fc7cef8..0000000000 --- a/ports/sysdeps/hppa/nptl/pthread_spin_lock.c +++ /dev/null @@ -1,23 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000 - -/* We can't use the normal "#include <nptl/pthread_spin_lock.c>" because - it will resolve to this very file. Using "sysdeps/.." as reference to the - top level directory does the job. */ -#include <sysdeps/../nptl/pthread_spin_lock.c> diff --git a/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c b/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c deleted file mode 100644 index 5a8aed8e38..0000000000 --- a/ports/sysdeps/hppa/nptl/pthread_spin_unlock.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include "pthreadP.h" - -int -pthread_spin_unlock (pthread_spinlock_t *lock) -{ - int tmp = 0; - /* This should be a memory barrier to newer compilers */ - __asm__ __volatile__ ("stw,ma %1,0(%0)" - : : "r" (lock), "r" (tmp) : "memory"); - return 0; -} diff --git a/ports/sysdeps/hppa/nptl/pthreaddef.h b/ports/sysdeps/hppa/nptl/pthreaddef.h deleted file mode 100644 index ee8765a6f1..0000000000 --- a/ports/sysdeps/hppa/nptl/pthreaddef.h +++ /dev/null @@ -1,39 +0,0 @@ -/* Copyright (C) 2002-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Default stack size. */ -#define ARCH_STACK_DEFAULT_SIZE (8 * 1024 * 1024) - -/* Required stack pointer alignment at beginning. */ -#define STACK_ALIGN 64 - -/* Minimal stack size after allocating thread descriptor and guard size. */ -#define MINIMAL_REST_STACK 2048 - -/* Alignment requirement for TCB, note that this must be larger than STACK_ALIGN */ -#define TCB_ALIGNMENT STACK_ALIGN - - -/* Location of current stack frame. */ -#define CURRENT_STACK_FRAME stack_pointer -register char * stack_pointer __asm__ ("%r30"); - - -/* XXX Until we have a better place keep the definitions here. */ - -#define __exit_thread_inline(val) \ - INLINE_SYSCALL (exit, 1, (val)) diff --git a/ports/sysdeps/hppa/nptl/shlib-versions b/ports/sysdeps/hppa/nptl/shlib-versions deleted file mode 100644 index adc26364b1..0000000000 --- a/ports/sysdeps/hppa/nptl/shlib-versions +++ /dev/null @@ -1 +0,0 @@ -hppa.*-.*-linux.* libpthread=0 GLIBC_2.2 diff --git a/ports/sysdeps/hppa/nptl/tcb-offsets.sym b/ports/sysdeps/hppa/nptl/tcb-offsets.sym deleted file mode 100644 index f3cc82621a..0000000000 --- a/ports/sysdeps/hppa/nptl/tcb-offsets.sym +++ /dev/null @@ -1,19 +0,0 @@ -#include <sysdep.h> -#include <tls.h> - -RESULT offsetof (struct pthread, result) -TID offsetof (struct pthread, tid) -PID offsetof (struct pthread, pid) -CANCELHANDLING offsetof (struct pthread, cancelhandling) -CLEANUP_JMP_BUF offsetof (struct pthread, cleanup_jmp_buf) -MULTIPLE_THREADS_OFFSET offsetof (struct pthread, header.multiple_threads) -TLS_PRE_TCB_SIZE sizeof (struct pthread) -MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) - --- Use a thread_offset when working with asm to make things simpler --- This way we get the offset of a member in the struct pthread that --- preceeds the thread pointer (which points to the dtv). -#define thread_offsetof(mem) (unsigned int)(offsetof(struct pthread, mem) - sizeof(struct pthread)) -PID_THREAD_OFFSET thread_offsetof (pid) -TID_THREAD_OFFSET thread_offsetof (tid) -MULTIPLE_THREADS_THREAD_OFFSET thread_offsetof (header.multiple_threads) diff --git a/ports/sysdeps/hppa/nptl/tls.h b/ports/sysdeps/hppa/nptl/tls.h deleted file mode 100644 index 1933910357..0000000000 --- a/ports/sysdeps/hppa/nptl/tls.h +++ /dev/null @@ -1,171 +0,0 @@ -/* Definition for thread-local data handling. NPTL/hppa version. - Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _TLS_H -#define _TLS_H 1 - -#include <dl-sysdep.h> - -#ifndef __ASSEMBLER__ -# include <stdbool.h> -# include <stddef.h> -# include <stdint.h> - -/* Type for the dtv. */ -typedef union dtv -{ - size_t counter; - struct - { - void *val; - bool is_static; - } pointer; -} dtv_t; - -#else /* __ASSEMBLER__ */ -# include <tcb-offsets.h> -#endif /* __ASSEMBLER__ */ - -/* Signal that TLS support is available. */ -#define USE_TLS 1 - -#ifndef __ASSEMBLER__ - -/* Get system call information. */ -# include <sysdep.h> - -/* The TP points to the start of the thread blocks. */ -# define TLS_DTV_AT_TP 1 -# define TLS_TCB_AT_TP 0 - -/* Get the thread descriptor definition. */ -# include <nptl/descr.h> - -typedef struct -{ - dtv_t *dtv; - void *private; -} tcbhead_t; - -/* This is the size of the initial TCB. */ -# define TLS_INIT_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the initial TCB. */ -# define TLS_INIT_TCB_ALIGN __alignof__ (tcbhead_t) - -/* This is the size of the TCB. */ -# define TLS_TCB_SIZE sizeof (tcbhead_t) - -/* Alignment requirements for the TCB. */ -# define TLS_TCB_ALIGN __alignof__ (struct pthread) - -/* This is the size we need before TCB */ -# define TLS_PRE_TCB_SIZE sizeof (struct pthread) - -/* Install the dtv pointer. The pointer passed is to the element with - index -1 which contain the length. */ -# define INSTALL_DTV(tcbp, dtvp) \ - ((tcbhead_t *) (tcbp))->dtv = (dtvp) + 1 - -/* Install new dtv for current thread. */ -# define INSTALL_NEW_DTV(dtv) \ - ({ tcbhead_t *__tcbp = (tcbhead_t *)__get_cr27(); \ - __tcbp->dtv = dtv; \ - }) - -/* Return dtv of given thread descriptor. */ -# define GET_DTV(tcbp) \ - (((tcbhead_t *) (tcbp))->dtv) - -/* Code to initially initialize the thread pointer. This might need - special attention since 'errno' is not yet available and if the - operation can cause a failure 'errno' must not be touched. */ -# define TLS_INIT_TP(tcbp, secondcall) \ - ({ __set_cr27(tcbp); NULL; }) - -/* Return the address of the dtv for the current thread. */ -# define THREAD_DTV() \ - ({ tcbhead_t *__tcbp = (tcbhead_t *)__get_cr27(); \ - __tcbp->dtv; \ - }) - -/* Return the thread descriptor for the current thread. */ -# define THREAD_SELF \ - ({ struct pthread *__self; \ - __self = __get_cr27(); \ - __self - 1; \ - }) - -/* Magic for libthread_db to know how to do THREAD_SELF. - Our thread pointer is stored in cr27. See asm/elf.h for the offset into - elf_gregset_t. The thread descriptor is sizeof (struct pthread) away. */ -# define DB_THREAD_SELF \ - REGISTER (32, 32, 53 * 4, -sizeof (struct pthread)) - -/* Access to data in the thread descriptor is easy. */ -# define THREAD_GETMEM(descr, member) \ - descr->member -# define THREAD_GETMEM_NC(descr, member, idx) \ - descr->member[idx] -# define THREAD_SETMEM(descr, member, value) \ - descr->member = (value) -# define THREAD_SETMEM_NC(descr, member, idx, value) \ - descr->member[idx] = (value) - -static inline struct pthread *__get_cr27(void) -{ - long cr27; - asm ("mfctl %%cr27, %0" : "=r" (cr27) : ); - return (struct pthread *) cr27; -} - -/* We write to cr27, clobber r26 as the input argument, and clobber - r31 as the link register. */ -static inline void __set_cr27(struct pthread *cr27) -{ - asm ( "ble 0xe0(%%sr2, %%r0)\n\t" - "copy %0, %%r26" - : : "r" (cr27) : "r26", "r31" ); -} - -/* Get and set the global scope generation counter in struct pthread. */ -#define THREAD_GSCOPE_FLAG_UNUSED 0 -#define THREAD_GSCOPE_FLAG_USED 1 -#define THREAD_GSCOPE_FLAG_WAIT 2 -#define THREAD_GSCOPE_RESET_FLAG() \ - do \ - { int __res \ - = atomic_exchange_rel (&THREAD_SELF->header.gscope_flag, \ - THREAD_GSCOPE_FLAG_UNUSED); \ - if (__res == THREAD_GSCOPE_FLAG_WAIT) \ - lll_futex_wake (&THREAD_SELF->header.gscope_flag, 1, LLL_PRIVATE); \ - } \ - while (0) -#define THREAD_GSCOPE_SET_FLAG() \ - do \ - { \ - THREAD_SELF->header.gscope_flag = THREAD_GSCOPE_FLAG_USED; \ - atomic_write_barrier (); \ - } \ - while (0) -#define THREAD_GSCOPE_WAIT() \ - GL(dl_wait_lookup_done) () - -#endif /* !__ASSEMBLER__ */ - -#endif /* tls.h */ diff --git a/ports/sysdeps/hppa/nptl/tst-oddstacklimit.c b/ports/sysdeps/hppa/nptl/tst-oddstacklimit.c deleted file mode 100644 index f65dbc8cec..0000000000 --- a/ports/sysdeps/hppa/nptl/tst-oddstacklimit.c +++ /dev/null @@ -1,26 +0,0 @@ -/* Test NPTL with stack limit that is not a multiple of the page size. - HPPA version. - Copyright (C) 2012-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -/* This sets the stack resource limit to 8193kb, which is not a multiple - of the page size, and therefore an odd sized stack limit. We override - this because the default is too small to run with. */ - -#define ODD_STACK_LIMIT (8193 * 1024) - -#include <sysdeps/../nptl/tst-oddstacklimit.c> diff --git a/ports/sysdeps/hppa/preconfigure b/ports/sysdeps/hppa/preconfigure deleted file mode 100644 index 4d7fdcd032..0000000000 --- a/ports/sysdeps/hppa/preconfigure +++ /dev/null @@ -1,6 +0,0 @@ -# This fragment canonicalizes the machine names for hppa variants. - -case "$machine" in -hppa*64*) base_machine=hppa machine=hppa/hppa64 ;; -hppa*) base_machine=hppa machine=hppa/hppa1.1 ;; -esac diff --git a/ports/sysdeps/hppa/rshift.S b/ports/sysdeps/hppa/rshift.S deleted file mode 100644 index 2d3561de40..0000000000 --- a/ports/sysdeps/hppa/rshift.S +++ /dev/null @@ -1,62 +0,0 @@ -;! HP-PA __mpn_rshift -- - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s_ptr gr25 -;! size gr24 -;! cnt gr23 - - .text - .export __mpn_rshift -__mpn_rshift: - .proc - .callinfo frame=64,no_calls - .entry - - ldws,ma 4(%r25),%r22 - mtsar %r23 - addib,= -1,%r24,L$0004 - vshd %r22,%r0,%r28 ;! compute carry out limb - ldws,ma 4(%r25),%r29 - addib,= -1,%r24,L$0002 - vshd %r29,%r22,%r20 - -L$loop: ldws,ma 4(%r25),%r22 - stws,ma %r20,4(%r26) - addib,= -1,%r24,L$0003 - vshd %r22,%r29,%r20 - ldws,ma 4(%r25),%r29 - stws,ma %r20,4(%r26) - addib,<> -1,%r24,L$loop - vshd %r29,%r22,%r20 - -L$0002: stws,ma %r20,4(%r26) - vshd %r0,%r29,%r20 - bv 0(%r2) - stw %r20,0(%r26) -L$0003: stws,ma %r20,4(%r26) -L$0004: vshd %r0,%r22,%r20 - bv 0(%r2) - stw %r20,0(%r26) - - .exit - .procend diff --git a/ports/sysdeps/hppa/setjmp.S b/ports/sysdeps/hppa/setjmp.S deleted file mode 100644 index 51904af051..0000000000 --- a/ports/sysdeps/hppa/setjmp.S +++ /dev/null @@ -1,72 +0,0 @@ -/* setjmp for HPPA. - Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#define _ASM -#define _SETJMP_H -#include <bits/setjmp.h> - - - .text - .align 4 - .import __sigjmp_save, code - .globl __sigsetjmp - .export __sigsetjmp, code - .proc - .callinfo -__sigsetjmp: - stw %r3, 0(%r26) - /* This padding exists for unknown historical reasons. */ - /* 4 - 4 bytes of padding. */ - stw %r4, 8(%r26) - stw %r5, 12(%r26) - stw %r6, 16(%r26) - stw %r7, 20(%r26) - stw %r8, 24(%r26) - stw %r9, 28(%r26) - stw %r10, 32(%r26) - stw %r11, 36(%r26) - stw %r12, 40(%r26) - stw %r13, 44(%r26) - stw %r14, 48(%r26) - stw %r15, 52(%r26) - stw %r16, 56(%r26) - stw %r17, 60(%r26) - stw %r18, 64(%r26) - stw %r19, 68(%r26) - stw %r27, 72(%r26) - stw %r30, 76(%r26) - - stw %rp, 80(%r26) - /* This padding exists to ensure double alignment for fprs. */ - /* 84 - 4 bytes of padding. */ - ldo 88(%r26),%r1 - fstds,ma %fr12, 8(%r1) /* 88 */ - fstds,ma %fr13, 8(%r1) /* 96 */ - fstds,ma %fr14, 8(%r1) /* 104 */ - fstds,ma %fr15, 8(%r1) /* 112 */ - fstds,ma %fr16, 8(%r1) /* 120 */ - fstds,ma %fr17, 8(%r1) /* 128 */ - fstds,ma %fr18, 8(%r1) /* 136 */ - fstds,ma %fr19, 8(%r1) /* 144 */ - fstds,ma %fr20, 8(%r1) /* 152 */ - fstds %fr21, 0(%r1) /* 160 */ - /* Total of 168 bytes. */ - b __sigjmp_save - nop - .procend diff --git a/ports/sysdeps/hppa/shlib-versions b/ports/sysdeps/hppa/shlib-versions deleted file mode 100644 index 6b9225c925..0000000000 --- a/ports/sysdeps/hppa/shlib-versions +++ /dev/null @@ -1,9 +0,0 @@ -hppa.*-.*-.* libm=6 GLIBC_2.2 - -hppa.*-.*-.* libc=6 GLIBC_2.2 - -hppa.*-.*-.* ld=ld.so.1 GLIBC_2.2 - -hppa-.*-.* libBrokenLocale=1 GLIBC_2.2 - -hppa.*-.*-.* libgcc_s=4 diff --git a/ports/sysdeps/hppa/stackinfo.h b/ports/sysdeps/hppa/stackinfo.h deleted file mode 100644 index 5d41d85952..0000000000 --- a/ports/sysdeps/hppa/stackinfo.h +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 1999-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* This file contains a bit of information about the stack allocation - of the processor. */ - -#ifndef _STACKINFO_H -#define _STACKINFO_H 1 - -#include <elf.h> - -/* Default to an executable stack. PF_X can be overridden if PT_GNU_STACK is - * present, but it is presumed absent. */ -#define DEFAULT_STACK_PERMS (PF_R|PF_W|PF_X) - -/* On PA the stack grows up. */ -#define _STACK_GROWS_UP 1 - -#endif /* stackinfo.h */ diff --git a/ports/sysdeps/hppa/start.S b/ports/sysdeps/hppa/start.S deleted file mode 100644 index 0998270afd..0000000000 --- a/ports/sysdeps/hppa/start.S +++ /dev/null @@ -1,143 +0,0 @@ -/* ELF startup code for HPPA. - Copyright (C) 2002-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - In addition to the permissions in the GNU Lesser General Public - License, the Free Software Foundation gives you unlimited - permission to link the compiled version of this file with other - programs, and to distribute those programs without any restriction - coming from the use of this file. (The GNU Lesser General Public - License restrictions do apply in other respects; for example, they - cover modification of the file, and distribution when not linked - into another program.) - - Note that people who make modified versions of this file are not - obligated to grant this special exception for their modified - versions; it is their choice whether to do so. The GNU Lesser - General Public License gives permission to release a modified - version without this exception; this exception also makes it - possible to release a modified version which carries forward this - exception. - - 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - - .import main, code - .import $global$, data - .import __libc_start_main, code - .import __libc_csu_fini, code - .import __libc_csu_init, code - - /* Have the linker create plabel words so we get PLABEL32 - relocs and not 21/14. The use of 21/14 relocs is only - supported in the latest dynamic linker. */ - .section .rodata - .align 4 -.Lpmain: - .word P%main -.Lp__libc_start_main: - .word P%__libc_start_main -.Lp__libc_csu_fini: - .word P%__libc_csu_fini -.Lp__libc_csu_init: - .word P%__libc_csu_init - - .text - .align 4 - .globl _start - .export _start, ENTRY - .type _start,@function -_start: - /* At entry to the function we have: - - r26 - Unused - r25 - argc - r24 - argv - r23 - False _dl_fini plabel address - - This function is called from the lower half of RTLD_START. - - The call to __libc_start_main expects: - - 1. r26 - Application main - 2. r25 - argc - 3. r24 - argv - 4. r23 - __libc_csu_init - 5. sp-52 - __libc_csu_fini - 6. sp-56 - rtld_fini - 7. sp-60 - stackend */ - - .proc - .callinfo - /* Clear previous-sp. */ - stw %r0, -4(%sp) - /* Setup the stack and frame. */ - stw %rp, -20(%sp) - ldo 64(%sp), %sp - stw %sp, -4(%sp) - stw %r19, -32(%sp) - - /* argc and argv should be in 25 and 24 (2nd and 3rd argument) */ - /* void (*rtld_fini) (void) (6th argument) */ - stw %r23, -56(%sp) - /* Need to setup 1, 4, 5, and 7th arguments */ - -#if SHARED - /* load main (1st argument) */ - addil LT'.Lpmain, %r19 - ldw RT'.Lpmain(%r1), %r26 - ldw 0(%r26),%r26 - /* void (*init) (void) (4th argument) */ - addil LT'.Lp__libc_csu_init, %r19 - ldw RT'.Lp__libc_csu_init(%r1), %r23 - ldw 0(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - addil LT'.Lp__libc_csu_fini, %r19 - ldw RT'.Lp__libc_csu_fini(%r1), %r22 - ldw 0(%r22), %r22 -#else - /* load main (1st argument) */ - ldil LR'.Lpmain, %r26 - ldw RR'.Lpmain(%r26), %r26 - /* void (*init) (void) (4th argument) */ - ldil LR'.Lp__libc_csu_init, %r23 - ldw RR'.Lp__libc_csu_init(%r23), %r23 - /* void (*fini) (void) (5th argument) */ - ldil LR'.Lp__libc_csu_fini, %r22 - ldw RR'.Lp__libc_csu_fini(%r22), %r22 -#endif - /* Store 5th argument */ - stw %r22, -52(%sp) - /* void *stack_end (7th argument) */ - stw %sp, -60(%sp) - - /* load global */ - ldil L%$global$, %dp - ldo R%$global$(%dp), %dp - - bl __libc_start_main,%r2 - nop - /* die horribly if it returned (it shouldn't) */ - iitlbp %r0,(%sr0,%r0) - nop - - .procend - -/* Define a symbol for the first piece of initialized data. */ - .data - .globl __data_start -__data_start: - .long 0 - .weak data_start - data_start = __data_start diff --git a/ports/sysdeps/hppa/sub_n.S b/ports/sysdeps/hppa/sub_n.S deleted file mode 100644 index 035c4cbbb3..0000000000 --- a/ports/sysdeps/hppa/sub_n.S +++ /dev/null @@ -1,58 +0,0 @@ -;! HP-PA __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and -;! store difference in a third limb vector. - -;! Copyright (C) 1992-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! res_ptr gr26 -;! s1_ptr gr25 -;! s2_ptr gr24 -;! size gr23 - -;! One might want to unroll this as for other processors, but it turns -;! out that the data cache contention after a store makes such -;! unrolling useless. We can't come under 5 cycles/limb anyway. - - .text - .export __mpn_sub_n -__mpn_sub_n: - .proc - .callinfo frame=0,no_calls - .entry - - ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - - addib,= -1,%r23,L$end ;! check for (SIZE == 1) - sub %r21,%r20,%r28 ;! subtract first limbs ignoring cy - -L$loop: ldws,ma 4(%r25),%r21 - ldws,ma 4(%r24),%r20 - stws,ma %r28,4(%r26) - addib,<> -1,%r23,L$loop - subb %r21,%r20,%r28 - -L$end: stws %r28,0(%r26) - addc %r0,%r0,%r28 - bv 0(%r2) - subi 1,%r28,%r28 - - .exit - .procend diff --git a/ports/sysdeps/hppa/sysdep.h b/ports/sysdeps/hppa/sysdep.h deleted file mode 100644 index 9d4b37b9c6..0000000000 --- a/ports/sysdeps/hppa/sysdep.h +++ /dev/null @@ -1,76 +0,0 @@ -/* Assembler macros for HP/PA. - Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdeps/generic/sysdep.h> -#include <sys/syscall.h> -#include "config.h" - -#undef ASM_LINE_SEP -#define ASM_LINE_SEP ! - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 - - -/* Define an entry point visible from C. - - There is currently a bug in gdb which prevents us from specifying - incomplete stabs information. Fake some entries here which specify - the current source file. */ -#define ENTRY(name) \ - .SPACE $TEXT$ ASM_LINE_SEP \ - .SUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .NSUBSPA $CODE$,QUAD=0,ALIGN=8,ACCESS=44,CODE_ONLY ASM_LINE_SEP \ - .EXPORT C_SYMBOL_NAME(name),ENTRY,PRIV_LEV=3,ARGW0=GR,RTNVAL=GR ASM_LINE_SEP\ - C_LABEL(name) \ - CALL_MCOUNT - -#undef END -#define END(name) \ - .PROCEND - -/* GCC does everything for us. */ -#ifdef PROF -#define CALL_MCOUNT -#else -#define CALL_MCOUNT /* Do nothing. */ -#endif - -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name) \ - DO_CALL (syscall_name, args) - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -#undef JUMPTARGET -#define JUMPTARGET(name) name -#define SYSCALL_PIC_SETUP /* Nothing. */ - -/* Local label name for asm code. */ -#ifndef L -#define L(name) name -#endif - -#endif /* __ASSEMBLER__ */ diff --git a/ports/sysdeps/hppa/tininess.h b/ports/sysdeps/hppa/tininess.h deleted file mode 100644 index 1db37790f8..0000000000 --- a/ports/sysdeps/hppa/tininess.h +++ /dev/null @@ -1 +0,0 @@ -#define TININESS_AFTER_ROUNDING 1 diff --git a/ports/sysdeps/hppa/tls-macros.h b/ports/sysdeps/hppa/tls-macros.h deleted file mode 100644 index f5a1cd8f3d..0000000000 --- a/ports/sysdeps/hppa/tls-macros.h +++ /dev/null @@ -1,115 +0,0 @@ -/* TLS Access Macros for HP PARISC Linux */ - -/* HPPA Local Exec TLS access. */ -#define TLS_LE(x) \ - ({ int * __result; \ - unsigned long __tmp; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LR'" #x "-$tls_leoff$, %1\n" \ - " ldo RR'" #x "-$tls_leoff$(%%r1), %0\n" \ - : "=r" (__result), "=r" (__tmp) \ - : \ - : "r1" ); \ - __result; \ - }) - -/* HPPA Initial Exec TLS access. */ -#ifdef PIC -# define TLS_IE(x) \ - ({ int * __result; \ - unsigned long __tmp, __tmp2; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LT'" #x "-$tls_ieoff$, %%r19\n" \ - " ldw RT'" #x "-$tls_ieoff$(%%r1), %2\n" \ - " add %1, %2, %0\n" \ - : "=r" (__result), "=r" (__tmp), "=r" (__tmp2) \ - : \ - : "r1" ); \ - __result; \ - }) -#else -# define TLS_IE(x) \ - ({ int * __result; \ - unsigned long __tmp, __tmp2; \ - asm ( \ - " mfctl %%cr27, %1\n" \ - " addil LR'" #x "-$tls_ieoff$, %%r27\n" \ - " ldw RR'" #x "-$tls_ieoff$(%%r1), %2\n" \ - " add %1, %2, %0\n" \ - : "=r" (__result), "=r" (__tmp), "=r" (__tmp2) \ - : \ - : "r1" ); \ - __result; \ - }) -#endif - -#ifdef PIC -/* HPPA Local Dynamic TLS access. */ -# define TLS_LD(x) \ - ({ int * __result; \ - asm ( \ - " copy %%r19, %%r4\n" \ - " addil LT'" #x "-$tls_ldidx$, %%r19\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RT'" #x "-$tls_ldidx$(%%r1), %%r26\n" \ - " addil LR'" #x "-$tls_dtpoff$, %%r28\n" \ - " ldo RR'" #x "-$tls_dtpoff$(%%r1), %0\n" \ - " copy %%r4, %%r19\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r4", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#else -# define TLS_LD(x) \ - ({ int * __result; \ - asm ( \ - " addil LR'" #x "-$tls_ldidx$, %%r27\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RR'" #x "-$tls_ldidx$(%%r1), %%r26\n" \ - " addil LR'" #x "-$tls_dtpoff$, %%r28\n" \ - " ldo RR'" #x "-$tls_dtpoff$(%%r1), %0\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#endif - -/* HPPA General Dynamic TLS access. */ -#ifdef PIC -# define TLS_GD(x) \ - ({ int * __result; \ - asm ( \ - " copy %%r19, %%r4\n" \ - " addil LT'" #x "-$tls_gdidx$, %%r19\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RT'" #x "-$tls_gdidx$(%%r1), %%r26\n" \ - " copy %%r28, %0\n" \ - " copy %%r4, %%r19\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r4", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#else -# define TLS_GD(x) \ - ({ int * __result; \ - asm ( \ - " addil LR'" #x "-$tls_gdidx$, %%r27\n" \ - " bl __tls_get_addr, %%r2\n" \ - " ldo RR'" #x "-$tls_gdidx$(%%r1), %%r26\n" \ - " copy %%r28, %0\n" \ - : "=r" (__result) \ - : \ - : "r1", "r2", "r20", "r21", "r22", "r23", "r24", \ - "r25", "r26", "r28", "r29", "r31" ); \ - __result; \ - }) -#endif - diff --git a/ports/sysdeps/hppa/tst-audit.h b/ports/sysdeps/hppa/tst-audit.h deleted file mode 100644 index e32699054a..0000000000 --- a/ports/sysdeps/hppa/tst-audit.h +++ /dev/null @@ -1,25 +0,0 @@ -/* Definitions for testing PLT entry/exit auditing. HP-PARISC version. - - Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#define pltenter la_hppa_gnu_pltenter -#define pltexit la_hppa_gnu_pltexit -#define La_regs La_hppa_regs -#define La_retval La_hppa_retval -#define int_retval lrv_r28 diff --git a/ports/sysdeps/hppa/udiv_qrnnd.S b/ports/sysdeps/hppa/udiv_qrnnd.S deleted file mode 100644 index cf06286b02..0000000000 --- a/ports/sysdeps/hppa/udiv_qrnnd.S +++ /dev/null @@ -1,285 +0,0 @@ -;! HP-PA __udiv_qrnnd division support, used from longlong.h. -;! This version runs fast on pre-PA7000 CPUs. - -;! Copyright (C) 1993-2014 Free Software Foundation, Inc. - -;! This file is part of the GNU MP Library. - -;! The GNU MP Library is free software; you can redistribute it and/or modify -;! it under the terms of the GNU Lesser General Public License as published by -;! the Free Software Foundation; either version 2.1 of the License, or (at your -;! option) any later version. - -;! The GNU MP 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 Lesser General Public -;! License for more details. - -;! You should have received a copy of the GNU Lesser General Public License -;! along with the GNU MP Library. If not, see -;! <http://www.gnu.org/licenses/>. - - -;! INPUT PARAMETERS -;! rem_ptr gr26 -;! n1 gr25 -;! n0 gr24 -;! d gr23 - -;! The code size is a bit excessive. We could merge the last two ds;addc -;! sequences by simply moving the "bb,< Odd" instruction down. The only -;! trouble is the FFFFFFFF code that would need some hacking. - - .text - .export __udiv_qrnnd -__udiv_qrnnd: - .proc - .callinfo frame=0,no_calls - .entry - - comb,< %r23,%r0,L$largedivisor - sub %r0,%r23,%r1 ;! clear cy as side-effect - ds %r0,%r1,%r0 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r24 - ds %r25,%r23,%r25 - addc %r24,%r24,%r28 - ds %r25,%r23,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r23,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r28,%r28,%r28 - -L$largedivisor: - extru %r24,31,1,%r20 ;! r20 = n0 & 1 - bb,< %r23,31,L$odd - extru %r23,30,31,%r22 ;! r22 = d >> 1 - shd %r25,%r24,1,%r24 ;! r24 = new n0 - extru %r25,30,31,%r25 ;! r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r20,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r24,%r24,%r28 - -L$odd: addib,sv,n 1,%r22,L$FF.. ;! r22 = (d / 2 + 1) - shd %r25,%r24,1,%r24 ;! r24 = new n0 - extru %r25,30,31,%r25 ;! r25 = new n1 - sub %r0,%r22,%r21 - ds %r0,%r21,%r0 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r24 - ds %r25,%r22,%r25 - addc %r24,%r24,%r28 - comclr,>= %r25,%r0,%r0 - addl %r25,%r22,%r25 - sh1addl %r25,%r20,%r25 -;! We have computed (n1,,n0) / (d + 1), q' = r28, r' = r25 - add,nuv %r28,%r25,%r25 - addl %r25,%r1,%r25 - addc %r0,%r28,%r28 - sub,<< %r25,%r23,%r0 - addl %r25,%r1,%r25 - stws %r25,0(%r26) - bv 0(%r2) - addc %r0,%r28,%r28 - -;! This is just a special case of the code above. -;! We come here when d == 0xFFFFFFFF -L$FF..: add,uv %r25,%r24,%r24 - sub,<< %r24,%r23,%r0 - ldo 1(%r24),%r24 - stws %r24,0(%r26) - bv 0(%r2) - addc %r0,%r25,%r28 - - .exit - .procend diff --git a/ports/sysdeps/unix/sysv/linux/hppa/Makefile b/ports/sysdeps/unix/sysv/linux/hppa/Makefile deleted file mode 100644 index 4c3a1148ca..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/Makefile +++ /dev/null @@ -1,5 +0,0 @@ -# Used by *context() functions -ifeq ($(subdir),stdlib) -gen-as-const-headers += ucontext_i.sym -endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/Versions b/ports/sysdeps/unix/sysv/linux/hppa/Versions deleted file mode 100644 index a392feebc5..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/Versions +++ /dev/null @@ -1,44 +0,0 @@ -libc { - # The comment lines with "#errlist-compat" are magic; see errlist-compat.awk. - # When you get an error from errlist-compat.awk, you need to add a new - # version here. Don't do this blindly, since this means changing the ABI - # for all GNU/Linux configurations. - - GLIBC_2.1 { - #errlist-compat 253 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.2 { - # New rlimit interface - getrlimit; setrlimit; getrlimit64; setrlimit64; - } - GLIBC_2.3 { - #errlist-compat 254 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.4 { - #errlist-compat 256 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.11 { - fallocate64; - } - GLIBC_2.12 { - #errlist-compat 257 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - } - GLIBC_2.17 { - #errlist-compat 260 - _sys_errlist; sys_errlist; _sys_nerr; sys_nerr; - prlimit64; - } - GLIBC_2.19 { - fanotify_mark; - } -} -librt { - GLIBC_2.3 { - # AIO functions. - aio_cancel; aio_cancel64; - } -} diff --git a/ports/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c b/ports/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c deleted file mode 100644 index 8789538ded..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/____longjmp_chk.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright (C) 2009-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GCC; see the file COPYING. If not, write to the Free - Software Foundation, 51 Franklin Street, Fifth Floor, Boston, MA - 02110-1301, USA. */ - -#include <stdio.h> -#include <signal.h> -#include <sysdep.h> -#define __longjmp ____longjmp_chk -#define CHECK_SP(sp) \ - do { \ - register unsigned long this_sp asm ("r30"); \ - /* The stack grows up, therefore frames that were created and then \ - destroyed must all have stack values higher than ours. */ \ - if ((unsigned long) (sp) > this_sp) \ - { \ - struct sigaltstack oss; \ - INTERNAL_SYSCALL_DECL (err); \ - int result = INTERNAL_SYSCALL (sigaltstack, err, 2, NULL, &oss);\ - /* If we aren't using an alternate stack then we have already \ - shown that we are jumping to a frame that doesn't exist so \ - error out. If we are using an alternate stack we must prove \ - that we are jumping *out* of the alternate stack. Note that \ - the check for that is the same as that for _STACK_GROWS_UP \ - as for _STACK_GROWS_DOWN. */ \ - if (!INTERNAL_SYSCALL_ERROR_P (result, err) \ - && ((oss.ss_flags & SS_ONSTACK) == 0 \ - || ((unsigned long) oss.ss_sp + oss.ss_size \ - - (unsigned long) (sp)) < oss.ss_size)) \ - __fortify_fail ("longjmp causes uninitialized stack frame"); \ - } \ - } while (0) - -#include <__longjmp.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h deleted file mode 100644 index 76ca0b15e5..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/atomic.h +++ /dev/null @@ -1,107 +0,0 @@ -/* Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@baldric.uwo.ca>, 2005. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <stdint.h> /* Required for type definitions e.g. uint8_t. */ -#include <abort-instr.h> /* Required for ABORT_INSTRUCTIUON. */ -#include <kernel-features.h> /* Required for __ASSUME_LWS_CAS. */ - -/* We need EFAULT, ENONSYS */ -#if !defined EFAULT && !defined ENOSYS -#define EFAULT 14 -#define ENOSYS 251 -#endif - -#ifndef _BITS_ATOMIC_H -#define _BITS_ATOMIC_H 1 - -typedef int8_t atomic8_t; -typedef uint8_t uatomic8_t; -typedef int_fast8_t atomic_fast8_t; -typedef uint_fast8_t uatomic_fast8_t; - -typedef int32_t atomic32_t; -typedef uint32_t uatomic32_t; -typedef int_fast32_t atomic_fast32_t; -typedef uint_fast32_t uatomic_fast32_t; - -typedef intptr_t atomicptr_t; -typedef uintptr_t uatomicptr_t; -typedef intmax_t atomic_max_t; -typedef uintmax_t uatomic_max_t; - -/* prev = *addr; - if (prev == old) - *addr = new; - return prev; */ - -/* Use the kernel atomic light weight syscalls on hppa. */ -#define _LWS "0xb0" -#define _LWS_CAS "0" -/* Note r31 is the link register. */ -#define _LWS_CLOBBER "r1", "r26", "r25", "r24", "r23", "r22", "r21", "r20", "r28", "r31", "memory" -/* String constant for -EAGAIN. */ -#define _ASM_EAGAIN "-11" -/* String constant for -EDEADLOCK. */ -#define _ASM_EDEADLOCK "-45" - -#if __ASSUME_LWS_CAS -/* The only basic operation needed is compare and exchange. */ -# define atomic_compare_and_exchange_val_acq(mem, newval, oldval) \ - ({ \ - volatile int lws_errno; \ - volatile int lws_ret; \ - asm volatile( \ - "0: \n\t" \ - "copy %2, %%r26 \n\t" \ - "copy %3, %%r25 \n\t" \ - "copy %4, %%r24 \n\t" \ - "ble " _LWS "(%%sr2, %%r0) \n\t" \ - "ldi " _LWS_CAS ", %%r20 \n\t" \ - "ldi " _ASM_EAGAIN ", %%r24 \n\t" \ - "cmpb,=,n %%r24, %%r21, 0b \n\t" \ - "nop \n\t" \ - "ldi " _ASM_EDEADLOCK ", %%r25 \n\t" \ - "cmpb,=,n %%r25, %%r21, 0b \n\t" \ - "nop \n\t" \ - "stw %%r28, %0 \n\t" \ - "stw %%r21, %1 \n\t" \ - : "=m" (lws_ret), "=m" (lws_errno) \ - : "r" (mem), "r" (oldval), "r" (newval) \ - : _LWS_CLOBBER \ - ); \ - \ - if(lws_errno == -EFAULT || lws_errno == -ENOSYS) \ - ABORT_INSTRUCTION; \ - \ - lws_ret; \ - }) - -# define atomic_compare_and_exchange_bool_acq(mem, newval, oldval) \ - ({ \ - int ret; \ - ret = atomic_compare_and_exchange_val_acq(mem, newval, oldval); \ - /* Return 1 if it was already acquired. */ \ - (ret != (int)oldval); \ - }) -#else -# error __ASSUME_LWS_CAS is required to build glibc. -#endif -/* __ASSUME_LWS_CAS */ - -#endif -/* _BITS_ATOMIC_H */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h deleted file mode 100644 index ac684d23f0..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/errno.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Error constants. Linux/HPPA specific version. - Copyright (C) 1996-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifdef _ERRNO_H - -# undef EDOM -# undef EILSEQ -# undef ERANGE -# include <linux/errno.h> - -/* Linux also has no ECANCELED error code. Since it is not used here - we define it to an invalid value. */ -# ifndef ECANCELED -# define ECANCELED ECANCELLED -# endif - -# ifndef EOWNERDEAD -# define EOWNERDEAD 254 -# endif - -# ifndef ENOTRECOVERABLE -# define ENOTRECOVERABLE 255 -# endif - -# ifndef ERFKILL -# define ERFKILL 256 -# endif - -# ifndef EHWPOISON -# define EHWPOISON 257 -# endif - -# ifndef __ASSEMBLER__ -/* Function to get address of global `errno' variable. */ -extern int *__errno_location (void) __THROW __attribute__ ((__const__)); - -# if !defined _LIBC || defined _LIBC_REENTRANT -/* When using threads, errno is a per-thread value. */ -# define errno (*__errno_location ()) -# endif -# endif /* !__ASSEMBLER__ */ -#endif /* _ERRNO_H */ - -#if !defined _ERRNO_H && defined __need_Emath -/* This is ugly but the kernel header is not clean enough. We must - define only the values EDOM, EILSEQ and ERANGE in case __need_Emath is - defined. */ -# define EDOM 33 /* Math argument out of domain of function. */ -# define EILSEQ 47 /* Illegal byte sequence. */ -# define ERANGE 34 /* Math result not representable. */ -#endif /* !_ERRNO_H && __need_Emath */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h deleted file mode 100644 index f596d5f100..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/fcntl.h +++ /dev/null @@ -1,85 +0,0 @@ -/* O_*, F_*, FD_* bit values for Linux. - Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _FCNTL_H -# error "Never use <bits/fcntl.h> directly; include <fcntl.h> instead." -#endif - -#define O_CREAT 00000400 /* not fcntl */ -#define O_EXCL 00002000 /* not fcntl */ -#define O_NOCTTY 00400000 /* not fcntl */ -#define O_APPEND 00000010 -#define O_NONBLOCK 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define __O_DSYNC 01000000 -#define __O_RSYNC 02000000 /* HPUX only */ -#define __O_SYNC 01000000 -#define O_SYNC (__O_SYNC|__O_DSYNC) - -#define O_BLKSEEK 00000100 /* HPUX only */ - -#define __O_DIRECTORY 000010000 /* Must be a directory. */ -#define __O_NOFOLLOW 000000200 /* Do not follow links. */ -#define __O_CLOEXEC 010000000 /* Set close_on_exec. */ -#define __O_NOATIME 004000000 /* Do not set atime. */ -#define __O_PATH 020000000 -#define __O_TMPFILE 040010000 /* Atomically create nameless file. */ - -#define __O_LARGEFILE 00004000 - -#define F_GETLK64 8 /* Get record locking info. */ -#define F_SETLK64 9 /* Set record locking info (non-blocking). */ -#define F_SETLKW64 10 /* Set record locking info (blocking). */ - -#define __F_GETOWN 11 /* Get owner of socket (receiver of SIGIO). */ -#define __F_SETOWN 12 /* Set owner of socket (receiver of SIGIO). */ - -#define __F_SETSIG 13 /* Set number of signal to be sent. */ -#define __F_GETSIG 14 /* Get number of signal to be sent. */ - -/* For posix fcntl() and `l_type' field of a `struct flock' for lockf(). */ -#define F_RDLCK 1 /* Read lock. */ -#define F_WRLCK 2 /* Write lock. */ -#define F_UNLCK 3 /* Remove lock. */ - -struct flock - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ -#ifndef __USE_FILE_OFFSET64 - __off_t l_start; /* Offset where the lock begins. */ - __off_t l_len; /* Size of the locked area; zero means until EOF. */ -#else - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ -#endif - __pid_t l_pid; /* Process holding the lock. */ - }; - -#ifdef __USE_LARGEFILE64 -struct flock64 - { - short int l_type; /* Type of lock: F_RDLCK, F_WRLCK, or F_UNLCK. */ - short int l_whence; /* Where `l_start' is relative to (like `lseek'). */ - __off64_t l_start; /* Offset where the lock begins. */ - __off64_t l_len; /* Size of the locked area; zero means until EOF. */ - __pid_t l_pid; /* Process holding the lock. */ - }; -#endif - -/* Include generic Linux declarations. */ -#include <bits/fcntl-linux.h> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h deleted file mode 100644 index 8122c103ec..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/ioctls.h +++ /dev/null @@ -1,36 +0,0 @@ -/* Copyright (C) 1996-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_IOCTL_H -# error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead." -#endif - -/* Use the definitions from the kernel header files. */ -#include <asm/ioctls.h> - -/* Oh well, this is necessary since the kernel data structure is - different from the user-level version. */ -#undef TCGETS -#undef TCSETS -#undef TCSETSW -#undef TCSETSF -#define TCGETS _IOR ('T', 16, char[36]) -#define TCSETS _IOW ('T', 17, char[36]) -#define TCSETSW _IOW ('T', 18, char[36]) -#define TCSETSF _IOW ('T', 19, char[36]) - -#include <linux/sockios.h> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/ipc.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/ipc.h deleted file mode 100644 index 89d3dd62f8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/ipc.h +++ /dev/null @@ -1,62 +0,0 @@ -/* Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_IPC_H -# error "Never use <bits/ipc.h> directly; include <sys/ipc.h> instead." -#endif - -#include <bits/types.h> -#include <bits/wordsize.h> - -/* Mode bits for `msgget', `semget', and `shmget'. */ -#define IPC_CREAT 01000 /* Create key if key does not exist. */ -#define IPC_EXCL 02000 /* Fail if key exists. */ -#define IPC_NOWAIT 04000 /* Return error on wait. */ - -/* Control commands for `msgctl', `semctl', and `shmctl'. */ -#define IPC_RMID 0 /* Remove identifier. */ -#define IPC_SET 1 /* Set `ipc_perm' options. */ -#define IPC_STAT 2 /* Get `ipc_perm' options. */ -#ifdef __USE_GNU -# define IPC_INFO 3 /* See ipcs. */ -#endif - -/* Special key values. */ -#define IPC_PRIVATE ((__key_t) 0) /* Private key. */ - - -/* Data structure used to pass permission information to IPC operations. */ -struct ipc_perm - { - __key_t __key; /* Key. */ - __uid_t uid; /* Owner's user ID. */ - __gid_t gid; /* Owner's group ID. */ - __uid_t cuid; /* Creator's user ID. */ - __gid_t cgid; /* Creator's group ID. */ -#if __WORDSIZE == 32 - unsigned short int __pad1; - unsigned short int mode; /* Read/write permission. */ - unsigned short int __pad2; -#else - __mode_t mode; /* Read/write permission. */ - unsigned short int __pad2; -#endif - unsigned short int __seq; /* Sequence number. */ - unsigned int __pad3; - __extension__ unsigned long long int __glibc_reserved1; - __extension__ unsigned long long int __glibc_reserved2; - }; diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/mman.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/mman.h deleted file mode 100644 index ae6683d073..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/mman.h +++ /dev/null @@ -1,112 +0,0 @@ -/* Definitions for POSIX memory map interface. Linux/HPPA version. - Copyright (C) 1997-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_MMAN_H -# error "Never use <bits/mman.h> directly; include <sys/mman.h> instead." -#endif - -/* These are taken from the kernel definitions. */ - -#define PROT_READ 0x1 /* Page can be read */ -#define PROT_WRITE 0x2 /* Page can be written */ -#define PROT_EXEC 0x4 /* Page can be executed */ -#define PROT_NONE 0x0 /* Page can not be accessed */ -#define PROT_GROWSDOWN 0x01000000 /* Extend change to start of - growsdown vma (mprotect only). */ -#define PROT_GROWSUP 0x02000000 /* Extend change to start of - growsup vma (mprotect only). */ - -#define MAP_SHARED 0x01 /* Share changes */ -#define MAP_PRIVATE 0x02 /* Changes are private */ -#ifdef __USE_MISC -# define MAP_TYPE 0x03 /* Mask for type of mapping */ -#endif - -/* Other flags. */ -#define MAP_FIXED 0x04 /* Interpret addr exactly */ -#ifdef __USE_MISC -# define MAP_FILE 0x0 -# define MAP_ANONYMOUS 0x10 /* Don't use a file */ -# define MAP_ANON MAP_ANONYMOUS -# define MAP_VARIABLE 0 -/* When MAP_HUGETLB is set bits [26:31] encode the log2 of the huge page size. */ -# define MAP_HUGE_SHIFT 26 -# define MAP_HUGE_MASK 0x3f -#endif - -/* These are Linux-specific. */ -#ifdef __USE_MISC -# define MAP_DENYWRITE 0x0800 /* ETXTBSY */ -# define MAP_EXECUTABLE 0x1000 /* Mark it as an executable */ -# define MAP_LOCKED 0x2000 /* Pages are locked */ -# define MAP_NORESERVE 0x4000 /* Don't check for reservations */ -# define MAP_GROWSDOWN 0x8000 /* Stack-like segment */ -# define MAP_POPULATE 0x10000 /* Populate (prefault) pagetables */ -# define MAP_NONBLOCK 0x20000 /* Do not block on IO */ -#endif - -/* Flags to "msync" */ -#define MS_SYNC 1 /* Synchronous memory sync */ -#define MS_ASYNC 2 /* Sync memory asynchronously */ -#define MS_INVALIDATE 4 /* Invalidate the caches */ - -/* Flags to "mlockall" */ -#define MCL_CURRENT 1 /* Lock all current mappings */ -#define MCL_FUTURE 2 /* Lock all future mappings */ - -/* Flags for `mremap'. */ -#ifdef __USE_GNU -# define MREMAP_MAYMOVE 1 -# define MREMAP_FIXED 2 -#endif - -/* Advice to "madvise" */ -#ifdef __USE_MISC -# define MADV_NORMAL 0 /* No further special treatment */ -# define MADV_RANDOM 1 /* Expect random page references */ -# define MADV_SEQUENTIAL 2 /* Expect sequential page references */ -# define MADV_WILLNEED 3 /* Will need these pages */ -# define MADV_DONTNEED 4 /* Dont need these pages */ -# define MADV_SPACEAVAIL 5 /* Insure that resources are reserved */ -# define MADV_VPS_PURGE 6 /* Purge pages from VM page cache */ -# define MADV_VPS_INHERIT 7 /* Inherit parents page size */ -# define MADV_REMOVE 9 /* Remove these pages and resources. */ -# define MADV_DONTFORK 10 /* Do not inherit across fork. */ -# define MADV_DOFORK 11 /* Do inherit across fork. */ -# define MADV_MERGEABLE 65 /* KSM may merge identical pages */ -# define MADV_UNMERGEABLE 66 /* KSM may not merge identical pages */ -#endif - -/* The range 12-64 is reserved for page size specification. */ -#define MADV_4K_PAGES 12 /* Use 4K pages */ -#define MADV_16K_PAGES 14 /* Use 16K pages */ -#define MADV_64K_PAGES 16 /* Use 64K pages */ -#define MADV_256K_PAGES 18 /* Use 256K pages */ -#define MADV_1M_PAGES 20 /* Use 1 Megabyte pages */ -#define MADV_4M_PAGES 22 /* Use 4 Megabyte pages */ -#define MADV_16M_PAGES 24 /* Use 16 Megabyte pages */ -#define MADV_64M_PAGES 26 /* Use 64 Megabyte pages */ - -/* The POSIX people had to invent similar names for the same things. */ -#ifdef __USE_XOPEN2K -# define POSIX_MADV_NORMAL 0 /* No further special treatment. */ -# define POSIX_MADV_RANDOM 1 /* Expect random page references. */ -# define POSIX_MADV_SEQUENTIAL 2 /* Expect sequential page references. */ -# define POSIX_MADV_WILLNEED 3 /* Will need these pages. */ -# define POSIX_MADV_DONTNEED 4 /* Don't need these pages. */ -#endif diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/msq.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/msq.h deleted file mode 100644 index 60db3413e4..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/msq.h +++ /dev/null @@ -1,84 +0,0 @@ -/* Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_MSG_H -# error "Never use <bits/msq.h> directly; include <sys/msg.h> instead." -#endif - -#include <bits/types.h> -#include <bits/wordsize.h> - -/* Define options for message queue functions. */ -#define MSG_NOERROR 010000 /* no error if message is too big */ -#ifdef __USE_GNU -# define MSG_EXCEPT 020000 /* recv any msg except of specified type */ -# define MSG_COPY 040000 /* copy (not remove) all queue messages */ -#endif - -/* Types used in the structure definition. */ -typedef unsigned long int msgqnum_t; -typedef unsigned long int msglen_t; - - -/* Structure of record for one message inside the kernel. - The type `struct msg' is opaque. */ -struct msqid_ds -{ - struct ipc_perm msg_perm; /* structure describing operation permission */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t msg_stime; /* time of last msgsnd command */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t msg_rtime; /* time of last msgrcv command */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t msg_ctime; /* time of last change */ - unsigned long int __msg_cbytes; /* current number of bytes on queue */ - msgqnum_t msg_qnum; /* number of messages currently on queue */ - msglen_t msg_qbytes; /* max number of bytes allowed on queue */ - __pid_t msg_lspid; /* pid of last msgsnd() */ - __pid_t msg_lrpid; /* pid of last msgrcv() */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -#ifdef __USE_MISC - -# define msg_cbytes __msg_cbytes - -/* ipcs ctl commands */ -# define MSG_STAT 11 -# define MSG_INFO 12 - -/* buffer for msgctl calls IPC_INFO, MSG_INFO */ -struct msginfo - { - int msgpool; - int msgmap; - int msgmax; - int msgmnb; - int msgmni; - int msgssz; - int msgtql; - unsigned short int msgseg; - }; - -#endif /* __USE_MISC */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/sem.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/sem.h deleted file mode 100644 index 75c2605398..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/sem.h +++ /dev/null @@ -1,91 +0,0 @@ -/* Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_SEM_H -# error "Never include <bits/sem.h> directly; use <sys/sem.h> instead." -#endif - -#include <sys/types.h> -#include <bits/wordsize.h> - -/* Flags for `semop'. */ -#define SEM_UNDO 0x1000 /* undo the operation on exit */ - -/* Commands for `semctl'. */ -#define GETPID 11 /* get sempid */ -#define GETVAL 12 /* get semval */ -#define GETALL 13 /* get all semval's */ -#define GETNCNT 14 /* get semncnt */ -#define GETZCNT 15 /* get semzcnt */ -#define SETVAL 16 /* set semval */ -#define SETALL 17 /* set all semval's */ - - -/* Data structure describing a set of semaphores. */ -struct semid_ds -{ - struct ipc_perm sem_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t sem_otime; /* last semop() time */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t sem_ctime; /* last time changed by semctl() */ - unsigned long int sem_nsems; /* number of semaphores in set */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; -}; - -/* The user should define a union like the following to use it for arguments - for `semctl'. - - union semun - { - int val; <= value for SETVAL - struct semid_ds *buf; <= buffer for IPC_STAT & IPC_SET - unsigned short int *array; <= array for GETALL & SETALL - struct seminfo *__buf; <= buffer for IPC_INFO - }; - - Previous versions of this file used to define this union but this is - incorrect. One can test the macro _SEM_SEMUN_UNDEFINED to see whether - one must define the union or not. */ -#define _SEM_SEMUN_UNDEFINED 1 - -#ifdef __USE_MISC - -/* ipcs ctl cmds */ -# define SEM_STAT 18 -# define SEM_INFO 19 - -struct seminfo -{ - int semmap; - int semmni; - int semmns; - int semmnu; - int semmsl; - int semopm; - int semume; - int semusz; - int semvmx; - int semaem; -}; - -#endif /* __USE_MISC */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/shm.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/shm.h deleted file mode 100644 index ec5de39fd3..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/shm.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_SHM_H -# error "Never include <bits/shm.h> directly; use <sys/shm.h> instead." -#endif - -#include <bits/types.h> -#include <bits/wordsize.h> - -/* Permission flag for shmget. */ -#define SHM_R 0400 /* or S_IRUGO from <linux/stat.h> */ -#define SHM_W 0200 /* or S_IWUGO from <linux/stat.h> */ - -/* Flags for `shmat'. */ -#define SHM_RDONLY 010000 /* attach read-only else read-write */ -#define SHM_RND 020000 /* round attach address to SHMLBA */ -#define SHM_REMAP 040000 /* take-over region on attach */ - -/* Commands for `shmctl'. */ -#define SHM_LOCK 11 /* lock segment (root only) */ -#define SHM_UNLOCK 12 /* unlock segment (root only) */ - -/* Segment low boundary address multiple. */ -#define SHMLBA 0x00400000 /* address needs to be 4 Mb aligned */ - -/* Type to count number of attaches. */ -typedef unsigned long int shmatt_t; - -/* Data structure describing a shared memory segment. */ -struct shmid_ds - { - struct ipc_perm shm_perm; /* operation permission struct */ -#if __WORDSIZE == 32 - unsigned int __pad1; -#endif - __time_t shm_atime; /* time of last shmat() */ -#if __WORDSIZE == 32 - unsigned int __pad2; -#endif - __time_t shm_dtime; /* time of last shmdt() */ -#if __WORDSIZE == 32 - unsigned int __pad3; -#endif - __time_t shm_ctime; /* time of last change by shmctl() */ -#if __WORDSIZE == 32 - unsigned int __pad4; -#endif - size_t shm_segsz; /* size of segment in bytes */ - __pid_t shm_cpid; /* pid of creator */ - __pid_t shm_lpid; /* pid of last shmop */ - shmatt_t shm_nattch; /* number of current attaches */ - unsigned long int __glibc_reserved1; - unsigned long int __glibc_reserved2; - }; - -#ifdef __USE_MISC - -/* ipcs ctl commands */ -# define SHM_STAT 13 -# define SHM_INFO 14 - -/* shm_mode upper byte flags */ -# define SHM_DEST 01000 /* segment will be destroyed on last detach */ -# define SHM_LOCKED 02000 /* segment will not be swapped */ -# define SHM_HUGETLB 04000 /* segment is mapped via hugetlb */ -# define SHM_NORESERVE 010000 /* don't check for reservations */ - -struct shminfo - { - unsigned long shmmax; - unsigned long shmmin; - unsigned long shmmni; - unsigned long shmseg; - unsigned long shmall; - unsigned long __glibc_reserved1; - unsigned long __glibc_reserved2; - unsigned long __glibc_reserved3; - unsigned long __glibc_reserved4; - }; - -struct shm_info - { - int used_ids; - unsigned long int shm_tot; /* total allocated shm */ - unsigned long int shm_rss; /* total resident shm */ - unsigned long int shm_swp; /* total swapped shm */ - unsigned long int swap_attempts; - unsigned long int swap_successes; - }; - -#endif /* __USE_MISC */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h deleted file mode 100644 index 3b1638dc8e..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/sigaction.h +++ /dev/null @@ -1,74 +0,0 @@ -/* Definitions for Linux/HPPA sigaction. - Copyright (C) 1996-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SIGNAL_H -# error "Never include <bits/sigaction.h> directly; use <signal.h> instead." -#endif - -/* Structure describing the action to be taken when a signal arrives. */ -struct sigaction - { - /* Signal handler. */ -#ifdef __USE_POSIX199309 - union - { - /* Used if SA_SIGINFO is not set. */ - __sighandler_t sa_handler; - /* Used if SA_SIGINFO is set. */ - void (*sa_sigaction) (int, siginfo_t *, void *); - } - __sigaction_handler; -# define sa_handler __sigaction_handler.sa_handler -# define sa_sigaction __sigaction_handler.sa_sigaction -#else - __sighandler_t sa_handler; -#endif - - /* Special flags. */ - unsigned long int sa_flags; - - /* Additional set of signals to be blocked. */ - __sigset_t sa_mask; - }; - -/* Bits in `sa_flags'. */ - -#define SA_NOCLDSTOP 0x00000008 /* Don't send SIGCHLD when children stop. */ -#define SA_NOCLDWAIT 0x00000080 /* Don't create zombie on child death. */ -#define SA_SIGINFO 0x00000010 /* Invoke signal-catching function with - three arguments instead of one. */ -#if defined __USE_UNIX98 || defined __USE_MISC -# define SA_ONSTACK 0x00000001 /* Use signal stack by using `sa_restorer'. */ -# define SA_RESETHAND 0x00000004 /* Reset to SIG_DFL on entry to handler. */ -# define SA_NODEFER 0x00000020 /* Don't automatically block the signal - when its handler is being executed. */ -# define SA_RESTART 0x00000040 /* Restart syscall on signal return. */ -#endif -#ifdef __USE_MISC -# define SA_INTERRUPT 0x20000000 /* Historic no-op. */ - -/* Some aliases for the SA_ constants. */ -# define SA_NOMASK SA_NODEFER -# define SA_ONESHOT SA_RESETHAND -# define SA_STACK SA_ONSTACK -#endif - -/* Values for the HOW argument to `sigprocmask'. */ -#define SIG_BLOCK 0 /* for blocking signals */ -#define SIG_UNBLOCK 1 /* for unblocking signals */ -#define SIG_SETMASK 2 /* for setting the signal mask */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/signum.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/signum.h deleted file mode 100644 index 7f935c52a0..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/signum.h +++ /dev/null @@ -1,81 +0,0 @@ -/* Signal number definitions. Linux/HPPA version. - Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifdef _SIGNAL_H - -/* Fake signal functions. */ -#define SIG_ERR ((__sighandler_t) -1) /* Error return. */ -#define SIG_DFL ((__sighandler_t) 0) /* Default action. */ -#define SIG_IGN ((__sighandler_t) 1) /* Ignore signal. */ - -#ifdef __USE_UNIX98 -# define SIG_HOLD ((__sighandler_t) 2) /* Add signal to hold mask. */ -#endif - - -/* Signals. */ -#define SIGHUP 1 /* Hangup (POSIX). */ -#define SIGINT 2 /* Interrupt (ANSI). */ -#define SIGQUIT 3 /* Quit (POSIX). */ -#define SIGILL 4 /* Illegal instruction (ANSI). */ -#define SIGTRAP 5 /* Trace trap (POSIX). */ -#define SIGABRT 6 /* Abort (ANSI). */ -#define SIGIOT 6 /* IOT trap (4.2 BSD). */ -#define SIGEMT 7 -#define SIGFPE 8 /* Floating-point exception (ANSI). */ -#define SIGKILL 9 /* Kill, unblockable (POSIX). */ -#define SIGBUS 10 /* BUS error (4.2 BSD). */ -#define SIGSEGV 11 /* Segmentation violation (ANSI). */ -#define SIGSYS 12 /* Bad system call. */ -#define SIGPIPE 13 /* Broken pipe (POSIX). */ -#define SIGALRM 14 /* Alarm clock (POSIX). */ -#define SIGTERM 15 /* Termination (ANSI). */ -#define SIGUSR1 16 /* User-defined signal 1 (POSIX). */ -#define SIGUSR2 17 /* User-defined signal 2 (POSIX). */ -#define SIGCLD SIGCHLD /* Same as SIGCHLD (System V). */ -#define SIGCHLD 18 /* Child status has changed (POSIX). */ -#define SIGPWR 19 /* Power failure restart (System V). */ -#define SIGVTALRM 20 /* Virtual alarm clock (4.2 BSD). */ -#define SIGPROF 21 /* Profiling alarm clock (4.2 BSD). */ -#define SIGPOLL SIGIO /* Pollable event occurred (System V). */ -#define SIGIO 22 /* I/O now possible (4.2 BSD). */ -#define SIGWINCH 23 /* Window size change (4.3 BSD, Sun). */ -#define SIGSTOP 24 /* Stop, unblockable (POSIX). */ -#define SIGTSTP 25 /* Keyboard stop (POSIX). */ -#define SIGCONT 26 /* Continue (POSIX). */ -#define SIGTTIN 27 /* Background read from tty (POSIX). */ -#define SIGTTOU 28 /* Background write to tty (POSIX). */ -#define SIGURG 29 /* Urgent condition on socket (4.2 BSD). */ -#define SIGLOST 30 /* Operating System Has Lost (HP/UX). */ -#define SIGUNUSED 31 -#define SIGXCPU 33 /* CPU limit exceeded (4.2 BSD). */ -#define SIGXFSZ 34 /* File size limit exceeded (4.2 BSD). */ -#define SIGSTKFLT 36 /* Stack fault. */ - -#define _NSIG 65 /* Biggest signal number + 1 - (including real-time signals). */ - -#define SIGRTMIN (__libc_current_sigrtmin ()) -#define SIGRTMAX (__libc_current_sigrtmax ()) - -/* These are the hard limits of the kernel. These values should not be - used directly at user level. */ -#define __SIGRTMIN 37 -#define __SIGRTMAX (_NSIG - 1) - -#endif /* <signal.h> included. */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h b/ports/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h deleted file mode 100644 index 0a404c6537..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/bits/socket_type.h +++ /dev/null @@ -1,55 +0,0 @@ -/* Define enum __socket_type for Linux/HP-PARISC. - Copyright (C) 2012-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_SOCKET_H -# error "Never include <bits/socket_type.h> directly; use <sys/socket.h> instead." -#endif - -/* Types of sockets. */ -enum __socket_type -{ - SOCK_STREAM = 1, /* Sequenced, reliable, connection-based - byte streams. */ -#define SOCK_STREAM SOCK_STREAM - SOCK_DGRAM = 2, /* Connectionless, unreliable datagrams - of fixed maximum length. */ -#define SOCK_DGRAM SOCK_DGRAM - SOCK_RAW = 3, /* Raw protocol interface. */ -#define SOCK_RAW SOCK_RAW - SOCK_RDM = 4, /* Reliably-delivered messages. */ -#define SOCK_RDM SOCK_RDM - SOCK_SEQPACKET = 5, /* Sequenced, reliable, connection-based, - datagrams of fixed maximum length. */ -#define SOCK_SEQPACKET SOCK_SEQPACKET - SOCK_DCCP = 6, /* Datagram Congestion Control Protocol. */ -#define SOCK_DCCP SOCK_DCCP - SOCK_PACKET = 10, /* Linux specific way of getting packets - at the dev level. For writing rarp and - other similar things on the user level. */ -#define SOCK_PACKET SOCK_PACKET - - /* Flags to be ORed into the type parameter of socket and socketpair and - used for the flags parameter of paccept. */ - - SOCK_CLOEXEC = 010000000, /* Atomically set close-on-exec flag for the - new descriptor(s). */ -#define SOCK_CLOEXEC SOCK_CLOEXEC - SOCK_NONBLOCK = 0x40000000 /* Atomically mark descriptor(s) as - non-blocking. */ -#define SOCK_NONBLOCK SOCK_NONBLOCK -}; diff --git a/ports/sysdeps/unix/sysv/linux/hppa/brk.c b/ports/sysdeps/unix/sysv/linux/hppa/brk.c deleted file mode 100644 index 2e0a8cfade..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/brk.c +++ /dev/null @@ -1,41 +0,0 @@ -/* brk system call for Linux/HPPA. - Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <unistd.h> -#include <sysdep.h> - -/* This must be initialized data because commons can't have aliases. */ -void *__curbrk = 0; - -int -__brk (void *addr) -{ - void *newbrk; - - __curbrk = newbrk = (void *) INLINE_SYSCALL (brk, 1, addr); - - if (newbrk < addr) - { - __set_errno (ENOMEM); - return -1; - } - - return 0; -} -weak_alias (__brk, brk) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/clone.S b/ports/sysdeps/unix/sysv/linux/hppa/clone.S deleted file mode 100644 index 1a3c6c800d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/clone.S +++ /dev/null @@ -1,179 +0,0 @@ -/* Copyright (C) 1996-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by David Huggins-Daines <dhd@debian.org>, 2000. - Based on the Alpha version by Richard Henderson <rth@tamu.edu>, 1996. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* clone() is even more special than fork() as it mucks with stacks - and invokes a function in the right context after its all over. */ - -#include <asm/unistd.h> -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> - -/* Non-thread code calls __clone with the following parameters: - int clone(int (*fn)(void *arg), - void *child_stack, - int flags, - void *arg) - - NPTL Code will call __clone with the following parameters: - int clone(int (*fn)(void *arg), - void *child_stack, - int flags, - void *arg, - int *parent_tidptr, - struct user_desc *newtls, - int *child_pidptr) - - The code should not mangle the extra input registers. - Syscall expects: Input to __clone: - 4(r25) - function pointer (r26, arg0) - 0(r25) - argument (r23, arg3) - r26 - clone flags. (r24, arg2) - r25+64 - user stack pointer. (r25, arg1) - r24 - parent tid pointer. (stack - 52) - r23 - struct user_desc newtls pointer. (stack - 56) - r22 - child tid pointer. (stack - 60) - r20 - clone syscall number (constant) - - Return: - - On success the thread ID of the child process is returend in - the callers context. - On error return -1, and set errno to the value returned by - the syscall. - */ - - .text -ENTRY(__clone) - /* Prologue */ - stwm %r4, 64(%sp) - stw %sp, -4(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Sanity check arguments. */ - comib,=,n 0, %arg0, .LerrorSanity /* no NULL function pointers */ - comib,=,n 0, %arg1, .LerrorSanity /* no NULL stack pointers */ - - /* Save the function pointer, arg, and flags on the new stack. */ - stwm %r26, 64(%r25) - stw %r23, -60(%r25) - stw %r24, -56(%r25) - /* Clone arguments are (int flags, void * child_stack) */ - copy %r24, %r26 /* flags are first */ - /* User stack pointer is in the correct register already */ - - /* Load args from stack... */ - ldw -116(%sp), %r24 /* Load parent_tidptr */ - ldw -120(%sp), %r23 /* Load newtls */ - ldw -124(%sp), %r22 /* Load child_tidptr */ - - /* Save the PIC register. */ -#ifdef PIC - copy %r19, %r4 /* parent */ -#endif - - /* Do the system call */ - ble 0x100(%sr2, %r0) - ldi __NR_clone, %r20 - - ldi -4096, %r1 - comclr,>>= %r1, %ret0, %r0 /* Note: unsigned compare. */ - b,n .LerrorRest - - /* Restore the PIC register. */ -#ifdef PIC - copy %r4, %r19 /* parent */ -#endif - - comib,=,n 0, %ret0, .LthreadStart - - /* Successful return from the parent - No need to restore the PIC register, - since we return immediately. */ - - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LerrorRest: - /* Something bad happened -- no child created */ - bl __syscall_error, %rp - sub %r0, %ret0, %arg0 - ldw -84(%sp), %rp - /* Return after setting errno, ret0 is set to -1 by __syscall_error. */ - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LerrorSanity: - /* Sanity checks failed, return -1, and set errno to EINVAL. */ - bl __syscall_error, %rp - ldi EINVAL, %arg0 - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r4 - -.LthreadStart: -#ifdef RESET_PID -# define CLONE_VM_BIT 23 /* 0x00000100 */ -# define CLONE_THREAD_BIT 15 /* 0x00010000 */ - /* Load original clone flags. - If CLONE_THREAD was passed, don't reset the PID/TID. - If CLONE_VM was passed, we need to store -1 to PID/TID. - If CLONE_VM and CLONE_THREAD were not set store the result - of getpid to PID/TID. */ - ldw -56(%sp), %r26 - bb,<,n %r26, CLONE_THREAD_BIT, 1f - bb,< %r26, CLONE_VM_BIT, 2f - ldi -1, %ret0 - ble 0x100(%sr2, %r0) - ldi __NR_getpid, %r20 -2: - mfctl %cr27, %r26 - stw %ret0, PID_THREAD_OFFSET(%r26) - stw %ret0, TID_THREAD_OFFSET(%r26) -1: -#endif - /* Load up the arguments. */ - ldw -60(%sp), %arg0 - ldw -64(%sp), %r22 - - /* $$dyncall fixes child's PIC register */ - - /* Call the user's function */ -#ifdef PIC - copy %r19, %r4 -#endif - bl $$dyncall, %r31 - copy %r31, %rp -#ifdef PIC - copy %r4, %r19 -#endif - /* The call to _exit needs saved r19. */ - bl _exit, %rp - copy %ret0, %arg0 - - /* We should not return from _exit. - We do not restore r4, or the stack state. */ - iitlbp %r0, (%sr0, %r0) - -PSEUDO_END(__clone) - -weak_alias (__clone, clone) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/fcntl.c b/ports/sysdeps/unix/sysv/linux/hppa/fcntl.c deleted file mode 100644 index ea951bc4f9..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/fcntl.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fcntl.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/fxstat.c b/ports/sysdeps/unix/sysv/linux/hppa/fxstat.c deleted file mode 100644 index 4f219f0b9d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/fxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fxstat.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/fxstatat.c b/ports/sysdeps/unix/sysv/linux/hppa/fxstatat.c deleted file mode 100644 index 0f8b3135d8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/fxstatat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/fxstatat.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/getcontext.S b/ports/sysdeps/unix/sysv/linux/hppa/getcontext.S deleted file mode 100644 index 1d17d30f4f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/getcontext.S +++ /dev/null @@ -1,165 +0,0 @@ -/* Get current user context. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller <deller@gmx.de>, 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#include "ucontext_i.h" - - - /* Trampoline function. Non-standard calling ABI. */ - /* Can not use ENTRY(__getcontext_ret) here. */ - .type __getcontext_ret, @function - .hidden __getcontext_ret -__getcontext_ret: - .proc - .callinfo FRAME=0,NO_CALLS - /* r26-r23 contain original r3-r6, but because setcontext - does not reload r3-r6 (it's using them as temporaries) - we must save them elsewhere and swap them back in. */ - copy %r23, %r3 - copy %r24, %r4 - copy %r25, %r5 - copy %r26, %r6 - /* r20 contains original return pointer. */ - bv 0(%r20) - copy %r0, %ret0 - .procend - .size __getcontext_ret, .-__getcontext_ret - - -ENTRY(__getcontext) - /* Save the registers. */ - stw %r0, oR0(%r26) - stw %r1, oR1(%r26) - /* stw %r2, oR2(%r26) - used for trampoline. */ - stw %r3, oR3(%r26) - stw %r4, oR4(%r26) - stw %r5, oR5(%r26) - stw %r6, oR6(%r26) - stw %r7, oR7(%r26) - stw %r8, oR8(%r26) - stw %r9, oR9(%r26) - stw %r10, oR10(%r26) - stw %r11, oR11(%r26) - stw %r12, oR12(%r26) - stw %r13, oR13(%r26) - stw %r14, oR14(%r26) - stw %r15, oR15(%r26) - stw %r16, oR16(%r26) - stw %r17, oR17(%r26) - stw %r18, oR18(%r26) - stw %r19, oR19(%r26) - /* stw %r20, oR20(%r26) - used for trampoline. */ - stw %r21, oR21(%r26) - stw %r22, oR22(%r26) - /* stw %r23, oR23(%r26) - used for trampoline. */ - /* stw %r24, oR24(%r26) - used for trampoline. */ - /* stw %r25, oR25(%r26) - used for trampoline. */ - /* stw %r26, oR26(%r26) - used for trampoline. */ - stw %r27, oR27(%r26) - stw %r28, oR28(%r26) - stw %r29, oR29(%r26) - stw %sp, oR30(%r26) - stw %r31, oR31(%r26) - - stw %r0, oUC_FLAGS(%r26) - /* stw %r0, oUC_LINK(%r26) - Do not overwrite. */ - stw %sp, oSS_SP(%r26) - stw %r0, oSS_FLAGS(%r26) - stw %r0, oSS_SIZE(%r26) - - stw %r0, oSC_FLAGS(%r26) - - stw %r0, oIASQ0(%r26) - stw %r0, oIASQ1(%r26) - stw %r0, oIAOQ0(%r26) - stw %r0, oIAOQ1(%r26) - stw %r0, oSAR(%r26) /* used as flag in swapcontext(). */ - - - /* Store floating-point regs. */ - ldo oFPREGS0(%r26),%r1 - fstds,ma %fr0, 8(%r1) - fstds,ma %fr1, 8(%r1) - fstds,ma %fr2, 8(%r1) - fstds,ma %fr3, 8(%r1) - fstds,ma %fr4, 8(%r1) - fstds,ma %fr5, 8(%r1) - fstds,ma %fr6, 8(%r1) - fstds,ma %fr7, 8(%r1) - fstds,ma %fr8, 8(%r1) - fstds,ma %fr9, 8(%r1) - fstds,ma %fr10, 8(%r1) - fstds,ma %fr11, 8(%r1) - fstds,ma %fr12, 8(%r1) - fstds,ma %fr13, 8(%r1) - fstds,ma %fr14, 8(%r1) - fstds,ma %fr15, 8(%r1) - fstds,ma %fr16, 8(%r1) - fstds,ma %fr17, 8(%r1) - fstds,ma %fr18, 8(%r1) - fstds,ma %fr19, 8(%r1) - fstds,ma %fr20, 8(%r1) - fstds,ma %fr21, 8(%r1) - fstds,ma %fr22, 8(%r1) - fstds,ma %fr23, 8(%r1) - fstds,ma %fr24, 8(%r1) - fstds,ma %fr25, 8(%r1) - fstds,ma %fr26, 8(%r1) - fstds,ma %fr27, 8(%r1) - fstds,ma %fr28, 8(%r1) - fstds,ma %fr29, 8(%r1) - fstds,ma %fr30, 8(%r1) - fstds %fr31, 0(%r1) - - /* Prologue */ - stwm %r4, 64(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Set up the trampoline registers. - r20, r23, r24, r25, r26 and r2 are clobbered - by call to getcontext() anyway. Reuse them. */ - stw %r2, oR20(%r26) - stw %r3, oR23(%r26) - stw %r4, oR24(%r26) - stw %r5, oR25(%r26) - stw %r6, oR26(%r26) - ldil L%__getcontext_ret, %r1 - ldo R%__getcontext_ret(%r1), %r1 - stw %r1, oR2(%r26) - - /* Save the current signal mask. */ - /* sigprocmask(SIG_BLOCK, NULL, &ucp->uc_sigmask); */ - ldo oSIGMASK(%r26), %r24 - copy %r0, %r25 - bl sigprocmask, %r2 - ldi SIG_BLOCK, %r26 - - /* Epilogue */ - ldw -84(%sp), %r2 -#ifdef PIC - ldw -96(%sp), %r19 -#endif - bv %r0(%r2) - ldwm -64(%sp), %r4 -END(__getcontext) - -weak_alias (__getcontext, getcontext) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/getdents64.c b/ports/sysdeps/unix/sysv/linux/hppa/getdents64.c deleted file mode 100644 index 0c75fb5a06..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/getdents64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getdents64.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/getrlimit64.c b/ports/sysdeps/unix/sysv/linux/hppa/getrlimit64.c deleted file mode 100644 index fef018f471..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/getrlimit64.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/getrlimit64.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/internaltypes.h b/ports/sysdeps/unix/sysv/linux/hppa/internaltypes.h deleted file mode 100644 index ac827b6842..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/internaltypes.h +++ /dev/null @@ -1,79 +0,0 @@ -#include_next <internaltypes.h> -#ifndef _INTERNAL_TYPES_H_HPPA_ -#define _INTERNAL_TYPES_H_HPPA_ 1 -#include <atomic.h> - -/* In GLIBC 2.10 HPPA switched from Linuxthreads to NPTL, and in order -to maintain ABI compatibility with pthread_cond_t, some care had to be -taken. - -The NPTL pthread_cond_t grew in size. When HPPA switched to NPTL, we -dropped the use of ldcw, and switched to the kernel helper routine for -compare-and-swap. This allowed HPPA to use the 4-word 16-byte aligned -lock words, and alignment words to store the additional pthread_cond_t -data. Once organized properly the new NPTL pthread_cond_t was 1 word -smaller than the Linuxthreads version. - -However, we were faced with the case that users may have initialized the -pthread_cond_t with PTHREAD_COND_INITIALIZER. In this case, the first -four words were set to one, and must be cleared before any NPTL code -used these words. - -We didn't want to use LDCW, because it continues to be a source of bugs -when applications memset pthread_cond_t to all zeroes by accident. This -works on all other architectures where lock words are unlocked at zero. -Remember that because of the semantics of LDCW, a locked word is set to -zero, and an unlocked word is set to 1. - -Instead we used atomic_compare_and_exchange_val_acq, but we couldn't use -this on any of the pthread_cond_t words, otherwise it might interfere -with the current operation of the structure. To solve this problem we -used the left over word. - -If the stucture was initialized by a legacy Linuxthread -PTHREAD_COND_INITIALIZER it contained a 1, and this indicates that the -structure requires zeroing for NPTL. The first thread to come upon a -pthread_cond_t with a 1 in the __initializer field, will -compare-and-swap the value, placing a 2 there which will cause all other -threads using the same pthread_cond_t to wait for the completion of the -initialization. Lastly, we use a store (with memory barrier) to change -__initializer from 2 to 0. Note that the store is strongly ordered, but -we use the PA 1.1 compatible form which is ",ma" with zero offset. - -In the future, when the application is recompiled with NPTL -PTHREAD_COND_INITIALIZER it will be a quick compare-and-swap, which -fails because __initializer is zero, and the structure will be used as -is correctly. */ - -#define cond_compat_clear(var) \ -({ \ - int tmp = 0; \ - var->__data.__lock = 0; \ - var->__data.__futex = 0; \ - var->__data.__mutex = NULL; \ - /* Clear __initializer last, to indicate initialization is done. */ \ - __asm__ __volatile__ ("stw,ma %1,0(%0)" \ - : : "r" (&var->__data.__initializer), "r" (tmp) : "memory"); \ -}) - -#define cond_compat_check_and_clear(var) \ -({ \ - int ret; \ - volatile int *value = &var->__data.__initializer; \ - if ((ret = atomic_compare_and_exchange_val_acq(value, 2, 1))) \ - { \ - if (ret == 1) \ - { \ - /* Initialize structure. */ \ - cond_compat_clear (var); \ - } \ - else \ - { \ - /* Yield until structure is initialized. */ \ - while (*value == 2) sched_yield (); \ - } \ - } \ -}) - -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h deleted file mode 100644 index e869c14bdd..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/kernel-features.h +++ /dev/null @@ -1,44 +0,0 @@ -/* Set flags signalling availability of kernel features based on given - kernel version number. - Copyright (C) 2006-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - - -/* There are an infinite number of PA-RISC kernel versions numbered - 2.4.0. But they've not really been released as such. We require - and expect the final version here. */ -#define __ASSUME_32BITUIDS 1 -#define __ASSUME_TRUNCATE64_SYSCALL 1 -#define __ASSUME_IPC64 1 -#define __ASSUME_ST_INO_64_BIT 1 -#define __ASSUME_GETDENTS64_SYSCALL 1 - -/* PA-RISC 2.6.9 kernels had the first LWS CAS support */ -#define __ASSUME_LWS_CAS 1 - -/* Support for the accept4 and recvmmsg syscalls was added in 2.6.34. */ -#if __LINUX_KERNEL_VERSION >= 0x020622 -# define __ASSUME_ACCEPT4_SYSCALL 1 -# define __ASSUME_RECVMMSG_SYSCALL 1 -#endif - -/* Support for the sendmmsg syscall was added in 3.1. */ -#if __LINUX_KERNEL_VERSION >= 0x030100 -# define __ASSUME_SENDMMSG_SYSCALL 1 -#endif - -#include_next <kernel-features.h> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h deleted file mode 100644 index af048cbe7d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/kernel_sigaction.h +++ /dev/null @@ -1,18 +0,0 @@ -/* We have a separate header file here because we do not support - SA_RESTORER on hppa. */ - -/* This is the sigaction struction from the Linux 2.1.20 kernel. */ -/* Blah. This is bogus. We don't ever use it. */ -struct old_kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_mask; - unsigned long sa_flags; -}; - -/* This is the sigaction structure from the Linux 2.1.68 kernel. */ - -struct kernel_sigaction { - __sighandler_t k_sa_handler; - unsigned long sa_flags; - sigset_t sa_mask; -}; diff --git a/ports/sysdeps/unix/sysv/linux/hppa/kernel_stat.h b/ports/sysdeps/unix/sysv/linux/hppa/kernel_stat.h deleted file mode 100644 index e3ea72402f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/kernel_stat.h +++ /dev/null @@ -1,31 +0,0 @@ -/* definition of "struct stat" from the kernel */ -struct kernel_stat { - unsigned long st_dev; /* dev_t is 32 bits on parisc */ - unsigned long st_ino; /* 32 bits */ - unsigned short st_mode; /* 16 bits */ - unsigned short st_nlink; /* 16 bits */ - unsigned short st_reserved1; /* old st_uid */ - unsigned short st_reserved2; /* old st_gid */ - unsigned long st_rdev; - unsigned long st_size; - struct timespec st_atim; - struct timespec st_mtim; - struct timespec st_ctim; - long st_blksize; - long st_blocks; - unsigned long __glibc_reserved1; /* ACL stuff */ - unsigned long __glibc_reserved2; /* network */ - unsigned long __glibc_reserved3; /* network */ - unsigned long __glibc_reserved4; /* cnodes */ - unsigned short __glibc_reserved5; /* netsite */ - short st_fstype; - unsigned long st_realdev; - unsigned short st_basemode; - unsigned short st_spareshort; - unsigned long st_uid; - unsigned long st_gid; - unsigned long st_spare4[3]; -}; - -#define _HAVE_STAT_NSEC -#define _HAVE_STAT64_NSEC diff --git a/ports/sysdeps/unix/sysv/linux/hppa/lxstat.c b/ports/sysdeps/unix/sysv/linux/hppa/lxstat.c deleted file mode 100644 index 0efa0aea49..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/lxstat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/lxstat.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/makecontext.c b/ports/sysdeps/unix/sysv/linux/hppa/makecontext.c deleted file mode 100644 index e53644902b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/makecontext.c +++ /dev/null @@ -1,100 +0,0 @@ -/* Create new context. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller <deller@gmx.de>, 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <libintl.h> -#include <stdarg.h> -#include <stdio.h> -#include <stdlib.h> -#include <sysdep.h> -#include <ucontext.h> - -/* POSIX only supports integer arguments. */ - -/* Stack must be 64-byte aligned at all times. */ -#define STACK_ALIGN 64 -/* Size of frame marker in unsigned long words. */ -#define FRAME_SIZE_UL 8 -/* Size of frame marker in bytes. */ -#define FRAME_SIZE_BYTES (8 * sizeof(unsigned long)) -/* Size of X arguments in bytes. */ -#define ARGS(x) (x * sizeof(unsigned long)) - -void -__makecontext (ucontext_t *ucp, void (*func) (void), int argc, ...) -{ - unsigned long *sp, *osp; - va_list ap; - int i; - - /* Create a 64-byte aligned frame to store args. Use ss_sp if - it is available, otherwise be robust and use the currently - saved stack pointer. */ - if (ucp->uc_stack.ss_sp && ucp->uc_stack.ss_size) - osp = (unsigned long *)ucp->uc_stack.ss_sp; - else - osp = (unsigned long *)ucp->uc_mcontext.sc_gr[30]; - - sp = (unsigned long *)((((unsigned long) osp) - + FRAME_SIZE_BYTES + ARGS(argc) + STACK_ALIGN) - & ~(STACK_ALIGN - 1)); - - /* Use new frame. */ - ucp->uc_mcontext.sc_gr[30] = ((unsigned long) sp); - - /* Finish frame setup. */ - if (ucp->uc_link) - { - /* Returning to the next context and next frame. */ - sp[-4/sizeof(unsigned long)] = ucp->uc_link->uc_mcontext.sc_gr[30]; - sp[-20/sizeof(unsigned long)] = ucp->uc_link->uc_mcontext.sc_gr[2]; - } - else - { - /* This is the main context. No frame marker, and no return address. */ - sp[-4/sizeof(unsigned long)] = 0x0; - sp[-20/sizeof(unsigned long)] = 0x0; - } - - /* Store address to jump to. */ - ucp->uc_mcontext.sc_gr[2] = (unsigned long) func; - - /* Process arguments. */ - va_start (ap, argc); - for (i = 0; i < argc; ++i) - { - if (i < 4) - { - ucp->uc_mcontext.sc_gr[26-i] = va_arg (ap, int); - continue; - } - - if ((i < 8) && (sizeof(unsigned long) == 8)) - { - /* 64bit: r19-r22 are arg7-arg4. */ - ucp->uc_mcontext.sc_gr[22+4-i] = va_arg (ap, int); - continue; - } - - /* All other arguments go on the stack. */ - sp[-1 * (FRAME_SIZE_UL + 1 + i)] = va_arg (ap, int); - } - va_end (ap); -} -weak_alias(__makecontext, makecontext) - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/mmap.c b/ports/sysdeps/unix/sysv/linux/hppa/mmap.c deleted file mode 100644 index 174cd5e54f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/mmap.c +++ /dev/null @@ -1,49 +0,0 @@ -/* Copyright (C) 1994-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sys/types.h> -#include <sys/mman.h> -#include <errno.h> - -/* Map addresses starting near ADDR and extending for LEN bytes. From - OFFSET into the file FD describes according to PROT and FLAGS. If ADDR - is nonzero, it is the desired mapping address. If the MAP_FIXED bit is - set in FLAGS, the mapping will be at ADDR exactly (which must be - page-aligned); otherwise the system chooses a convenient nearby address. - The return value is the actual mapping address chosen or MAP_FAILED - for errors (in which case `errno' is set). A successful `mmap' call - deallocates any previous mapping for the affected region. */ - -#include <sysdep.h> - -__ptr_t -__mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) -{ - - __ptr_t ret; - - ret = (__ptr_t) INLINE_SYSCALL (mmap, 6, addr, len, prot, flags, fd, offset); - - /* check if it's really a negative number */ - if(((unsigned long)ret & 0xfffff000) == 0xfffff000) - return MAP_FAILED; - - return ret; - -} - -strong_alias (__mmap, mmap) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h deleted file mode 100644 index a79c195d9a..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/pthreadtypes.h +++ /dev/null @@ -1,228 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _BITS_PTHREADTYPES_H -#define _BITS_PTHREADTYPES_H 1 - -/* Linuxthread type sizes (bytes): - sizeof(pthread_attr_t) = 0x24 (36) - sizeof(pthread_barrier_t) = 0x30 (48) - sizeof(pthread_barrierattr_t) = 0x4 (4) - sizeof(pthread_cond_t) = 0x30 (48) - sizeof(pthread_condattr_t) = 0x4 (4) - sizeof(pthread_mutex_t) = 0x30 (48) - sizeof(pthread_mutexattr_t) = 0x4 (4) - sizeof(pthread_rwlock_t) = 0x40 (64) - sizeof(pthread_rwlockattr_t) = 0x8 (8) - sizeof(pthread_spinlock_t) = 0x10 (16) */ - -#define __SIZEOF_PTHREAD_ATTR_T 36 -#define __SIZEOF_PTHREAD_BARRIER_T 48 -#define __SIZEOF_PTHREAD_BARRIERATTR_T 4 -#define __SIZEOF_PTHREAD_COND_T 48 -#define __SIZEOF_PTHREAD_CONDATTR_T 4 -#define __SIZEOF_PTHREAD_MUTEX_T 48 -#define __SIZEOF_PTHREAD_MUTEXATTR_T 4 -#define __SIZEOF_PTHREAD_RWLOCK_T 64 -#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 - -/* Thread identifiers. The structure of the attribute type is not - exposed on purpose. */ -typedef unsigned long int pthread_t; - -union pthread_attr_t -{ - char __size[__SIZEOF_PTHREAD_ATTR_T]; - long int __align; -}; -#ifndef __have_pthread_attr_t -typedef union pthread_attr_t pthread_attr_t; -# define __have_pthread_attr_t 1 -#endif - - -typedef struct __pthread_internal_slist -{ - struct __pthread_internal_slist *__next; -} __pthread_slist_t; - - -/* Data structures for mutex handling. The structure of the attribute - type is not exposed on purpose. */ -typedef union -{ - struct __pthread_mutex_s - { - int __lock __attribute__ ((aligned(16))); - unsigned int __count; - int __owner; - /* KIND must stay at this position in the structure to maintain - binary compatibility. */ - int __kind; - /* The old 4-word 16-byte aligned lock. This is initalized - to all ones by the Linuxthreads PTHREAD_MUTEX_INITIALIZER. - Unused in NPTL. */ - int __compat_padding[4]; - /* In the old structure there are 4 words left due to alignment. - In NPTL two words are used. */ - unsigned int __nusers; - __extension__ union - { - int __spins; - __pthread_slist_t __list; - }; - /* Two more words are left before the NPTL - pthread_mutex_t is larger than Linuxthreads. */ - int __reserved1; - int __reserved2; - } __data; - char __size[__SIZEOF_PTHREAD_MUTEX_T]; - long int __align; -} pthread_mutex_t; - -/* Mutex __spins initializer used by PTHREAD_MUTEX_INITIALIZER. */ -#define __PTHREAD_SPINS 0 - -typedef union -{ - char __size[__SIZEOF_PTHREAD_MUTEXATTR_T]; - long int __align; -} pthread_mutexattr_t; - - -/* Data structure for conditional variable handling. The structure of - the attribute type is not exposed on purpose. However, this structure - is exposed via PTHREAD_COND_INITIALIZER, and because of this, the - Linuxthreads version sets the first four ints to one. In the NPTL - version we must check, in every function using pthread_cond_t, - for the static Linuxthreads initializer and clear the appropriate - words. */ -typedef union -{ - struct - { - /* In the old Linuxthreads pthread_cond_t, this is the - start of the 4-word lock structure, the next four words - are set all to 1 by the Linuxthreads - PTHREAD_COND_INITIALIZER. */ - int __lock __attribute__ ((aligned(16))); - /* Tracks the initialization of this structure: - 0 initialized with NPTL PTHREAD_COND_INITIALIZER. - 1 initialized with Linuxthreads PTHREAD_COND_INITIALIZER. - 2 initialization in progress. */ - int __initializer; - unsigned int __futex; - void *__mutex; - /* In the old Linuxthreads this would have been the start - of the pthread_fastlock status word. */ - __extension__ unsigned long long int __total_seq; - __extension__ unsigned long long int __wakeup_seq; - __extension__ unsigned long long int __woken_seq; - unsigned int __nwaiters; - unsigned int __broadcast_seq; - /* The NPTL pthread_cond_t is exactly the same size as - the Linuxthreads version, there are no words to spare. */ - } __data; - char __size[__SIZEOF_PTHREAD_COND_T]; - __extension__ long long int __align; -} pthread_cond_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_CONDATTR_T]; - long int __align; -} pthread_condattr_t; - - -/* Keys for thread-specific data */ -typedef unsigned int pthread_key_t; - - -/* Once-only execution */ -typedef int pthread_once_t; - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Data structure for read-write lock variable handling. The - structure of the attribute type is not exposed on purpose. */ -typedef union -{ - struct - { - /* In the old Linuxthreads pthread_rwlock_t, this is the - start of the 4-word 16-byte aligned lock structure. The - next four words are all set to 1 by the Linuxthreads - PTHREAD_RWLOCK_INITIALIZER. We ignore them in NPTL. */ - int __compat_padding[4] __attribute__ ((aligned(16))); - int __lock; - unsigned int __nr_readers; - unsigned int __readers_wakeup; - unsigned int __writer_wakeup; - unsigned int __nr_readers_queued; - unsigned int __nr_writers_queued; - int __writer; - /* An unused word, reserved for future use. It was added - to maintain the location of the flags from the Linuxthreads - layout of this structure. */ - int __reserved1; - /* FLAGS must stay at this position in the structure to maintain - binary compatibility. */ - unsigned char __pad2; - unsigned char __pad1; - unsigned char __shared; - unsigned char __flags; - /* The NPTL pthread_rwlock_t is 4 words smaller than the - Linuxthreads version. One word is in the middle of the - structure, the other three are at the end. */ - int __reserved2; - int __reserved3; - int __reserved4; - } __data; - char __size[__SIZEOF_PTHREAD_RWLOCK_T]; - long int __align; -} pthread_rwlock_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_RWLOCKATTR_T]; - long int __align; -} pthread_rwlockattr_t; -#endif - - -#ifdef __USE_XOPEN2K -/* POSIX spinlock data type. */ -typedef volatile int pthread_spinlock_t; - - -/* POSIX barriers data type. The structure of the type is - deliberately not exposed. */ -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIER_T]; - long int __align; -} pthread_barrier_t; - -typedef union -{ - char __size[__SIZEOF_PTHREAD_BARRIERATTR_T]; - int __align; -} pthread_barrierattr_t; -#endif - - -#endif /* bits/pthreadtypes.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/semaphore.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/semaphore.h deleted file mode 100644 index b9873bd809..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/bits/semaphore.h +++ /dev/null @@ -1,32 +0,0 @@ -/* Copyright (C) 2002-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SEMAPHORE_H -# error "Never use <bits/semaphore.h> directly; include <semaphore.h> instead." -#endif - -#define __SIZEOF_SEM_T 16 - -/* Value returned if `sem_open' failed. */ -#define SEM_FAILED ((sem_t *) 0) - -typedef union -{ - char __size[__SIZEOF_SEM_T]; - long int __align; -} sem_t; - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/clone.S b/ports/sysdeps/unix/sysv/linux/hppa/nptl/clone.S deleted file mode 100644 index 23750b3f88..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/clone.S +++ /dev/null @@ -1,3 +0,0 @@ -#define RESET_PID -#include <tcb-offsets.h> -#include "../clone.S" diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/createthread.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/createthread.c deleted file mode 100644 index 5e96513ca8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/createthread.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Value passed to 'clone' for initialization of the thread register. */ -#define TLS_VALUE (pd + 1) - -/* Get the real implementation. */ -#include <nptl/sysdeps/pthread/createthread.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/fork.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/fork.c deleted file mode 100644 index 3c21f5aef9..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/fork.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sched.h> -#include <signal.h> -#include <sysdep.h> -#include <tls.h> - -/* Argument 1 - Clone flags. - 2 - Child stack pointer. - 3 - Parent tid pointer. - 4 - New TLS area pointer. - 5 - Child tid pointer. */ -#define ARCH_FORK() \ - INLINE_SYSCALL (clone, 5, \ - CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, \ - NULL, NULL, NULL, &THREAD_SELF->tid) - -#include <nptl/sysdeps/unix/sysv/linux/fork.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/libc-lowlevellock.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/libc-lowlevellock.c deleted file mode 100644 index 8f50fed615..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/libc-lowlevellock.c +++ /dev/null @@ -1,20 +0,0 @@ -/* low level locking for pthread library. Generic futex-using version. - Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include "lowlevellock.c" diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c deleted file mode 100644 index d61c5d3ac8..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.c +++ /dev/null @@ -1,127 +0,0 @@ -/* low level locking for pthread library. Generic futex-using version. - Copyright (C) 2003-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Paul Mackerras <paulus@au.ibm.com>, 2003. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <errno.h> -#include <sysdep.h> -#include <lowlevellock.h> -#include <sys/time.h> - -void -__lll_lock_wait (lll_lock_t *futex, int private) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, private); - } - while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0); -} - -void -__lll_lock_wait_private (lll_lock_t *futex) -{ - do - { - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_wait (futex, 2, LLL_PRIVATE); - } - while (atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0); -} - -int -__lll_timedlock_wait (lll_lock_t *futex, const struct timespec *abstime, int private) -{ - /* Reject invalid timeouts. */ - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - do - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait. */ - int oldval = atomic_compare_and_exchange_val_acq (futex, 2, 1); - if (oldval != 0) - lll_futex_timed_wait (futex, 2, &rt, private); - } - while (atomic_compare_and_exchange_bool_acq (futex, 2, 0) != 0); - return 0; -} - - -/* These don't get included in libc.so */ -#ifdef IS_IN_libpthread -int -__lll_timedwait_tid (int *tidp, const struct timespec *abstime) -{ - int tid; - - if (abstime->tv_nsec < 0 || abstime->tv_nsec >= 1000000000) - return EINVAL; - - /* Repeat until thread terminated. */ - while ((tid = *tidp) != 0) - { - struct timeval tv; - struct timespec rt; - - /* Get the current time. */ - (void) __gettimeofday (&tv, NULL); - - /* Compute relative timeout. */ - rt.tv_sec = abstime->tv_sec - tv.tv_sec; - rt.tv_nsec = abstime->tv_nsec - tv.tv_usec * 1000; - if (rt.tv_nsec < 0) - { - rt.tv_nsec += 1000000000; - --rt.tv_sec; - } - - /* Already timed out? */ - if (rt.tv_sec < 0) - return ETIMEDOUT; - - /* Wait until thread terminates. */ - if (lll_futex_timed_wait (tidp, tid, &rt, LLL_SHARED) == -ETIMEDOUT) - return ETIMEDOUT; - } - - return 0; -} -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h deleted file mode 100644 index bd16f77cf2..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/lowlevellock.h +++ /dev/null @@ -1,352 +0,0 @@ -/* Copyright (C) 2003-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _LOWLEVELLOCK_H -#define _LOWLEVELLOCK_H 1 - -#include <time.h> -#include <sys/param.h> -#include <bits/pthreadtypes.h> -#include <sysdep.h> -#include <atomic.h> -#include <kernel-features.h> /* Need __ASSUME_PRIVATE_FUTEX. */ -#include <tls.h> /* Need THREAD_*, and header.*. */ - -/* HPPA only has one atomic read and modify memory operation, - load and clear, so hppa uses a kernel helper routine to implement - compare_and_exchange. See atomic.h for the userspace calling - sequence. */ - -#define FUTEX_WAIT 0 -#define FUTEX_WAKE 1 -#define FUTEX_REQUEUE 3 -#define FUTEX_CMP_REQUEUE 4 -#define FUTEX_WAKE_OP 5 -#define FUTEX_OP_CLEAR_WAKE_IF_GT_ONE ((4 << 24) | 1) -#define FUTEX_LOCK_PI 6 -#define FUTEX_UNLOCK_PI 7 -#define FUTEX_TRYLOCK_PI 8 -#define FUTEX_WAIT_BITSET 9 -#define FUTEX_WAKE_BITSET 10 -#define FUTEX_WAIT_REQUEUE_PI 11 -#define FUTEX_CMP_REQUEUE_PI 12 -#define FUTEX_PRIVATE_FLAG 128 -#define FUTEX_CLOCK_REALTIME 256 - -#define FUTEX_BITSET_MATCH_ANY 0xffffffff - -/* Values for 'private' parameter of locking macros. Yes, the - definition seems to be backwards. But it is not. The bit will be - reversed before passing to the system call. */ -#define LLL_PRIVATE 0 -#define LLL_SHARED FUTEX_PRIVATE_FLAG - -/* Initialize locks to zero. */ -#define LLL_MUTEX_LOCK_INITIALIZER (0) - -#if !defined NOT_IN_libc || defined IS_IN_rtld -/* In libc.so or ld.so all futexes are private. */ -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - ((fl) | FUTEX_PRIVATE_FLAG) -# else -# define __lll_private_flag(fl, private) \ - ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) -# endif -#else -# ifdef __ASSUME_PRIVATE_FUTEX -# define __lll_private_flag(fl, private) \ - (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) -# else -# define __lll_private_flag(fl, private) \ - (__builtin_constant_p (private) \ - ? ((private) == 0 \ - ? ((fl) | THREAD_GETMEM (THREAD_SELF, header.private_futex)) \ - : (fl)) \ - : ((fl) | (((private) ^ FUTEX_PRIVATE_FLAG) \ - & THREAD_GETMEM (THREAD_SELF, header.private_futex)))) -# endif -#endif - -/* Type for lock object. */ -typedef int lll_lock_t; - -#define lll_futex_wait(futexp, val, private) \ - lll_futex_timed_wait (futexp, val, 0, private) - -#define lll_futex_timed_wait(futexp, val, timespec, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAIT, private), \ - (val), (timespec)); \ - __ret; \ - }) - -#define lll_futex_wake(futexp, nr, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, (futexp), \ - __lll_private_flag (FUTEX_WAKE, private), \ - (nr), 0); \ - __ret; \ - }) - -#define lll_private_futex_wait(futex, val) \ - lll_private_futex_timed_wait (futex, val, NULL) - -#ifdef __ASSUME_PRIVATE_FUTEX -# define lll_private_futex_timed_wait(futexp, val, timespec) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), FUTEX_WAIT | FUTEX_PRIVATE_FLAG, \ - (val), (timespec)); \ - __ret; \ - }) -#else -# define lll_private_futex_timed_wait(futexp, val, timespec) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret, __op; \ - __op = FUTEX_WAIT | THREAD_GETMEM (THREAD_SELF, header.private_futex); \ - __ret = INTERNAL_SYSCALL (futex, __err, 4, \ - (futexp), __op, (val), (timespec)); \ - __ret; \ - }) -#endif - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_requeue(futexp, nr_wake, nr_move, mutex, val, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_CMP_REQUEUE, private),\ - (nr_wake), (nr_move), (mutex), (val)); \ - __ret; \ - }) - -#define lll_robust_dead(futexv, private) \ - do \ - { \ - int *__futexp = &(futexv); \ - atomic_or (__futexp, FUTEX_OWNER_DIED); \ - lll_futex_wake (__futexp, 1, private); \ - } \ - while (0) - -/* Returns non-zero if error happened, zero if success. */ -#define lll_futex_wake_unlock(futexp, nr_wake, nr_wake2, futexp2, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_WAKE_OP, private), \ - (nr_wake), (nr_wake2), (futexp2), \ - FUTEX_OP_CLEAR_WAKE_IF_GT_ONE); \ - __ret; \ - }) - -/* Priority Inheritance support. */ -#define lll_futex_wait_requeue_pi(futexp, val, mutex, private) \ - lll_futex_timed_wait_requeue_pi (futexp, val, NULL, 0, mutex, private) - -#define lll_futex_timed_wait_requeue_pi(futexp, val, timespec, clockbit, \ - mutex, private) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - int __op = FUTEX_WAIT_REQUEUE_PI | clockbit; \ - \ - __ret = INTERNAL_SYSCALL (futex, __err, 5, (futexp), \ - __lll_private_flag (__op, private), \ - (val), (timespec), mutex); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err) ? -__ret : __ret; \ - }) - -#define lll_futex_cmp_requeue_pi(futexp, nr_wake, nr_move, mutex, val, priv) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret; \ - \ - __ret = INTERNAL_SYSCALL (futex, __err, 6, (futexp), \ - __lll_private_flag (FUTEX_CMP_REQUEUE_PI, priv),\ - (nr_wake), (nr_move), (mutex), (val)); \ - INTERNAL_SYSCALL_ERROR_P (__ret, __err); \ - }) - -static inline int -__attribute__ ((always_inline)) -__lll_robust_trylock (int *futex, int id) -{ - return atomic_compare_and_exchange_val_acq (futex, id, 0) != 0; -} -#define lll_robust_trylock(futex, id) \ - __lll_robust_trylock (&(futex), id) - -static inline int -__attribute__ ((always_inline)) -__lll_cond_trylock (int *futex) -{ - return atomic_compare_and_exchange_val_acq (futex, 2, 0) != 0; -} -#define lll_cond_trylock(futex) __lll_cond_trylock (&(futex)) - -static inline int -__attribute__ ((always_inline)) -__lll_trylock (int *futex) -{ - return atomic_compare_and_exchange_val_acq (futex, 1, 0) != 0; -} -#define lll_trylock(futex) __lll_trylock (&(futex)) - -extern void __lll_lock_wait (lll_lock_t *futex, int private) attribute_hidden; -extern void __lll_lock_wait_private (lll_lock_t *futex) attribute_hidden; - -static inline void __attribute__((always_inline)) -__lll_mutex_lock(lll_lock_t *futex, int private) -{ - int val = atomic_compare_and_exchange_val_acq (futex, 1, 0); - - if (__builtin_expect (val != 0, 0)) - { - if (__builtin_constant_p (private) && private == LLL_PRIVATE) - __lll_lock_wait_private (futex); - else - __lll_lock_wait (futex, private); - } -} -#define lll_mutex_lock(futex, private) __lll_mutex_lock (&(futex), private) -#define lll_lock(lock, private) lll_mutex_lock (lock, private) - -extern int __lll_robust_lock_wait (int *futex, int private) attribute_hidden; - -static inline int -__attribute__ ((always_inline)) -__lll_robust_lock (int *futex, int id, int private) -{ - int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_lock_wait (futex, private); - return result; -} -#define lll_robust_lock(futex, id, private) \ - __lll_robust_lock (&(futex), id, private) - -#define lll_robust_cond_lock(futex, id, private) \ - __lll_robust_lock (&(futex), (id) | FUTEX_WAITERS, private) - -static inline void -__attribute__ ((always_inline)) -__lll_cond_lock (int *futex, int private) -{ - int val = atomic_compare_and_exchange_val_acq (futex, 2, 0); - - if (__builtin_expect (val != 0, 0)) - __lll_lock_wait (futex, private); -} -#define lll_cond_lock(futex, private) __lll_cond_lock (&(futex), private) - -extern int __lll_timedlock_wait (lll_lock_t *futex, const struct timespec *, - int private) attribute_hidden; -extern int __lll_robust_timedlock_wait (int *futex, const struct timespec *, - int private) attribute_hidden; - -static inline int -__attribute__ ((always_inline)) -__lll_timedlock (int *futex, const struct timespec *abstime, int private) -{ - int val = atomic_compare_and_exchange_val_acq (futex, 1, 0); - int result = 0; - - if (__builtin_expect (val != 0, 0)) - result = __lll_timedlock_wait (futex, abstime, private); - return result; -} -#define lll_timedlock(futex, abstime, private) \ - __lll_timedlock (&(futex), abstime, private) - -static inline int __attribute__ ((always_inline)) -__lll_robust_timedlock (int *futex, const struct timespec *abstime, - int id, int private) -{ - int result = 0; - if (atomic_compare_and_exchange_bool_acq (futex, id, 0) != 0) - result = __lll_robust_timedlock_wait (futex, abstime, private); - return result; -} -#define lll_robust_timedlock(futex, abstime, id, private) \ - __lll_robust_timedlock (&(futex), abstime, id, private) - -#define __lll_unlock(futex, private) \ - (void) \ - ({ int val = atomic_exchange_rel (futex, 0); \ - if (__builtin_expect (val > 1, 0)) \ - lll_futex_wake (futex, 1, private); \ - }) -#define lll_unlock(futex, private) __lll_unlock(&(futex), private) - -#define __lll_robust_unlock(futex,private) \ - (void) \ - ({ int val = atomic_exchange_rel (futex, 0); \ - if (__builtin_expect (val & FUTEX_WAITERS, 0)) \ - lll_futex_wake (futex, 1, private); \ - }) -#define lll_robust_unlock(futex, private) \ - __lll_robust_unlock(&(futex), private) - -#define lll_islocked(futex) \ - (futex != 0) - -/* Our internal lock implementation is identical to the binary-compatible - mutex implementation. */ -#define LLL_LOCK_INITIALIZER (0) -#define LLL_LOCK_INITIALIZER_CONST (0) -#define LLL_LOCK_INITIALIZER_LOCKED (1) - -#define THREAD_INIT_LOCK(PD, LOCK) \ - (PD)->LOCK = LLL_LOCK_INITIALIZER - -/* The kernel notifies a process which uses CLONE_CHILD_CLEARTID via futex - wakeup when the clone terminates. The memory location contains the - thread ID while the clone is running and is reset to zero - afterwards. */ -#define lll_wait_tid(tid) \ - do \ - { \ - __typeof (tid) __tid; \ - while ((__tid = (tid)) != 0) \ - lll_futex_wait (&(tid), __tid, LLL_SHARED); \ - } \ - while (0) - -extern int __lll_timedwait_tid (int *, const struct timespec *) - attribute_hidden; - -#define lll_timedwait_tid(tid, abstime) \ - ({ \ - int __res = 0; \ - if ((tid) != 0) \ - __res = __lll_timedwait_tid (&(tid), (abstime)); \ - __res; \ - }) - -#endif /* lowlevellock.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S deleted file mode 100644 index 034b69957b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pt-vfork.S +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#define _ERRNO_H 1 -#include <bits/errno.h> -#include <tcb-offsets.h> - -/* Clone the calling process, but without copying the whole address space. - The calling process is suspended until the new process exits or is - replaced by a call to `execve'. Return -1 for errors, 0 to the new process, - and the process ID of the new process to the old process. */ - -/* Load the thread register. - Load the saved PID value. - Negate the value. - Store the temporary PID. */ -#define SAVE_PID \ - mfctl %cr27, %r26 ASM_LINE_SEP \ - ldw PID_THREAD_OFFSET(%r26),%r1 ASM_LINE_SEP \ - sub %r0,%r1,%r1 ASM_LINE_SEP \ - stw %r1,PID_THREAD_OFFSET(%r26) ASM_LINE_SEP -/* If we are the parent... - Get the thread pointer. - Load the saved PID. - Negate the value (got back original) - Restore the PID. */ -#define RESTORE_PID \ - cmpb,=,n %r0,%ret0,.Lthread_start ASM_LINE_SEP \ - mfctl %cr27, %r26 ASM_LINE_SEP \ - ldw PID_THREAD_OFFSET(%r26),%r1 ASM_LINE_SEP \ - sub %r0,%r1,%r1 ASM_LINE_SEP \ - stw %r1,PID_THREAD_OFFSET(%r26) ASM_LINE_SEP \ -.Lthread_start: ASM_LINE_SEP - - /* r26, r25, r24, r23 are free since vfork has no arguments */ -ENTRY(__vfork) - /* We must not create a frame. When the child unwinds to call - exec it will clobber the same frame that the parent - needs to unwind. */ - - /* Save the PIC register. */ -#ifdef PIC - copy %r19, %r25 /* parent */ -#endif - - /* Save the process PID */ - SAVE_PID - - /* Syscall saves and restores all register states */ - ble 0x100(%sr2,%r0) - ldi __NR_vfork,%r20 - - /* Conditionally restore the PID */ - RESTORE_PID - - /* Check for error */ - ldi -4096,%r1 - comclr,>>= %r1,%ret0,%r0 /* Note: unsigned compare. */ - b,n .Lerror - - /* Return, and DO NOT restore rp. The child may have called - functions that updated the frame's rp. This works because - the kernel ensures rp is preserved across the vfork - syscall. */ - bv,n %r0(%rp) - -.Lerror: - /* Now we need a stack to call a function. We are assured - that there is no child now, so it's safe to create - a frame. */ - stw %rp, -20(%sp) - stwm %r3, 64(%sp) - stw %sp, -4(%sp) - - sub %r0,%ret0,%r3 - SYSCALL_ERROR_HANDLER - /* Restore the PIC register (in delay slot) on error */ -#ifdef PIC - copy %r25, %r19 /* parent */ -#else - nop -#endif - /* Write syscall return into errno location */ - stw %r3, 0(%ret0) - ldw -84(%sp), %rp - bv %r0(%rp) - ldwm -64(%sp), %r3 -PSEUDO_END (__vfork) -libc_hidden_def (__vfork) -weak_alias (__vfork, vfork) - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread.h deleted file mode 100644 index 8fbc1a41e6..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread.h +++ /dev/null @@ -1,1192 +0,0 @@ -/* Copyright (C) 2002-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _PTHREAD_H -#define _PTHREAD_H 1 - -#include <features.h> -#include <endian.h> -#include <sched.h> -#include <time.h> - -#include <bits/pthreadtypes.h> -#include <bits/setjmp.h> -#include <bits/wordsize.h> - - -/* Detach state. */ -enum -{ - PTHREAD_CREATE_JOINABLE, -#define PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_JOINABLE - PTHREAD_CREATE_DETACHED -#define PTHREAD_CREATE_DETACHED PTHREAD_CREATE_DETACHED -}; - - -/* Mutex types. */ -enum -{ - PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_ADAPTIVE_NP -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 - , - PTHREAD_MUTEX_NORMAL = PTHREAD_MUTEX_TIMED_NP, - PTHREAD_MUTEX_RECURSIVE = PTHREAD_MUTEX_RECURSIVE_NP, - PTHREAD_MUTEX_ERRORCHECK = PTHREAD_MUTEX_ERRORCHECK_NP, - PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL -#endif -#ifdef __USE_GNU - /* For compatibility. */ - , PTHREAD_MUTEX_FAST_NP = PTHREAD_MUTEX_TIMED_NP -#endif -}; - - -#ifdef __USE_XOPEN2K -/* Robust mutex or not flags. */ -enum -{ - PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_STALLED_NP = PTHREAD_MUTEX_STALLED, - PTHREAD_MUTEX_ROBUST, - PTHREAD_MUTEX_ROBUST_NP = PTHREAD_MUTEX_ROBUST -}; -#endif - - -#if defined __USE_POSIX199506 || defined __USE_UNIX98 -/* Mutex protocols. */ -enum -{ - PTHREAD_PRIO_NONE, - PTHREAD_PRIO_INHERIT, - PTHREAD_PRIO_PROTECT -}; -#endif - - -/* Mutex initializers. */ -#ifdef __PTHREAD_MUTEX_HAVE_PREV -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, 0, { 0, 0 } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0, 0 } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0, 0 } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0, 0 } } } -# endif -#else -# define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, 0, { 0 } } } -# ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, 0, { 0 } } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, 0, { 0 } } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, 0, { 0 } } } -# endif -#endif - - -/* Read-write lock types. */ -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -enum -{ - PTHREAD_RWLOCK_PREFER_READER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NP, - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, - PTHREAD_RWLOCK_DEFAULT_NP = PTHREAD_RWLOCK_PREFER_READER_NP -}; - -/* Define __PTHREAD_RWLOCK_INT_FLAGS_SHARED to 1 if pthread_rwlock_t - has the shared field. All 64-bit architectures have the shared field - in pthread_rwlock_t. */ -#ifndef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# if __WORDSIZE == 64 -# define __PTHREAD_RWLOCK_INT_FLAGS_SHARED 1 -# endif -#endif - -/* Read-write lock initializers. */ -# define PTHREAD_RWLOCK_INITIALIZER \ - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -# ifdef __USE_GNU -# ifdef __PTHREAD_RWLOCK_INT_FLAGS_SHARED -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \ - PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } } -# else -# if __BYTE_ORDER == __LITTLE_ENDIAN -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, \ - 0, 0, 0, 0 } } -# else -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\ - 0 } } -# endif -# endif -# endif -#endif /* Unix98 or XOpen2K */ - - -/* Scheduler inheritance. */ -enum -{ - PTHREAD_INHERIT_SCHED, -#define PTHREAD_INHERIT_SCHED PTHREAD_INHERIT_SCHED - PTHREAD_EXPLICIT_SCHED -#define PTHREAD_EXPLICIT_SCHED PTHREAD_EXPLICIT_SCHED -}; - - -/* Scope handling. */ -enum -{ - PTHREAD_SCOPE_SYSTEM, -#define PTHREAD_SCOPE_SYSTEM PTHREAD_SCOPE_SYSTEM - PTHREAD_SCOPE_PROCESS -#define PTHREAD_SCOPE_PROCESS PTHREAD_SCOPE_PROCESS -}; - - -/* Process shared or private flag. */ -enum -{ - PTHREAD_PROCESS_PRIVATE, -#define PTHREAD_PROCESS_PRIVATE PTHREAD_PROCESS_PRIVATE - PTHREAD_PROCESS_SHARED -#define PTHREAD_PROCESS_SHARED PTHREAD_PROCESS_SHARED -}; - - - -/* Conditional variable handling. */ -#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, 0, 0, (void *) 0, 0, 0 } } - - -/* Cleanup buffers */ -struct _pthread_cleanup_buffer -{ - void (*__routine) (void *); /* Function to call. */ - void *__arg; /* Its argument. */ - int __canceltype; /* Saved cancellation type. */ - struct _pthread_cleanup_buffer *__prev; /* Chaining of cleanup functions. */ -}; - -/* Cancellation */ -enum -{ - PTHREAD_CANCEL_ENABLE, -#define PTHREAD_CANCEL_ENABLE PTHREAD_CANCEL_ENABLE - PTHREAD_CANCEL_DISABLE -#define PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_DISABLE -}; -enum -{ - PTHREAD_CANCEL_DEFERRED, -#define PTHREAD_CANCEL_DEFERRED PTHREAD_CANCEL_DEFERRED - PTHREAD_CANCEL_ASYNCHRONOUS -#define PTHREAD_CANCEL_ASYNCHRONOUS PTHREAD_CANCEL_ASYNCHRONOUS -}; -#define PTHREAD_CANCELED ((void *) -1) - - -/* Single execution handling. */ -#define PTHREAD_ONCE_INIT 0 - - -#ifdef __USE_XOPEN2K -/* Value returned by 'pthread_barrier_wait' for one of the threads after - the required number of threads have called this function. - -1 is distinct from 0 and all errno constants */ -# define PTHREAD_BARRIER_SERIAL_THREAD -1 -#endif - - -__BEGIN_DECLS - -/* Create a new thread, starting with execution of START-ROUTINE - getting passed ARG. Creation attributed come from ATTR. The new - handle is stored in *NEWTHREAD. */ -extern int pthread_create (pthread_t *__restrict __newthread, - const pthread_attr_t *__restrict __attr, - void *(*__start_routine) (void *), - void *__restrict __arg) __THROWNL __nonnull ((1, 3)); - -/* Terminate calling thread. - - The registered cleanup handlers are called via exception handling - so we cannot mark this function with __THROW.*/ -extern void pthread_exit (void *__retval) __attribute__ ((__noreturn__)); - -/* Make calling thread wait for termination of the thread TH. The - exit status of the thread is stored in *THREAD_RETURN, if THREAD_RETURN - is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_join (pthread_t __th, void **__thread_return); - -#ifdef __USE_GNU -/* Check whether thread TH has terminated. If yes return the status of - the thread in *THREAD_RETURN, if THREAD_RETURN is not NULL. */ -extern int pthread_tryjoin_np (pthread_t __th, void **__thread_return) __THROW; - -/* Make calling thread wait for termination of the thread TH, but only - until TIMEOUT. The exit status of the thread is stored in - *THREAD_RETURN, if THREAD_RETURN is not NULL. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_timedjoin_np (pthread_t __th, void **__thread_return, - const struct timespec *__abstime); -#endif - -/* Indicate that the thread TH is never to be joined with PTHREAD_JOIN. - The resources of TH will therefore be freed immediately when it - terminates, instead of waiting for another thread to perform PTHREAD_JOIN - on it. */ -extern int pthread_detach (pthread_t __th) __THROW; - - -/* Obtain the identifier of the current thread. */ -extern pthread_t pthread_self (void) __THROW __attribute__ ((__const__)); - -/* Compare two thread identifiers. */ -extern int pthread_equal (pthread_t __thread1, pthread_t __thread2) - __THROW __attribute__ ((__const__)); - - -/* Thread attribute handling. */ - -/* Initialize thread attribute *ATTR with default attributes - (detachstate is PTHREAD_JOINABLE, scheduling policy is SCHED_OTHER, - no user-provided stack). */ -extern int pthread_attr_init (pthread_attr_t *__attr) __THROW __nonnull ((1)); - -/* Destroy thread attribute *ATTR. */ -extern int pthread_attr_destroy (pthread_attr_t *__attr) - __THROW __nonnull ((1)); - -/* Get detach state attribute. */ -extern int pthread_attr_getdetachstate (const pthread_attr_t *__attr, - int *__detachstate) - __THROW __nonnull ((1, 2)); - -/* Set detach state attribute. */ -extern int pthread_attr_setdetachstate (pthread_attr_t *__attr, - int __detachstate) - __THROW __nonnull ((1)); - - -/* Get the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_getguardsize (const pthread_attr_t *__attr, - size_t *__guardsize) - __THROW __nonnull ((1, 2)); - -/* Set the size of the guard area created for stack overflow protection. */ -extern int pthread_attr_setguardsize (pthread_attr_t *__attr, - size_t __guardsize) - __THROW __nonnull ((1)); - - -/* Return in *PARAM the scheduling parameters of *ATTR. */ -extern int pthread_attr_getschedparam (const pthread_attr_t *__restrict __attr, - struct sched_param *__restrict __param) - __THROW __nonnull ((1, 2)); - -/* Set scheduling parameters (priority, etc) in *ATTR according to PARAM. */ -extern int pthread_attr_setschedparam (pthread_attr_t *__restrict __attr, - const struct sched_param *__restrict - __param) __THROW __nonnull ((1, 2)); - -/* Return in *POLICY the scheduling policy of *ATTR. */ -extern int pthread_attr_getschedpolicy (const pthread_attr_t *__restrict - __attr, int *__restrict __policy) - __THROW __nonnull ((1, 2)); - -/* Set scheduling policy in *ATTR according to POLICY. */ -extern int pthread_attr_setschedpolicy (pthread_attr_t *__attr, int __policy) - __THROW __nonnull ((1)); - -/* Return in *INHERIT the scheduling inheritance mode of *ATTR. */ -extern int pthread_attr_getinheritsched (const pthread_attr_t *__restrict - __attr, int *__restrict __inherit) - __THROW __nonnull ((1, 2)); - -/* Set scheduling inheritance mode in *ATTR according to INHERIT. */ -extern int pthread_attr_setinheritsched (pthread_attr_t *__attr, - int __inherit) - __THROW __nonnull ((1)); - - -/* Return in *SCOPE the scheduling contention scope of *ATTR. */ -extern int pthread_attr_getscope (const pthread_attr_t *__restrict __attr, - int *__restrict __scope) - __THROW __nonnull ((1, 2)); - -/* Set scheduling contention scope in *ATTR according to SCOPE. */ -extern int pthread_attr_setscope (pthread_attr_t *__attr, int __scope) - __THROW __nonnull ((1)); - -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstackaddr (const pthread_attr_t *__restrict - __attr, void **__restrict __stackaddr) - __THROW __nonnull ((1, 2)) __attribute_deprecated__; - -/* Set the starting address of the stack of the thread to be created. - Depending on whether the stack grows up or down the value must either - be higher or lower than all the address in the memory block. The - minimal size of the block must be PTHREAD_STACK_MIN. */ -extern int pthread_attr_setstackaddr (pthread_attr_t *__attr, - void *__stackaddr) - __THROW __nonnull ((1)) __attribute_deprecated__; - -/* Return the currently used minimal stack size. */ -extern int pthread_attr_getstacksize (const pthread_attr_t *__restrict - __attr, size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2)); - -/* Add information about the minimum stack size needed for the thread - to be started. This size must never be less than PTHREAD_STACK_MIN - and must also not exceed the system limits. */ -extern int pthread_attr_setstacksize (pthread_attr_t *__attr, - size_t __stacksize) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Return the previously set address for the stack. */ -extern int pthread_attr_getstack (const pthread_attr_t *__restrict __attr, - void **__restrict __stackaddr, - size_t *__restrict __stacksize) - __THROW __nonnull ((1, 2, 3)); - -/* The following two interfaces are intended to replace the last two. They - require setting the address as well as the size since only setting the - address will make the implementation on some architectures impossible. */ -extern int pthread_attr_setstack (pthread_attr_t *__attr, void *__stackaddr, - size_t __stacksize) __THROW __nonnull ((1)); -#endif - -#ifdef __USE_GNU -/* Thread created with attribute ATTR will be limited to run only on - the processors represented in CPUSET. */ -extern int pthread_attr_setaffinity_np (pthread_attr_t *__attr, - size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - -/* Get bit set in CPUSET representing the processors threads created with - ATTR can run on. */ -extern int pthread_attr_getaffinity_np (const pthread_attr_t *__attr, - size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((1, 3)); - - -/* Initialize thread attribute *ATTR with attributes corresponding to the - already running thread TH. It shall be called on uninitialized ATTR - and destroyed with pthread_attr_destroy when no longer needed. */ -extern int pthread_getattr_np (pthread_t __th, pthread_attr_t *__attr) - __THROW __nonnull ((2)); -#endif - - -/* Functions for scheduling control. */ - -/* Set the scheduling parameters for TARGET_THREAD according to POLICY - and *PARAM. */ -extern int pthread_setschedparam (pthread_t __target_thread, int __policy, - const struct sched_param *__param) - __THROW __nonnull ((3)); - -/* Return in *POLICY and *PARAM the scheduling parameters for TARGET_THREAD. */ -extern int pthread_getschedparam (pthread_t __target_thread, - int *__restrict __policy, - struct sched_param *__restrict __param) - __THROW __nonnull ((2, 3)); - -/* Set the scheduling priority for TARGET_THREAD. */ -extern int pthread_setschedprio (pthread_t __target_thread, int __prio) - __THROW; - - -#ifdef __USE_GNU -/* Get thread name visible in the kernel and its interfaces. */ -extern int pthread_getname_np (pthread_t __target_thread, char *__buf, - size_t __buflen) - __THROW __nonnull ((2)); - -/* Set thread name visible in the kernel and its interfaces. */ -extern int pthread_setname_np (pthread_t __target_thread, const char *__name) - __THROW __nonnull ((2)); -#endif - - -#ifdef __USE_UNIX98 -/* Determine level of concurrency. */ -extern int pthread_getconcurrency (void) __THROW; - -/* Set new concurrency level to LEVEL. */ -extern int pthread_setconcurrency (int __level) __THROW; -#endif - -#ifdef __USE_GNU -/* Yield the processor to another thread or process. - This function is similar to the POSIX `sched_yield' function but - might be differently implemented in the case of a m-on-n thread - implementation. */ -extern int pthread_yield (void) __THROW; - - -/* Limit specified thread TH to run only on the processors represented - in CPUSET. */ -extern int pthread_setaffinity_np (pthread_t __th, size_t __cpusetsize, - const cpu_set_t *__cpuset) - __THROW __nonnull ((3)); - -/* Get bit set in CPUSET representing the processors TH can run on. */ -extern int pthread_getaffinity_np (pthread_t __th, size_t __cpusetsize, - cpu_set_t *__cpuset) - __THROW __nonnull ((3)); -#endif - - -/* Functions for handling initialization. */ - -/* Guarantee that the initialization function INIT_ROUTINE will be called - only once, even if pthread_once is executed several times with the - same ONCE_CONTROL argument. ONCE_CONTROL must point to a static or - extern variable initialized to PTHREAD_ONCE_INIT. - - The initialization functions might throw exception which is why - this function is not marked with __THROW. */ -extern int pthread_once (pthread_once_t *__once_control, - void (*__init_routine) (void)) __nonnull ((1, 2)); - - -/* Functions for handling cancellation. - - Note that these functions are explicitly not marked to not throw an - exception in C++ code. If cancellation is implemented by unwinding - this is necessary to have the compiler generate the unwind information. */ - -/* Set cancelability state of current thread to STATE, returning old - state in *OLDSTATE if OLDSTATE is not NULL. */ -extern int pthread_setcancelstate (int __state, int *__oldstate); - -/* Set cancellation state of current thread to TYPE, returning the old - type in *OLDTYPE if OLDTYPE is not NULL. */ -extern int pthread_setcanceltype (int __type, int *__oldtype); - -/* Cancel THREAD immediately or at the next possibility. */ -extern int pthread_cancel (pthread_t __th); - -/* Test for pending cancellation for the current thread and terminate - the thread as per pthread_exit(PTHREAD_CANCELED) if it has been - cancelled. */ -extern void pthread_testcancel (void); - - -/* Cancellation handling with integration into exception handling. */ - -typedef struct -{ - struct - { - __jmp_buf __cancel_jmp_buf; - int __mask_was_saved; - } __cancel_jmp_buf[1]; - void *__pad[4]; -} __pthread_unwind_buf_t __attribute__ ((__aligned__)); - -/* No special attributes by default. */ -#ifndef __cleanup_fct_attribute -# define __cleanup_fct_attribute -#endif - - -/* Structure to hold the cleanup handler information. */ -struct __pthread_cleanup_frame -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; -}; - -#if defined __GNUC__ && defined __EXCEPTIONS -# ifdef __cplusplus -/* Class to handle cancellation handler invocation. */ -class __pthread_cleanup_class -{ - void (*__cancel_routine) (void *); - void *__cancel_arg; - int __do_it; - int __cancel_type; - - public: - __pthread_cleanup_class (void (*__fct) (void *), void *__arg) - : __cancel_routine (__fct), __cancel_arg (__arg), __do_it (1) { } - ~__pthread_cleanup_class () { if (__do_it) __cancel_routine (__cancel_arg); } - void __setdoit (int __newval) { __do_it = __newval; } - void __defer () { pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, - &__cancel_type); } - void __restore () const { pthread_setcanceltype (__cancel_type, 0); } -}; - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg) - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__setdoit (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_cleanup_class __clframe (routine, arg); \ - __clframe.__defer () - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - __clframe.__restore (); \ - __clframe.__setdoit (execute); \ - } while (0) -# endif -# else -/* Function called to call the cleanup handler. As an extern inline - function the compiler is free to decide inlining the change when - needed or fall back on the copy which must exist somewhere - else. */ -__extern_inline void -__pthread_cleanup_routine (struct __pthread_cleanup_frame *__frame) -{ - if (__frame->__do_it) - __frame->__cancel_routine (__frame->__cancel_arg); -} - -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - __clframe.__do_it = (execute); \ - } while (0) - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - struct __pthread_cleanup_frame __clframe \ - __attribute__ ((__cleanup__ (__pthread_cleanup_routine))) \ - = { .__cancel_routine = (routine), .__cancel_arg = (arg), \ - .__do_it = 1 }; \ - (void) pthread_setcanceltype (PTHREAD_CANCEL_DEFERRED, \ - &__clframe.__cancel_type) - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - (void) pthread_setcanceltype (__clframe.__cancel_type, NULL); \ - __clframe.__do_it = (execute); \ - } while (0) -# endif -# endif -#else -/* Install a cleanup handler: ROUTINE will be called with arguments ARG - when the thread is canceled or calls pthread_exit. ROUTINE will also - be called with arguments ARG when the matching pthread_cleanup_pop - is executed with non-zero EXECUTE argument. - - pthread_cleanup_push and pthread_cleanup_pop are macros and must always - be used in matching pairs at the same nesting level of braces. */ -# define pthread_cleanup_push(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel (&__cancel_buf); \ - do { -extern void __pthread_register_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler installed by the matching pthread_cleanup_push. - If EXECUTE is non-zero, the handler function is called. */ -# define pthread_cleanup_pop(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -# ifdef __USE_GNU -/* Install a cleanup handler as pthread_cleanup_push does, but also - saves the current cancellation type and sets it to deferred - cancellation. */ -# define pthread_cleanup_push_defer_np(routine, arg) \ - do { \ - __pthread_unwind_buf_t __cancel_buf; \ - void (*__cancel_routine) (void *) = (routine); \ - void *__cancel_arg = (arg); \ - int __not_first_call = __sigsetjmp ((struct __jmp_buf_tag *) (void *) \ - __cancel_buf.__cancel_jmp_buf, 0); \ - if (__glibc_unlikely (__not_first_call)) \ - { \ - __cancel_routine (__cancel_arg); \ - __pthread_unwind_next (&__cancel_buf); \ - /* NOTREACHED */ \ - } \ - \ - __pthread_register_cancel_defer (&__cancel_buf); \ - do { -extern void __pthread_register_cancel_defer (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; - -/* Remove a cleanup handler as pthread_cleanup_pop does, but also - restores the cancellation type that was in effect when the matching - pthread_cleanup_push_defer was called. */ -# define pthread_cleanup_pop_restore_np(execute) \ - do { } while (0);/* Empty to allow label before pthread_cleanup_pop. */\ - } while (0); \ - __pthread_unregister_cancel_restore (&__cancel_buf); \ - if (execute) \ - __cancel_routine (__cancel_arg); \ - } while (0) -extern void __pthread_unregister_cancel_restore (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute; -# endif - -/* Internal interface to initiate cleanup. */ -extern void __pthread_unwind_next (__pthread_unwind_buf_t *__buf) - __cleanup_fct_attribute __attribute__ ((__noreturn__)) -# ifndef SHARED - __attribute__ ((__weak__)) -# endif - ; -#endif - -/* Function used in the macros. */ -struct __jmp_buf_tag; -extern int __sigsetjmp (struct __jmp_buf_tag *__env, int __savemask) __THROWNL; - - -/* Mutex handling. */ - -/* Initialize a mutex. */ -extern int pthread_mutex_init (pthread_mutex_t *__mutex, - const pthread_mutexattr_t *__mutexattr) - __THROW __nonnull ((1)); - -/* Destroy a mutex. */ -extern int pthread_mutex_destroy (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); - -/* Try locking a mutex. */ -extern int pthread_mutex_trylock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -/* Lock a mutex. */ -extern int pthread_mutex_lock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Wait until lock becomes available, or specified time passes. */ -extern int pthread_mutex_timedlock (pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -#endif - -/* Unlock a mutex. */ -extern int pthread_mutex_unlock (pthread_mutex_t *__mutex) - __THROWNL __nonnull ((1)); - - -/* Get the priority ceiling of MUTEX. */ -extern int pthread_mutex_getprioceiling (const pthread_mutex_t * - __restrict __mutex, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the priority ceiling of MUTEX to PRIOCEILING, return old - priority ceiling value in *OLD_CEILING. */ -extern int pthread_mutex_setprioceiling (pthread_mutex_t *__restrict __mutex, - int __prioceiling, - int *__restrict __old_ceiling) - __THROW __nonnull ((1, 3)); - - -#ifdef __USE_XOPEN2K8 -/* Declare the state protected by MUTEX as consistent. */ -extern int pthread_mutex_consistent (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutex_consistent_np (pthread_mutex_t *__mutex) - __THROW __nonnull ((1)); -# endif -#endif - - -/* Functions for handling mutex attributes. */ - -/* Initialize mutex attribute object ATTR with default attributes - (kind is PTHREAD_MUTEX_TIMED_NP). */ -extern int pthread_mutexattr_init (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy mutex attribute object ATTR. */ -extern int pthread_mutexattr_destroy (pthread_mutexattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getpshared (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setpshared (pthread_mutexattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K8 -/* Return in *KIND the mutex kind attribute in *ATTR. */ -extern int pthread_mutexattr_gettype (const pthread_mutexattr_t *__restrict - __attr, int *__restrict __kind) - __THROW __nonnull ((1, 2)); - -/* Set the mutex kind attribute in *ATTR to KIND (either PTHREAD_MUTEX_NORMAL, - PTHREAD_MUTEX_RECURSIVE, PTHREAD_MUTEX_ERRORCHECK, or - PTHREAD_MUTEX_DEFAULT). */ -extern int pthread_mutexattr_settype (pthread_mutexattr_t *__attr, int __kind) - __THROW __nonnull ((1)); -#endif - -/* Return in *PROTOCOL the mutex protocol attribute in *ATTR. */ -extern int pthread_mutexattr_getprotocol (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __protocol) - __THROW __nonnull ((1, 2)); - -/* Set the mutex protocol attribute in *ATTR to PROTOCOL (either - PTHREAD_PRIO_NONE, PTHREAD_PRIO_INHERIT, or PTHREAD_PRIO_PROTECT). */ -extern int pthread_mutexattr_setprotocol (pthread_mutexattr_t *__attr, - int __protocol) - __THROW __nonnull ((1)); - -/* Return in *PRIOCEILING the mutex prioceiling attribute in *ATTR. */ -extern int pthread_mutexattr_getprioceiling (const pthread_mutexattr_t * - __restrict __attr, - int *__restrict __prioceiling) - __THROW __nonnull ((1, 2)); - -/* Set the mutex prioceiling attribute in *ATTR to PRIOCEILING. */ -extern int pthread_mutexattr_setprioceiling (pthread_mutexattr_t *__attr, - int __prioceiling) - __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_getrobust (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# ifdef __USE_GNU -extern int pthread_mutexattr_getrobust_np (const pthread_mutexattr_t *__attr, - int *__robustness) - __THROW __nonnull ((1, 2)); -# endif - -/* Set the robustness flag of the mutex attribute ATTR. */ -extern int pthread_mutexattr_setrobust (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# ifdef __USE_GNU -extern int pthread_mutexattr_setrobust_np (pthread_mutexattr_t *__attr, - int __robustness) - __THROW __nonnull ((1)); -# endif -#endif - - -#if defined __USE_UNIX98 || defined __USE_XOPEN2K -/* Functions for handling read-write locks. */ - -/* Initialize read-write lock RWLOCK using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_rwlock_init (pthread_rwlock_t *__restrict __rwlock, - const pthread_rwlockattr_t *__restrict - __attr) __THROW __nonnull ((1)); - -/* Destroy read-write lock RWLOCK. */ -extern int pthread_rwlock_destroy (pthread_rwlock_t *__rwlock) - __THROW __nonnull ((1)); - -/* Acquire read lock for RWLOCK. */ -extern int pthread_rwlock_rdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire read lock for RWLOCK. */ -extern int pthread_rwlock_tryrdlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire read lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedrdlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Acquire write lock for RWLOCK. */ -extern int pthread_rwlock_wrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -/* Try to acquire write lock for RWLOCK. */ -extern int pthread_rwlock_trywrlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - -# ifdef __USE_XOPEN2K -/* Try to acquire write lock for RWLOCK or return after specfied time. */ -extern int pthread_rwlock_timedwrlock (pthread_rwlock_t *__restrict __rwlock, - const struct timespec *__restrict - __abstime) __THROWNL __nonnull ((1, 2)); -# endif - -/* Unlock RWLOCK. */ -extern int pthread_rwlock_unlock (pthread_rwlock_t *__rwlock) - __THROWNL __nonnull ((1)); - - -/* Functions for handling read-write lock attributes. */ - -/* Initialize attribute object ATTR with default values. */ -extern int pthread_rwlockattr_init (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy attribute object ATTR. */ -extern int pthread_rwlockattr_destroy (pthread_rwlockattr_t *__attr) - __THROW __nonnull ((1)); - -/* Return current setting of process-shared attribute of ATTR in PSHARED. */ -extern int pthread_rwlockattr_getpshared (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set process-shared attribute of ATTR to PSHARED. */ -extern int pthread_rwlockattr_setpshared (pthread_rwlockattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); - -/* Return current setting of reader/writer preference. */ -extern int pthread_rwlockattr_getkind_np (const pthread_rwlockattr_t * - __restrict __attr, - int *__restrict __pref) - __THROW __nonnull ((1, 2)); - -/* Set reader/write preference. */ -extern int pthread_rwlockattr_setkind_np (pthread_rwlockattr_t *__attr, - int __pref) __THROW __nonnull ((1)); -#endif - - -/* Functions for handling conditional variables. */ - -/* Initialize condition variable COND using attributes ATTR, or use - the default values if later is NULL. */ -extern int pthread_cond_init (pthread_cond_t *__restrict __cond, - const pthread_condattr_t *__restrict __cond_attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable COND. */ -extern int pthread_cond_destroy (pthread_cond_t *__cond) - __THROW __nonnull ((1)); - -/* Wake up one thread waiting for condition variable COND. */ -extern int pthread_cond_signal (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wake up all threads waiting for condition variables COND. */ -extern int pthread_cond_broadcast (pthread_cond_t *__cond) - __THROWNL __nonnull ((1)); - -/* Wait for condition variable COND to be signaled or broadcast. - MUTEX is assumed to be locked before. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_wait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex) - __nonnull ((1, 2)); - -/* Wait for condition variable COND to be signaled or broadcast until - ABSTIME. MUTEX is assumed to be locked before. ABSTIME is an - absolute time specification; zero is the beginning of the epoch - (00:00:00 GMT, January 1, 1970). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int pthread_cond_timedwait (pthread_cond_t *__restrict __cond, - pthread_mutex_t *__restrict __mutex, - const struct timespec *__restrict __abstime) - __nonnull ((1, 2, 3)); - -/* Functions for handling condition variable attributes. */ - -/* Initialize condition variable attribute ATTR. */ -extern int pthread_condattr_init (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy condition variable attribute ATTR. */ -extern int pthread_condattr_destroy (pthread_condattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_getpshared (const pthread_condattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the condition variable attribute ATTR. */ -extern int pthread_condattr_setpshared (pthread_condattr_t *__attr, - int __pshared) __THROW __nonnull ((1)); - -#ifdef __USE_XOPEN2K -/* Get the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_getclock (const pthread_condattr_t * - __restrict __attr, - __clockid_t *__restrict __clock_id) - __THROW __nonnull ((1, 2)); - -/* Set the clock selected for the condition variable attribute ATTR. */ -extern int pthread_condattr_setclock (pthread_condattr_t *__attr, - __clockid_t __clock_id) - __THROW __nonnull ((1)); -#endif - - -#ifdef __USE_XOPEN2K -/* Functions to handle spinlocks. */ - -/* Initialize the spinlock LOCK. If PSHARED is nonzero the spinlock can - be shared between different processes. */ -extern int pthread_spin_init (pthread_spinlock_t *__lock, int __pshared) - __THROW __nonnull ((1)); - -/* Destroy the spinlock LOCK. */ -extern int pthread_spin_destroy (pthread_spinlock_t *__lock) - __THROW __nonnull ((1)); - -/* Wait until spinlock LOCK is retrieved. */ -extern int pthread_spin_lock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Try to lock spinlock LOCK. */ -extern int pthread_spin_trylock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - -/* Release spinlock LOCK. */ -extern int pthread_spin_unlock (pthread_spinlock_t *__lock) - __THROWNL __nonnull ((1)); - - -/* Functions to handle barriers. */ - -/* Initialize BARRIER with the attributes in ATTR. The barrier is - opened when COUNT waiters arrived. */ -extern int pthread_barrier_init (pthread_barrier_t *__restrict __barrier, - const pthread_barrierattr_t *__restrict - __attr, unsigned int __count) - __THROW __nonnull ((1)); - -/* Destroy a previously dynamically initialized barrier BARRIER. */ -extern int pthread_barrier_destroy (pthread_barrier_t *__barrier) - __THROW __nonnull ((1)); - -/* Wait on barrier BARRIER. */ -extern int pthread_barrier_wait (pthread_barrier_t *__barrier) - __THROWNL __nonnull ((1)); - - -/* Initialize barrier attribute ATTR. */ -extern int pthread_barrierattr_init (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Destroy previously dynamically initialized barrier attribute ATTR. */ -extern int pthread_barrierattr_destroy (pthread_barrierattr_t *__attr) - __THROW __nonnull ((1)); - -/* Get the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_getpshared (const pthread_barrierattr_t * - __restrict __attr, - int *__restrict __pshared) - __THROW __nonnull ((1, 2)); - -/* Set the process-shared flag of the barrier attribute ATTR. */ -extern int pthread_barrierattr_setpshared (pthread_barrierattr_t *__attr, - int __pshared) - __THROW __nonnull ((1)); -#endif - - -/* Functions for handling thread-specific data. */ - -/* Create a key value identifying a location in the thread-specific - data area. Each thread maintains a distinct thread-specific data - area. DESTR_FUNCTION, if non-NULL, is called with the value - associated to that key when the key is destroyed. - DESTR_FUNCTION is not called if the value associated is NULL when - the key is destroyed. */ -extern int pthread_key_create (pthread_key_t *__key, - void (*__destr_function) (void *)) - __THROW __nonnull ((1)); - -/* Destroy KEY. */ -extern int pthread_key_delete (pthread_key_t __key) __THROW; - -/* Return current value of the thread-specific data slot identified by KEY. */ -extern void *pthread_getspecific (pthread_key_t __key) __THROW; - -/* Store POINTER in the thread-specific data slot identified by KEY. */ -extern int pthread_setspecific (pthread_key_t __key, - const void *__pointer) __THROW ; - - -#ifdef __USE_XOPEN2K -/* Get ID of CPU-time clock for thread THREAD_ID. */ -extern int pthread_getcpuclockid (pthread_t __thread_id, - __clockid_t *__clock_id) - __THROW __nonnull ((2)); -#endif - - -/* Install handlers to be called when a new process is created with FORK. - The PREPARE handler is called in the parent process just before performing - FORK. The PARENT handler is called in the parent process just after FORK. - The CHILD handler is called in the child process. Each of the three - handlers can be NULL, meaning that no handler needs to be called at that - point. - PTHREAD_ATFORK can be called several times, in which case the PREPARE - handlers are called in LIFO order (last added with PTHREAD_ATFORK, - first called before FORK), and the PARENT and CHILD handlers are called - in FIFO (first added, first called). */ - -extern int pthread_atfork (void (*__prepare) (void), - void (*__parent) (void), - void (*__child) (void)) __THROW; - - -#ifdef __USE_EXTERN_INLINES -/* Optimizations. */ -__extern_inline int -__NTH (pthread_equal (pthread_t __thread1, pthread_t __thread2)) -{ - return __thread1 == __thread2; -} -#endif - -__END_DECLS - -#endif /* pthread.h */ - -#ifndef _PTHREAD_H_HPPA_ -#define _PTHREAD_H_HPPA_ 1 - -/* The pthread_cond_t initializer is compatible only with NPTL. We do not - want to be forwards compatible, we eventually want to drop the code - that has to clear the old LT initializer. */ -#undef PTHREAD_COND_INITIALIZER -#define PTHREAD_COND_INITIALIZER { { 0, 0, 0, (void *) 0, 0, 0, 0, 0, 0 } } - -/* The pthread_mutex_t and pthread_rwlock_t initializers are compatible - only with NPTL. NPTL assumes pthread_rwlock_t is all zero. */ -#undef PTHREAD_MUTEX_INITIALIZER -#undef PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP -#undef PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP -#undef PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP -/* Mutex initializers. */ -#define PTHREAD_MUTEX_INITIALIZER \ - { { 0, 0, 0, 0, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -#ifdef __USE_GNU -# define PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_RECURSIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -# define PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ERRORCHECK_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -# define PTHREAD_ADAPTIVE_MUTEX_INITIALIZER_NP \ - { { 0, 0, 0, PTHREAD_MUTEX_ADAPTIVE_NP, { 0, 0, 0, 0 }, 0, { 0 }, 0, 0 } } -#endif - -#undef PTHREAD_RWLOCK_INITIALIZER -#undef PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP -/* Read-write lock initializers. */ -#define PTHREAD_RWLOCK_INITIALIZER \ - { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } } -#ifdef __USE_GNU -# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \ - { { { 0, 0, 0, 0 }, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP,\ - 0, 0, 0 } } -#endif /* Unix98 or XOpen2K */ - -#endif diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthreadP.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthreadP.h deleted file mode 100644 index d6d9198811..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthreadP.h +++ /dev/null @@ -1,17 +0,0 @@ -#include_next <pthreadP.h> -#ifndef _PTHREADP_H_HPPA_ -#define _PTHREADP_H_HPPA_ 1 - -/* Internal cond functions. */ -extern int __pthread_cond_broadcast_internal (pthread_cond_t *cond); -extern int __pthread_cond_destroy_internal (pthread_cond_t *cond); -extern int __pthread_cond_init_internal (pthread_cond_t *cond, - const pthread_condattr_t *cond_attr); -extern int __pthread_cond_signal_internal (pthread_cond_t *cond); -extern int __pthread_cond_timedwait_internal (pthread_cond_t *cond, - pthread_mutex_t *mutex, - const struct timespec *abstime); -extern int __pthread_cond_wait_internal (pthread_cond_t *cond, - pthread_mutex_t *mutex); -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_broadcast.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_broadcast.c deleted file mode 100644 index e80f880d3e..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_broadcast.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_broadcast.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_broadcast (cond) - pthread_cond_t *cond; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_broadcast_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_broadcast, pthread_cond_broadcast, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_broadcast -# define __pthread_cond_broadcast __pthread_cond_broadcast_internal -# include_next <pthread_cond_broadcast.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_destroy.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_destroy.c deleted file mode 100644 index a308899068..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_destroy.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_destroy.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_destroy (cond) - pthread_cond_t *cond; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_destroy_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_destroy, pthread_cond_destroy, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_destroy -# define __pthread_cond_destroy __pthread_cond_destroy_internal -# include_next <pthread_cond_destroy.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_init.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_init.c deleted file mode 100644 index 92b3ecfbfa..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_init.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_init.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_init (cond, cond_attr) - pthread_cond_t *cond; - const pthread_condattr_t *cond_attr; -{ - cond_compat_clear (cond); - return __pthread_cond_init_internal (cond, cond_attr); -} -versioned_symbol (libpthread, __pthread_cond_init, pthread_cond_init, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_init -# define __pthread_cond_init __pthread_cond_init_internal -# include_next <pthread_cond_init.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_signal.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_signal.c deleted file mode 100644 index ddeb946c8e..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_signal.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_signal.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_signal (cond) - pthread_cond_t *cond; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_signal_internal (cond); -} -versioned_symbol (libpthread, __pthread_cond_signal, pthread_cond_signal, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_signal -# define __pthread_cond_signal __pthread_cond_signal_internal -# include_next <pthread_cond_signal.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_timedwait.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_timedwait.c deleted file mode 100644 index 69cc66d65b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_timedwait.c +++ /dev/null @@ -1,44 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_timedwait.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_timedwait (cond, mutex, abstime) - pthread_cond_t *cond; - pthread_mutex_t *mutex; - const struct timespec *abstime; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_timedwait_internal (cond, mutex, abstime); -} -versioned_symbol (libpthread, __pthread_cond_timedwait, pthread_cond_timedwait, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_timedwait -# define __pthread_cond_timedwait __pthread_cond_timedwait_internal -# include_next <pthread_cond_timedwait.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_wait.c b/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_wait.c deleted file mode 100644 index 606231824b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/pthread_cond_wait.c +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2009-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Carlos O'Donell <carlos@codesourcery.com>, 2009. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef INCLUDED_SELF -# define INCLUDED_SELF -# include <pthread_cond_wait.c> -#else -# include <pthread.h> -# include <pthreadP.h> -# include <internaltypes.h> -# include <shlib-compat.h> -int -__pthread_cond_wait (cond, mutex) - pthread_cond_t *cond; - pthread_mutex_t *mutex; -{ - cond_compat_check_and_clear (cond); - return __pthread_cond_wait_internal (cond, mutex); -} -versioned_symbol (libpthread, __pthread_cond_wait, pthread_cond_wait, - GLIBC_2_3_2); -# undef versioned_symbol -# define versioned_symbol(lib, local, symbol, version) -# undef __pthread_cond_wait -# define __pthread_cond_wait __pthread_cond_wait_internal -# include_next <pthread_cond_wait.c> -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h b/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h deleted file mode 100644 index 154bd2de01..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/nptl/sysdep-cancel.h +++ /dev/null @@ -1,281 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> -#include <sysdeps/generic/sysdep.h> -#include <tls.h> -#ifndef __ASSEMBLER__ -# include <nptl/pthreadP.h> -#endif - -#if !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt - -# ifndef NO_ERROR -# define NO_ERROR -0x1000 -# endif - -/* The syscall cancellation mechanism requires userspace - assistance, the following code does roughly this: - - do arguments (read arg5 and arg6 to registers) - setup frame - - check if there are threads, yes jump to pseudo_cancel - - unthreaded: - syscall - check syscall return (jump to pre_end) - set errno - set return to -1 - (jump to pre_end) - - pseudo_cancel: - cenable - syscall - cdisable - check syscall return (jump to pre_end) - set errno - set return to -1 - - pre_end - restore stack - - It is expected that 'ret' and 'END' macros will - append an 'undo arguments' and 'return' to the - this PSEUDO macro. */ - -# undef PSEUDO -# define PSEUDO(name, syscall_name, args) \ - ENTRY (__##syscall_name##_nocancel) \ - DOARGS_##args ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_offset TREG, 0 ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_nc_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldi -1, %ret0 ASM_LINE_SEP \ -L(pre_nc_end): ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* Undo frame */ ASM_LINE_SEP \ - ldwm -64(%sp),TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore rp before exit */ ASM_LINE_SEP \ - ldw -20(%sp), %rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP \ - ret ASM_LINE_SEP \ - END(__##syscall_name##_nocancel) ASM_LINE_SEP \ - /**********************************************/ASM_LINE_SEP \ - ENTRY (name) \ - DOARGS_##args ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Done setting up frame, continue... */ ASM_LINE_SEP \ - SINGLE_THREAD_P ASM_LINE_SEP \ - cmpib,<>,n 0,%ret0,L(pseudo_cancel) ASM_LINE_SEP \ -L(unthreaded): ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - b L(pre_end) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldi -1, %ret0 /* delay */ ASM_LINE_SEP \ -L(pseudo_cancel): ASM_LINE_SEP \ - PUSHARGS_##args /* Save args */ ASM_LINE_SEP \ - /* Save r19 into TREG */ ASM_LINE_SEP \ - CENABLE /* FUNC CALL */ ASM_LINE_SEP \ - SAVE_PIC(TREG) /* delay */ ASM_LINE_SEP \ - /* restore syscall args */ ASM_LINE_SEP \ - POPARGS_##args ASM_LINE_SEP \ - /* save mask from cenable (use stub rp slot) */ ASM_LINE_SEP \ - stw %ret0, -24(%sp) ASM_LINE_SEP \ - /* ... SYSCALL ... */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 /* delay */ ASM_LINE_SEP \ - /* ............... */ ASM_LINE_SEP \ - LOAD_PIC(TREG) ASM_LINE_SEP \ - /* pass mask as arg0 to cdisable */ ASM_LINE_SEP \ - ldw -24(%sp), %r26 ASM_LINE_SEP \ - CDISABLE ASM_LINE_SEP \ - stw %ret0, -24(%sp) /* delay */ ASM_LINE_SEP \ - /* Restore syscall return */ ASM_LINE_SEP \ - ldw -24(%sp), %ret0 ASM_LINE_SEP \ - /* compare error */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - /* branch if no error */ ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - LOAD_PIC(TREG) /* cond. nullify */ ASM_LINE_SEP \ - copy %ret0, TREG /* save syscall return */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* make syscall res value positive */ ASM_LINE_SEP \ - sub %r0, TREG, TREG /* delay */ ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 */ ASM_LINE_SEP \ - ldi -1, %ret0 ASM_LINE_SEP \ -L(pre_end): ASM_LINE_SEP \ - /* No need to LOAD_PIC */ ASM_LINE_SEP \ - /* Undo frame */ ASM_LINE_SEP \ - ldwm -64(%sp),TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore rp before exit */ ASM_LINE_SEP \ - ldw -20(%sp), %rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP - -/* Save arguments into our frame */ -# define PUSHARGS_0 /* nothing to do */ -# define PUSHARGS_1 PUSHARGS_0 stw %r26, -36(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 26, -36 ASM_LINE_SEP -# define PUSHARGS_2 PUSHARGS_1 stw %r25, -40(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 25, -40 ASM_LINE_SEP -# define PUSHARGS_3 PUSHARGS_2 stw %r24, -44(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 24, -44 ASM_LINE_SEP -# define PUSHARGS_4 PUSHARGS_3 stw %r23, -48(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 23, -48 ASM_LINE_SEP -# define PUSHARGS_5 PUSHARGS_4 stw %r22, -52(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 22, -52 ASM_LINE_SEP -# define PUSHARGS_6 PUSHARGS_5 stw %r21, -56(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 21, -56 ASM_LINE_SEP - -/* Bring them back from the stack */ -# define POPARGS_0 /* nothing to do */ -# define POPARGS_1 POPARGS_0 ldw -36(%sr0,%sp), %r26 ASM_LINE_SEP \ - .cfi_restore 26 ASM_LINE_SEP -# define POPARGS_2 POPARGS_1 ldw -40(%sr0,%sp), %r25 ASM_LINE_SEP \ - .cfi_restore 25 ASM_LINE_SEP -# define POPARGS_3 POPARGS_2 ldw -44(%sr0,%sp), %r24 ASM_LINE_SEP \ - .cfi_restore 24 ASM_LINE_SEP -# define POPARGS_4 POPARGS_3 ldw -48(%sr0,%sp), %r23 ASM_LINE_SEP \ - .cfi_restore 23 ASM_LINE_SEP -# define POPARGS_5 POPARGS_4 ldw -52(%sr0,%sp), %r22 ASM_LINE_SEP \ - .cfi_restore 22 ASM_LINE_SEP -# define POPARGS_6 POPARGS_5 ldw -56(%sr0,%sp), %r21 ASM_LINE_SEP \ - .cfi_restore 21 ASM_LINE_SEP - -# ifdef IS_IN_libpthread -# ifdef PIC -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __pthread_enable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __pthread_disable_asynccancel,code ASM_LINE_SEP \ - bl __pthread_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# elif !defined NOT_IN_libc -# ifdef PIC -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \ - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \ - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __libc_enable_asynccancel,code ASM_LINE_SEP \ - bl __libc_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __libc_disable_asynccancel,code ASM_LINE_SEP \ - bl __libc_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# elif defined IS_IN_librt -# ifdef PIC -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \ - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \ - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP -# else -# define CENABLE .import __librt_enable_asynccancel,code ASM_LINE_SEP \ - bl __librt_enable_asynccancel,%r2 ASM_LINE_SEP -# define CDISABLE .import __librt_disable_asynccancel,code ASM_LINE_SEP \ - bl __librt_disable_asynccancel,%r2 ASM_LINE_SEP -# endif -# else -# error Unsupported library -# endif - -# ifdef IS_IN_libpthread -# define __local_multiple_threads __pthread_multiple_threads -# elif !defined NOT_IN_libc -# define __local_multiple_threads __libc_multiple_threads -# elif IS_IN_librt -# define __local_multiple_threads __librt_multiple_threads -# else -# error Unsupported library -# endif - -# ifndef __ASSEMBLER__ -# define SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -# else -/* Read the value of header.multiple_threads from the thread pointer */ -# define SINGLE_THREAD_P \ - mfctl %cr27, %ret0 ASM_LINE_SEP \ - ldw MULTIPLE_THREADS_THREAD_OFFSET(%sr0,%ret0),%ret0 ASM_LINE_SEP -# endif -#elif !defined __ASSEMBLER__ - -/* This code should never be used but we define it anyhow. */ -# define SINGLE_THREAD_P (1) -# define NO_CANCELLATION 1 - -#endif -/* !defined NOT_IN_libc || defined IS_IN_libpthread || defined IS_IN_librt */ - -#ifndef __ASSEMBLER__ -# define RTLD_SINGLE_THREAD_P \ - __builtin_expect (THREAD_GETMEM (THREAD_SELF, \ - header.multiple_threads) == 0, 1) -#endif - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/profil-counter.h b/ports/sysdeps/unix/sysv/linux/hppa/profil-counter.h deleted file mode 100644 index 1561672d94..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/profil-counter.h +++ /dev/null @@ -1,24 +0,0 @@ -/* Machine-dependent SIGPROF signal handler. PA-RISC version - Copyright (C) 1996-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -static void -profil_counter (int signr, siginfo_t *si, struct ucontext *uctx) -{ - unsigned long ip = uctx->uc_mcontext.sc_iaoq[0] & ~0x3; - profil_count ((void *) ip); -} diff --git a/ports/sysdeps/unix/sysv/linux/hppa/setcontext.S b/ports/sysdeps/unix/sysv/linux/hppa/setcontext.S deleted file mode 100644 index a90ab0f9fe..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/setcontext.S +++ /dev/null @@ -1,157 +0,0 @@ -/* Install given context. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller <deller@gmx.de>, 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <sysdep.h> - -#include "ucontext_i.h" - - -ENTRY(__setcontext) - /* Prologue */ - stwm %r3, 64(%sp) -#ifdef PIC - stw %r19, -32(%sp) -#endif - - /* Save ucp. */ - copy %r26, %r3 - -.Lagain: - /* Set the current signal mask. */ - /* sigprocmask(SIG_BLOCK, &ucp->uc_sigmask, NULL); */ - copy %r0, %r24 - ldo oSIGMASK(%r3), %r25 - bl sigprocmask, %r2 - ldi SIG_SETMASK, %r26 - - comib,<>,n 0,%ret0,.Lerror - - /* Save %sp, %dp. */ - copy %sp, %r4 - copy %dp, %r5 - copy %r19, %r6 - - /* Get the registers. */ - ldw oR1(%r3), %r1 - ldw oR2(%r3), %r2 - /* ldw oR3(%r3), %r3 - used for ucp pointer. */ - /* ldw oR4(%r3), %r4 - used for original %sp. */ - /* ldw oR5(%r3), %r5 - used for %dp / %r27. */ - /* ldw oR6(%r3), %r6 - used for %r19. */ - ldw oR7(%r3), %r7 - ldw oR8(%r3), %r8 - ldw oR9(%r3), %r9 - ldw oR10(%r3), %r10 - ldw oR11(%r3), %r11 - ldw oR12(%r3), %r12 - ldw oR13(%r3), %r13 - ldw oR14(%r3), %r14 - ldw oR15(%r3), %r15 - ldw oR16(%r3), %r16 - ldw oR17(%r3), %r17 - ldw oR18(%r3), %r18 - ldw oR19(%r3), %r19 - ldw oR20(%r3), %r20 - ldw oR21(%r3), %r21 - /* ldw oR22(%r3), %r22 - dyncall arg. */ - ldw oR23(%r3), %r23 - ldw oR24(%r3), %r24 - ldw oR25(%r3), %r25 - ldw oR26(%r3), %r26 - ldw oR27(%r3), %r27 - ldw oR28(%r3), %r28 - ldw oR29(%r3), %r29 - ldw oR30(%r3), %sp - /* ldw oR31(%r3), %r31 - dyncall scratch register */ - - /* Restore floating-point registers. */ - ldo oFPREGS31(%r3), %r22 - fldds 0(%r22), %fr31 - fldds,mb -8(%r22), %fr30 - fldds,mb -8(%r22), %fr29 - fldds,mb -8(%r22), %fr28 - fldds,mb -8(%r22), %fr27 - fldds,mb -8(%r22), %fr26 - fldds,mb -8(%r22), %fr25 - fldds,mb -8(%r22), %fr24 - fldds,mb -8(%r22), %fr23 - fldds,mb -8(%r22), %fr22 - fldds,mb -8(%r22), %fr21 - fldds,mb -8(%r22), %fr20 - fldds,mb -8(%r22), %fr19 - fldds,mb -8(%r22), %fr18 - fldds,mb -8(%r22), %fr17 - fldds,mb -8(%r22), %fr16 - fldds,mb -8(%r22), %fr15 - fldds,mb -8(%r22), %fr14 - fldds,mb -8(%r22), %fr13 - fldds,mb -8(%r22), %fr12 - fldds,mb -8(%r22), %fr11 - fldds,mb -8(%r22), %fr10 - fldds,mb -8(%r22), %fr9 - fldds,mb -8(%r22), %fr8 - fldds,mb -8(%r22), %fr7 - fldds,mb -8(%r22), %fr6 - fldds,mb -8(%r22), %fr5 - fldds,mb -8(%r22), %fr4 - fldds,mb -8(%r22), %fr3 - fldds,mb -8(%r22), %fr2 - fldds,mb -8(%r22), %fr1 - fldds,mb -8(%r22), %fr0 - - /* Do not load oSS_SP into %sp. The value of oSS_SP indicates - the start of the user allocated stack, but not the sp that - should be used by the new context. In fact makecontext - will create a frame, and adjust sp as required. We do not - support calling getcontext and modifying ss_sp without - a call to makecontext to synchronize ss_sp into the machine - context. */ - - /* Call external function. */ - copy %r2, %r22 - bl $$dyncall, %r31 - copy %r31, %r2 - - /* We return here. Get new ucp in %r3, reload %sp. */ - ldw oUC_LINK(%r3), %r3 - copy %r4, %sp - copy %r5, %dp - copy %r6, %r19 - - /* Continue until ucp == NULL. */ - comib,<> 0,%r3,.Lagain - nop - - /* No further context available. Exit now. */ - bl _exit, %r2 - ldi -1, %r26 - - -.Lerror: - /* Epilogue */ - ldw -84(%r30), %r2 -#ifdef PIC - ldw -96(%r30), %r19 -#endif - bv %r0(%r2) - ldwm -64(%r30), %r3 -L(pseudo_end): -PSEUDO_END(__setcontext) - -weak_alias(__setcontext, setcontext) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/socket.S b/ports/sysdeps/unix/sysv/linux/hppa/socket.S deleted file mode 100644 index dfbb721a82..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/socket.S +++ /dev/null @@ -1,10 +0,0 @@ -#include <sysdep.h> - - .globl __socket -PSEUDO(__socket, socket, 3) - -PSEUDO_END(__socket) - -#ifndef NO_WEAK_ALIAS -weak_alias (__socket, socket) -#endif diff --git a/ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c b/ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c deleted file mode 100644 index d3ac08e079..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/swapcontext.c +++ /dev/null @@ -1,42 +0,0 @@ -/* Swap to new context. - Copyright (C) 2008-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Helge Deller <deller@gmx.de>, 2008. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <ucontext.h> - -extern int __getcontext (ucontext_t *ucp); -extern int __setcontext (const ucontext_t *ucp); - -int -__swapcontext (ucontext_t *oucp, const ucontext_t *ucp) -{ - /* Save the current machine context to oucp. */ - __getcontext (oucp); - - /* mark sc_sar flag to skip the setcontext call on reactivation. */ - if (oucp->uc_mcontext.sc_sar == 0) { - oucp->uc_mcontext.sc_sar++; - - /* Restore the machine context in ucp. */ - __setcontext (ucp); - } - - return 0; -} - -weak_alias (__swapcontext, swapcontext) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/epoll.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/epoll.h deleted file mode 100644 index 86e2ca1f6a..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/epoll.h +++ /dev/null @@ -1,143 +0,0 @@ -/* Copyright (C) 2002-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_EPOLL_H -#define _SYS_EPOLL_H 1 - -#include <stdint.h> -#include <sys/types.h> - -/* Get __sigset_t. */ -#include <bits/sigset.h> - -#ifndef __sigset_t_defined -# define __sigset_t_defined -typedef __sigset_t sigset_t; -#endif - - -/* Flags to be passed to epoll_create1. */ -enum - { - EPOLL_CLOEXEC = 010000000 -#define EPOLL_CLOEXEC EPOLL_CLOEXEC - }; - - -enum EPOLL_EVENTS - { - EPOLLIN = 0x001, -#define EPOLLIN EPOLLIN - EPOLLPRI = 0x002, -#define EPOLLPRI EPOLLPRI - EPOLLOUT = 0x004, -#define EPOLLOUT EPOLLOUT - EPOLLRDNORM = 0x040, -#define EPOLLRDNORM EPOLLRDNORM - EPOLLRDBAND = 0x080, -#define EPOLLRDBAND EPOLLRDBAND - EPOLLWRNORM = 0x100, -#define EPOLLWRNORM EPOLLWRNORM - EPOLLWRBAND = 0x200, -#define EPOLLWRBAND EPOLLWRBAND - EPOLLMSG = 0x400, -#define EPOLLMSG EPOLLMSG - EPOLLERR = 0x008, -#define EPOLLERR EPOLLERR - EPOLLHUP = 0x010, -#define EPOLLHUP EPOLLHUP - EPOLLRDHUP = 0x2000, -#define EPOLLRDHUP EPOLLRDHUP - EPOLLWAKEUP = 1u << 29, -#define EPOLLWAKEUP EPOLLWAKEUP - EPOLLONESHOT = 1u << 30, -#define EPOLLONESHOT EPOLLONESHOT - EPOLLET = 1u << 31 -#define EPOLLET EPOLLET - }; - - -/* Valid opcodes ( "op" parameter ) to issue to epoll_ctl(). */ -#define EPOLL_CTL_ADD 1 /* Add a file descriptor to the interface. */ -#define EPOLL_CTL_DEL 2 /* Remove a file descriptor from the interface. */ -#define EPOLL_CTL_MOD 3 /* Change file descriptor epoll_event structure. */ - - -typedef union epoll_data -{ - void *ptr; - int fd; - uint32_t u32; - uint64_t u64; -} epoll_data_t; - -struct epoll_event -{ - uint32_t events; /* Epoll events */ - epoll_data_t data; /* User data variable */ -}; - - -__BEGIN_DECLS - -/* Creates an epoll instance. Returns an fd for the new instance. - The "size" parameter is a hint specifying the number of file - descriptors to be associated with the new instance. The fd - returned by epoll_create() should be closed with close(). */ -extern int epoll_create (int __size) __THROW; - -/* Same as epoll_create but with an FLAGS parameter. The unused SIZE - parameter has been dropped. */ -extern int epoll_create1 (int __flags) __THROW; - - -/* Manipulate an epoll instance "epfd". Returns 0 in case of success, - -1 in case of error ( the "errno" variable will contain the - specific error code ) The "op" parameter is one of the EPOLL_CTL_* - constants defined above. The "fd" parameter is the target of the - operation. The "event" parameter describes which events the caller - is interested in and any associated user data. */ -extern int epoll_ctl (int __epfd, int __op, int __fd, - struct epoll_event *__event) __THROW; - - -/* Wait for events on an epoll instance "epfd". Returns the number of - triggered events returned in "events" buffer. Or -1 in case of - error with the "errno" variable set to the specific error code. The - "events" parameter is a buffer that will contain triggered - events. The "maxevents" is the maximum number of events to be - returned ( usually size of "events" ). The "timeout" parameter - specifies the maximum wait time in milliseconds (-1 == infinite). - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_wait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout); - - -/* Same as epoll_wait, but the thread's signal mask is temporarily - and atomically replaced with the one provided as parameter. - - This function is a cancellation point and therefore not marked with - __THROW. */ -extern int epoll_pwait (int __epfd, struct epoll_event *__events, - int __maxevents, int __timeout, - const __sigset_t *__ss); - -__END_DECLS - -#endif /* sys/epoll.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h deleted file mode 100644 index 2d198a8f5b..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright (C) 2007-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_EVENTFD_H -#define _SYS_EVENTFD_H 1 - -#include <stdint.h> - - -/* Type for event counter. */ -typedef uint64_t eventfd_t; - -/* Flags for signalfd. */ -enum - { - EFD_SEMAPHORE = 1, -#define EFD_SEMAPHORE EFD_SEMAPHORE - EFD_CLOEXEC = 010000000, -#define EFD_CLOEXEC EFD_CLOEXEC - EFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define EFD_NONBLOCK EFD_NONBLOCK - }; - - -__BEGIN_DECLS - -/* Return file descriptor for generic event channel. Set initial - value to COUNT. */ -extern int eventfd (int __count, int __flags) __THROW; - -/* Read event counter and possibly wait for events. */ -extern int eventfd_read (int __fd, eventfd_t *__value); - -/* Increment event counter. */ -extern int eventfd_write (int __fd, eventfd_t __value); - -__END_DECLS - -#endif /* sys/eventfd.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/inotify.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/inotify.h deleted file mode 100644 index ec78377781..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/inotify.h +++ /dev/null @@ -1,106 +0,0 @@ -/* Copyright (C) 2005-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_INOTIFY_H -#define _SYS_INOTIFY_H 1 - -#include <stdint.h> - - -/* Flags for the parameter of inotify_init1. */ -enum - { - IN_CLOEXEC = 010000000, -#define IN_CLOEXEC IN_CLOEXEC - IN_NONBLOCK = 000200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define IN_NONBLOCK IN_NONBLOCK - }; - - -/* Structure describing an inotify event. */ -struct inotify_event -{ - int wd; /* Watch descriptor. */ - uint32_t mask; /* Watch mask. */ - uint32_t cookie; /* Cookie to synchronize two events. */ - uint32_t len; /* Length (including NULs) of name. */ - char name __flexarr; /* Name. */ -}; - - -/* Supported events suitable for MASK parameter of INOTIFY_ADD_WATCH. */ -#define IN_ACCESS 0x00000001 /* File was accessed. */ -#define IN_MODIFY 0x00000002 /* File was modified. */ -#define IN_ATTRIB 0x00000004 /* Metadata changed. */ -#define IN_CLOSE_WRITE 0x00000008 /* Writtable file was closed. */ -#define IN_CLOSE_NOWRITE 0x00000010 /* Unwrittable file closed. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_OPEN 0x00000020 /* File was opened. */ -#define IN_MOVED_FROM 0x00000040 /* File was moved from X. */ -#define IN_MOVED_TO 0x00000080 /* File was moved to Y. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ -#define IN_CREATE 0x00000100 /* Subfile was created. */ -#define IN_DELETE 0x00000200 /* Subfile was deleted. */ -#define IN_DELETE_SELF 0x00000400 /* Self was deleted. */ -#define IN_MOVE_SELF 0x00000800 /* Self was moved. */ - -/* Events sent by the kernel. */ -#define IN_UNMOUNT 0x00002000 /* Backing fs was unmounted. */ -#define IN_Q_OVERFLOW 0x00004000 /* Event queued overflowed. */ -#define IN_IGNORED 0x00008000 /* File was ignored. */ - -/* Helper events. */ -#define IN_CLOSE (IN_CLOSE_WRITE | IN_CLOSE_NOWRITE) /* Close. */ -#define IN_MOVE (IN_MOVED_FROM | IN_MOVED_TO) /* Moves. */ - -/* Special flags. */ -#define IN_ONLYDIR 0x01000000 /* Only watch the path if it is a - directory. */ -#define IN_DONT_FOLLOW 0x02000000 /* Do not follow a sym link. */ -#define IN_EXCL_UNLINK 0x04000000 /* Exclude events on unlinked - objects. */ -#define IN_MASK_ADD 0x20000000 /* Add to the mask of an already - existing watch. */ -#define IN_ISDIR 0x40000000 /* Event occurred against dir. */ -#define IN_ONESHOT 0x80000000 /* Only send event once. */ - -/* All events which a program can wait on. */ -#define IN_ALL_EVENTS (IN_ACCESS | IN_MODIFY | IN_ATTRIB | IN_CLOSE_WRITE \ - | IN_CLOSE_NOWRITE | IN_OPEN | IN_MOVED_FROM \ - | IN_MOVED_TO | IN_CREATE | IN_DELETE \ - | IN_DELETE_SELF | IN_MOVE_SELF) - - -__BEGIN_DECLS - -/* Create and initialize inotify instance. */ -extern int inotify_init (void) __THROW; - -/* Create and initialize inotify instance. */ -extern int inotify_init1 (int __flags) __THROW; - -/* Add watch of object NAME to inotify instance FD. Notify about - events specified by MASK. */ -extern int inotify_add_watch (int __fd, const char *__name, uint32_t __mask) - __THROW; - -/* Remove the watch specified by WD from the inotify instance FD. */ -extern int inotify_rm_watch (int __fd, int __wd) __THROW; - -__END_DECLS - -#endif /* sys/inotify.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h deleted file mode 100644 index 6174471807..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/procfs.h +++ /dev/null @@ -1,118 +0,0 @@ -/* Copyright (C) 1996-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_PROCFS_H -#define _SYS_PROCFS_H 1 - -/* This is somewhat modelled after the file of the same name on SVR4 - systems. It provides a definition of the core file format for ELF - used on Linux. It doesn't have anything to do with the /proc file - system, even though Linux has one. - - Anyway, the whole purpose of this file is for GDB and GDB only. - Don't read too much into it. Don't use it for anything other than - GDB unless you know what you are doing. */ - -#include <features.h> -#include <sys/time.h> -#include <sys/types.h> -#include <sys/user.h> - -__BEGIN_DECLS - -typedef unsigned long elf_greg_t; -#define ELF_NGREG 80 /* We only need 64 at present, but leave space - for expansion. */ -typedef elf_greg_t elf_gregset_t[ELF_NGREG]; - -#define ELF_NFPREG 32 -typedef double elf_fpreg_t; -typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG]; - -struct elf_siginfo - { - int si_signo; /* Signal number. */ - int si_code; /* Extra code. */ - int si_errno; /* Errno. */ - }; - -/* Definitions to generate Intel SVR4-like core files. These mostly - have the same names as the SVR4 types with "elf_" tacked on the - front to prevent clashes with Linux definitions, and the typedef - forms have been avoided. This is mostly like the SVR4 structure, - but more Linuxy, with things that Linux does not support and which - GDB doesn't really use excluded. */ - -struct elf_prstatus - { - struct elf_siginfo pr_info; /* Info associated with signal. */ - short int pr_cursig; /* Current signal. */ - unsigned long int pr_sigpend; /* Set of pending signals. */ - unsigned long int pr_sighold; /* Set of held signals. */ - __pid_t pr_pid; - __pid_t pr_ppid; - __pid_t pr_pgrp; - __pid_t pr_sid; - struct timeval pr_utime; /* User time. */ - struct timeval pr_stime; /* System time. */ - struct timeval pr_cutime; /* Cumulative user time. */ - struct timeval pr_cstime; /* Cumulative system time. */ - elf_gregset_t pr_reg; /* GP registers. */ - int pr_fpvalid; /* True if math copro being used. */ - }; - - -#define ELF_PRARGSZ (80) /* Number of chars for args. */ - -struct elf_prpsinfo - { - char pr_state; /* Numeric process state. */ - char pr_sname; /* Char for pr_state. */ - char pr_zomb; /* Zombie. */ - char pr_nice; /* Nice val. */ - unsigned long int pr_flag; /* Flags. */ - unsigned int pr_uid; - unsigned int pr_gid; - int pr_pid, pr_ppid, pr_pgrp, pr_sid; - /* Lots missing */ - char pr_fname[16]; /* Filename of executable. */ - char pr_psargs[ELF_PRARGSZ]; /* Initial part of arg list. */ - }; - - -/* The rest of this file provides the types for emulation of the - Solaris <proc_service.h> interfaces that should be implemented by - users of libthread_db. */ - -/* Addresses. */ -typedef void *psaddr_t; - -/* Register sets. Linux has different names. */ -typedef elf_gregset_t prgregset_t; -typedef elf_fpregset_t prfpregset_t; - -/* We don't have any differences between processes and threads, - therefore have only one PID type. */ -typedef __pid_t lwpid_t; - -/* Process status and info. In the end we do provide typedefs for them. */ -typedef struct elf_prstatus prstatus_t; -typedef struct elf_prpsinfo prpsinfo_t; - -__END_DECLS - -#endif /* sys/procfs.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/signalfd.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/signalfd.h deleted file mode 100644 index d6dc3a7762..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/signalfd.h +++ /dev/null @@ -1,65 +0,0 @@ -/* Copyright (C) 2007-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_SIGNALFD_H -#define _SYS_SIGNALFD_H 1 - -#define __need_sigset_t -#include <signal.h> -#include <stdint.h> - - -struct signalfd_siginfo -{ - uint32_t ssi_signo; - int32_t ssi_errno; - int32_t ssi_code; - uint32_t ssi_pid; - uint32_t ssi_uid; - int32_t ssi_fd; - uint32_t ssi_tid; - uint32_t ssi_band; - uint32_t ssi_overrun; - uint32_t ssi_trapno; - int32_t ssi_status; - int32_t ssi_int; - uint64_t ssi_ptr; - uint64_t ssi_utime; - uint64_t ssi_stime; - uint64_t ssi_addr; - uint8_t __pad[48]; -}; - -/* Flags for signalfd. */ -enum - { - SFD_CLOEXEC = 010000000, -#define SFD_CLOEXEC SFD_CLOEXEC - SFD_NONBLOCK = 00200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define SFD_NONBLOCK SFD_NONBLOCK - }; - -__BEGIN_DECLS - -/* Request notification for delivery of signals in MASK to be - performed using descriptor FD.*/ -extern int signalfd (int __fd, const sigset_t *__mask, int __flags) - __THROW __nonnull ((2)); - -__END_DECLS - -#endif /* sys/signalfd.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/timerfd.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/timerfd.h deleted file mode 100644 index 127e8e4386..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/timerfd.h +++ /dev/null @@ -1,59 +0,0 @@ -/* Copyright (C) 2008-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#ifndef _SYS_TIMERFD_H -#define _SYS_TIMERFD_H 1 - -#include <time.h> - - -/* Bits to be set in the FLAGS parameter of `timerfd_create'. */ -enum - { - TFD_CLOEXEC = 010000000, -#define TFD_CLOEXEC TFD_CLOEXEC - TFD_NONBLOCK = 000200004 /* HPUX has separate NDELAY & NONBLOCK */ -#define TFD_NONBLOCK TFD_NONBLOCK - }; - - -/* Bits to be set in the FLAGS parameter of `timerfd_settime'. */ -enum - { - TFD_TIMER_ABSTIME = 1 << 0 -#define TFD_TIMER_ABSTIME TFD_TIMER_ABSTIME - }; - - -__BEGIN_DECLS - -/* Return file descriptor for new interval timer source. */ -extern int timerfd_create (clockid_t __clock_id, int __flags) __THROW; - -/* Set next expiration time of interval timer source UFD to UTMR. If - FLAGS has the TFD_TIMER_ABSTIME flag set the timeout value is - absolute. Optionally return the old expiration time in OTMR. */ -extern int timerfd_settime (int __ufd, int __flags, - const struct itimerspec *__utmr, - struct itimerspec *__otmr) __THROW; - -/* Return the next expiration time of UFD. */ -extern int timerfd_gettime (int __ufd, struct itimerspec *__otmr) __THROW; - -__END_DECLS - -#endif /* sys/timerfd.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h deleted file mode 100644 index 6c80433256..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/ucontext.h +++ /dev/null @@ -1,66 +0,0 @@ -/* Copyright (C) 1997-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* Don't rely on this, the interface is currently messed up and may need to - be broken to be fixed. */ -#ifndef _SYS_UCONTEXT_H -#define _SYS_UCONTEXT_H 1 - -#include <features.h> -#include <signal.h> - -/* We need the signal context definitions even if they are not used - included in <signal.h>. */ -#include <bits/sigcontext.h> - - -/* Type for general register. */ -typedef unsigned long int greg_t; - -/* Number of general registers. */ -#define NGREG 80 -#define NFPREG 32 - -/* Container for all general registers. */ -typedef struct gregset - { - greg_t g_regs[32]; - greg_t sr_regs[8]; - greg_t cr_regs[24]; - greg_t g_pad[16]; - } gregset_t; - -/* Container for all FPU registers. */ -typedef struct fpregset - { - double fp_dregs[32]; - } fpregset_t; - -/* Context to describe whole processor state. */ -typedef struct sigcontext mcontext_t; - -/* Userlevel context. */ -typedef struct ucontext - { - unsigned long int uc_flags; - struct ucontext *uc_link; - stack_t uc_stack; - mcontext_t uc_mcontext; - __sigset_t uc_sigmask; - } ucontext_t; - -#endif /* sys/ucontext.h */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sys/user.h b/ports/sysdeps/unix/sysv/linux/hppa/sys/user.h deleted file mode 100644 index c871f1a03d..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sys/user.h +++ /dev/null @@ -1 +0,0 @@ -/* This file is not needed, but in practice gdb might try to include it. */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/syscall.S b/ports/sysdeps/unix/sysv/linux/hppa/syscall.S deleted file mode 100644 index 3efbd5a58f..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/syscall.S +++ /dev/null @@ -1,18 +0,0 @@ -/* Copyright (C) 1995-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -/* HPPA implements syscall() in 'C'; see sysdep.c. */ diff --git a/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list b/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list deleted file mode 100644 index ae462edfe7..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/syscalls.list +++ /dev/null @@ -1,39 +0,0 @@ -# File name Caller Syscall name # args Strong name Weak names - -# semaphore and shm system calls -msgctl - msgctl i:iip __msgctl msgctl -msgget - msgget i:ii __msgget msgget -msgrcv - msgrcv Ci:ibnii __msgrcv msgrcv -msgsnd - msgsnd Ci:ibni __msgsnd msgsnd -shmat - shmat i:ipi __shmat shmat -shmctl - shmctl i:iip __shmctl shmctl -shmdt - shmdt i:s __shmdt shmdt -shmget - shmget i:iii __shmget shmget -semop - semop i:ipi __semop semop -semtimedop - semtimedop i:ipip semtimedop -semget - semget i:iii __semget semget -semctl - semctl i:iiii __semctl semctl - -# proper socket implementations: -accept - accept Ci:iBN __libc_accept __accept accept -bind - bind i:ipi __bind bind -connect - connect Ci:ipi __libc_connect __connect_internal __connect connect -getpeername - getpeername i:ipp __getpeername getpeername -getsockname - getsockname i:ipp __getsockname getsockname -getsockopt - getsockopt i:iiiBN __getsockopt getsockopt -listen - listen i:ii __listen listen -recv - recv Ci:ibni __libc_recv __recv recv -recvfrom - recvfrom Ci:ibniBN __libc_recvfrom __recvfrom recvfrom -recvmsg - recvmsg Ci:ipi __libc_recvmsg __recvmsg recvmsg -send - send Ci:ibni __libc_send __send send -sendmsg - sendmsg Ci:ipi __libc_sendmsg __sendmsg sendmsg -sendto - sendto Ci:ibnibn __libc_sendto __sendto sendto -setsockopt - setsockopt i:iiibn __setsockopt setsockopt -shutdown - shutdown i:ii __shutdown shutdown -socket - socket i:iii __socket socket -socketpair - socketpair i:iiif __socketpair socketpair - -setrlimit - setrlimit i:ip __setrlimit setrlimit -getrlimit - getrlimit i:ip __getrlimit getrlimit -prlimit64 EXTRA prlimit64 i:iipp __prlimit64 prlimit64@@GLIBC_2.17 -fanotify_mark EXTRA fanotify_mark i:iiiiis __fanotify_mark fanotify_mark@@GLIBC_2.19 diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.c b/ports/sysdeps/unix/sysv/linux/hppa/sysdep.c deleted file mode 100644 index f7cd526d25..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.c +++ /dev/null @@ -1,78 +0,0 @@ -/* Copyright (C) 1997-2014 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 Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <stdarg.h> -#include <sysdep.h> -#include <errno.h> - -extern int __syscall_error(int err_no); -extern long int syscall (long int __sysno, ...) __THROW; - -/* This routine is jumped to by all the syscall handlers, to stash - an error number into errno. */ -int -__syscall_error (int err_no) -{ - __set_errno (err_no); - return -1; -} - - -/* HPPA implements syscall() in 'C'; the assembler version would - typically be in syscall.S. Also note that we have INLINE_SYSCALL, - INTERNAL_SYSCALL, and all the generated pure assembly syscall wrappers. - How often the function is used is unknown. */ - -long int -syscall (long int __sysno, ...) -{ - /* FIXME: Keep this matching INLINE_SYSCALL for hppa */ - va_list args; - long int arg0, arg1, arg2, arg3, arg4, arg5; - long int __sys_res; - - /* Load varargs */ - va_start (args, __sysno); - arg0 = va_arg (args, long int); - arg1 = va_arg (args, long int); - arg2 = va_arg (args, long int); - arg3 = va_arg (args, long int); - arg4 = va_arg (args, long int); - arg5 = va_arg (args, long int); - va_end (args); - - { - register unsigned long int __res asm("r28"); - PIC_REG_DEF - LOAD_ARGS_6 (arg0, arg1, arg2, arg3, arg4, arg5) - asm volatile (SAVE_ASM_PIC - " ble 0x100(%%sr2, %%r0) \n" - " copy %1, %%r20 \n" - LOAD_ASM_PIC - : "=r" (__res) - : "r" (__sysno) PIC_REG_USE ASM_ARGS_6 - : "memory", CALL_CLOB_REGS CLOB_ARGS_6); - __sys_res = __res; - } - if ((unsigned long int) __sys_res >= (unsigned long int) -4095) - { - __set_errno (-__sys_res); - __sys_res = -1; - } - return __sys_res; -} - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h b/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h deleted file mode 100644 index 20af8a76f1..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/sysdep.h +++ /dev/null @@ -1,498 +0,0 @@ -/* Assembler macros for PA-RISC. - Copyright (C) 1999-2014 Free Software Foundation, Inc. - This file is part of the GNU C Library. - Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999. - Linux/PA-RISC changes by Philipp Rumpf, <prumpf@tux.org>, March 2000. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library. If not, see - <http://www.gnu.org/licenses/>. */ - -#include <asm/unistd.h> -#include <sysdeps/generic/sysdep.h> - -/* In order to get __set_errno() definition in INLINE_SYSCALL. */ -#ifndef __ASSEMBLER__ -#include <errno.h> -#endif - -#undef ASM_LINE_SEP -#define ASM_LINE_SEP ! - -#undef SYS_ify -#define SYS_ify(syscall_name) (__NR_##syscall_name) - -/* The vfork, fork, and clone syscalls clobber r19 - * and r21. We list r21 as either clobbered or as an - * input to a 6-argument syscall. We must save and - * restore r19 in both PIC and non-PIC cases. - */ -/* WARNING: TREG must be a callee saves register so - that it doesn't have to be restored after a call - to another function */ -#define TREG 4 -#define SAVE_PIC(SREG) \ - copy %r19, SREG ASM_LINE_SEP \ - .cfi_register 19, SREG -#define LOAD_PIC(LREG) \ - copy LREG , %r19 ASM_LINE_SEP \ - .cfi_restore 19 -/* Inline assembly defines */ -#define TREG_ASM "%r4" /* Cant clobber r3, it holds framemarker */ -#define SAVE_ASM_PIC " copy %%r19, %" TREG_ASM "\n" -#define LOAD_ASM_PIC " copy %" TREG_ASM ", %%r19\n" -#define CLOB_TREG TREG_ASM , -#define PIC_REG_DEF register unsigned long __r19 asm("r19"); -#define PIC_REG_USE , "r" (__r19) - -#ifdef __ASSEMBLER__ - -/* Syntactic details of assembler. */ - -#define ALIGNARG(log2) log2 - -/* For Linux we can use the system call table in the header file - /usr/include/asm/unistd.h - of the kernel. But these symbols do not follow the SYS_* syntax - so we have to redefine the `SYS_ify' macro here. */ -#undef SYS_ify -#define SYS_ify(syscall_name) __NR_##syscall_name - -/* ELF-like local names start with `.L'. */ -#undef L -#define L(name) .L##name - -/* Linux uses a negative return value to indicate syscall errors, - unlike most Unices, which use the condition codes' carry flag. - - Since version 2.1 the return value of a system call might be - negative even if the call succeeded. E.g., the `lseek' system call - might return a large offset. Therefore we must not anymore test - for < 0, but test for a real error by making sure the value in %eax - is a real error number. Linus said he will make sure the no syscall - returns a value in -1 .. -4095 as a valid result so we can safely - test with -4095. */ - -/* We don't want the label for the error handle to be global when we define - it here. */ -/*#ifdef PIC -# define SYSCALL_ERROR_LABEL 0f -#else -# define SYSCALL_ERROR_LABEL syscall_error -#endif*/ - -/* Argument manipulation from the stack for preparing to - make a syscall */ - -#define DOARGS_0 /* nothing */ -#define DOARGS_1 /* nothing */ -#define DOARGS_2 /* nothing */ -#define DOARGS_3 /* nothing */ -#define DOARGS_4 /* nothing */ -#define DOARGS_5 ldw -52(%sp), %r22 ASM_LINE_SEP -#define DOARGS_6 DOARGS_5 ldw -56(%sp), %r21 ASM_LINE_SEP - -#define UNDOARGS_0 /* nothing */ -#define UNDOARGS_1 /* nothing */ -#define UNDOARGS_2 /* nothing */ -#define UNDOARGS_3 /* nothing */ -#define UNDOARGS_4 /* nothing */ -#define UNDOARGS_5 /* nothing */ -#define UNDOARGS_6 /* nothing */ - -/* Define an entry point visible from C. - - There is currently a bug in gdb which prevents us from specifying - incomplete stabs information. Fake some entries here which specify - the current source file. */ -#define ENTRY(name) \ - .text ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .export C_SYMBOL_NAME(name) ASM_LINE_SEP \ - .type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \ - cfi_startproc ASM_LINE_SEP \ - C_LABEL(name) ASM_LINE_SEP \ - .PROC ASM_LINE_SEP \ - .CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \ - .ENTRY ASM_LINE_SEP \ - /* SAVE_RP says we do */ ASM_LINE_SEP \ - stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 2, -20 ASM_LINE_SEP \ - /*FIXME: Call mcount? (carefull with stack!) */ - -/* Some syscall wrappers do not call other functions, and - hence are classified as leaf, so add NO_CALLS for gdb */ -#define ENTRY_LEAF(name) \ - .text ASM_LINE_SEP \ - .align ALIGNARG(4) ASM_LINE_SEP \ - .export C_SYMBOL_NAME(name) ASM_LINE_SEP \ - .type C_SYMBOL_NAME(name),@function ASM_LINE_SEP \ - cfi_startproc ASM_LINE_SEP \ - C_LABEL(name) ASM_LINE_SEP \ - .PROC ASM_LINE_SEP \ - .CALLINFO FRAME=64,NO_CALLS,SAVE_RP,ENTRY_GR=3 ASM_LINE_SEP \ - .ENTRY ASM_LINE_SEP \ - /* SAVE_RP says we do */ ASM_LINE_SEP \ - stw %rp, -20(%sr0,%sp) ASM_LINE_SEP \ - .cfi_offset 2, -20 ASM_LINE_SEP \ - /*FIXME: Call mcount? (carefull with stack!) */ - -#undef END -#define END(name) \ - .EXIT ASM_LINE_SEP \ - .PROCEND ASM_LINE_SEP \ - cfi_endproc ASM_LINE_SEP \ -.size C_SYMBOL_NAME(name), .-C_SYMBOL_NAME(name) ASM_LINE_SEP - -/* If compiled for profiling, call `mcount' at the start - of each function. No, don't bother. gcc will put the - call in for us. */ -#define CALL_MCOUNT /* Do nothing. */ - -/* syscall wrappers consist of - #include <sysdep.h> - PSEUDO(...) - ret - PSEUDO_END(...) - - which means - ENTRY(name) - DO_CALL(...) - bv,n 0(2) -*/ - -#define PSEUDO(name, syscall_name, args) \ - ENTRY (name) ASM_LINE_SEP \ - /* If necc. load args from stack */ ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret \ - /* Return value set by ERRNO code */ ASM_LINE_SEP \ - bv,n 0(2) ASM_LINE_SEP - -#undef PSEUDO_END -#define PSEUDO_END(name) \ - END (name) - -/* We don't set the errno on the return from the syscall */ -#define PSEUDO_NOERRNO(name, syscall_name, args) \ - ENTRY_LEAF (name) ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL_NOERRNO (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret_NOERRNO ret - -#undef PSEUDO_END_NOERRNO -#define PSEUDO_END_NOERRNO(name) \ - END (name) - -/* This has to return the error value */ -#undef PSEUDO_ERRVAL -#define PSEUDO_ERRVAL(name, syscall_name, args) \ - ENTRY_LEAF (name) ASM_LINE_SEP \ - DOARGS_##args ASM_LINE_SEP \ - DO_CALL_ERRVAL (syscall_name, args) ASM_LINE_SEP \ - UNDOARGS_##args ASM_LINE_SEP - -#define ret_ERRVAL ret - -#undef PSEUDO_END_ERRVAL -#define PSEUDO_END_ERRVAL(name) \ - END(name) - -#undef JUMPTARGET -#define JUMPTARGET(name) name -#define SYSCALL_PIC_SETUP /* Nothing. */ - - -/* FIXME: This comment is not true. - * All the syscall assembly macros rely on finding the appropriate - SYSCALL_ERROR_LABEL or rather HANDLER. */ - -/* int * __errno_location(void) so you have to store your value - into the return address! */ -#define DEFAULT_SYSCALL_ERROR_HANDLER \ - .import __errno_location,code ASM_LINE_SEP \ - /* branch to errno handler */ ASM_LINE_SEP \ - bl __errno_location,%rp ASM_LINE_SEP - -/* Here are the myriad of configuration options that the above can - work for... what we've done is provide the framework for future - changes if required to each section */ - -#ifdef PIC -# if RTLD_PRIVATE_ERRNO -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else /* !RTLD_PRIVATE_ERRNO */ -# if defined _LIBC_REENTRANT -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else /* !_LIBC_REENTRANT */ -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# endif /* _LIBC_REENTRANT */ -# endif /* RTLD_PRIVATE_ERRNO */ -#else -# ifndef _LIBC_REENTRANT -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# else -# define SYSCALL_ERROR_HANDLER DEFAULT_SYSCALL_ERROR_HANDLER -# endif -#endif - - -/* Linux takes system call arguments in registers: - syscall number gr20 - arg 1 gr26 - arg 2 gr25 - arg 3 gr24 - arg 4 gr23 - arg 5 gr22 - arg 6 gr21 - - The compiler calls us by the C convention: - syscall number in the DO_CALL macro - arg 1 gr26 - arg 2 gr25 - arg 3 gr24 - arg 4 gr23 - arg 5 -52(sp) - arg 6 -56(sp) - - gr22 and gr21 are caller-saves, so we can just load the arguments - there and generally be happy. */ - -/* the cmpb...no_error code below inside DO_CALL - * is intended to mimic the if (__sys_res...) - * code inside INLINE_SYSCALL - */ -#define NO_ERROR -0x1000 - -#undef DO_CALL -#define DO_CALL(syscall_name, args) \ - /* Create a frame */ ASM_LINE_SEP \ - stwm TREG, 64(%sp) ASM_LINE_SEP \ - .cfi_offset TREG, 0 ASM_LINE_SEP \ - .cfi_adjust_cfa_offset 64 ASM_LINE_SEP \ - stw %sp, -4(%sp) ASM_LINE_SEP \ - .cfi_offset 30, -4 ASM_LINE_SEP \ - stw %r19, -32(%sp) ASM_LINE_SEP \ - .cfi_offset 19, -32 ASM_LINE_SEP \ - /* Save r19 */ ASM_LINE_SEP \ - SAVE_PIC(TREG) ASM_LINE_SEP \ - /* Do syscall, delay loads # */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,L(pre_end) ASM_LINE_SEP \ - /* Restore r19 from TREG */ ASM_LINE_SEP \ - LOAD_PIC(TREG) /* delay */ ASM_LINE_SEP \ - SYSCALL_ERROR_HANDLER ASM_LINE_SEP \ - /* Use TREG for temp storage */ ASM_LINE_SEP \ - copy %ret0, TREG /* delay */ ASM_LINE_SEP \ - /* OPTIMIZE: Don't reload r19 */ ASM_LINE_SEP \ - /* do a -1*syscall_ret0 */ ASM_LINE_SEP \ - sub %r0, TREG, TREG ASM_LINE_SEP \ - /* Store into errno location */ ASM_LINE_SEP \ - stw TREG, 0(%sr0,%ret0) ASM_LINE_SEP \ - /* return -1 as error */ ASM_LINE_SEP \ - ldo -1(%r0), %ret0 ASM_LINE_SEP \ -L(pre_end): ASM_LINE_SEP \ - /* Restore our frame, restoring TREG */ ASM_LINE_SEP \ - ldwm -64(%sp), TREG ASM_LINE_SEP \ - .cfi_adjust_cfa_offset -64 ASM_LINE_SEP \ - /* Restore return pointer */ ASM_LINE_SEP \ - ldw -20(%sp),%rp ASM_LINE_SEP \ - .cfi_restore 2 ASM_LINE_SEP - -/* We do nothing with the return, except hand it back to someone else */ -#undef DO_CALL_NOERRNO -#define DO_CALL_NOERRNO(syscall_name, args) \ - /* No need to store r19 */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - /* Caller will restore r19 */ ASM_LINE_SEP - -/* Here, we return the ERRVAL in assembly, note we don't call the - error handler function, but we do 'negate' the return _IF_ - it's an error. Not sure if this is the right semantic. */ - -#undef DO_CALL_ERRVAL -#define DO_CALL_ERRVAL(syscall_name, args) \ - /* No need to store r19 */ ASM_LINE_SEP \ - ble 0x100(%sr2,%r0) ASM_LINE_SEP \ - ldi SYS_ify (syscall_name), %r20 ASM_LINE_SEP \ - /* Caller will restore r19 */ ASM_LINE_SEP \ - ldi NO_ERROR,%r1 ASM_LINE_SEP \ - cmpb,>>=,n %r1,%ret0,0f ASM_LINE_SEP \ - sub %r0, %ret0, %ret0 ASM_LINE_SEP \ -0: ASM_LINE_SEP - - -#else - -/* GCC has to be warned that a syscall may clobber all the ABI - registers listed as "caller-saves", see page 8, Table 2 - in section 2.2.6 of the PA-RISC RUN-TIME architecture - document. However! r28 is the result and will conflict with - the clobber list so it is left out. Also the input arguments - registers r20 -> r26 will conflict with the list so they - are treated specially. Although r19 is clobbered by the syscall - we cannot say this because it would violate ABI, thus we say - TREG is clobbered and use that register to save/restore r19 - across the syscall. */ - -#define CALL_CLOB_REGS "%r1", "%r2", CLOB_TREG \ - "%r20", "%r29", "%r31" - -#undef INLINE_SYSCALL -#define INLINE_SYSCALL(name, nr, args...) \ -({ \ - long __sys_res; \ - { \ - register unsigned long __res asm("r28"); \ - PIC_REG_DEF \ - LOAD_ARGS_##nr(args) \ - /* FIXME: HACK save/load r19 around syscall */ \ - asm volatile( \ - SAVE_ASM_PIC \ - " ble 0x100(%%sr2, %%r0)\n" \ - " ldi %1, %%r20\n" \ - LOAD_ASM_PIC \ - : "=r" (__res) \ - : "i" (SYS_ify(name)) PIC_REG_USE ASM_ARGS_##nr \ - : "memory", CALL_CLOB_REGS CLOB_ARGS_##nr \ - ); \ - __sys_res = (long)__res; \ - } \ - if ( (unsigned long)__sys_res >= (unsigned long)-4095 ){ \ - __set_errno(-__sys_res); \ - __sys_res = -1; \ - } \ - __sys_res; \ -}) - -/* INTERNAL_SYSCALL_DECL - Allows us to setup some function static - value to use within the context of the syscall - INTERNAL_SYSCALL_ERROR_P - Returns 0 if it wasn't an error, 1 otherwise - You are allowed to use the syscall result (val) and the DECL error - variable to determine what went wrong. - INTERLAL_SYSCALL_ERRNO - Munges the val/err pair into the error number. - In our case we just flip the sign. */ - -#undef INTERNAL_SYSCALL_DECL -#define INTERNAL_SYSCALL_DECL(err) - -#undef INTERNAL_SYSCALL_ERROR_P -#define INTERNAL_SYSCALL_ERROR_P(val, err) \ - ((val < 0) && (val > -4095)) - -#undef INTERNAL_SYSCALL_ERRNO -#define INTERNAL_SYSCALL_ERRNO(val, err) (-(val)) - -/* Similar to INLINE_SYSCALL but we don't set errno */ -#undef INTERNAL_SYSCALL -#define INTERNAL_SYSCALL(name, err, nr, args...) \ -({ \ - long __sys_res; \ - { \ - register unsigned long __res asm("r28"); \ - PIC_REG_DEF \ - LOAD_ARGS_##nr(args) \ - /* FIXME: HACK save/load r19 around syscall */ \ - asm volatile( \ - SAVE_ASM_PIC \ - " ble 0x100(%%sr2, %%r0)\n" \ - " ldi %1, %%r20\n" \ - LOAD_ASM_PIC \ - : "=r" (__res) \ - : "i" (SYS_ify(name)) PIC_REG_USE ASM_ARGS_##nr \ - : "memory", CALL_CLOB_REGS CLOB_ARGS_##nr \ - ); \ - __sys_res = (long)__res; \ - } \ - __sys_res; \ - }) - - -/* The _NCS variant allows non-constant syscall numbers. */ -#undef INTERNAL_SYSCALL_NCS -#define INTERNAL_SYSCALL_NCS(name, err, nr, args...) \ -({ \ - long __sys_res; \ - { \ - register unsigned long __res asm("r28"); \ - PIC_REG_DEF \ - LOAD_ARGS_##nr(args) \ - /* FIXME: HACK save/load r19 around syscall */ \ - asm volatile( \ - SAVE_ASM_PIC \ - " ble 0x100(%%sr2, %%r0)\n" \ - " copy %1, %%r20\n" \ - LOAD_ASM_PIC \ - : "=r" (__res) \ - : "r" (name) PIC_REG_USE ASM_ARGS_##nr \ - : "memory", CALL_CLOB_REGS CLOB_ARGS_##nr \ - ); \ - __sys_res = (long)__res; \ - } \ - __sys_res; \ - }) - - - -#define LOAD_ARGS_0() -#define LOAD_ARGS_1(r26) \ - register unsigned long __r26 __asm__("r26") = (unsigned long)(r26); \ - LOAD_ARGS_0() -#define LOAD_ARGS_2(r26,r25) \ - register unsigned long __r25 __asm__("r25") = (unsigned long)(r25); \ - LOAD_ARGS_1(r26) -#define LOAD_ARGS_3(r26,r25,r24) \ - register unsigned long __r24 __asm__("r24") = (unsigned long)(r24); \ - LOAD_ARGS_2(r26,r25) -#define LOAD_ARGS_4(r26,r25,r24,r23) \ - register unsigned long __r23 __asm__("r23") = (unsigned long)(r23); \ - LOAD_ARGS_3(r26,r25,r24) -#define LOAD_ARGS_5(r26,r25,r24,r23,r22) \ - register unsigned long __r22 __asm__("r22") = (unsigned long)(r22); \ - LOAD_ARGS_4(r26,r25,r24,r23) -#define LOAD_ARGS_6(r26,r25,r24,r23,r22,r21) \ - register unsigned long __r21 __asm__("r21") = (unsigned long)(r21); \ - LOAD_ARGS_5(r26,r25,r24,r23,r22) - -/* Even with zero args we use r20 for the syscall number */ -#define ASM_ARGS_0 -#define ASM_ARGS_1 ASM_ARGS_0, "r" (__r26) -#define ASM_ARGS_2 ASM_ARGS_1, "r" (__r25) -#define ASM_ARGS_3 ASM_ARGS_2, "r" (__r24) -#define ASM_ARGS_4 ASM_ARGS_3, "r" (__r23) -#define ASM_ARGS_5 ASM_ARGS_4, "r" (__r22) -#define ASM_ARGS_6 ASM_ARGS_5, "r" (__r21) - -/* The registers not listed as inputs but clobbered */ -#define CLOB_ARGS_6 -#define CLOB_ARGS_5 CLOB_ARGS_6, "%r21" -#define CLOB_ARGS_4 CLOB_ARGS_5, "%r22" -#define CLOB_ARGS_3 CLOB_ARGS_4, "%r23" -#define CLOB_ARGS_2 CLOB_ARGS_3, "%r24" -#define CLOB_ARGS_1 CLOB_ARGS_2, "%r25" -#define CLOB_ARGS_0 CLOB_ARGS_1, "%r26" - -#endif /* __ASSEMBLER__ */ - -/* Pointer mangling is not yet supported for HPPA. */ -#define PTR_MANGLE(var) (void) (var) -#define PTR_DEMANGLE(var) (void) (var) - diff --git a/ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym b/ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym deleted file mode 100644 index ee33029a07..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/ucontext_i.sym +++ /dev/null @@ -1,59 +0,0 @@ -#include <stddef.h> -#include <signal.h> -#include <sys/ucontext.h> - --- - -SIG_BLOCK -SIG_SETMASK - -#define ucontext(member) offsetof (ucontext_t, member) -#define mcontext(member) ucontext (uc_mcontext.member) -#define mreg(reg) mcontext (sc_gr[reg]) - -oUC_FLAGS ucontext (uc_flags) -oUC_LINK ucontext (uc_link) -oSS_SP ucontext (uc_stack.ss_sp) -oSS_FLAGS ucontext (uc_stack.ss_flags) -oSS_SIZE ucontext (uc_stack.ss_size) -oSC_FLAGS mcontext (sc_flags) -oR0 mreg (0) -oR1 mreg (1) -oR2 mreg (2) -oR3 mreg (3) -oR4 mreg (4) -oR5 mreg (5) -oR6 mreg (6) -oR7 mreg (7) -oR8 mreg (8) -oR9 mreg (9) -oR10 mreg (10) -oR11 mreg (11) -oR12 mreg (12) -oR13 mreg (13) -oR14 mreg (14) -oR15 mreg (15) -oR16 mreg (16) -oR17 mreg (17) -oR18 mreg (18) -oR19 mreg (19) -oR20 mreg (20) -oR21 mreg (21) -oR22 mreg (22) -oR23 mreg (23) -oR24 mreg (24) -oR25 mreg (25) -oR26 mreg (26) -oR27 mreg (27) -oR28 mreg (28) -oR29 mreg (29) -oR30 mreg (30) -oR31 mreg (31) -oFPREGS0 mcontext (sc_fr[0]) -oFPREGS31 mcontext (sc_fr[31]) -oIASQ0 mcontext (sc_iasq[0]) -oIASQ1 mcontext (sc_iasq[1]) -oIAOQ0 mcontext (sc_iaoq[0]) -oIAOQ1 mcontext (sc_iaoq[1]) -oSAR mcontext (sc_sar) -oSIGMASK ucontext (uc_sigmask) diff --git a/ports/sysdeps/unix/sysv/linux/hppa/umount.c b/ports/sysdeps/unix/sysv/linux/hppa/umount.c deleted file mode 100644 index 208fbec994..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/umount.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/mips/mips64/umount.c> diff --git a/ports/sysdeps/unix/sysv/linux/hppa/xstat.c b/ports/sysdeps/unix/sysv/linux/hppa/xstat.c deleted file mode 100644 index e9869f5508..0000000000 --- a/ports/sysdeps/unix/sysv/linux/hppa/xstat.c +++ /dev/null @@ -1 +0,0 @@ -#include <sysdeps/unix/sysv/linux/i386/xstat.c> |