diff options
Diffstat (limited to 'sysdeps/hppa')
77 files changed, 970 insertions, 868 deletions
diff --git a/sysdeps/hppa/Makefile b/sysdeps/hppa/Makefile index 08098a8d20..e62838baf0 100644 --- a/sysdeps/hppa/Makefile +++ b/sysdeps/hppa/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2000-2016 Free Software Foundation, Inc. +# Copyright (C) 2000-2018 Free Software Foundation, Inc. # This file is part of the GNU C Library. # Contributed by David Huggins-Daines (dhd@debian.org) diff --git a/sysdeps/hppa/__longjmp.c b/sysdeps/hppa/__longjmp.c index bc14a51c0f..a90678d55f 100644 --- a/sysdeps/hppa/__longjmp.c +++ b/sysdeps/hppa/__longjmp.c @@ -1,5 +1,5 @@ /* longjmp for PA-RISC. - Copyright (C) 1997-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2018 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 @@ -24,15 +24,15 @@ void __longjmp (__jmp_buf env, int val) { +#ifdef CHECK_SP + CHECK_SP (env[0].__jmp_buf.__sp); +#endif + /* 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" @@ -79,6 +79,7 @@ __longjmp (__jmp_buf env, int val) : /* No outputs. */ : "r" (r25), "r" (r26) : /* No point in clobbers. */ ); + /* Avoid `volatile function does return' warnings. */ for (;;); } diff --git a/sysdeps/hppa/add_n.S b/sysdeps/hppa/add_n.S index 0c5745774e..10f9368acb 100644 --- a/sysdeps/hppa/add_n.S +++ b/sysdeps/hppa/add_n.S @@ -1,7 +1,7 @@ ;! 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-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/bits/link.h b/sysdeps/hppa/bits/link.h index f83e107191..e070db11ab 100644 --- a/sysdeps/hppa/bits/link.h +++ b/sysdeps/hppa/bits/link.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2016 Free Software Foundation, Inc. +/* Copyright (C) 2005-2018 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 diff --git a/sysdeps/hppa/bits/setjmp.h b/sysdeps/hppa/bits/setjmp.h index 93b2c74c86..f36c4ced57 100644 --- a/sysdeps/hppa/bits/setjmp.h +++ b/sysdeps/hppa/bits/setjmp.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Copyright (C) 2000-2018 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 diff --git a/sysdeps/hppa/bsd-_setjmp.S b/sysdeps/hppa/bsd-_setjmp.S index 51321d2bd4..843f8ed933 100644 --- a/sysdeps/hppa/bsd-_setjmp.S +++ b/sysdeps/hppa/bsd-_setjmp.S @@ -1,5 +1,5 @@ /* BSD `_setjmp' entry point to `sigsetjmp (..., 0)'. HPPA version. - Copyright (C) 2001-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2018 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 diff --git a/sysdeps/hppa/bsd-setjmp.S b/sysdeps/hppa/bsd-setjmp.S index 49b2ff7bb7..75681ad82d 100644 --- a/sysdeps/hppa/bsd-setjmp.S +++ b/sysdeps/hppa/bsd-setjmp.S @@ -1,5 +1,5 @@ /* BSD `setjmp' entry point to `sigsetjmp (..., 1)'. HPPA version. - Copyright (C) 2001-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2018 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 diff --git a/sysdeps/hppa/crti.S b/sysdeps/hppa/crti.S index 6e2bc7d2ba..28550e5758 100644 --- a/sysdeps/hppa/crti.S +++ b/sysdeps/hppa/crti.S @@ -1,5 +1,5 @@ /* Special .init and .fini section support for HPPA - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 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 @@ -49,28 +49,111 @@ # define PREINIT_FUNCTION_WEAK 1 #endif +#if PREINIT_FUNCTION_WEAK + weak_extern (PREINIT_FUNCTION) +#else + .hidden PREINIT_FUNCTION +#endif + + +/* If we have working .init_array support, we want to keep the .init + section empty (apart from the mandatory prologue/epilogue. This + ensures that the default unwind conventions (return-pointer in b0, + frame state in ar.pfs, etc.) will do the Right Thing. To ensure + an empty .init section, we register gmon_initializer() via the + .init_array. + + --davidm 02/10/29 */ + +#if PREINIT_FUNCTION_WEAK +/* This blob of assembly code is one simple C function: + +static void +__attribute__ ((used)) +gmon_initializer (void) +{ + extern void weak_function __gmon_start__ (void); + + if (__gmon_start__) + (*__gmon_start__)(); +} + +In a final executable, PLABEL32 relocations for function pointers are +resolved at link time. Typically, binutils/ld resolves __gmon_start__ +using an external shared library. __gmon_start__ is always called if +it is found at link time. If __gmon_start__ is not found at runtime +due to a library update, then the function pointer will point at a null +function descriptor and calling it will cause a segmentation fault. +So, we call __canonicalize_funcptr_for_compare to obtain the canonicalized +address of __gmon_start__ and skip calling __gmon_start__ if it is zero. + + */ + .type __canonicalize_funcptr_for_compare,@function + .type $$dyncall,@function + + .section .data.rel.ro,"aw",@progbits + .align 4 +.LC0: + .type __gmon_start__,@function + .word P%__gmon_start__ + + .text + .align 4 + .type gmon_initializer,@function +gmon_initializer: + .PROC + .CALLINFO FRAME=64,CALLS,SAVE_RP,ENTRY_GR=4 + .ENTRY + stw %r2,-20(%r30) + stwm %r4,64(%r30) + stw %r3,-60(%r30) + addil LT'.LC0,%r19 + ldw RT'.LC0(%r1),%r28 + ldw 0(%r28),%r3 + comib,= 0,%r3,1f + copy %r19,%r4 + stw %r19,-32(%r30) + bl __canonicalize_funcptr_for_compare,%r2 + copy %r3,%r26 + comib,= 0,%r28,1f + copy %r4,%r19 + copy %r3,%r22 + .CALL ARGW0=GR + bl $$dyncall,%r31 + copy %r31,%r2 +1: + ldw -84(%r30),%r2 + ldw -60(%r30),%r3 + bv %r0(%r2) + ldwm -64(%r30),%r4 + .EXIT + .PROCEND + .size gmon_initializer, .-gmon_initializer + +# undef PREINIT_FUNCTION +# define PREINIT_FUNCTION gmon_initializer +#endif + + .section .init_array, "aw" + .word P% PREINIT_FUNCTION + + /* _init prologue. */ .section .init, "ax", %progbits .align 4 .globl _init + .hidden _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 + .hidden _fini .type _fini,@function _fini: stw %rp,-20(%sp) diff --git a/sysdeps/hppa/crtn.S b/sysdeps/hppa/crtn.S index acd41d3ec8..69562d00b4 100644 --- a/sysdeps/hppa/crtn.S +++ b/sysdeps/hppa/crtn.S @@ -1,5 +1,5 @@ /* Special .init and .fini section support for HPPA - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 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 @@ -38,27 +38,6 @@ /* 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 diff --git a/sysdeps/hppa/dl-fptr.c b/sysdeps/hppa/dl-fptr.c index 083242b7e3..17b93538c3 100644 --- a/sysdeps/hppa/dl-fptr.c +++ b/sysdeps/hppa/dl-fptr.c @@ -1,5 +1,5 @@ /* Manage function descriptors. Generic version. - Copyright (C) 1999-2016 Free Software Foundation, Inc. + Copyright (C) 1999-2018 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 @@ -28,6 +28,7 @@ #include <dl-fptr.h> #include <dl-unmap-segments.h> #include <atomic.h> +#include <libc-pointer-arith.h> #ifndef ELF_MACHINE_BOOT_FPTR_TABLE_LEN /* ELF_MACHINE_BOOT_FPTR_TABLE_LEN should be greater than the number of @@ -181,24 +182,29 @@ make_fdesc (ElfW(Addr) ip, ElfW(Addr) gp) 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 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; + const ElfW(Sym) *symtabend; - /* 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) + /* Determine the end of the dynamic symbol table using the hash. */ + if (map->l_info[DT_HASH] != NULL) + symtabend = (symtab + ((Elf_Symndx *) D_PTR (map, l_info[DT_HASH]))[1]); + else + /* There is no direct way to determine the number of symbols in the + dynamic symbol table and no hash table is present. The ELF + binary is ill-formed but what shall we do? Use the beginning of + the string table which generally follows the symbol table. */ + symtabend = (const ElfW(Sym) *) strtab; + + len = (((char *) symtabend - (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. */ + size = ALIGN_UP (len * sizeof (fptr_table[0]), GLRO(dl_pagesize)); + + /* We don't support systems without MAP_ANON. We avoid using malloc + because this might get called before malloc is setup. */ fptr_table = __mmap (NULL, size, PROT_READ | PROT_WRITE, MAP_ANON | MAP_PRIVATE, -1, 0); @@ -323,30 +329,52 @@ elf_machine_resolve (void) Elf32_Addr addr; asm ("b,l 1f,%0\n" -" depi 0,31,2,%0\n" -"1: addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 8),%0\n" -" ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 12)(%%r1),%0\n" +" addil L'_dl_runtime_resolve - ($PIC_pcrel$0 - 1),%0\n" +"1: ldo R'_dl_runtime_resolve - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (addr) : : "r1"); return addr; } +static inline int +_dl_read_access_allowed (unsigned int *addr) +{ + int result; + + asm ("proberi (%1),3,%0" : "=r" (result) : "r" (addr) : ); + + return result; +} + ElfW(Addr) _dl_lookup_address (const void *address) { ElfW(Addr) addr = (ElfW(Addr)) address; unsigned int *desc, *gptr; - /* Check for special cases. */ - if ((int) addr == -1 - || (unsigned int) addr < 4096 - || !((unsigned int) addr & 2)) + /* Return ADDR if the least-significant two bits of ADDR are not consistent + with ADDR being a linker defined function pointer. The normal value for + a code address in a backtrace is 3. */ + if (((unsigned int) addr & 3) != 2) + return addr; + + /* Handle special case where ADDR points to page 0. */ + if ((unsigned int) addr < 4096) return addr; /* Clear least-significant two bits from descriptor address. */ desc = (unsigned int *) ((unsigned int) addr & ~3); + if (!_dl_read_access_allowed (desc)) + return addr; - /* Check if descriptor requires resolution. The following trampoline is + /* Load first word of candidate descriptor. It should be a pointer + with word alignment and point to memory that can be read. */ + gptr = (unsigned int *) desc[0]; + if (((unsigned int) gptr & 3) != 0 + || !_dl_read_access_allowed (gptr)) + return addr; + + /* See if descriptor requires resolution. The following trampoline is used in each global offset table for function resolution: ldw 0(r20),r22 @@ -358,7 +386,6 @@ _dl_lookup_address (const void *address) .word "_dl_runtime_resolve ltp" got: .word _DYNAMIC .word "struct link map address" */ - gptr = (unsigned int *) desc[0]; if (gptr[0] == 0xea9f1fdd /* b,l .-12,r20 */ && gptr[1] == 0xd6801c1e /* depwi 0,31,2,r20 */ && (ElfW(Addr)) gptr[2] == elf_machine_resolve ()) diff --git a/sysdeps/hppa/dl-fptr.h b/sysdeps/hppa/dl-fptr.h index 8ecfedacfc..81ae07a480 100644 --- a/sysdeps/hppa/dl-fptr.h +++ b/sysdeps/hppa/dl-fptr.h @@ -1,5 +1,5 @@ /* Function descriptors. HPPA version. - Copyright (C) 2003-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2018 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 @@ -31,9 +31,8 @@ extern void _dl_fptr_init (void); #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" \ +" addil L'" #symbol " - ($PIC_pcrel$0 - 1),%0\n" \ +"1: ldo R'" #symbol " - ($PIC_pcrel$0 - 5)(%%r1),%0\n" \ : "=&r" (var) : : "r1"); #endif /* !dl_hppa_fptr_h */ diff --git a/sysdeps/hppa/dl-irel.h b/sysdeps/hppa/dl-irel.h index b01a99d799..d144b658a2 100644 --- a/sysdeps/hppa/dl-irel.h +++ b/sysdeps/hppa/dl-irel.h @@ -1,6 +1,6 @@ /* Machine-dependent ELF indirect relocation inline functions. HP-PARISC version. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 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 diff --git a/sysdeps/hppa/dl-lookupcfg.h b/sysdeps/hppa/dl-lookupcfg.h index 3f1d14aa2f..38db345936 100644 --- a/sysdeps/hppa/dl-lookupcfg.h +++ b/sysdeps/hppa/dl-lookupcfg.h @@ -1,5 +1,5 @@ /* Configuration of lookup functions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 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 @@ -73,7 +73,8 @@ void attribute_hidden _dl_unmap (struct link_map *map); /* 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 }) + (map) ? ((struct fdesc) { (addr), (map)->l_info[DT_PLTGOT]->d_un.d_ptr }) \ + : ((struct fdesc) { 0, 0 }) /* Extract the code address from a fixup value */ #define DL_FIXUP_VALUE_CODE_ADDR(value) ((value).ip) diff --git a/sysdeps/hppa/dl-machine.h b/sysdeps/hppa/dl-machine.h index 9404211819..5f4e0d3823 100644 --- a/sysdeps/hppa/dl-machine.h +++ b/sysdeps/hppa/dl-machine.h @@ -1,5 +1,5 @@ /* Machine-dependent ELF dynamic relocation inline functions. PA-RISC version. - Copyright (C) 1995-2016 Free Software Foundation, Inc. + Copyright (C) 1995-2018 Free Software Foundation, Inc. Contributed by David Huggins-Daines <dhd@debian.org> This file is part of the GNU C Library. @@ -62,7 +62,7 @@ __hppa_init_bootstrap_fdesc_table (struct link_map *map) } #define ELF_MACHINE_BEFORE_RTLD_RELOC(dynamic_info) \ - __hppa_init_bootstrap_fdesc_table (&bootstrap_map); \ + __hppa_init_bootstrap_fdesc_table (BOOTSTRAP_MAP); \ _dl_fptr_init(); /* Return nonzero iff ELF header is compatible with the running host. */ @@ -81,10 +81,9 @@ 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" + asm ("bl 1f,%0\n" +" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 1),%0\n" +"1: ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (dynamic) : : "r1"); return dynamic; @@ -100,10 +99,9 @@ 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" +" bl 1f,%0\n" +" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%0\n" +"1: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%%r1),%0\n" : "=r" (dynamic) : : "r1"); return dynamic - elf_machine_dynamic (); @@ -112,6 +110,7 @@ elf_machine_load_address (void) /* 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 ElfW(Sym) *refsym, const ElfW(Sym) *sym, const Elf32_Rela *reloc, Elf32_Addr *reloc_addr, struct fdesc value) { @@ -302,6 +301,10 @@ elf_machine_runtime_setup (struct link_map *l, int lazy, int profile) #define ARCH_LA_PLTENTER hppa_gnu_pltenter #define ARCH_LA_PLTEXIT hppa_gnu_pltexit +/* Adjust DL_STACK_END to get value we want in __libc_stack_end. */ +#define DL_STACK_END(cookie) \ + ((void *) (((long) (cookie)) + 0x160)) + /* 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. */ @@ -334,14 +337,13 @@ asm ( \ 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" \ +" addil L'_DYNAMIC - ($PIC_pcrel$0 - 1),%r19\n" \ +"0: ldo R'_DYNAMIC - ($PIC_pcrel$0 - 5)(%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" \ +" addil L'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 9),%r19\n" \ +" ldw R'_GLOBAL_OFFSET_TABLE_ - ($PIC_pcrel$0 - 13)(%r1),%r20\n" \ \ " sub %r26,%r20,%r20\n" /* Calculate load offset */ \ \ @@ -401,11 +403,6 @@ asm ( \ /* 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" \ @@ -565,7 +562,7 @@ elf_machine_rela (struct link_map *map, if (sym_map) { - value = sym ? sym_map->l_addr + sym->st_value : 0; + value = SYMBOL_ADDRESS (sym_map, sym, true); value += reloc->r_addend; } else @@ -589,8 +586,8 @@ elf_machine_rela (struct link_map *map, 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 = (SYMBOL_ADDRESS (sym_map, sym, true) + + ((reloc->r_addend + 0x1000) & -0x2000)); value = value >> 11; insn = (insn &~ 0x1fffff) | reassemble_21 (value); *(unsigned int *)reloc_addr = insn; @@ -600,8 +597,8 @@ elf_machine_rela (struct link_map *map, 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); + value = ((SYMBOL_ADDRESS (sym_map, sym, true) & 0x7ff) + + (((reloc->r_addend & 0x1fff) ^ 0x1000) - 0x1000)); insn = (insn &~ 0x3fff) | reassemble_14 (value); *(unsigned int *)reloc_addr = insn; } @@ -653,13 +650,13 @@ elf_machine_rela (struct link_map *map, case R_PARISC_IPLT: if (__builtin_expect (sym_map != NULL, 1)) { - elf_machine_fixup_plt (NULL, sym_map, reloc, reloc_addr, + elf_machine_fixup_plt (NULL, sym_map, NULL, NULL, 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, + elf_machine_fixup_plt (NULL, map, NULL, NULL, reloc, reloc_addr, DL_FIXUP_MAKE_VALUE(map, value)); } return; @@ -693,7 +690,7 @@ elf_machine_rela (struct link_map *map, /* During relocation all TLS symbols are defined and used. Therefore the offset is already correct. */ if (sym != NULL) - *reloc_addr = sym->st_value; + *reloc_addr = sym->st_value + reloc->r_addend; return; case R_PARISC_TLS_TPREL32: diff --git a/sysdeps/hppa/dl-symaddr.c b/sysdeps/hppa/dl-symaddr.c index e03a9489ad..4615dfc5b8 100644 --- a/sysdeps/hppa/dl-symaddr.c +++ b/sysdeps/hppa/dl-symaddr.c @@ -1,5 +1,5 @@ /* Get the symbol address. HPPA version. - Copyright (C) 1999-2016 Free Software Foundation, Inc. + Copyright (C) 1999-2018 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 @@ -23,7 +23,7 @@ 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; + Elf32_Addr value = SYMBOL_ADDRESS (map, ref, false); /* On hppa, we have to return the pointer to function descriptor. This involves an "| 2" to inform $$dyncall that this is a plabel32 */ diff --git a/sysdeps/hppa/dl-tls.h b/sysdeps/hppa/dl-tls.h index 58b9280848..9a2ed59701 100644 --- a/sysdeps/hppa/dl-tls.h +++ b/sysdeps/hppa/dl-tls.h @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2018 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 @@ -26,6 +26,3 @@ typedef struct 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/sysdeps/hppa/dl-trampoline.S b/sysdeps/hppa/dl-trampoline.S index 8123dbea83..7ee4331cc2 100644 --- a/sysdeps/hppa/dl-trampoline.S +++ b/sysdeps/hppa/dl-trampoline.S @@ -1,5 +1,5 @@ /* PLT trampolines. hppa version. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2018 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 @@ -82,6 +82,21 @@ _dl_runtime_resolve: bl _dl_fixup,%rp copy %r21,%r19 /* set fixup func ltp */ + /* While the linker will set a function pointer to NULL when it + encounters an undefined weak function, we need to dynamically + detect removed weak functions. The issue arises because a weak + __gmon_start__ function was added to shared executables to work + around issues in _init that are now resolved. The presence of + __gmon_start__ in every shared library breaks the linker + `--as-needed' option. This __gmon_start__ function does nothing + but removal is tricky. Depending on the binding, removal can + cause an application using it to fault. The call to _dl_fixup + returns NULL when a function isn't resolved. In order to help + with __gmon_start__ removal, we return directly to the caller + when _dl_fixup returns NULL. This check could be removed when + BZ 19170 is fixed. */ + comib,= 0,%r28,1f + /* Load up the returned func descriptor */ copy %r28, %r22 copy %r29, %r19 @@ -107,6 +122,13 @@ _dl_runtime_resolve: /* Jump to new function, but return to previous function */ bv %r0(%r22) ldw -20(%sp),%rp + +1: + /* Return to previous function */ + ldw -148(%sp),%rp + bv %r0(%rp) + ldo -128(%sp),%sp + .EXIT .PROCEND cfi_endproc diff --git a/sysdeps/hppa/fpu/bits/fenv.h b/sysdeps/hppa/fpu/bits/fenv.h index cae9daeb04..fe7474de1b 100644 --- a/sysdeps/hppa/fpu/bits/fenv.h +++ b/sysdeps/hppa/fpu/bits/fenv.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org> @@ -89,3 +89,11 @@ typedef struct /* Floating-point environment where none of the exceptions are masked. */ # define FE_NOMASK_ENV ((const fenv_t *) -2) #endif + +#if __GLIBC_USE (IEC_60559_BFP_EXT) +/* Type representing floating-point control modes. */ +typedef unsigned int femode_t; + +/* Default floating-point control modes. */ +# define FE_DFL_MODE ((const femode_t *) -1L) +#endif diff --git a/sysdeps/hppa/fpu/bits/mathdef.h b/sysdeps/hppa/fpu/bits/mathdef.h deleted file mode 100644 index 99c9cffd25..0000000000 --- a/sysdeps/hppa/fpu/bits/mathdef.h +++ /dev/null @@ -1,43 +0,0 @@ -/* Copyright (C) 2006-2016 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 */ - -#ifndef __NO_LONG_DOUBLE_MATH -/* On hppa `long double' and `double' are 64-bits. So, libm is built - with NO_LONG_DOUBLE defined. The following define ensures the library - and headers are consistent. This disables the declaration of all the - `long double' function variants. */ -# define __NO_LONG_DOUBLE_MATH 1 -#endif diff --git a/sysdeps/hppa/fpu/fclrexcpt.c b/sysdeps/hppa/fpu/fclrexcpt.c index 97da0b5596..49c1778712 100644 --- a/sysdeps/hppa/fpu/fclrexcpt.c +++ b/sysdeps/hppa/fpu/fclrexcpt.c @@ -1,5 +1,5 @@ /* Clear given exceptions in current floating-point environment. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fedisblxcpt.c b/sysdeps/hppa/fpu/fedisblxcpt.c index 7b062604aa..bd03b6b644 100644 --- a/sysdeps/hppa/fpu/fedisblxcpt.c +++ b/sysdeps/hppa/fpu/fedisblxcpt.c @@ -1,5 +1,5 @@ /* Disable floating-point exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/feenablxcpt.c b/sysdeps/hppa/fpu/feenablxcpt.c index dffbf9440c..62fec44dde 100644 --- a/sysdeps/hppa/fpu/feenablxcpt.c +++ b/sysdeps/hppa/fpu/feenablxcpt.c @@ -1,5 +1,5 @@ /* Enable floating-point exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fegetenv.c b/sysdeps/hppa/fpu/fegetenv.c index ec6a963bf2..06c7374a3f 100644 --- a/sysdeps/hppa/fpu/fegetenv.c +++ b/sysdeps/hppa/fpu/fegetenv.c @@ -1,5 +1,5 @@ /* Store current floating-point environment. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fegetexcept.c b/sysdeps/hppa/fpu/fegetexcept.c index e4702502bf..6f58b7d31c 100644 --- a/sysdeps/hppa/fpu/fegetexcept.c +++ b/sysdeps/hppa/fpu/fegetexcept.c @@ -1,5 +1,5 @@ /* Get enabled floating-point exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/frame.h b/sysdeps/hppa/fpu/fegetmode.c index 66777e44d7..7e2e06b67b 100644 --- a/sysdeps/hppa/frame.h +++ b/sysdeps/hppa/fpu/fegetmode.c @@ -1,5 +1,5 @@ -/* Definition of stack frame structure. HPPA version. - Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Store current floating-point control modes. HPPA version. + Copyright (C) 2016-2018 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 @@ -13,15 +13,15 @@ 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 + License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -/* PA stacks grow upwards. */ -#define INNER_THAN > +#include <fenv.h> +#include <fpu_control.h> -/* FIXME: will verify this later */ -struct layout +int +fegetmode (femode_t *modep) { - void *next; - void *return_address; -}; + _FPU_GETCW (*modep); + return 0; +} diff --git a/sysdeps/hppa/fpu/fegetround.c b/sysdeps/hppa/fpu/fegetround.c index 80fabe7d6c..bb82a2e922 100644 --- a/sysdeps/hppa/fpu/fegetround.c +++ b/sysdeps/hppa/fpu/fegetround.c @@ -1,5 +1,5 @@ /* Return current rounding direction. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/feholdexcpt.c b/sysdeps/hppa/fpu/feholdexcpt.c index 98b4b15036..7ae1f3cab9 100644 --- a/sysdeps/hppa/fpu/feholdexcpt.c +++ b/sysdeps/hppa/fpu/feholdexcpt.c @@ -1,5 +1,5 @@ /* Store current floating-point environment and clear exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fesetenv.c b/sysdeps/hppa/fpu/fesetenv.c index 8916e32b85..2cf05f85f5 100644 --- a/sysdeps/hppa/fpu/fesetenv.c +++ b/sysdeps/hppa/fpu/fesetenv.c @@ -1,5 +1,5 @@ /* Install given floating-point environment. - Copyright (C) 1997-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2018 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 diff --git a/sysdeps/hppa/nptl/pthread_spin_lock.c b/sysdeps/hppa/fpu/fesetexcept.c index 2dea818315..eeb0a36223 100644 --- a/sysdeps/hppa/nptl/pthread_spin_lock.c +++ b/sysdeps/hppa/fpu/fesetexcept.c @@ -1,4 +1,5 @@ -/* Copyright (C) 2005-2016 Free Software Foundation, Inc. +/* Set given exception flags. HPPA version. + Copyright (C) 2016-2018 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 @@ -12,12 +13,23 @@ 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 + License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#define SPIN_LOCK_READS_BETWEEN_CMPXCHG 1000 +#include <fenv.h> +#include <fpu_control.h> -/* 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> +int +fesetexcept (int excepts) +{ + fpu_control_t fpsr; + fpu_control_t fpsr_new; + + _FPU_GETCW (fpsr); + excepts &= FE_ALL_EXCEPT; + fpsr_new = fpsr | (excepts << _FPU_HPPA_SHIFT_FLAGS); + if (fpsr != fpsr_new) + _FPU_SETCW (fpsr_new); + + return 0; +} diff --git a/sysdeps/hppa/fpu/fesetmode.c b/sysdeps/hppa/fpu/fesetmode.c new file mode 100644 index 0000000000..cf03bf72d4 --- /dev/null +++ b/sysdeps/hppa/fpu/fesetmode.c @@ -0,0 +1,36 @@ +/* Install given floating-point control modes. HPPA version. + Copyright (C) 2016-2018 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 <fenv.h> +#include <fpu_control.h> + +#define FPU_CONTROL_BITS (_FPU_HPPA_MASK_RM | 0x20 | _FPU_HPPA_MASK_INT) + +int +fesetmode (const femode_t *modep) +{ + fpu_control_t cw; + _FPU_GETCW (cw); + cw &= ~FPU_CONTROL_BITS; + if (modep == FE_DFL_MODE) + cw |= _FPU_DEFAULT; + else + cw |= *modep & FPU_CONTROL_BITS; + _FPU_SETCW (cw); + return 0; +} diff --git a/sysdeps/hppa/fpu/fesetround.c b/sysdeps/hppa/fpu/fesetround.c index 6a444aa077..36ca40801d 100644 --- a/sysdeps/hppa/fpu/fesetround.c +++ b/sysdeps/hppa/fpu/fesetround.c @@ -1,5 +1,5 @@ /* Set current rounding direction. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/feupdateenv.c b/sysdeps/hppa/fpu/feupdateenv.c index 17a2dcd957..be88c0205d 100644 --- a/sysdeps/hppa/fpu/feupdateenv.c +++ b/sysdeps/hppa/fpu/feupdateenv.c @@ -1,5 +1,5 @@ /* Install given floating-point environment and raise exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fgetexcptflg.c b/sysdeps/hppa/fpu/fgetexcptflg.c index c8f7490dcd..2c9aa4e774 100644 --- a/sysdeps/hppa/fpu/fgetexcptflg.c +++ b/sysdeps/hppa/fpu/fgetexcptflg.c @@ -1,5 +1,5 @@ /* Store current representation for exceptions. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/fpu_control.h b/sysdeps/hppa/fpu/fpu_control.h index 5ea8cbc7de..afe355b825 100644 --- a/sysdeps/hppa/fpu/fpu_control.h +++ b/sysdeps/hppa/fpu/fpu_control.h @@ -1,5 +1,5 @@ /* FPU control word definitions. HP-PARISC version. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 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 diff --git a/sysdeps/hppa/fpu/fraiseexcpt.c b/sysdeps/hppa/fpu/fraiseexcpt.c index b6cc6a1017..5fffad4f27 100644 --- a/sysdeps/hppa/fpu/fraiseexcpt.c +++ b/sysdeps/hppa/fpu/fraiseexcpt.c @@ -1,5 +1,5 @@ /* Raise given exceptions. - Copyright (C) 1997-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org> diff --git a/sysdeps/hppa/fpu/fsetexcptflg.c b/sysdeps/hppa/fpu/fsetexcptflg.c index 58350d1a89..0fdd56a40c 100644 --- a/sysdeps/hppa/fpu/fsetexcptflg.c +++ b/sysdeps/hppa/fpu/fsetexcptflg.c @@ -1,5 +1,5 @@ /* Set floating-point environment exception handling. - Copyright (C) 1997-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/ftestexcept.c b/sysdeps/hppa/fpu/ftestexcept.c index ae5b66b50a..fd6548e58d 100644 --- a/sysdeps/hppa/fpu/ftestexcept.c +++ b/sysdeps/hppa/fpu/ftestexcept.c @@ -1,5 +1,5 @@ /* Test exception in current environment. - Copyright (C) 2000-2016 Free Software Foundation, Inc. + Copyright (C) 2000-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by David Huggins-Daines <dhd@debian.org>, 2000 diff --git a/sysdeps/hppa/fpu/libm-test-ulps b/sysdeps/hppa/fpu/libm-test-ulps index 3f1f2fa414..d0c4dea001 100644 --- a/sysdeps/hppa/fpu/libm-test-ulps +++ b/sysdeps/hppa/fpu/libm-test-ulps @@ -1,6 +1,10 @@ # Begin of automatic generation # Maximal error of functions: +Function: "acos": +float: 1 +ifloat: 1 + Function: "acos_downward": double: 1 float: 1 @@ -15,30 +19,36 @@ ifloat: 1 Function: "acos_upward": double: 1 -idouble: 1 - -Function: "acosh": -double: 1 float: 1 idouble: 1 ifloat: 1 +Function: "acosh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + Function: "acosh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "acosh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "acosh_upward": -double: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "asin": float: 1 -idouble: 1 ifloat: 1 Function: "asin_downward": @@ -66,10 +76,10 @@ idouble: 1 ifloat: 1 Function: "asinh_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: "asinh_towardzero": double: 2 @@ -78,9 +88,13 @@ idouble: 2 ifloat: 2 Function: "asinh_upward": -double: 2 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +Function: "atan": float: 1 -idouble: 2 ifloat: 1 Function: "atan2": @@ -107,9 +121,9 @@ ifloat: 2 Function: "atan_downward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 Function: "atan_towardzero": double: 1 @@ -119,33 +133,49 @@ ifloat: 1 Function: "atan_upward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 Function: "atanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "atanh_downward": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +Function: "atanh_towardzero": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + +Function: "atanh_upward": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +Function: "cabs": double: 1 -float: 1 idouble: 1 -ifloat: 1 -Function: "atanh_downward": +Function: "cabs_downward": double: 1 -float: 1 idouble: 1 -ifloat: 1 -Function: "atanh_towardzero": +Function: "cabs_towardzero": double: 1 -float: 1 idouble: 1 -ifloat: 1 -Function: "atanh_upward": +Function: "cabs_upward": double: 1 -float: 1 idouble: 1 -ifloat: 1 Function: Real part of "cacos": double: 1 @@ -154,15 +184,15 @@ idouble: 1 ifloat: 2 Function: Imaginary part of "cacos": -double: 1 +double: 2 float: 2 -idouble: 1 +idouble: 2 ifloat: 2 Function: Real part of "cacos_downward": -double: 1 +double: 3 float: 2 -idouble: 1 +idouble: 3 ifloat: 2 Function: Imaginary part of "cacos_downward": @@ -172,9 +202,9 @@ idouble: 5 ifloat: 3 Function: Real part of "cacos_towardzero": -double: 1 +double: 3 float: 2 -idouble: 1 +idouble: 3 ifloat: 2 Function: Imaginary part of "cacos_towardzero": @@ -190,15 +220,15 @@ idouble: 2 ifloat: 2 Function: Imaginary part of "cacos_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 +double: 5 +float: 7 +idouble: 5 +ifloat: 7 Function: Real part of "cacosh": -double: 1 +double: 2 float: 2 -idouble: 1 +idouble: 2 ifloat: 2 Function: Imaginary part of "cacosh": @@ -214,10 +244,10 @@ idouble: 5 ifloat: 3 Function: Imaginary part of "cacosh_downward": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: Real part of "cacosh_towardzero": double: 5 @@ -226,9 +256,9 @@ idouble: 5 ifloat: 3 Function: Imaginary part of "cacosh_towardzero": -double: 1 +double: 3 float: 2 -idouble: 1 +idouble: 3 ifloat: 2 Function: Real part of "cacosh_upward": @@ -238,11 +268,15 @@ idouble: 4 ifloat: 4 Function: Imaginary part of "cacosh_upward": -double: 2 +double: 3 float: 2 -idouble: 2 +idouble: 3 ifloat: 2 +Function: "carg": +float: 1 +ifloat: 1 + Function: "carg_downward": double: 1 float: 2 @@ -250,8 +284,10 @@ idouble: 1 ifloat: 2 Function: "carg_towardzero": -float: 1 -ifloat: 1 +double: 1 +float: 2 +idouble: 1 +ifloat: 2 Function: "carg_upward": double: 1 @@ -268,16 +304,16 @@ ildouble: 1 ldouble: 1 Function: Imaginary part of "casin": -double: 1 +double: 2 float: 2 -idouble: 1 +idouble: 2 ifloat: 2 Function: Real part of "casin_downward": double: 3 -float: 1 +float: 2 idouble: 3 -ifloat: 1 +ifloat: 2 Function: Imaginary part of "casin_downward": double: 5 @@ -298,16 +334,16 @@ idouble: 5 ifloat: 3 Function: Real part of "casin_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 3 +float: 2 +idouble: 3 +ifloat: 2 Function: Imaginary part of "casin_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 +double: 5 +float: 7 +idouble: 5 +ifloat: 7 Function: Real part of "casinh": double: 5 @@ -333,9 +369,9 @@ ifloat: 3 Function: Imaginary part of "casinh_downward": double: 3 -float: 1 +float: 2 idouble: 3 -ifloat: 1 +ifloat: 2 Function: Real part of "casinh_towardzero": double: 5 @@ -350,19 +386,21 @@ idouble: 3 ifloat: 1 Function: Real part of "casinh_upward": -double: 4 -float: 4 -idouble: 4 -ifloat: 4 +double: 5 +float: 7 +idouble: 5 +ifloat: 7 Function: Imaginary part of "casinh_upward": -double: 1 +double: 3 float: 2 -idouble: 1 +idouble: 3 ifloat: 2 Function: Real part of "catan": +double: 1 float: 1 +idouble: 1 ifloat: 1 Function: Imaginary part of "catan": @@ -375,9 +413,9 @@ ldouble: 1 Function: Real part of "catan_downward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 Function: Imaginary part of "catan_downward": double: 2 @@ -387,15 +425,15 @@ ifloat: 2 Function: Real part of "catan_towardzero": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 Function: Imaginary part of "catan_towardzero": double: 2 -float: 1 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 Function: Real part of "catan_upward": double: 1 @@ -418,7 +456,9 @@ ildouble: 4 ldouble: 4 Function: Imaginary part of "catanh": +double: 1 float: 1 +idouble: 1 ifloat: 1 Function: Real part of "catanh_downward": @@ -435,9 +475,9 @@ ifloat: 2 Function: Real part of "catanh_towardzero": double: 2 -float: 1 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 Function: Imaginary part of "catanh_towardzero": double: 1 @@ -447,9 +487,9 @@ ifloat: 2 Function: Real part of "catanh_upward": double: 4 -float: 3 +float: 4 idouble: 4 -ifloat: 3 +ifloat: 4 Function: Imaginary part of "catanh_upward": double: 1 @@ -458,29 +498,31 @@ idouble: 1 ifloat: 1 Function: "cbrt": -double: 1 +double: 3 float: 1 -idouble: 1 +idouble: 3 ifloat: 1 ildouble: 1 ldouble: 1 Function: "cbrt_downward": -double: 2 +double: 4 float: 1 -idouble: 2 +idouble: 4 ifloat: 1 Function: "cbrt_towardzero": -double: 2 -idouble: 2 - -Function: "cbrt_upward": double: 3 float: 1 idouble: 3 ifloat: 1 +Function: "cbrt_upward": +double: 5 +float: 1 +idouble: 5 +ifloat: 1 + Function: Real part of "ccos": double: 1 float: 1 @@ -593,71 +635,107 @@ float: 2 idouble: 1 ifloat: 2 -Function: Real part of "clog": +Function: Real part of "cexp_downward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 + +Function: Imaginary part of "cexp_downward": +double: 1 +float: 3 +idouble: 1 +ifloat: 3 + +Function: Real part of "cexp_towardzero": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Imaginary part of "cexp_towardzero": +double: 1 +float: 3 +idouble: 1 +ifloat: 3 + +Function: Real part of "cexp_upward": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Imaginary part of "cexp_upward": +double: 1 +float: 2 +idouble: 1 +ifloat: 2 + +Function: Real part of "clog": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: Imaginary part of "clog": float: 1 ifloat: 1 Function: Real part of "clog10": +double: 3 +float: 4 +idouble: 3 +ifloat: 4 + +Function: Imaginary 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: Real part of "clog10_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 +double: 5 +float: 5 +idouble: 5 +ifloat: 5 Function: Imaginary part of "clog10_downward": double: 3 -float: 2 +float: 4 idouble: 3 -ifloat: 2 +ifloat: 4 Function: Real part of "clog10_towardzero": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 +double: 5 +float: 5 +idouble: 5 +ifloat: 5 Function: Imaginary part of "clog10_towardzero": double: 3 -float: 2 +float: 4 idouble: 3 -ifloat: 2 +ifloat: 4 Function: Real part of "clog10_upward": -double: 4 -float: 3 -idouble: 4 -ifloat: 3 +double: 6 +float: 5 +idouble: 6 +ifloat: 5 Function: Imaginary part of "clog10_upward": double: 2 -float: 2 +float: 4 idouble: 2 -ifloat: 2 +ifloat: 4 Function: Real part of "clog_downward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 4 +float: 3 +idouble: 4 +ifloat: 3 Function: Imaginary part of "clog_downward": double: 1 @@ -666,22 +744,22 @@ idouble: 1 ifloat: 2 Function: Real part of "clog_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 4 +float: 4 +idouble: 4 +ifloat: 4 Function: Imaginary part of "clog_towardzero": double: 1 -float: 2 +float: 3 idouble: 1 -ifloat: 2 +ifloat: 3 Function: Real part of "clog_upward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 +double: 4 +float: 3 +idouble: 4 +ifloat: 3 Function: Imaginary part of "clog_upward": double: 2 @@ -703,10 +781,6 @@ float: 2 idouble: 1 ifloat: 2 -Function: "cos_tonearest": -float: 1 -ifloat: 1 - Function: "cos_towardzero": double: 1 float: 1 @@ -731,12 +805,6 @@ float: 1 idouble: 1 ifloat: 1 -Function: "cosh_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - Function: "cosh_towardzero": double: 1 float: 1 @@ -751,9 +819,9 @@ ifloat: 2 Function: Real part of "cpow": double: 2 -float: 4 +float: 5 idouble: 2 -ifloat: 4 +ifloat: 5 ildouble: 2 ldouble: 2 @@ -832,9 +900,9 @@ idouble: 2 ifloat: 2 Function: Real part of "csin_upward": -double: 1 +double: 2 float: 3 -idouble: 1 +idouble: 2 ifloat: 3 Function: Imaginary part of "csin_upward": @@ -856,10 +924,10 @@ ildouble: 1 ldouble: 1 Function: Real part of "csinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: Imaginary part of "csinh_downward": double: 2 @@ -892,52 +960,52 @@ idouble: 2 ifloat: 3 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 "csqrt_downward": -double: 3 -float: 3 -idouble: 3 -ifloat: 3 - -Function: Imaginary part of "csqrt_downward": double: 2 float: 2 idouble: 2 ifloat: 2 -Function: Real part of "csqrt_towardzero": +Function: Imaginary part of "csqrt": double: 2 float: 2 idouble: 2 ifloat: 2 +Function: Real part of "csqrt_downward": +double: 5 +float: 4 +idouble: 5 +ifloat: 4 + +Function: Imaginary part of "csqrt_downward": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 + +Function: Real part of "csqrt_towardzero": +double: 4 +float: 3 +idouble: 4 +ifloat: 3 + Function: Imaginary part of "csqrt_towardzero": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 4 +float: 3 +idouble: 4 +ifloat: 3 Function: Real part of "csqrt_upward": -double: 3 -float: 2 -idouble: 3 -ifloat: 2 +double: 5 +float: 4 +idouble: 5 +ifloat: 4 Function: Imaginary part of "csqrt_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: Real part of "ctan": double: 1 @@ -947,9 +1015,9 @@ ifloat: 1 Function: Imaginary part of "ctan": double: 2 -float: 1 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 ildouble: 1 ldouble: 1 @@ -961,21 +1029,9 @@ 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 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 Function: Real part of "ctan_towardzero": double: 5 @@ -991,9 +1047,9 @@ ifloat: 2 Function: Real part of "ctan_upward": double: 2 -float: 3 +float: 4 idouble: 2 -ifloat: 3 +ifloat: 4 Function: Imaginary part of "ctan_upward": double: 2 @@ -1003,9 +1059,9 @@ ifloat: 3 Function: Real part of "ctanh": double: 2 -float: 1 +float: 2 idouble: 2 -ifloat: 1 +ifloat: 2 ildouble: 1 ldouble: 1 @@ -1017,9 +1073,9 @@ ifloat: 2 Function: Real part of "ctanh_downward": double: 4 -float: 1 +float: 2 idouble: 4 -ifloat: 1 +ifloat: 2 Function: Imaginary part of "ctanh_downward": double: 6 @@ -1027,18 +1083,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 @@ -1065,47 +1109,59 @@ ifloat: 3 Function: "erf": double: 1 +float: 1 idouble: 1 +ifloat: 1 ildouble: 1 ldouble: 1 Function: "erf_downward": +double: 1 float: 1 +idouble: 1 ifloat: 1 Function: "erf_towardzero": +double: 1 float: 1 +idouble: 1 ifloat: 1 Function: "erf_upward": -float: 1 -ifloat: 1 - -Function: "erfc": double: 1 float: 1 idouble: 1 ifloat: 1 + +Function: "erfc": +double: 3 +float: 2 +idouble: 3 +ifloat: 2 ildouble: 1 ldouble: 1 Function: "erfc_downward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 +double: 5 +float: 6 +idouble: 5 +ifloat: 6 Function: "erfc_towardzero": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 +double: 3 +float: 4 +idouble: 3 +ifloat: 4 Function: "erfc_upward": -double: 2 -float: 2 -idouble: 2 -ifloat: 2 +double: 5 +float: 6 +idouble: 5 +ifloat: 6 + +Function: "exp": +float: 1 +ifloat: 1 Function: "exp10": double: 6 @@ -1116,22 +1172,42 @@ ildouble: 6 ldouble: 6 Function: "exp10_downward": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "exp10_towardzero": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "exp10_upward": +double: 2 +float: 1 +idouble: 2 +ifloat: 1 + +Function: "exp2": double: 1 float: 1 idouble: 1 ifloat: 1 -Function: "exp10_tonearest": +Function: "exp2_downward": double: 1 +float: 1 idouble: 1 +ifloat: 1 -Function: "exp10_towardzero": +Function: "exp2_towardzero": double: 1 float: 1 idouble: 1 ifloat: 1 -Function: "exp10_upward": +Function: "exp2_upward": double: 1 float: 1 idouble: 1 @@ -1169,17 +1245,11 @@ float: 1 idouble: 1 ifloat: 1 -Function: "expm1_tonearest": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - Function: "expm1_towardzero": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 Function: "expm1_upward": double: 1 @@ -1188,28 +1258,28 @@ idouble: 1 ifloat: 1 Function: "gamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 +double: 4 +float: 4 +idouble: 4 +ifloat: 4 Function: "gamma_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 +double: 5 +float: 4 +idouble: 5 +ifloat: 4 Function: "gamma_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 5 +float: 4 +idouble: 5 +ifloat: 4 Function: "gamma_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 +double: 5 +float: 5 +idouble: 5 +ifloat: 5 Function: "hypot": double: 1 @@ -1239,9 +1309,9 @@ ldouble: 2 Function: "j0_downward": double: 2 -float: 3 +float: 4 idouble: 2 -ifloat: 3 +ifloat: 4 Function: "j0_towardzero": double: 3 @@ -1265,9 +1335,9 @@ ldouble: 1 Function: "j1_downward": double: 3 -float: 2 +float: 3 idouble: 3 -ifloat: 2 +ifloat: 3 Function: "j1_towardzero": double: 3 @@ -1289,131 +1359,143 @@ ifloat: 5 ildouble: 4 ldouble: 4 +Function: "jn_downward": +double: 5 +float: 5 +idouble: 5 +ifloat: 5 + +Function: "jn_towardzero": +double: 5 +float: 5 +idouble: 5 +ifloat: 5 + +Function: "jn_upward": +double: 5 +float: 5 +idouble: 5 +ifloat: 5 + Function: "lgamma": -double: 1 -float: 2 -idouble: 1 -ifloat: 2 +double: 4 +float: 4 +idouble: 4 +ifloat: 4 ildouble: 1 ldouble: 1 Function: "lgamma_downward": -double: 2 -float: 1 -idouble: 2 -ifloat: 1 +double: 5 +float: 4 +idouble: 5 +ifloat: 4 Function: "lgamma_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 5 +float: 4 +idouble: 5 +ifloat: 4 Function: "lgamma_upward": -double: 1 -float: 3 -idouble: 1 -ifloat: 3 +double: 5 +float: 5 +idouble: 5 +ifloat: 5 Function: "log": float: 1 ifloat: 1 Function: "log10": -double: 1 +double: 2 float: 2 -idouble: 1 +idouble: 2 ifloat: 2 ildouble: 1 ldouble: 1 Function: "log10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 3 +idouble: 2 +ifloat: 3 Function: "log10_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "log10_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "log1p": -float: 1 -ifloat: 1 - -Function: "log1p_downward": double: 1 float: 1 idouble: 1 ifloat: 1 +Function: "log1p_downward": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + Function: "log1p_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "log1p_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "log2_downward": double: 2 float: 2 idouble: 2 ifloat: 2 -Function: "log2_towardzero": -double: 1 +Function: "log2": +double: 2 float: 1 -idouble: 1 +idouble: 2 ifloat: 1 -Function: "log2_upward": +Function: "log2_downward": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 + +Function: "log2_towardzero": double: 2 float: 2 idouble: 2 ifloat: 2 -Function: "log_downward": -float: 1 -ifloat: 1 - -Function: "log_upward": -float: 1 -ifloat: 1 - -Function: "pow": -float: 1 -ifloat: 1 +Function: "log2_upward": +double: 3 +float: 3 +idouble: 3 +ifloat: 3 -Function: "pow10": -double: 1 -idouble: 1 +Function: "log_downward": +float: 2 +ifloat: 2 -Function: "pow10_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +Function: "log_towardzero": +float: 2 +ifloat: 2 -Function: "pow10_towardzero": +Function: "log_upward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 -Function: "pow10_upward": +Function: "pow": double: 1 float: 1 idouble: 1 @@ -1425,10 +1507,6 @@ float: 1 idouble: 1 ifloat: 1 -Function: "pow_tonearest": -float: 1 -ifloat: 1 - Function: "pow_towardzero": double: 1 float: 1 @@ -1442,7 +1520,9 @@ idouble: 1 ifloat: 1 Function: "sin": +double: 1 float: 1 +idouble: 1 ifloat: 1 Function: "sin_downward": @@ -1451,10 +1531,6 @@ float: 2 idouble: 1 ifloat: 2 -Function: "sin_tonearest": -float: 1 -ifloat: 1 - Function: "sin_towardzero": double: 1 float: 1 @@ -1489,31 +1565,39 @@ ifloat: 1 Function: "sincos_upward": double: 1 -float: 1 +float: 2 idouble: 1 -ifloat: 1 +ifloat: 2 + +Function: "sinh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "sinh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: "sinh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "sinh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: "tan": double: 1 +float: 1 idouble: 1 +ifloat: 1 ildouble: 1 ldouble: 1 @@ -1535,32 +1619,56 @@ float: 1 idouble: 1 ifloat: 1 +Function: "tanh": +double: 2 +float: 2 +idouble: 2 +ifloat: 2 + Function: "tanh_downward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 3 +float: 3 +idouble: 3 +ifloat: 3 Function: "tanh_towardzero": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 +double: 2 +float: 2 +idouble: 2 +ifloat: 2 Function: "tanh_upward": -double: 1 -float: 1 -idouble: 1 -ifloat: 1 - -Function: "tgamma": -double: 4 +double: 3 float: 3 -idouble: 4 +idouble: 3 ifloat: 3 + +Function: "tgamma": +double: 5 +float: 4 +idouble: 5 +ifloat: 4 ildouble: 1 ldouble: 1 +Function: "tgamma_downward": +double: 5 +float: 5 +idouble: 5 +ifloat: 5 + +Function: "tgamma_towardzero": +double: 5 +float: 4 +idouble: 5 +ifloat: 4 + +Function: "tgamma_upward": +double: 4 +float: 4 +idouble: 4 +ifloat: 4 + Function: "y0": double: 2 float: 1 @@ -1571,9 +1679,9 @@ ldouble: 2 Function: "y0_downward": double: 3 -float: 2 +float: 4 idouble: 3 -ifloat: 2 +ifloat: 4 Function: "y0_towardzero": double: 3 @@ -1583,9 +1691,9 @@ ifloat: 3 Function: "y0_upward": double: 3 -float: 4 +float: 5 idouble: 3 -ifloat: 4 +ifloat: 5 Function: "y1": double: 3 @@ -1615,17 +1723,17 @@ ifloat: 2 Function: "yn": double: 3 -float: 2 +float: 3 idouble: 3 -ifloat: 2 +ifloat: 3 ildouble: 3 ldouble: 3 Function: "yn_downward": double: 3 -float: 2 +float: 4 idouble: 3 -ifloat: 2 +ifloat: 4 Function: "yn_towardzero": double: 3 @@ -1635,8 +1743,8 @@ ifloat: 3 Function: "yn_upward": double: 4 -float: 4 +float: 5 idouble: 4 -ifloat: 4 +ifloat: 5 # end of automatic generation diff --git a/sysdeps/hppa/fpu/libm-test-ulps-name b/sysdeps/hppa/fpu/libm-test-ulps-name new file mode 100644 index 0000000000..808d1bc741 --- /dev/null +++ b/sysdeps/hppa/fpu/libm-test-ulps-name @@ -0,0 +1 @@ +HPPA diff --git a/sysdeps/hppa/gccframe.h b/sysdeps/hppa/gccframe.h index 18cd40b172..4b8ec5cd9f 100644 --- a/sysdeps/hppa/gccframe.h +++ b/sysdeps/hppa/gccframe.h @@ -1,5 +1,5 @@ /* Definition of object in frame unwind info. hppa version. - Copyright (C) 2001-2016 Free Software Foundation, Inc. + Copyright (C) 2001-2018 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 diff --git a/sysdeps/hppa/get-rounding-mode.h b/sysdeps/hppa/get-rounding-mode.h index 6f189fc023..7e1d03b3f7 100644 --- a/sysdeps/hppa/get-rounding-mode.h +++ b/sysdeps/hppa/get-rounding-mode.h @@ -1,5 +1,5 @@ /* Determine floating-point rounding mode within libc. HP-PARISC version. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 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 diff --git a/sysdeps/hppa/hppa1.1/addmul_1.S b/sysdeps/hppa/hppa1.1/addmul_1.S index 72a794aeb9..3dec0253bf 100644 --- a/sysdeps/hppa/hppa1.1/addmul_1.S +++ b/sysdeps/hppa/hppa1.1/addmul_1.S @@ -1,7 +1,7 @@ ;! 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-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/hppa1.1/mul_1.S b/sysdeps/hppa/hppa1.1/mul_1.S index 7d80056885..fcafd74002 100644 --- a/sysdeps/hppa/hppa1.1/mul_1.S +++ b/sysdeps/hppa/hppa1.1/mul_1.S @@ -1,7 +1,7 @@ ;! 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-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/hppa1.1/s_signbit.c b/sysdeps/hppa/hppa1.1/s_signbit.c index 8ec4c77079..6139c5a6fd 100644 --- a/sysdeps/hppa/hppa1.1/s_signbit.c +++ b/sysdeps/hppa/hppa1.1/s_signbit.c @@ -1,5 +1,5 @@ /* Return nonzero value if number is negative. - Copyright (C) 1997-2016 Free Software Foundation, Inc. + Copyright (C) 1997-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. diff --git a/sysdeps/hppa/hppa1.1/submul_1.S b/sysdeps/hppa/hppa1.1/submul_1.S index d047ce98ad..cfcf2db85a 100644 --- a/sysdeps/hppa/hppa1.1/submul_1.S +++ b/sysdeps/hppa/hppa1.1/submul_1.S @@ -1,7 +1,7 @@ ;! 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-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/hppa1.1/udiv_qrnnd.S b/sysdeps/hppa/hppa1.1/udiv_qrnnd.S index 4f7117f8b0..74069f7ace 100644 --- a/sysdeps/hppa/hppa1.1/udiv_qrnnd.S +++ b/sysdeps/hppa/hppa1.1/udiv_qrnnd.S @@ -1,7 +1,7 @@ ;! HP-PA __udiv_qrnnd division support, used from longlong.h. ;! This version runs fast on PA 7000 and later. -;! Copyright (C) 1993-2016 Free Software Foundation, Inc. +;! Copyright (C) 1993-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/jmpbuf-offsets.h b/sysdeps/hppa/jmpbuf-offsets.h index fd2b341452..b01f47453f 100644 --- a/sysdeps/hppa/jmpbuf-offsets.h +++ b/sysdeps/hppa/jmpbuf-offsets.h @@ -1,5 +1,5 @@ /* Private macros for accessing __jmp_buf contents. HPPA version. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2018 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 diff --git a/sysdeps/hppa/jmpbuf-unwind.h b/sysdeps/hppa/jmpbuf-unwind.h index d5723803fd..9e38981389 100644 --- a/sysdeps/hppa/jmpbuf-unwind.h +++ b/sysdeps/hppa/jmpbuf-unwind.h @@ -1,5 +1,5 @@ /* Examine __jmp_buf for unwinding frames. HPPA version. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2018 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 diff --git a/sysdeps/hppa/ldsodefs.h b/sysdeps/hppa/ldsodefs.h index b120a218bc..292fdbef4e 100644 --- a/sysdeps/hppa/ldsodefs.h +++ b/sysdeps/hppa/ldsodefs.h @@ -1,5 +1,5 @@ /* Run-time dynamic linker data structures for loaded ELF shared objects. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2018 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 diff --git a/sysdeps/hppa/libc-tls.c b/sysdeps/hppa/libc-tls.c index b58bd04c35..9e9aa94903 100644 --- a/sysdeps/hppa/libc-tls.c +++ b/sysdeps/hppa/libc-tls.c @@ -1,5 +1,5 @@ /* Thread-local storage handling in the ELF dynamic linker. hppa version. - Copyright (C) 2003-2016 Free Software Foundation, Inc. + Copyright (C) 2003-2018 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 diff --git a/sysdeps/hppa/libgcc-compat.c b/sysdeps/hppa/libgcc-compat.c index 077261072f..1438a8e0f0 100644 --- a/sysdeps/hppa/libgcc-compat.c +++ b/sysdeps/hppa/libgcc-compat.c @@ -1,5 +1,5 @@ /* pre-.hidden libgcc compatibility - Copyright (C) 2002-2016 Free Software Foundation, Inc. + Copyright (C) 2002-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Randolph Chung diff --git a/sysdeps/hppa/lshift.S b/sysdeps/hppa/lshift.S index 7a795e29e1..ab23dd0ee8 100644 --- a/sysdeps/hppa/lshift.S +++ b/sysdeps/hppa/lshift.S @@ -1,6 +1,6 @@ ;! HP-PA __mpn_lshift -- -;! Copyright (C) 1992-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/machine-gmon.h b/sysdeps/hppa/machine-gmon.h index 6afa4197e8..08b3c3a6b9 100644 --- a/sysdeps/hppa/machine-gmon.h +++ b/sysdeps/hppa/machine-gmon.h @@ -1,5 +1,5 @@ /* Machine-specific calling sequence for `mcount' profiling function. PA-RISC - Copyright (C) 1995-2016 Free Software Foundation, Inc. + Copyright (C) 1995-2018 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 diff --git a/sysdeps/hppa/math_private.h b/sysdeps/hppa/math-tests.h index 1acfb9ae4a..2fb3a55899 100644 --- a/sysdeps/hppa/math_private.h +++ b/sysdeps/hppa/math-tests.h @@ -1,5 +1,5 @@ -/* Internal math stuff. HPPA version. - Copyright (C) 2013-2016 Free Software Foundation, Inc. +/* Configuration for math tests. hppa version. + Copyright (C) 2017-2018 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 @@ -16,13 +16,7 @@ License along with the GNU C Library; if not, see <http://www.gnu.org/licenses/>. */ -#ifndef HPPA_MATH_PRIVATE_H -#define HPPA_MATH_PRIVATE_H 1 +/* SNaN tests do not preserve payloads. */ +#define SNAN_TESTS_PRESERVE_PAYLOAD 0 -/* 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 +#include_next <math-tests.h> diff --git a/sysdeps/hppa/memusage.h b/sysdeps/hppa/memusage.h index ffb923ad37..b82e665614 100644 --- a/sysdeps/hppa/memusage.h +++ b/sysdeps/hppa/memusage.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2000-2016 Free Software Foundation, Inc. +/* Copyright (C) 2000-2018 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 diff --git a/sysdeps/hppa/nan-high-order-bit.h b/sysdeps/hppa/nan-high-order-bit.h new file mode 100644 index 0000000000..fa2ea53aa9 --- /dev/null +++ b/sysdeps/hppa/nan-high-order-bit.h @@ -0,0 +1,27 @@ +/* Specify NaN high-order bit conventions. HPPA version. + Copyright (C) 2016-2018 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 NAN_HIGH_ORDER_BIT_H +#define NAN_HIGH_ORDER_BIT_H 1 + +/* 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 1 + +#endif /* nan-high-order-bit.h */ diff --git a/sysdeps/hppa/nptl/Makefile b/sysdeps/hppa/nptl/Makefile index 2dea713081..cac490cfd5 100644 --- a/sysdeps/hppa/nptl/Makefile +++ b/sysdeps/hppa/nptl/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2005-2016 Free Software Foundation, Inc. +# Copyright (C) 2005-2018 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 diff --git a/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h b/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h new file mode 100644 index 0000000000..9af995716e --- /dev/null +++ b/sysdeps/hppa/nptl/bits/pthreadtypes-arch.h @@ -0,0 +1,91 @@ +/* Copyright (C) 2005-2018 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_ARCH_H +#define _BITS_PTHREADTYPES_ARCH_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_MUTEX_T 48 +#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_MUTEXATTR_T 4 +#define __SIZEOF_PTHREAD_RWLOCK_T 64 +#define __SIZEOF_PTHREAD_RWLOCKATTR_T 8 + +/* The old 4-word 16-byte aligned lock. This is initalized + to all ones by the Linuxthreads PTHREAD_MUTEX_INITIALIZER. + Unused in NPTL. */ +#define __PTHREAD_COMPAT_PADDING_MID int __compat_padding[4]; +/* Two more words are left before the NPTL + pthread_mutex_t is larger than Linuxthreads. */ +#define __PTHREAD_COMPAT_PADDING_END int __reserved[2]; +#define __PTHREAD_MUTEX_LOCK_ELISION 0 +#define __PTHREAD_MUTEX_NUSERS_AFTER_KIND 1 +#define __PTHREAD_MUTEX_USE_UNION 1 + +#define __LOCK_ALIGNMENT __attribute__ ((__aligned__(16))) +#define __ONCE_ALIGNMENT + +struct __pthread_rwlock_arch_t +{ + /* 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))); + unsigned int __readers; + unsigned int __writers; + unsigned int __wrphase_futex; + unsigned int __writers_futex; + unsigned int __pad3; + unsigned int __pad4; + int __cur_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; +}; + +#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 + +#endif /* bits/pthreadtypes.h */ diff --git a/sysdeps/hppa/nptl/bits/pthreadtypes.h b/sysdeps/hppa/nptl/bits/pthreadtypes.h deleted file mode 100644 index 540802a70c..0000000000 --- a/sysdeps/hppa/nptl/bits/pthreadtypes.h +++ /dev/null @@ -1,230 +0,0 @@ -/* Copyright (C) 2005-2016 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; - -#define __PTHREAD_RWLOCK_ELISION_EXTRA 0 - -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/sysdeps/hppa/nptl/bits/semaphore.h b/sysdeps/hppa/nptl/bits/semaphore.h index 4cdac957fb..e6f75bf49b 100644 --- a/sysdeps/hppa/nptl/bits/semaphore.h +++ b/sysdeps/hppa/nptl/bits/semaphore.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2016 Free Software Foundation, Inc. +/* Copyright (C) 2002-2018 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 diff --git a/sysdeps/hppa/nptl/jmpbuf-unwind.h b/sysdeps/hppa/nptl/jmpbuf-unwind.h index 27c4f6f116..6ee404fd6f 100644 --- a/sysdeps/hppa/nptl/jmpbuf-unwind.h +++ b/sysdeps/hppa/nptl/jmpbuf-unwind.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2003-2016 Free Software Foundation, Inc. +/* Copyright (C) 2003-2018 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 diff --git a/sysdeps/hppa/nptl/pthread-offsets.h b/sysdeps/hppa/nptl/pthread-offsets.h new file mode 100644 index 0000000000..8ae01b9d95 --- /dev/null +++ b/sysdeps/hppa/nptl/pthread-offsets.h @@ -0,0 +1,5 @@ +#define __PTHREAD_MUTEX_NUSERS_OFFSET 32 +#define __PTHREAD_MUTEX_KIND_OFFSET 12 +#define __PTHREAD_MUTEX_SPINS_OFFSET 36 +#define __PTHREAD_MUTEX_ELISION_OFFSET 22 +#define __PTHREAD_MUTEX_LIST_OFFSET 36 diff --git a/sysdeps/hppa/nptl/pthread_spin_init.c b/sysdeps/hppa/nptl/pthread_spin_init.c index 2df0376d8b..eaf07bd717 100644 --- a/sysdeps/hppa/nptl/pthread_spin_init.c +++ b/sysdeps/hppa/nptl/pthread_spin_init.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2006-2016 Free Software Foundation, Inc. +/* Copyright (C) 2006-2018 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 diff --git a/sysdeps/hppa/nptl/pthread_spin_unlock.c b/sysdeps/hppa/nptl/pthread_spin_unlock.c index 6e4d71ecf1..1581247330 100644 --- a/sysdeps/hppa/nptl/pthread_spin_unlock.c +++ b/sysdeps/hppa/nptl/pthread_spin_unlock.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2005-2016 Free Software Foundation, Inc. +/* Copyright (C) 2005-2018 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 diff --git a/sysdeps/hppa/nptl/pthreaddef.h b/sysdeps/hppa/nptl/pthreaddef.h index fa1ab4c697..cdb55687f5 100644 --- a/sysdeps/hppa/nptl/pthreaddef.h +++ b/sysdeps/hppa/nptl/pthreaddef.h @@ -1,4 +1,4 @@ -/* Copyright (C) 2002-2016 Free Software Foundation, Inc. +/* Copyright (C) 2002-2018 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 diff --git a/sysdeps/hppa/nptl/tcb-offsets.sym b/sysdeps/hppa/nptl/tcb-offsets.sym index c2f326ee3d..6e852f35b1 100644 --- a/sysdeps/hppa/nptl/tcb-offsets.sym +++ b/sysdeps/hppa/nptl/tcb-offsets.sym @@ -3,7 +3,6 @@ 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) @@ -14,6 +13,5 @@ MUTEX_FUTEX offsetof (pthread_mutex_t, __data.__lock) -- 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/sysdeps/hppa/nptl/tls.h b/sysdeps/hppa/nptl/tls.h index 2e0c861e09..2b94e346c1 100644 --- a/sysdeps/hppa/nptl/tls.h +++ b/sysdeps/hppa/nptl/tls.h @@ -1,5 +1,5 @@ /* Definition for thread-local data handling. NPTL/hppa version. - Copyright (C) 2005-2016 Free Software Foundation, Inc. + Copyright (C) 2005-2018 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 @@ -25,17 +25,7 @@ # 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; +# include <dl-dtv.h> #else /* __ASSEMBLER__ */ # include <tcb-offsets.h> @@ -144,6 +134,7 @@ static inline void __set_cr27(struct pthread *cr27) } /* Get and set the global scope generation counter in struct pthread. */ +#define THREAD_GSCOPE_IN_TCB 1 #define THREAD_GSCOPE_FLAG_UNUSED 0 #define THREAD_GSCOPE_FLAG_USED 1 #define THREAD_GSCOPE_FLAG_WAIT 2 diff --git a/sysdeps/hppa/nptl/tst-oddstacklimit.c b/sysdeps/hppa/nptl/tst-oddstacklimit.c index 7579235957..c8579dc0e2 100644 --- a/sysdeps/hppa/nptl/tst-oddstacklimit.c +++ b/sysdeps/hppa/nptl/tst-oddstacklimit.c @@ -1,6 +1,6 @@ /* Test NPTL with stack limit that is not a multiple of the page size. HPPA version. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 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 diff --git a/sysdeps/hppa/rshift.S b/sysdeps/hppa/rshift.S index 82bb4ce461..882a5c3c3a 100644 --- a/sysdeps/hppa/rshift.S +++ b/sysdeps/hppa/rshift.S @@ -1,6 +1,6 @@ ;! HP-PA __mpn_rshift -- -;! Copyright (C) 1992-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/setjmp.S b/sysdeps/hppa/setjmp.S index cdf65146ad..941ecb1d45 100644 --- a/sysdeps/hppa/setjmp.S +++ b/sysdeps/hppa/setjmp.S @@ -1,5 +1,5 @@ /* setjmp for HPPA. - Copyright (C) 1995-2016 Free Software Foundation, Inc. + Copyright (C) 1995-2018 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 @@ -70,3 +70,4 @@ __sigsetjmp: b __sigjmp_save nop .procend +hidden_def (__sigsetjmp) diff --git a/sysdeps/hppa/sotruss-lib.c b/sysdeps/hppa/sotruss-lib.c index d7fd81b637..1530b13d34 100644 --- a/sysdeps/hppa/sotruss-lib.c +++ b/sysdeps/hppa/sotruss-lib.c @@ -1,5 +1,5 @@ /* Override generic sotruss-lib.c to define actual functions for HP-PARISC. - Copyright (C) 2012-2016 Free Software Foundation, Inc. + Copyright (C) 2012-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. diff --git a/sysdeps/hppa/stackinfo.h b/sysdeps/hppa/stackinfo.h index fc680f323f..ae9d9f02a2 100644 --- a/sysdeps/hppa/stackinfo.h +++ b/sysdeps/hppa/stackinfo.h @@ -1,4 +1,4 @@ -/* Copyright (C) 1999-2016 Free Software Foundation, Inc. +/* Copyright (C) 1999-2018 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 diff --git a/sysdeps/hppa/start.S b/sysdeps/hppa/start.S index 90d4331f5a..c1d2bd4bb7 100644 --- a/sysdeps/hppa/start.S +++ b/sysdeps/hppa/start.S @@ -1,5 +1,5 @@ /* ELF startup code for HPPA. - Copyright (C) 2002-2016 Free Software Foundation, Inc. + Copyright (C) 2002-2018 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 @@ -42,7 +42,7 @@ /* 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. */ -#ifdef SHARED +#ifdef PIC .section .data.rel.ro,"aw",@progbits #else .section .rodata,"a",@progbits @@ -56,10 +56,6 @@ .word P%__libc_csu_fini .Lp__libc_csu_init: .word P%__libc_csu_init -#ifdef SHARED -.Lp__global: - .word $global$ -#endif .text .align 4 @@ -99,9 +95,15 @@ _start: /* 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 */ -#ifdef SHARED +#ifdef PIC + /* Load $global$ address into %dp */ + bl .+8, %dp + addil L'$global$-$PIC_pcrel$0+1, %dp + ldo R'$global$-$PIC_pcrel$0+5(%r1), %dp + /* load main (1st argument) */ addil LT'.Lpmain, %r19 ldw RT'.Lpmain(%r1), %r26 @@ -115,6 +117,10 @@ _start: ldw RT'.Lp__libc_csu_fini(%r1), %r22 ldw 0(%r22), %r22 #else + /* Load $global$ address into %dp */ + ldil L%$global$, %dp + ldo R%$global$(%dp), %dp + /* load main (1st argument) */ ldil LR'.Lpmain, %r26 ldw RR'.Lpmain(%r26), %r26 @@ -129,15 +135,6 @@ _start: stw %r22, -52(%sp) /* void *stack_end (7th argument) */ stw %sp, -60(%sp) - -#ifdef SHARED - addil LT'.Lp__global, %r19 - ldw RT'.Lp__global(%r1), %dp -#else - /* load global */ - ldil L%$global$, %dp - ldo R%$global$(%dp), %dp -#endif bl __libc_start_main,%r2 nop /* die horribly if it returned (it shouldn't) */ diff --git a/sysdeps/hppa/sub_n.S b/sysdeps/hppa/sub_n.S index 998e885c4c..d42001e798 100644 --- a/sysdeps/hppa/sub_n.S +++ b/sysdeps/hppa/sub_n.S @@ -1,7 +1,7 @@ ;! 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-2016 Free Software Foundation, Inc. +;! Copyright (C) 1992-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. diff --git a/sysdeps/hppa/sysdep.h b/sysdeps/hppa/sysdep.h index 46c22c41d4..4b139228a1 100644 --- a/sysdeps/hppa/sysdep.h +++ b/sysdeps/hppa/sysdep.h @@ -1,5 +1,5 @@ /* Assembler macros for HP/PA. - Copyright (C) 1999-2016 Free Software Foundation, Inc. + Copyright (C) 1999-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper, <drepper@cygnus.com>, August 1999. diff --git a/sysdeps/hppa/tst-audit.h b/sysdeps/hppa/tst-audit.h index 88eb06fd97..4ba373448c 100644 --- a/sysdeps/hppa/tst-audit.h +++ b/sysdeps/hppa/tst-audit.h @@ -1,6 +1,6 @@ /* Definitions for testing PLT entry/exit auditing. HP-PARISC version. - Copyright (C) 2006-2016 Free Software Foundation, Inc. + Copyright (C) 2006-2018 Free Software Foundation, Inc. This file is part of the GNU C Library. diff --git a/sysdeps/hppa/udiv_qrnnd.S b/sysdeps/hppa/udiv_qrnnd.S index e26e1fb61e..e7e850b98a 100644 --- a/sysdeps/hppa/udiv_qrnnd.S +++ b/sysdeps/hppa/udiv_qrnnd.S @@ -1,7 +1,7 @@ ;! HP-PA __udiv_qrnnd division support, used from longlong.h. ;! This version runs fast on pre-PA7000 CPUs. -;! Copyright (C) 1993-2016 Free Software Foundation, Inc. +;! Copyright (C) 1993-2018 Free Software Foundation, Inc. ;! This file is part of the GNU MP Library. |