From 27424b29289a49958e62450203f33a57dc1465e2 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Mon, 20 Jun 2005 15:59:03 +0000 Subject: Updated to fedora-glibc-20050620T1530 --- nptl/ChangeLog | 13 ++++++++++ .../sysv/linux/powerpc/powerpc32/sysdep-cancel.h | 17 +++++++++++++ nptl/tst-cancel4.c | 28 ++++++++++++++++++---- 3 files changed, 54 insertions(+), 4 deletions(-) (limited to 'nptl') diff --git a/nptl/ChangeLog b/nptl/ChangeLog index 0452afe8b5..470d4b9887 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,16 @@ +2005-06-14 Alan Modra + + * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h (PSEUDO): + Invoke CGOTSETUP and CGOTRESTORE. + (CGOTSETUP, CGOTRESTORE): Define. + +2005-05-29 Richard Henderson + + * tst-cancel4.c (WRITE_BUFFER_SIZE): New. + (tf_write, tf_writev): Use it. + (do_test): Use socketpair instead of pipe. Set SO_SNDBUF to + the system minimum. + 2005-05-23 Jakub Jelinek * sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h diff --git a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h index 393c171eef..84acf38434 100644 --- a/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h +++ b/nptl/sysdeps/unix/sysv/linux/powerpc/powerpc32/sysdep-cancel.h @@ -45,6 +45,7 @@ mflr 9; \ stw 9,52(1); \ cfi_offset (lr, 4); \ + CGOTSETUP; \ DOCARGS_##args; /* save syscall args around CENABLE. */ \ CENABLE; \ stw 3,16(1); /* store CENABLE return value (MASK). */ \ @@ -58,6 +59,7 @@ lwz 4,52(1); \ lwz 0,12(1); /* restore CR/R3. */ \ lwz 3,8(1); \ + CGOTRESTORE; \ mtlr 4; \ mtcr 0; \ addi 1,1,48; \ @@ -84,6 +86,9 @@ # define DOCARGS_6 stw 8,40(1); DOCARGS_5 # define UNDOCARGS_6 lwz 8,40(1); UNDOCARGS_5 +# define CGOTSETUP +# define CGOTRESTORE + # ifdef IS_IN_libpthread # define CENABLE bl __pthread_enable_asynccancel@local # define CDISABLE bl __pthread_disable_asynccancel@local @@ -93,6 +98,18 @@ # elif defined IS_IN_librt # define CENABLE bl JUMPTARGET(__librt_enable_asynccancel) # define CDISABLE bl JUMPTARGET(__librt_disable_asynccancel) +# if defined HAVE_AS_REL16 && defined PIC +# undef CGOTSETUP +# define CGOTSETUP \ + bcl 20,31,1f; \ + 1: stw 30,44(1); \ + mflr 30; \ + addis 30,30,_GLOBAL_OFFSET_TABLE-1b@ha; \ + addi 30,30,_GLOBAL_OFFSET_TABLE-1b@l +# undef CGOTRESTORE +# define CGOTRESTORE \ + lwz 30,44(1) +# endif # else # error Unsupported library # endif diff --git a/nptl/tst-cancel4.c b/nptl/tst-cancel4.c index c3e527fd1c..cb7619688e 100644 --- a/nptl/tst-cancel4.c +++ b/nptl/tst-cancel4.c @@ -84,6 +84,8 @@ static pthread_barrier_t b2; # define IPC_ADDVAL 0 #endif +#define WRITE_BUFFER_SIZE 4096 + /* Cleanup handling test. */ static int cl_called; @@ -220,7 +222,7 @@ tf_write (void *arg) ssize_t s; pthread_cleanup_push (cl, NULL); - char buf[100000]; + char buf[WRITE_BUFFER_SIZE]; memset (buf, '\0', sizeof (buf)); s = write (fd, buf, sizeof (buf)); @@ -266,7 +268,7 @@ tf_writev (void *arg) ssize_t s; pthread_cleanup_push (cl, NULL); - char buf[100000]; + char buf[WRITE_BUFFER_SIZE]; memset (buf, '\0', sizeof (buf)); struct iovec iov[1] = { [0] = { .iov_base = buf, .iov_len = sizeof (buf) } }; s = writev (fd, iov, 1); @@ -2043,11 +2045,29 @@ static struct static int do_test (void) { - if (pipe (fds) != 0) + int val; + socklen_t len; + + if (socketpair (AF_UNIX, SOCK_STREAM, PF_UNIX, fds) != 0) + { + perror ("socketpair"); + exit (1); + } + + val = 1; + len = sizeof(val); + setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)); + if (getsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, &len) < 0) + { + perror ("getsockopt"); + exit (1); + } + if (val >= WRITE_BUFFER_SIZE) { - puts ("pipe failed"); + puts ("minimum write buffer size too large"); exit (1); } + setsockopt (fds[1], SOL_SOCKET, SO_SNDBUF, &val, sizeof(val)); int result = 0; size_t cnt; -- cgit v1.2.3