* [parisc-linux] glibc 2.3.1 - It's alive! - patches @ 2002-11-11 1:05 Carlos O'Donell 2002-11-11 1:19 ` John David Anglin 2002-11-11 1:21 ` Matthew Wilcox 0 siblings, 2 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 1:05 UTC (permalink / raw) To: parisc-linux; +Cc: Randolph Chung, Jeff Bailey PA, These patches apply and build glibc 2.3.1, but we have interesting testsuite failures :} In particular ex10 in the linuxthreads testsuite deadlocks and has to be killed by hand to continue testing. We also fail a number of "needed" tests in the elf section. These tests cover the loading of DSO's with dlopen. Wether these are binutils bugs is yet to be seen. Lastly, I think that the fp* tests suffer from the printf bug? Pathes at: http://www.baldric.uwo.ca/~carlos/upstream-patches.tar.gz I don't think we are ready to push this into unstable until we iron out a few more of these bugs :( c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:05 [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell @ 2002-11-11 1:19 ` John David Anglin 2002-11-11 17:12 ` Carlos O'Donell 2002-11-11 1:21 ` Matthew Wilcox 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 1:19 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq, jbailey > Lastly, I think that the fp* tests suffer from the printf bug? I am fairly certain that this is fixed in gcc 3.2/3.3. Could you do a build with the mainline gcc cvs? I am interested in feedback. as I am trying to squash as many bugs as possible in 3.3 while it's still open for general bug fixing. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:19 ` John David Anglin @ 2002-11-11 17:12 ` Carlos O'Donell 2002-11-11 17:36 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 17:12 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > > Lastly, I think that the fp* tests suffer from the printf bug? > > I am fairly certain that this is fixed in gcc 3.2/3.3. Could you > do a build with the mainline gcc cvs? I am interested in feedback. > as I am trying to squash as many bugs as possible in 3.3 while it's > still open for general bug fixing. > carlos@firin:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3$ hppa-linux-gcc-3.3 -v Reading specs from /mnt/flaire/palinux/bin/../lib/gcc-lib/hppa-linux/3.3/specs Configured with: ../gcc/configure --target=hppa-linux --build=hppa-linux --host=hppa-linux --prefix=/mnt/flaire/palinux/ --enable-languages=c Thread model: posix gcc version 3.3 20021110 (experimental) carlos@firin:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3$ ld -v GNU ld version 2.13.90.0.10 20021010 Debian GNU/Linux Latest CVS of glibc.2.3.1 with HPPA patches applied. make[2]: Entering directory `/mnt/flaire/src/glibc-upstream-cvs/libc/glibc-2.3.1/linuxthreads' hppa-linux-gcc-3.3 ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c -c -std=gnu99 -O2 -Wall -Winline -Wstrict-prototypes -Wwrite-strings -g -g0 -fPIC -fno-inline-functions -I../include -I. -I/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/linuxthreads -I.. -I../libio -I/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3 -I../sysdeps/hppa/elf -I../linuxthreads/sysdeps/unix/sysv/linux/hppa -I../linuxthreads/sysdeps/unix/sysv/linux -I../linuxthreads/sysdeps/pthread -I../sysdeps/pthread -I../linuxthreads/sysdeps/unix/sysv -I../linuxthreads/sysdeps/unix -I../linuxthreads/sysdeps/hppa -I../sysdeps/unix/sysv/linux/hppa -I../sysdeps/unix/sysv/linux -I../sysdeps/gnu -I../sysdeps/unix/common -I../sysdeps/unix/mman -I../sysdeps/unix/inet -I../sysdeps/unix/sysv -I../sysdeps/unix -I../sysdeps/posix -I../sysdeps/hppa/hppa1.1 -I../sysdeps/wordsize-32 -I../sysdeps/ieee754/flt-32 -I../sysdeps/ieee754/dbl-64 -I../sysdeps/ieee754/ldbl-128 -I../sysdeps/hppa/fpu -I../sysdeps/hppa -I../sysdeps/ieee754 -I../sysdeps/generic/elf -I../sysdeps/generic -I /lib/modules/2.4.19-pa22/build/include -D_LIBC_REENTRANT -include ../include/libc-symbols.h -S -g0 -fPIC -fno-inline-functions -finhibit-size-directive \ -fno-exceptions -o /mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/linuxthreads/pt-initfini.s ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:44:10: missing terminating " character ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:46:10: #include expects "FILENAME" or <FILENAME>../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:51: error: request for member `section' in something not a structure or union ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:52: error: parse error before numeric constant ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:54: error: syntax error at '@' token ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:75: error: stray '\' in program ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:75:34: missing terminating " character ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:86: error: syntax error at '@' token ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:102: error: stray '\' in program ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:102:34: missing terminating " character ../linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c:110:1: missing terminating " character make[2]: *** [/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/linuxthreads/pt-initfini.s] Error 1 make[2]: Leaving directory `/mnt/flaire/src/glibc-upstream-cvs/libc/glibc-2.3.1/linuxthreads' make[1]: *** [linuxthreads/others] Error 2 make[1]: Leaving directory `/mnt/flaire/src/glibc-upstream-cvs/libc/glibc-2.3.1' make: *** [all] Error 2 Looks like we need some __asm format fixes? c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 17:12 ` Carlos O'Donell @ 2002-11-11 17:36 ` John David Anglin 2002-11-11 18:00 ` Matthew Wilcox 2002-11-11 20:42 ` Carlos O'Donell 0 siblings, 2 replies; 46+ messages in thread From: John David Anglin @ 2002-11-11 17:36 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > Looks like we need some __asm format fixes? These are the changes that I had for glibc-2.2.5-14 to build with gcc-3.3. The string literal change makes the asms ugly but I think we have to live with it. I don't know the ins and outs of why the change was necessary but I know the cpp people will not change back. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) --- ./sysdeps/hppa/elf/initfini.c.orig 2001-07-09 17:56:22.000000000 -0700 +++ ./sysdeps/hppa/elf/initfini.c 2002-09-11 12:58:18.000000000 -0700 @@ -39,84 +39,84 @@ making the comparison and indirect call is quite expensive (see the comment in sysdeps/generic/initfini.c). */ -__asm__ (" - -#include \"defs.h\" - -/*@HEADER_ENDS*/ - -/*@_init_PROLOG_BEGINS*/ - .section .init - .align 4 - .globl _init - .type _init,@function -_init: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - bl __gmon_start__,%rp - copy %r19,%r4 /* delay slot */ - copy %r4,%r19 -/*@_init_PROLOG_ENDS*/ - -/*@_init_EPILOG_BEGINS*/ - .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 - 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 - -/*@_init_EPILOG_ENDS*/ - -/*@_fini_PROLOG_BEGINS*/ - .section .fini - .align 4 - .globl _fini - .type _fini,@function -_fini: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - copy %r19,%r4 -/*@_fini_PROLOG_ENDS*/ - -/*@_fini_EPILOG_BEGINS*/ - .section .fini - 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 - -/*@_fini_EPILOG_ENDS*/ - -/*@TRAILER_BEGINS*/ +__asm__ ("\n\ +\n\ +#include \"defs.h\"\n\ +\n\ +/*@HEADER_ENDS*/\n\ +\n\ +/*@_init_PROLOG_BEGINS*/\n\ + .section .init\n\ + .align 4\n\ + .globl _init\n\ + .type _init,@function\n\ +_init:\n\ + stw %rp,-20(%sp)\n\ + stwm %r4,64(%sp)\n\ + stw %r19,-32(%sp)\n\ + bl __gmon_start__,%rp\n\ + copy %r19,%r4 /* delay slot */\n\ + copy %r4,%r19\n\ +/*@_init_PROLOG_ENDS*/\n\ +\n\ +/*@_init_EPILOG_BEGINS*/\n\ + .text\n\ + .align 4\n\ + .weak __gmon_start__\n\ + .type __gmon_start__,@function\n\ +__gmon_start__:\n\ + .proc\n\ + .callinfo\n\ + .entry\n\ + bv,n %r0(%r2)\n\ + .exit\n\ + .procend\n\ +\n\ +/* Here is the tail end of _init. We put __gmon_start before this so\n\ + that the assembler creates the .PARISC.unwind section for us, ie.\n\ + with the right attributes. */\n\ + .section .init\n\ + ldw -84(%sp),%rp\n\ + copy %r4,%r19\n\ + bv %r0(%rp)\n\ +_end_init:\n\ + ldwm -64(%sp),%r4\n\ +\n\ +/* Our very own unwind info, because the assembler can't handle\n\ + functions split into two or more pieces. */\n\ + .section .PARISC.unwind\n\ + .extern _init\n\ + .word _init, _end_init\n\ + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08\n\ +\n\ +/*@_init_EPILOG_ENDS*/\n\ +\n\ +/*@_fini_PROLOG_BEGINS*/\n\ + .section .fini\n\ + .align 4\n\ + .globl _fini\n\ + .type _fini,@function\n\ +_fini:\n\ + stw %rp,-20(%sp)\n\ + stwm %r4,64(%sp)\n\ + stw %r19,-32(%sp)\n\ + copy %r19,%r4\n\ +/*@_fini_PROLOG_ENDS*/\n\ +\n\ +/*@_fini_EPILOG_BEGINS*/\n\ + .section .fini\n\ + ldw -84(%sp),%rp\n\ + copy %r4,%r19\n\ + bv %r0(%rp)\n\ +_end_fini:\n\ + ldwm -64(%sp),%r4\n\ +\n\ + .section .PARISC.unwind\n\ + .extern _fini\n\ + .word _fini, _end_fini\n\ + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08\n\ +\n\ +/*@_fini_EPILOG_ENDS*/\n\ +\n\ +/*@TRAILER_BEGINS*/\n\ "); --- ./linuxthreads/internals.h.orig 2002-09-11 12:16:03.000000000 -0700 +++ ./linuxthreads/internals.h 2002-09-13 11:09:35.000000000 -0700 @@ -555,11 +555,11 @@ /* Prototypes for compatibility functions. */ extern int __pthread_attr_init_2_1 (pthread_attr_t *__attr); extern int __pthread_attr_init_2_0 (pthread_attr_t *__attr); -extern int __pthread_create_2_1 (pthread_t *__restrict __thread, +extern int __pthread_create_2_1 (pthread_t *__restrict __thr, const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__restrict __arg); -extern int __pthread_create_2_0 (pthread_t *__restrict thread, +extern int __pthread_create_2_0 (pthread_t *__restrict __thr, const pthread_attr_t *__attr, void *(*__start_routine) (void *), void *__restrict arg); --- ./linuxthreads/sysdeps/pthread/pthread.h.orig 2001-03-20 08:44:41.000000000 -0800 +++ ./linuxthreads/sysdeps/pthread/pthread.h 2002-09-11 12:38:24.000000000 -0700 @@ -160,7 +160,7 @@ /* Create a thread with given attributes ATTR (or default attributes if ATTR is NULL), and call function START_ROUTINE with given arguments ARG. */ -extern int pthread_create (pthread_t *__restrict __thread, +extern int pthread_create (pthread_t *__restrict __thr, __const pthread_attr_t *__restrict __attr, void *(*__start_routine) (void *), void *__restrict __arg) __THROW; @@ -588,7 +588,7 @@ extern int pthread_setcanceltype (int __type, int *__oldtype) __THROW; /* Cancel THREAD immediately or at the next possibility. */ -extern int pthread_cancel (pthread_t __thread) __THROW; +extern int pthread_cancel (pthread_t __thr) __THROW; /* Test for pending cancellation for the current thread and terminate the thread as per pthread_exit(PTHREAD_CANCELED) if it has been --- ./linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h.orig 2000-09-11 10:32:02.000000000 -0700 +++ ./linuxthreads/sysdeps/unix/sysv/linux/bits/sigthread.h 2002-09-11 12:43:37.000000000 -0700 @@ -33,6 +33,6 @@ __sigset_t *__restrict __oldmask)__THROW; /* Send signal SIGNO to the given thread. */ -extern int pthread_kill (pthread_t __thread, int __signo) __THROW; +extern int pthread_kill (pthread_t __thr, int __signo) __THROW; #endif /* bits/sigthread.h */ ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 17:36 ` John David Anglin @ 2002-11-11 18:00 ` Matthew Wilcox 2002-11-11 18:20 ` Carlos O'Donell 2002-11-11 20:42 ` Carlos O'Donell 1 sibling, 1 reply; 46+ messages in thread From: Matthew Wilcox @ 2002-11-11 18:00 UTC (permalink / raw) To: John David Anglin; +Cc: Carlos O'Donell, parisc-linux, tausq On Mon, Nov 11, 2002 at 12:36:25PM -0500, John David Anglin wrote: > > Looks like we need some __asm format fixes? > > These are the changes that I had for glibc-2.2.5-14 to build with gcc-3.3. > The string literal change makes the asms ugly but I think we have to live > with it. I don't know the ins and outs of why the change was necessary > but I know the cpp people will not change back. > + stw %rp,-20(%sp)\n\ > + stwm %r4,64(%sp)\n\ > + stw %r19,-32(%sp)\n\ By and large we've preferred the following style which is less ugly, IMO: " stw %rp,-20(%sp)\n" " stwm %r4,64(%sp)\n" " stw %r19,-32(%sp)\n" -- Revolutions do not require corporate support. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 18:00 ` Matthew Wilcox @ 2002-11-11 18:20 ` Carlos O'Donell 2002-11-11 18:58 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 18:20 UTC (permalink / raw) To: Matthew Wilcox; +Cc: John David Anglin, parisc-linux, tausq On Mon, Nov 11, 2002 at 06:00:16PM +0000, Matthew Wilcox wrote: > On Mon, Nov 11, 2002 at 12:36:25PM -0500, John David Anglin wrote: > > > Looks like we need some __asm format fixes? > > > > These are the changes that I had for glibc-2.2.5-14 to build with gcc-3.3. > > The string literal change makes the asms ugly but I think we have to live > > with it. I don't know the ins and outs of why the change was necessary > > but I know the cpp people will not change back. > > > + stw %rp,-20(%sp)\n\ > > + stwm %r4,64(%sp)\n\ > > + stw %r19,-32(%sp)\n\ > > By and large we've preferred the following style which is less ugly, IMO: > > " stw %rp,-20(%sp)\n" > " stwm %r4,64(%sp)\n" > " stw %r19,-32(%sp)\n" > All of Uli's fixes have been the ugly way, though I'll change pt-initfini the nice and pretty way and hope they take the patch :) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 18:20 ` Carlos O'Donell @ 2002-11-11 18:58 ` Carlos O'Donell 0 siblings, 0 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 18:58 UTC (permalink / raw) To: Matthew Wilcox, John David Anglin, parisc-linux, tausq > > > > > + stw %rp,-20(%sp)\n\ > > > + stwm %r4,64(%sp)\n\ > > > + stw %r19,-32(%sp)\n\ > > > > By and large we've preferred the following style which is less ugly, IMO: > > > > " stw %rp,-20(%sp)\n" > > " stwm %r4,64(%sp)\n" > > " stw %r19,-32(%sp)\n" > > > > All of Uli's fixes have been the ugly way, though I'll change > pt-initfini the nice and pretty way and hope they take the patch :) > Either way is pretty if you space it nicely... I think the following patch is correct, it's currently building... c. diff -urN glibc-2.3.1.orig/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c glibc-2.3.1/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c --- glibc-2.3.1.orig/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c 2002-08-26 18:39:29.000000000 -0400 +++ glibc-2.3.1/linuxthreads/sysdeps/unix/sysv/linux/hppa/pt-initfini.c 2002-11-11 13:36:31.000000000 -0500 @@ -41,70 +41,70 @@ and epilogues. Therefore we write these in assembly to make sure they do the right thing. */ -__asm__ (" - -#include \"defs.h\" - -/*@HEADER_ENDS*/ - -/*@_init_PROLOG_BEGINS*/ - .section .init - .align 4 - .globl _init - .type _init,@function -_init: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - bl __pthread_initialize_minimal,%rp - copy %r19,%r4 /* delay slot */ - copy %r4,%r19 -/*@_init_PROLOG_ENDS*/ - -/*@_init_EPILOG_BEGINS*/ -/* Here is the tail end of _init. */ - .section .init - 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,\"a\",@progbits - .extern _init - .word _init, _end_init - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 - -/*@_init_EPILOG_ENDS*/ - -/*@_fini_PROLOG_BEGINS*/ - .section .fini - .align 4 - .globl _fini - .type _fini,@function -_fini: - stw %rp,-20(%sp) - stwm %r4,64(%sp) - stw %r19,-32(%sp) - copy %r19,%r4 -/*@_fini_PROLOG_ENDS*/ - -/*@_fini_EPILOG_BEGINS*/ - .section .fini - ldw -84(%sp),%rp - copy %r4,%r19 - bv %r0(%rp) -_end_fini: - ldwm -64(%sp),%r4 - - .section .PARISC.unwind,\"a\",@progbits - .extern _fini - .word _fini, _end_fini - .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 - -/*@_fini_EPILOG_ENDS*/ - -/*@TRAILER_BEGINS*/ +__asm__ (" \n\ + \n\ +#include \"defs.h\" \n\ + \n\ +/*@HEADER_ENDS*/ \n\ + \n\ +/*@_init_PROLOG_BEGINS*/ \n\ + .section .init \n\ + .align 4 \n\ + .globl _init \n\ + .type _init,@function \n\ +_init: \n\ + stw %rp,-20(%sp) \n\ + stwm %r4,64(%sp) \n\ + stw %r19,-32(%sp) \n\ + bl __pthread_initialize_minimal,%rp \n\ + copy %r19,%r4 /* delay slot */ \n\ + copy %r4,%r19 \n\ +/*@_init_PROLOG_ENDS*/ \n\ + \n\ +/*@_init_EPILOG_BEGINS*/ \n\ +/* Here is the tail end of _init. */ \n\ + .section .init \n\ + ldw -84(%sp),%rp \n\ + copy %r4,%r19 \n\ + bv %r0(%rp) \n\ +_end_init: \n\ + ldwm -64(%sp),%r4 \n\ + \n\ +/* Our very own unwind info, because the assembler can't handle \n\ + functions split into two or more pieces. */ \n\ + .section .PARISC.unwind,\"a\",@progbits \n\ + .extern _init \n\ + .word _init, _end_init \n\ + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 \n\ + \n\ +/*@_init_EPILOG_ENDS*/ \n\ + \n\ +/*@_fini_PROLOG_BEGINS*/ \n\ + .section .fini \n\ + .align 4 \n\ + .globl _fini \n\ + .type _fini,@function \n\ +_fini: \n\ + stw %rp,-20(%sp) \n\ + stwm %r4,64(%sp) \n\ + stw %r19,-32(%sp) \n\ + copy %r19,%r4 \n\ +/*@_fini_PROLOG_ENDS*/ \n\ + \n\ +/*@_fini_EPILOG_BEGINS*/ \n\ + .section .fini \n\ + ldw -84(%sp),%rp \n\ + copy %r4,%r19 \n\ + bv %r0(%rp) \n\ +_end_fini: \n\ + ldwm -64(%sp),%r4 \n\ + \n\ + .section .PARISC.unwind,\"a\",@progbits \n\ + .extern _fini \n\ + .word _fini, _end_fini \n\ + .byte 0x08, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08 \n\ + \n\ +/*@_fini_EPILOG_ENDS*/ \n\ + \n\ +/*@TRAILER_BEGINS*/ \n\ "); ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 17:36 ` John David Anglin 2002-11-11 18:00 ` Matthew Wilcox @ 2002-11-11 20:42 ` Carlos O'Donell 2002-11-11 20:57 ` John David Anglin 2002-11-11 21:16 ` [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 1 sibling, 2 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 20:42 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > > Looks like we need some __asm format fixes? > > These are the changes that I had for glibc-2.2.5-14 to build with gcc-3.3. > The string literal change makes the asms ugly but I think we have to live > with it. I don't know the ins and outs of why the change was necessary > but I know the cpp people will not change back. > With gcc-3.3 experimental (cvs pull as of yesterday): make[2]: *** [/math/test-fenv.out] Error 136 make[2]: *** [/math/test-float.out] Error 1 make[2]: *** [/math/test-double.out] Error 1 make[2]: *** [/math/test-ifloat.out] Error 1 make[1]: *** [math/tests] Error 2 = Same as before, I'm going to regen these right now. make[2]: *** [/stdlib/bug-strtod.out] Error 1 make[1]: *** [stdlib/tests] Error 2 make[2]: *** [/libio/tst-mmap-eofsync.out] Error 1 make[2]: *** [/libio/tst-mmap-fflushsync.out] Error 1 make[1]: *** [libio/tests] Error 2 make[2]: *** [/dlfcn/default.out] Error 1 make[2]: *** [/dlfcn/tststatic.out] Error 139 make[1]: *** [dlfcn/tests] Error 2 make[2]: [/posix/annexc.out] Error 1 (ignored) make[2]: *** [/elf/tst-array1.out] Error 1 make[2]: *** [/elf/tst-array2.out] Error 1 make[2]: *** [/elf/tst-array3.out] Error 1 = These three are new! = They seem to be a common failure on x86 make[2]: *** [/elf/vismain.out] Error 1 make[2]: *** [/elf/neededtest.out] Error 14 make[2]: *** [/elf/neededtest2.out] Error 14 make[2]: *** [/elf/neededtest3.out] Error 17 make[2]: *** [/elf/neededtest4.out] Error 2 make[2]: *** [/elf/circleload1.out] Error 9 make[1]: *** [elf/tests] Error 2 make: *** [check] Error 2 c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 20:42 ` Carlos O'Donell @ 2002-11-11 20:57 ` John David Anglin 2002-11-11 21:17 ` Carlos O'Donell 2002-11-11 21:16 ` [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 20:57 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > make[2]: *** [/elf/vismain.out] Error 1 > make[2]: *** [/elf/neededtest.out] Error 14 > make[2]: *** [/elf/neededtest2.out] Error 14 > make[2]: *** [/elf/neededtest3.out] Error 17 > make[2]: *** [/elf/neededtest4.out] Error 2 > make[2]: *** [/elf/circleload1.out] Error 9 > make[1]: *** [elf/tests] Error 2 > make: *** [check] Error 2 I am not surprised about these. There definitely problems with the visibility of symbols based on the binutils testsuite. These didn't show up before because the visibility tests didn't run on the pa. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 20:57 ` John David Anglin @ 2002-11-11 21:17 ` Carlos O'Donell 2002-11-11 21:33 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 21:17 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq On Mon, Nov 11, 2002 at 03:57:37PM -0500, John David Anglin wrote: > > make[2]: *** [/elf/vismain.out] Error 1 > > make[2]: *** [/elf/neededtest.out] Error 14 > > make[2]: *** [/elf/neededtest2.out] Error 14 > > make[2]: *** [/elf/neededtest3.out] Error 17 > > make[2]: *** [/elf/neededtest4.out] Error 2 > > make[2]: *** [/elf/circleload1.out] Error 9 > > make[1]: *** [elf/tests] Error 2 > > make: *** [check] Error 2 > > I am not surprised about these. There definitely problems with > the visibility of symbols based on the binutils testsuite. These > didn't show up before because the visibility tests didn't run > on the pa. > The fix is non-obvious to me. I have no idea where to begin here. Any hints? :) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 21:17 ` Carlos O'Donell @ 2002-11-11 21:33 ` John David Anglin 2002-11-12 5:31 ` [parisc-linux] simple testcase for binutils visibility problem Randolph Chung 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 21:33 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > > I am not surprised about these. There definitely problems with > > the visibility of symbols based on the binutils testsuite. These > > didn't show up before because the visibility tests didn't run > > on the pa. > > > > The fix is non-obvious to me. I have no idea where to begin here. > Any hints? :) It isn't obvious to me either other than the problem is probably in elf32-hppa.c. I would look at the testsuite results for ld, pick a simple test that fails and try to figure out what is going wrong. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* [parisc-linux] simple testcase for binutils visibility problem 2002-11-11 21:33 ` John David Anglin @ 2002-11-12 5:31 ` Randolph Chung 2002-11-12 5:58 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Randolph Chung @ 2002-11-12 5:31 UTC (permalink / raw) To: John David Anglin; +Cc: Carlos O'Donell, parisc-linux > > The fix is non-obvious to me. I have no idea where to begin here. > > Any hints? :) > > It isn't obvious to me either other than the problem is probably in > elf32-hppa.c. I would look at the testsuite results for ld, pick > a simple test that fails and try to figure out what is going wrong. here's a trivial test case in case anyone wants to track this down :-) ======= undef.s ========== .protected protected .hidden hidden .internal internal ========================== assemble with 'as -o undef.o undef.s' and run 'readelf -s undef.o' on pa, you get: Symbol table '.symtab' contains 4 entries: Num: Value Size Type Bind Vis Ndx Name 0: 00000000 0 NOTYPE LOCAL DEFAULT UND 1: 00000000 0 SECTION LOCAL DEFAULT 1 2: 00000000 0 SECTION LOCAL DEFAULT 2 3: 00000000 0 SECTION LOCAL DEFAULT 3 on ia32/ia64, i get this more reasonable output: Symbol table '.symtab' contains 7 entries: Num: Value Size Type Bind Vis Ndx Name 0: 0000000000000000 0 NOTYPE LOCAL DEFAULT UND 1: 0000000000000000 0 SECTION LOCAL DEFAULT 1 2: 0000000000000000 0 SECTION LOCAL DEFAULT 2 3: 0000000000000000 0 SECTION LOCAL DEFAULT 3 4: 0000000000000000 0 NOTYPE GLOBAL PROTECTED UND protected 5: 0000000000000000 0 NOTYPE GLOBAL HIDDEN UND hidden 6: 0000000000000000 0 NOTYPE GLOBAL INTERNAL UND internal randolph -- Randolph Chung Debian GNU/Linux Developer, hppa/ia64 ports http://www.tausq.org/ ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] simple testcase for binutils visibility problem 2002-11-12 5:31 ` [parisc-linux] simple testcase for binutils visibility problem Randolph Chung @ 2002-11-12 5:58 ` John David Anglin 0 siblings, 0 replies; 46+ messages in thread From: John David Anglin @ 2002-11-12 5:58 UTC (permalink / raw) To: randolph; +Cc: carlos, parisc-linux > here's a trivial test case in case anyone wants to track this down :-) Please post to binutils. I'm tied up for a bit trying to track a ld bug on hppa64. I've managed to break gcc when using gnu ld :( Sometimes HP stuff works better. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 20:42 ` Carlos O'Donell 2002-11-11 20:57 ` John David Anglin @ 2002-11-11 21:16 ` Carlos O'Donell 2002-11-11 22:36 ` John David Anglin 2002-11-17 21:54 ` John David Anglin 1 sibling, 2 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 21:16 UTC (permalink / raw) To: John David Anglin, parisc-linux, tausq > > With gcc-3.3 experimental (cvs pull as of yesterday): > > make[2]: *** [/math/test-fenv.out] Error 136 > make[2]: *** [/math/test-float.out] Error 1 > make[2]: *** [/math/test-double.out] Error 1 > make[2]: *** [/math/test-ifloat.out] Error 1 > make[1]: *** [math/tests] Error 2 > > = Same as before, I'm going to regen these right now. > Hrm.... test-double.out says: GCONV_PATH=/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/iconvdata LC_ALL=C /mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/elf/ld.so.1 --library-path /mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/math:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/elf:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/dlfcn:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/nss:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/nis:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/rt:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/resolv:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/crypt:/mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/linuxthreads /mnt/flaire/src/glibc-upstream-cvs/libc-build-3.3/math/test-double testing double (without inline functions) Failure: Real part of: cacos (inf + NaN i) == NaN + inf i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: cacos (-inf + NaN i) == NaN + inf i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: cacos (NaN + inf i) == NaN - inf i: Exception "Invalid operation" set Failure: Real part of: cacos (NaN - inf i) == NaN + inf i: Exception "Invalid operation" set Failure: Real part of: cacos (NaN + NaN i) == NaN + NaN i: Exception "Invalid operation" set Failure: Real part of: ccosh (0.0 + NaN i) == NaN + 0.0 i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: ccosh (-0 + NaN i) == NaN + 0.0 i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: ccosh (inf + NaN i) == inf + NaN i: Exception "Invalid operation" set Failure: Real part of: ccosh (-inf + NaN i) == inf + NaN i: Exception "Invalid operation" set Failure: Real part of: cpow (NaN + NaN i, NaN + NaN i) == NaN + NaN i: Exception "Invalid operation" set Failure: Real part of: csinh (0.0 + NaN i) == 0.0 + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: csinh (-0 + NaN i) == 0.0 + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: csinh (inf + NaN i) == inf + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set Failure: Real part of: csinh (-inf + NaN i) == inf + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set Test suite completed: 2518 test cases plus 2306 tests for exception flags executed. 14 errors occurred. They look to be exception related? c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 21:16 ` [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell @ 2002-11-11 22:36 ` John David Anglin 2002-11-11 22:44 ` Carlos O'Donell 2002-11-17 21:54 ` John David Anglin 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 22:36 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > Failure: Real part of: csinh (-inf + NaN i) == inf + NaN i plus sign of zero/inf not specified: Exception "Invalid operation" set > > Test suite completed: > 2518 test cases plus 2306 tests for exception flags executed. > 14 errors occurred. > > > They look to be exception related? I doubt this is a gcc problem but it might be. Certain floating-point compare instructions can generate invalid operation exceptions. It's been awhile but I don't think we use these (see page 8-16 of PA 2.0 arch). An invalid operation exception will always occur with signaling nans. You need to try to identify the insn that is causing the exception. This can be difficult in some cases because the exceptions are inexact. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 22:36 ` John David Anglin @ 2002-11-11 22:44 ` Carlos O'Donell 2002-11-11 22:53 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 22:44 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > > > > Test suite completed: > > 2518 test cases plus 2306 tests for exception flags executed. > > 14 errors occurred. > > > > They look to be exception related? > > I doubt this is a gcc problem but it might be. Certain floating-point > compare instructions can generate invalid operation exceptions. It's > been awhile but I don't think we use these (see page 8-16 of PA 2.0 > arch). An invalid operation exception will always occur with > signaling nans. > > You need to try to identify the insn that is causing the exception. > This can be difficult in some cases because the exceptions are > inexact. > Again, delayed traps can be "Invalid Operation" exceptions within these floating point tests. We may be seeing some of those issues. I really need to find a way to properly flush delayed exceptions. c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 22:44 ` Carlos O'Donell @ 2002-11-11 22:53 ` John David Anglin 2002-11-11 23:27 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 22:53 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > Again, delayed traps can be "Invalid Operation" exceptions within these > floating point tests. We may be seeing some of those issues. I really > need to find a way to properly flush delayed exceptions. Look at fldw,fstw. Specifying register 0L forces the coprocessor to complete all previous floating-point insns. -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 22:53 ` John David Anglin @ 2002-11-11 23:27 ` Carlos O'Donell 2002-11-12 0:22 ` John David Anglin 2002-11-12 4:13 ` John David Anglin 0 siblings, 2 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 23:27 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > > Again, delayed traps can be "Invalid Operation" exceptions within these > > floating point tests. We may be seeing some of those issues. I really > > need to find a way to properly flush delayed exceptions. > > Look at fldw,fstw. Specifying register 0L forces the coprocessor > to complete all previous floating-point insns. > We currently use the following as a delayed exception trap barrier: libc/glibc-2.3.1/sysdeps/hppa/fpu/fraiseexcpt.c ... __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" /* FIXME: is this a proper trap barrier? */ "fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0"(d)); ... And from the comment it seems that DHD wasn't sure either :) I don't quite understand what is meant by specifying register 0L? c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 23:27 ` Carlos O'Donell @ 2002-11-12 0:22 ` John David Anglin 2002-11-12 1:23 ` Carlos O'Donell 2002-11-12 4:13 ` John David Anglin 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-12 0:22 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > And from the comment it seems that DHD wasn't sure either :) > I don't quite understand what is meant by specifying register 0L? You just have to do a floating-point load/store to/from register 0/0L using a doubleword/word instruction. See the arch manual and the comments about specify register 0 near the bottom of each instruction description. 0L is the left part of floating register 0. Doing this as a volatile asm should force completion of all previous floating-point instructions. A store from register 0 (the floating point status register) is a safe barrier but you need to provide a location to store to. I don't believe "fcpy,dbl %%fr0,%%fr0" provides the barrier that you want. The floating-point coprocessor is not required to execute instructions sequentially although they must appear sequential to software. The above insn is a nop and the coprocessor could throw it away early in the pipeline. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 0:22 ` John David Anglin @ 2002-11-12 1:23 ` Carlos O'Donell 0 siblings, 0 replies; 46+ messages in thread From: Carlos O'Donell @ 2002-11-12 1:23 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > I don't believe "fcpy,dbl %%fr0,%%fr0" provides the barrier > that you want. The floating-point coprocessor is not required to > execute instructions sequentially although they must appear > sequential to software. The above insn is a nop and the coprocessor > could throw it away early in the pipeline. That's what I was beggining to think. I'll spill it onto the stack as Lamont suggested some time ago. c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 23:27 ` Carlos O'Donell 2002-11-12 0:22 ` John David Anglin @ 2002-11-12 4:13 ` John David Anglin 2002-11-12 15:44 ` John David Anglin 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-12 4:13 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" > /* FIXME: is this a proper trap barrier? */ > "fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0"(d)); Looking at feraiseexcept, I see that you only want to raise one exception at a time out of a specified set. Reading the status register will raise all outstanding exceptions. I think what needs to be done is something like the following: __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" "fcmp,dbl,!= %%fr0,%0\n\t" "ftest\n\t" "nop" : "=f" (d) : "0"(d)); Doing a compare and test of the result of the fmpy insn will ensure that any exceptions related to that operation are raised prior to the ftest insn being queued in floating-point coprocessor. There is some information in pa.md on the floating-point units used with different processors. For example, the 7100LC has three floating-point units: ALU, MUL, and DIV. The situation in the PA8000 is much more complicated because of its large reorder buffer (56 entries). When an exception occurs, it sets the T bit and the coprocessor is armed to trap if the exception enable for the trap is 1. The trap is taken at the next floating point insn. However, because of the out of order execution of instructions and multiple floating-point units, care has to be taken in selecting the following insn. It has to have a dependency on the trap generating insn to ensure that it actually follows. Possibly, the ftest is unnecessary but it ensures that any traps related to the previous two insns are taken. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 4:13 ` John David Anglin @ 2002-11-12 15:44 ` John David Anglin 2002-11-12 17:42 ` Jim Hull 2002-11-13 19:22 ` Carlos O'Donell 0 siblings, 2 replies; 46+ messages in thread From: John David Anglin @ 2002-11-12 15:44 UTC (permalink / raw) To: John David Anglin; +Cc: carlos, parisc-linux, tausq > > __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" > > /* FIXME: is this a proper trap barrier? */ > > "fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0"(d)); > > Looking at fraiseexcept, I see that you only want to raise one > exception at a time out of a specified set. Reading the status register > will raise all outstanding exceptions. I think what needs to be > done is something like the following: After a night's sleep, I had a couple more thoughts on this. 1) You probably want to clear the T bit at the beginning of the routine. This will ensure that you get the correct exception when the first one is raised. The only way to do this without potentially causing a pending trap to trigger is with a double word store to floating-point register 0. You can't read register 0 before the write without potentially triggering a trap, so you need to know what the current state should be. See page 10-5 of the PA2 arch manual. 2) A fcpy insn should raise an exception if it depends on the result of a pending trapping insn (the current code doesn't). It would be best to not use register 0 or the source register for the destination register since in theory the processor would then know the operation is a nop. Then, the insn could be reordered or discarded. The fcpy insn is nice since it is non-arithmetic and doesn't cause an invalid operation exception when a NaN is copied. The fcmp insn isn't quite as nice since it will generate an invalid operation when one of the values is a signaling NaN, or if the low-order bit of the condition code is 1 and one of the values is an NaN. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* RE: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 15:44 ` John David Anglin @ 2002-11-12 17:42 ` Jim Hull 2002-11-12 17:53 ` John David Anglin 2002-11-13 19:22 ` Carlos O'Donell 1 sibling, 1 reply; 46+ messages in thread From: Jim Hull @ 2002-11-12 17:42 UTC (permalink / raw) To: 'John David Anglin'; +Cc: carlos, parisc-linux, tausq John David Anglin wrote: > 2) A fcpy insn should raise an exception if it depends on the > result of a pending trapping insn (the current code doesn't). > It would be best to not use register 0 or the source register > for the destination register since in theory the processor > would then know the operation is a nop. Then, the insn could > be reordered or discarded. The fcpy insn is nice since it > is non-arithmetic and doesn't cause an invalid operation > exception when a NaN is copied. The fcmp insn isn't quite > as nice since it will generate an invalid operation when one > of the values is a signaling NaN, or if the low-order bit > of the condition code is 1 and one of the values is an NaN. This isn't right. According to "Delayed Trapping" on p. 10-5 of the PA-RISC 2.0 book, an fcpy need not raise a pending exception, because it is not mentioned in the "delayed trap must occur" list. Now, it's possible that it might (usually) work on the processor implementations you're interested in, but it's not architecturally guaranteed. -- Jim HP PA-RISC (and IPF) Processor Architect ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 17:42 ` Jim Hull @ 2002-11-12 17:53 ` John David Anglin 2002-11-12 18:43 ` Jim Hull 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-12 17:53 UTC (permalink / raw) To: jim_hull; +Cc: carlos, parisc-linux, tausq > This isn't right. According to "Delayed Trapping" on p. 10-5 of the > PA-RISC 2.0 book, an fcpy need not raise a pending exception, because it > is not mentioned in the "delayed trap must occur" list. What about "The current instruction is a load or store of the detination register of a pending trapping instruction or an operation which depends on a pending trapping instruction"? I think the latter part of the sentence would apply to a fcpy of the destination register of a pending trapping instruction. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* RE: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 17:53 ` John David Anglin @ 2002-11-12 18:43 ` Jim Hull 2002-11-12 19:02 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Jim Hull @ 2002-11-12 18:43 UTC (permalink / raw) To: 'John David Anglin'; +Cc: carlos, parisc-linux, tausq Dave: > What about "The current instruction is a load or store of the destination > register of a pending trapping instruction or an operation which depends > on a pending trapping instruction"? > > I think the latter part of the sentence would apply to a fcpy of the > destination register of a pending trapping instruction. I thought that might be the item you were thinking of. Sometimes, in our effort to be as concise as possible, we went too far in the PA-RISC book. The correct interpretation of that sentence is: The current instruction is a load or store of the destination register of a pending trapping instruction, or the current instruction is a load or store of the destination register of an operation which depends on a pending trapping instruction. In other words, it must be a load or store of a destination register, either of the pending trapping instruction itself, or of any subsequent instruction which depends on that pending trapping instruction. Hope this helps. -- Jim ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 18:43 ` Jim Hull @ 2002-11-12 19:02 ` John David Anglin 2002-11-12 19:31 ` Jim Hull 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-12 19:02 UTC (permalink / raw) To: jim_hull; +Cc: carlos, parisc-linux, tausq > In other words, it must be a load or store of a destination register, > either of the pending trapping instruction itself, or of any subsequent > instruction which depends on that pending trapping instruction. Ok. Another issue that was somewhat vague was whether the state could be saved without triggering pending traps. Page 10-13 discusses special treatment of a double word store of register 0 and states that it cancels all pending traps. On the otherhand, item 3 in the hit list and the instruction description don't mention this treatment. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* RE: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 19:02 ` John David Anglin @ 2002-11-12 19:31 ` Jim Hull 2002-11-12 19:38 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Jim Hull @ 2002-11-12 19:31 UTC (permalink / raw) To: 'John David Anglin'; +Cc: carlos, parisc-linux, tausq Dave: > Another issue that was somewhat vague was whether the state could be saved > without triggering pending traps. Page 10-13 discusses special treatment > of a double word store of register 0 and states that it cancels all > pending traps. On the otherhand, item 3 in the hit list and the instruction > description don't mention this treatment. Yes, you can save state without "triggering pending traps", if what you mean by "triggering" is that you end up at the assist exception trap handler. This is described in step 5 of the numbered list on p. 10-6, which describes what happens when a delayed trap occurs. -- Jim ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 19:31 ` Jim Hull @ 2002-11-12 19:38 ` John David Anglin 0 siblings, 0 replies; 46+ messages in thread From: John David Anglin @ 2002-11-12 19:38 UTC (permalink / raw) To: jim_hull; +Cc: carlos, parisc-linux, tausq > Yes, you can save state without "triggering pending traps", if what you > mean by "triggering" is that you end up at the assist exception trap > handler. > > This is described in step 5 of the numbered list on p. 10-6, which > describes what happens when a delayed trap occurs. Thanks. I think it is now clear how to implement the function to raise a specific set of exceptions, one at a time. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-12 15:44 ` John David Anglin 2002-11-12 17:42 ` Jim Hull @ 2002-11-13 19:22 ` Carlos O'Donell 2002-11-13 20:16 ` John David Anglin 1 sibling, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-13 19:22 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq, Jim Hull On Tue, Nov 12, 2002 at 10:44:07AM -0500, John David Anglin wrote: > > > __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" > > > /* FIXME: is this a proper trap barrier? */ > > > "fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0"(d)); So really the fix is to spill into a third register or a memory location in order to: 1) Prevent reordering and subsequent discard of the insn 2) Trigger the trap since the result of the register is needed > 1) You probably want to clear the T bit at the beginning of the > routine. This will ensure that you get the correct exception > when the first one is raised. The only way to do this without > potentially causing a pending trap to trigger is with a double > word store to floating-point register 0. You can't read register > 0 before the write without potentially triggering a trap, so > you need to know what the current state should be. See page > 10-5 of the PA2 arch manual. Okie, lets see if I have this right: 1) Routine starts 2) Clear T by reading fr0 and writing back with T=0 = All other pending delayed exceptions are nulled 3) Setup an exception to occur based on requirements = insn writes to dX 4) Trap barrier = insn where dX is copied to dY (dX!=dY) > 2) A fcpy insn should raise an exception if it depends on the > result of a pending trapping insn (the current code doesn't). > It would be best to not use register 0 or the source register > for the destination register since in theory the processor > would then know the operation is a nop. Then, the insn could > be reordered or discarded. The fcpy insn is nice since it > is non-arithmetic and doesn't cause an invalid operation > exception when a NaN is copied. The fcmp insn isn't quite > as nice since it will generate an invalid operation when one > of the values is a signaling NaN, or if the low-order bit > of the condition code is 1 and one of the values is an NaN. I liked the fcpy specifically for that reason. It doesn't itself cause a recursive triggering of more delayed exceptions, eventually filling the exception queue and delivering an exception anyway ;) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-13 19:22 ` Carlos O'Donell @ 2002-11-13 20:16 ` John David Anglin 0 siblings, 0 replies; 46+ messages in thread From: John David Anglin @ 2002-11-13 20:16 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq, jim_hull > On Tue, Nov 12, 2002 at 10:44:07AM -0500, John David Anglin wrote: > > > > __asm__ __volatile__ ("fmpy,dbl %1,%%fr0,%0\n\t" > > > > /* FIXME: is this a proper trap barrier? */ > > > > "fcpy,dbl %%fr0,%%fr0" : "=f" (d) : "0"(d)); > > So really the fix is to spill into a third register or a memory location > in order to: > > 1) Prevent reordering and subsequent discard of the insn > 2) Trigger the trap since the result of the register is needed That's the general idea. However, fcpy won't always trigger the trap as the T bit may not be set when it executes even if it depends on the exception generating instruction. You have to use a load or store to %0, or a load or store to %1, or a fcmp,ftest,nop sequence that depends on the exception generating instruction. You don't actually have to spill the result. For example, a "fldd 0(%%sp),%0" or "fldd 0(%%sp),%1" should raise the exception. The stack pointer should always be sufficiently aligned. > 2) Clear T by reading fr0 and writing back with T=0 > = All other pending delayed exceptions are nulled I would suggest saving the whole state. Reading fr0 with a double word store will automatically clear T. I believe that there is a function do to that. You might then clear the exception registers and set the status register to a state with the exception enables appropriately set. If you are paranoid, you could set the enable for just the exception that you want to raise at each step. > 3) Setup an exception to occur based on requirements > = insn writes to dX > 4) Trap barrier > = insn where dX is copied to dY (dX!=dY) The state can be restored at the end. I am not quite sure what is required at this point. Should the function remove any or all pending exceptions? Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 21:16 ` [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 2002-11-11 22:36 ` John David Anglin @ 2002-11-17 21:54 ` John David Anglin 2002-11-18 16:12 ` Carlos O'Donell 1 sibling, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-17 21:54 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > testing double (without inline functions) > Failure: Real part of: cacos (inf + NaN i) == NaN + inf i plus sign of zero/inf not specified: Exception "Invalid operation" set It occurred to me these might be a gcc problem on PA1 machines. These machines don't have fneg and negation is currently implemented as the product with -1. This may cause invalid operation to be set if the value is a signaling NaN. A better way to do the negation is to toggle the sign bit but this is inefficient as the value needs to be copied from a FPR to a GPR and back again. A quick check would be to run the tests with "-mpa-risc-2-0" and see if this makes any difference. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-17 21:54 ` John David Anglin @ 2002-11-18 16:12 ` Carlos O'Donell 2002-11-18 17:42 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-18 16:12 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > It occurred to me these might be a gcc problem on PA1 machines. These > machines don't have fneg and negation is currently implemented as the > product with -1. This may cause invalid operation to be set if the > value is a signaling NaN. > > A better way to do the negation is to toggle the sign bit but this is > inefficient as the value needs to be copied from a FPR to a GPR and > back again. > > A quick check would be to run the tests with "-mpa-risc-2-0" and see > if this makes any difference. > Interesting. I shall add this to my list of checks todo once I get glibc 2.3.1 out the door. Everything is setup, I'm just running into some package integration problems (e.g. failing to restart certain services causes the dpkg -i to fail). My todo includes: - Follow our discussion on delayed exceptions and try a few implementations of trap barriers - Examine if -1*NaN is causing failures in the fp glibc tests. - Implement atomic_add, echange_and_add, and compare and swap, which are required in atomicity.h - Make some progress implementing *context() calls in glibc (SAPDB needs them). - Take a closer look at our setjump/longjmp impementation (there were some fears that it was mildly broken) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-18 16:12 ` Carlos O'Donell @ 2002-11-18 17:42 ` John David Anglin 2002-11-18 19:30 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-18 17:42 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > - Implement atomic_add, echange_and_add, and compare and swap, which are > required in atomicity.h I added an implementation of atomic_add and echange_and_add to libstdc++ recently. You can probably copy most of it for glibc, although the libstdc++ implementation is for c++. The main problem would be in initializing the 16 byte lock structure. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-18 17:42 ` John David Anglin @ 2002-11-18 19:30 ` Carlos O'Donell 2002-11-18 19:44 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-18 19:30 UTC (permalink / raw) To: John David Anglin; +Cc: parisc-linux, tausq > > - Implement atomic_add, echange_and_add, and compare and swap, which are > > required in atomicity.h > > I added an implementation of atomic_add and echange_and_add to libstdc++ > recently. You can probably copy most of it for glibc, although the libstdc++ > implementation is for c++. The main problem would be in initializing > the 16 byte lock structure. > We already have a 16-byte aligned lock structure in glibc for pthreads, and I plan to use the same construct in atomicity.h. ... typedef struct { int lock; } __attribute__((aligned (16))) __atomic_lock_t; ... #define __LOCK_INIT = { 1 }; static __atomic_lock_t __hppa_lock = __LOCK_INIT; ... Ref the above lock in my __asm statement and use ldcw and a loop to make sure the C function stays atomic for those threads (similar implementation to sparc and mips). c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-18 19:30 ` Carlos O'Donell @ 2002-11-18 19:44 ` John David Anglin 0 siblings, 0 replies; 46+ messages in thread From: John David Anglin @ 2002-11-18 19:44 UTC (permalink / raw) To: Carlos O'Donell; +Cc: parisc-linux, tausq > We already have a 16-byte aligned lock structure in glibc for pthreads, > and I plan to use the same construct in atomicity.h. You might consider whether a separate lock structure might be appropriate. Otherwise, it might be possible for a deadlock to occur. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:05 [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 2002-11-11 1:19 ` John David Anglin @ 2002-11-11 1:21 ` Matthew Wilcox 2002-11-11 1:32 ` John David Anglin 1 sibling, 1 reply; 46+ messages in thread From: Matthew Wilcox @ 2002-11-11 1:21 UTC (permalink / raw) To: Carlos O'Donell, parisc-linux, Randolph Chung, Jeff Bailey On Sun, Nov 10, 2002 at 08:05:17PM -0500, Carlos O'Donell wrote: > Lastly, I think that the fp* tests suffer from the printf bug? Last I looked, we suffered from the fact that glibc thinks `long double' is 96 bits, gcc thinks `long double' is 64 bits and gcc-hpux thinks that `long double' is 128 bits. I've been whining about this for over a year and nothing's happened. I think it's fairly clear that not much uses long double, otherwise we'd've noticed more failure cases. So changing both gcc & glibc to a 128-bit long double is the Right Thing to do and we can just suck up this ABI breakage. In case anyone's wondering, the architecture specifies 32-bit, 64-bit and 128-bit floating point registers as being available. My understanding is that no processor has actually implemented the 128-bit floating point ops (except maybe load and store) and they always trap to the FP emulation code (which we copied from HPUX). -- Revolutions do not require corporate support. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:21 ` Matthew Wilcox @ 2002-11-11 1:32 ` John David Anglin 2002-11-11 1:49 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 1:32 UTC (permalink / raw) To: Matthew Wilcox; +Cc: carlos, parisc-linux, tausq, jbailey > In case anyone's wondering, the architecture specifies 32-bit, 64-bit and > 128-bit floating point registers as being available. My understanding is > that no processor has actually implemented the 128-bit floating point ops > (except maybe load and store) and they always trap to the FP emulation > code (which we copied from HPUX). Paul Bame was working on getting HP to release their long double library code. I haven't heard what the status is. If he gets the code, then it should be relatively straight forward to integrate into libgcc and use the same code as for hpux. Can glibc handle 128-bit long doubles as that's the size long doubles will be if we get the code? There are two tests in the libstdc++-v3 suite that fail because of this. However, there can't be much in the way of real world code that actually uses long doubles. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:32 ` John David Anglin @ 2002-11-11 1:49 ` Carlos O'Donell 2002-11-11 3:45 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 1:49 UTC (permalink / raw) To: John David Anglin; +Cc: Matthew Wilcox, parisc-linux, tausq, jbailey > > Paul Bame was working on getting HP to release their long double library > code. I haven't heard what the status is. If he gets the code, then it > should be relatively straight forward to integrate into libgcc and use > the same code as for hpux. Can glibc handle 128-bit long doubles as > that's the size long doubles will be if we get the code? > > There are two tests in the libstdc++-v3 suite that fail because of this. > However, there can't be much in the way of real world code that actually > uses long doubles. > It looks we have the framework. The glibc tree has sysdeps/ieee754/ldbl-128 which looks to be used by hppa and sparc64. The code was last touched by Jakub Jelinek in 2002-09-09 (cleaning up some cruft). ldlb-128 does get parsed as one of the generic-dirs in Make-dist. For all intents and purposes we have soft-emulated support :) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 1:49 ` Carlos O'Donell @ 2002-11-11 3:45 ` John David Anglin 2002-11-11 4:26 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 3:45 UTC (permalink / raw) To: Carlos O'Donell; +Cc: willy, parisc-linux, tausq, jbailey > It looks we have the framework. The glibc tree has sysdeps/ieee754/ldbl-128 > which looks to be used by hppa and sparc64. The code was last touched by > Jakub Jelinek in 2002-09-09 (cleaning up some cruft). ldlb-128 does get > parsed as one of the generic-dirs in Make-dist. For all intents and > purposes we have soft-emulated support :) Then, I should look at what sparc64 is doing and maybe all we need to do is implement something similar. We may not need the HP stuff. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 3:45 ` John David Anglin @ 2002-11-11 4:26 ` John David Anglin 2002-11-11 15:03 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 4:26 UTC (permalink / raw) To: John David Anglin; +Cc: carlos, willy, parisc-linux, tausq, jbailey > Then, I should look at what sparc64 is doing and maybe all we need to do > is implement something similar. We may not need the HP stuff. Nope, we need it. Sparc uses library calls like "_Q_add" for the basic operations on quad values. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 4:26 ` John David Anglin @ 2002-11-11 15:03 ` Carlos O'Donell 2002-11-11 15:47 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 15:03 UTC (permalink / raw) To: John David Anglin; +Cc: willy, parisc-linux, tausq, jbailey > > Nope, we need it. Sparc uses library calls like "_Q_add" for the basic > operations on quad values. > > Dave We need it or else we have to fall back on completely software emulated quad arithmetic. Though the framework for replacing all those function calls is available. Note that GMP was included in the libc tree at one point, but recently it's rotted away and Roland was recently removing the last bits in 2002-09-20. I'm not sure what ever came of this? It looks like GMP 2.0 was pushed into the tree in '96 as a generic method for doing unlimited precision math? I've only just realized how usefull having extremely descriptive Changelog's can be :) c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 15:03 ` Carlos O'Donell @ 2002-11-11 15:47 ` John David Anglin 2002-11-11 16:26 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 15:47 UTC (permalink / raw) To: Carlos O'Donell; +Cc: willy, parisc-linux, tausq, jbailey > We need it or else we have to fall back on completely software emulated > quad arithmetic. Though the framework for replacing all those function > calls is available. As Willy mentioned, no PA processors actually implement quad arithmetic at this time although it is part of the PA 2.0 architecture. So, we have to use software emulation and there is no point at this time in adding the quad arithmetic ops to pa.md definition. The simplest approach is to use the libcall interface already implemented for hpux (see pa/long_double.h). > Note that GMP was included in the libc tree at one point, but recently > it's rotted away and Roland was recently removing the last bits in > 2002-09-20. I'm not sure what ever came of this? It looks like GMP 2.0 > was pushed into the tree in '96 as a generic method for doing unlimited > precision math? While GMP is a useful package, it doesn't emulate IEEE 754 arithmetic. That's what we need here. There's a floating point emulator in gcc/real.c but I think the HP library would be superior. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 15:47 ` John David Anglin @ 2002-11-11 16:26 ` Carlos O'Donell 2002-11-11 17:25 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 16:26 UTC (permalink / raw) To: John David Anglin; +Cc: willy, parisc-linux, tausq, jbailey > > We need it or else we have to fall back on completely software emulated > > quad arithmetic. Though the framework for replacing all those function > > calls is available. > > As Willy mentioned, no PA processors actually implement quad arithmetic > at this time although it is part of the PA 2.0 architecture. So, we > have to use software emulation and there is no point at this time > in adding the quad arithmetic ops to pa.md definition. The simplest > approach is to use the libcall interface already implemented for hpux > (see pa/long_double.h). Ah yes, correct, I had forgotten that it was never implemented in silica. So you suggest we not implement this in libc but rather in gcc, may I ask why? > While GMP is a useful package, it doesn't emulate IEEE 754 arithmetic. > That's what we need here. There's a floating point emulator in gcc/real.c > but I think the HP library would be superior. I'm pretty sure that MPFR library in GMP can emulate IEEE 754 arithmetic, though I could be wrong. c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 16:26 ` Carlos O'Donell @ 2002-11-11 17:25 ` John David Anglin 2002-11-11 17:37 ` Carlos O'Donell 0 siblings, 1 reply; 46+ messages in thread From: John David Anglin @ 2002-11-11 17:25 UTC (permalink / raw) To: Carlos O'Donell; +Cc: willy, parisc-linux, tausq, jbailey > Ah yes, correct, I had forgotten that it was never implemented in > silica. So you suggest we not implement this in libc but rather in gcc, > may I ask why? I don't have a strong opinion on this. Probably, the routines should be in libc. However, it's probably simple also to put them in libgcc which contains some arithmetic operations. Some work in gcc would be needed in any event to integrate the package. > > While GMP is a useful package, it doesn't emulate IEEE 754 arithmetic. > > That's what we need here. There's a floating point emulator in gcc/real.c > > but I think the HP library would be superior. > > I'm pretty sure that MPFR library in GMP can emulate IEEE 754 arithmetic, > though I could be wrong. I found the quad double package at the mpfr site. However, its double double differs from the IEEE quad precision representation. A double double is a representation using two IEEE doubles. This is fine as a separate library but not the IEEE implementation we are looking for. Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 17:25 ` John David Anglin @ 2002-11-11 17:37 ` Carlos O'Donell 2002-11-11 17:46 ` John David Anglin 0 siblings, 1 reply; 46+ messages in thread From: Carlos O'Donell @ 2002-11-11 17:37 UTC (permalink / raw) To: John David Anglin; +Cc: willy, parisc-linux, tausq, jbailey > > I don't have a strong opinion on this. Probably, the routines should > be in libc. However, it's probably simple also to put them in libgcc > which contains some arithmetic operations. Some work in gcc would > be needed in any event to integrate the package. > I've just seen recent binutils ditatrabe about how we have copies of math libraries floating between glibc, gcc and the kernel. What do we gain from putting it in gcc? - ? What do we gain from putting it libc? - More frequent package updates? - IMO easier to debug? Why are there math functions in libgcc in the first place? Historical reasons? > > I'm pretty sure that MPFR library in GMP can emulate IEEE 754 arithmetic, > > though I could be wrong. > > I found the quad double package at the mpfr site. However, its double > double differs from the IEEE quad precision representation. A double double > is a representation using two IEEE doubles. This is fine as a separate > library but not the IEEE implementation we are looking for. > Okay. c. ^ permalink raw reply [flat|nested] 46+ messages in thread
* Re: [parisc-linux] glibc 2.3.1 - It's alive! - patches 2002-11-11 17:37 ` Carlos O'Donell @ 2002-11-11 17:46 ` John David Anglin 0 siblings, 0 replies; 46+ messages in thread From: John David Anglin @ 2002-11-11 17:46 UTC (permalink / raw) To: Carlos O'Donell; +Cc: willy, parisc-linux, tausq, jbailey > Why are there math functions in libgcc in the first place? > Historical reasons? Well, for closed systems like hpux, it was necessary if the compiler needed the function. We are talking here about basic operations on floats and ints (see config/fp-bit.[ch] and libgcc2.c). Dave -- J. David Anglin dave.anglin@nrc.ca National Research Council of Canada (613) 990-0752 (FAX: 952-6605) ^ permalink raw reply [flat|nested] 46+ messages in thread
end of thread, other threads:[~2002-11-18 19:44 UTC | newest] Thread overview: 46+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2002-11-11 1:05 [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 2002-11-11 1:19 ` John David Anglin 2002-11-11 17:12 ` Carlos O'Donell 2002-11-11 17:36 ` John David Anglin 2002-11-11 18:00 ` Matthew Wilcox 2002-11-11 18:20 ` Carlos O'Donell 2002-11-11 18:58 ` Carlos O'Donell 2002-11-11 20:42 ` Carlos O'Donell 2002-11-11 20:57 ` John David Anglin 2002-11-11 21:17 ` Carlos O'Donell 2002-11-11 21:33 ` John David Anglin 2002-11-12 5:31 ` [parisc-linux] simple testcase for binutils visibility problem Randolph Chung 2002-11-12 5:58 ` John David Anglin 2002-11-11 21:16 ` [parisc-linux] glibc 2.3.1 - It's alive! - patches Carlos O'Donell 2002-11-11 22:36 ` John David Anglin 2002-11-11 22:44 ` Carlos O'Donell 2002-11-11 22:53 ` John David Anglin 2002-11-11 23:27 ` Carlos O'Donell 2002-11-12 0:22 ` John David Anglin 2002-11-12 1:23 ` Carlos O'Donell 2002-11-12 4:13 ` John David Anglin 2002-11-12 15:44 ` John David Anglin 2002-11-12 17:42 ` Jim Hull 2002-11-12 17:53 ` John David Anglin 2002-11-12 18:43 ` Jim Hull 2002-11-12 19:02 ` John David Anglin 2002-11-12 19:31 ` Jim Hull 2002-11-12 19:38 ` John David Anglin 2002-11-13 19:22 ` Carlos O'Donell 2002-11-13 20:16 ` John David Anglin 2002-11-17 21:54 ` John David Anglin 2002-11-18 16:12 ` Carlos O'Donell 2002-11-18 17:42 ` John David Anglin 2002-11-18 19:30 ` Carlos O'Donell 2002-11-18 19:44 ` John David Anglin 2002-11-11 1:21 ` Matthew Wilcox 2002-11-11 1:32 ` John David Anglin 2002-11-11 1:49 ` Carlos O'Donell 2002-11-11 3:45 ` John David Anglin 2002-11-11 4:26 ` John David Anglin 2002-11-11 15:03 ` Carlos O'Donell 2002-11-11 15:47 ` John David Anglin 2002-11-11 16:26 ` Carlos O'Donell 2002-11-11 17:25 ` John David Anglin 2002-11-11 17:37 ` Carlos O'Donell 2002-11-11 17:46 ` John David Anglin
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.