diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-04-26 20:18:18 +0000 |
---|---|---|
committer | Jakub Jelinek <jakub@redhat.com> | 2006-04-26 20:18:18 +0000 |
commit | dd8c67b33fb3d422afebc83c70e51e736669b0ad (patch) | |
tree | 40569cd29262da66f41d0700391b223ad437082e /sysdeps | |
parent | cb5c27ecf31a91ad8b96aa8d4777a7d7b6b33b62 (diff) | |
download | glibc-dd8c67b33fb3d422afebc83c70e51e736669b0ad.tar glibc-dd8c67b33fb3d422afebc83c70e51e736669b0ad.tar.gz glibc-dd8c67b33fb3d422afebc83c70e51e736669b0ad.tar.bz2 glibc-dd8c67b33fb3d422afebc83c70e51e736669b0ad.zip |
Updated to fedora-glibc-20060426T2000
Diffstat (limited to 'sysdeps')
-rw-r--r-- | sysdeps/posix/getaddrinfo.c | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/Makefile | 2 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/ia64/clone2.S | 6 | ||||
-rw-r--r-- | sysdeps/unix/sysv/linux/tst-clone.c | 56 |
4 files changed, 63 insertions, 3 deletions
diff --git a/sysdeps/posix/getaddrinfo.c b/sysdeps/posix/getaddrinfo.c index e4fea334ca..03d26086ac 100644 --- a/sysdeps/posix/getaddrinfo.c +++ b/sysdeps/posix/getaddrinfo.c @@ -1643,7 +1643,7 @@ getaddrinfo (const char *name, const char *service, freeaddrinfo (p); free (in6ai); - return -(i & GAIH_EAI); + return -(last_i & GAIH_EAI); } if (end) while (*end) diff --git a/sysdeps/unix/sysv/linux/Makefile b/sysdeps/unix/sysv/linux/Makefile index 812cd97c80..8bec6cdb85 100644 --- a/sysdeps/unix/sysv/linux/Makefile +++ b/sysdeps/unix/sysv/linux/Makefile @@ -28,6 +28,8 @@ sysdep_headers += sys/mount.h sys/acct.h sys/sysctl.h \ install-others += $(inst_includedir)/bits/syscall.h +tests += tst-clone + # Generate the list of SYS_* macros for the system calls (__NR_* macros). # For bi-arch platforms, the CPU/Makefile defines {32,64}bit-predefine and # we generate a file that uses <bits/wordsize.h>. diff --git a/sysdeps/unix/sysv/linux/ia64/clone2.S b/sysdeps/unix/sysv/linux/ia64/clone2.S index 69c9e05044..d38eb201ad 100644 --- a/sysdeps/unix/sysv/linux/ia64/clone2.S +++ b/sysdeps/unix/sysv/linux/ia64/clone2.S @@ -1,4 +1,4 @@ -/* Copyright (C) 2000, 2001, 2003, 2004 Free Software Foundation, Inc. +/* Copyright (C) 2000, 2001, 2003, 2004, 2006 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 @@ -32,10 +32,12 @@ ENTRY(__clone2) .prologue alloc r2=ar.pfs,8,1,6,0 cmp.eq p6,p0=0,in0 + cmp.eq p7,p0=0,in1 mov r8=EINVAL mov out0=in3 /* Flags are first syscall argument. */ mov out1=in1 /* Stack address. */ -(p6) br.cond.spnt.many __syscall_error +(p6) br.cond.spnt.many __syscall_error /* no NULL function pointers */ +(p7) br.cond.spnt.many __syscall_error /* no NULL stack pointers */ ;; mov out2=in2 /* Stack size. */ mov out3=in5 /* Parent TID Pointer */ diff --git a/sysdeps/unix/sysv/linux/tst-clone.c b/sysdeps/unix/sysv/linux/tst-clone.c new file mode 100644 index 0000000000..8e249c2f04 --- /dev/null +++ b/sysdeps/unix/sysv/linux/tst-clone.c @@ -0,0 +1,56 @@ +/* Test for proper error/errno handling in clone. + Copyright (C) 2006 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +/* BZ #2386 */ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <unistd.h> +#include <sched.h> + +int child_fn(void *arg) +{ + puts ("FAIL: in child_fn(); should not be here"); + exit(1); +} + +static int +do_test (void) +{ + int result; + +#ifdef __ia64__ + result = __clone2(child_fn, NULL, 0, 0, NULL, NULL, NULL); +#else + result = clone(child_fn, NULL, (int) NULL, NULL); +#endif + + if (errno != EINVAL || result != -1) + { + printf ("FAIL: clone()=%d (wanted -1) errno=%d (wanted %d)\n", + result, errno, EINVAL); + return 1; + } + + puts ("All OK"); + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" |