This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.
Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
Hi! On Alpha, tst-cancel-wrappers.out had failure because creat.o* did not seem to have cancellation enable/disable calls. Instead of adding more and more exceptions (especially when some would need to be platform dependent), I've added LIBC_CANCEL_HANDLED() macro, which when added to a .c file (ideally with a comment describing how cancellation is handled instead) causes tst-cancel-wrappers to shut up for that particular file. Shouldn't make any difference on the generated code. 2003-01-06 Jakub Jelinek <jakub@redhat.com> * sysdeps/generic/sysdep-cancel.h (LIBC_CANCEL_HANDLED): Define. * sysdeps/generic/creat.c: Include sysdep-cancel.h. (LIBC_CANCEL_HANDLED): Add. linuxthreads/ * internals.h (LIBC_CANCEL_HANDLED): Define. * sysdeps/unix/sysv/linux/sigwait.c (LIBC_CANCEL_HANDLED): Add. * signals.c (LIBC_CANCEL_HANDLED): Add. * pt-system.c (LIBC_CANCEL_HANDLED): Add. * tst-cancel-wrappers.sh: Remove all exceptions. nptl/ * pthreadP.h (LIBC_CANCEL_HANDLED): Define. * pt-system.c (LIBC_CANCEL_HANDLED): Add. * tst-cancel-wrappers.sh: Remove all exceptions. --- libc/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c.jj 2003-01-05 23:19:26.000000000 +0100 +++ libc/linuxthreads/sysdeps/unix/sysv/linux/sigwait.c 2003-01-06 15:57:21.000000000 +0100 @@ -83,3 +83,6 @@ __sigwait (set, sig) libc_hidden_def (__sigwait) weak_alias (__sigwait, sigwait) strong_alias (__sigwait, __libc_sigwait) + +/* Cancellation is handled in __pthread_sigwait. */ +LIBC_CANCEL_HANDLED (); --- libc/linuxthreads/internals.h.jj 2003-01-05 21:11:04.000000000 +0100 +++ libc/linuxthreads/internals.h 2003-01-06 15:55:11.000000000 +0100 @@ -475,14 +475,21 @@ extern pid_t __pthread_fork (struct fork __libc_enable_asynccancel () # define LIBC_CANCEL_RESET(oldtype) \ __libc_disable_asynccancel (oldtype) +# define LIBC_CANCEL_HANDLED() \ + __asm (".globl " __SYMBOL_PREFIX "__libc_enable_asynccancel"); \ + __asm (".globl " __SYMBOL_PREFIX "__libc_disable_asynccancel") #elif defined NOT_IN_libc && defined IS_IN_libpthread # define LIBC_CANCEL_ASYNC() \ __pthread_enable_asynccancel () # define LIBC_CANCEL_RESET(oldtype) \ __pthread_disable_asynccancel (oldtype) +# define LIBC_CANCEL_HANDLED() \ + __asm (".globl " __SYMBOL_PREFIX "__pthread_enable_asynccancel"); \ + __asm (".globl " __SYMBOL_PREFIX "__pthread_disable_asynccancel") #else # define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ # define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ +# define LIBC_CANCEL_HANDLED() /* Nothing. */ #endif /* Data type shared with libc. The libc uses it to pass on calls to --- libc/linuxthreads/signals.c.jj 2003-01-03 14:06:37.000000000 +0100 +++ libc/linuxthreads/signals.c 2003-01-06 15:54:46.000000000 +0100 @@ -195,3 +195,6 @@ int __pthread_raise (int sig) #ifdef SHARED strong_alias (__pthread_raise, raise) #endif + +/* This files handles cancellation internally. */ +LIBC_CANCEL_HANDLED (); --- libc/linuxthreads/pt-system.c.jj 2002-12-28 13:00:45.000000000 +0100 +++ libc/linuxthreads/pt-system.c 2003-01-06 15:58:22.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jakub Jelinek <jakub@redhat.com>, 2002. @@ -27,3 +27,6 @@ system (const char *line) { return __libc_system (line); } + +/* __libc_system in libc.so handles cancellation. */ +LIBC_CANCEL_HANDLED (); --- libc/linuxthreads/tst-cancel-wrappers.sh.jj 2003-01-03 14:06:37.000000000 +0100 +++ libc/linuxthreads/tst-cancel-wrappers.sh 2003-01-06 15:58:56.000000000 +0100 @@ -67,13 +67,7 @@ C["__xpg_sigpause"]=1 /:$/ { if (seen) { - # signals.c and sigwait.c in linuxthreads do the cancellation checks - # not using *_{enable,disable}_asynccancel. - # Similarly pt-system.o* is allowed to call __libc_system directly. - if ((!seen_enable || !seen_disable) \ - && !(object ~ /^signals.o/) \ - && !(object ~ /^sigwait.o/) \ - && !(object ~ /^pt-system.o/)) + if (!seen_enable || !seen_disable) { printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen ret = 1 --- libc/sysdeps/generic/sysdep-cancel.h.jj 2002-12-17 19:04:23.000000000 +0100 +++ libc/sysdeps/generic/sysdep-cancel.h 2003-01-06 15:50:20.000000000 +0100 @@ -4,3 +4,4 @@ #define SINGLE_THREAD_P (1) #define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ #define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ +#define LIBC_CANCEL_HANDLED() /* Nothing. */ --- libc/sysdeps/generic/creat.c.jj 2002-12-17 19:04:23.000000000 +0100 +++ libc/sysdeps/generic/creat.c 2003-01-06 16:02:21.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 1991, 1996, 1997 Free Software Foundation, Inc. +/* Copyright (C) 1991, 1996, 1997, 2003 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 @@ -18,6 +18,7 @@ #include <fcntl.h> #include <sys/types.h> +#include <sysdep-cancel.h> #undef creat @@ -30,3 +31,6 @@ __libc_creat (file, mode) return __open (file, O_WRONLY|O_CREAT|O_TRUNC, mode); } weak_alias (__libc_creat, creat) + +/* __open handles cancellation. */ +LIBC_CANCEL_HANDLED (); --- libc/nptl/pthreadP.h.jj 2003-01-05 20:44:18.000000000 +0100 +++ libc/nptl/pthreadP.h 2003-01-06 15:55:25.000000000 +0100 @@ -92,12 +92,19 @@ extern int __pthread_debug attribute_hid /* Same as CANCEL_RESET, but for use in libc.so. */ # define LIBC_CANCEL_RESET(oldtype) \ __libc_disable_asynccancel (oldtype) +# define LIBC_CANCEL_HANDLED() \ + __asm (".globl " __SYMBOL_PREFIX "__libc_enable_asynccancel"); \ + __asm (".globl " __SYMBOL_PREFIX "__libc_disable_asynccancel") #elif defined NOT_IN_libc && defined IS_IN_libpthread # define LIBC_CANCEL_ASYNC() CANCEL_ASYNC () # define LIBC_CANCEL_RESET(val) CANCEL_RESET (val) +# define LIBC_CANCEL_HANDLED() \ + __asm (".globl " __SYMBOL_PREFIX "__pthread_enable_asynccancel"); \ + __asm (".globl " __SYMBOL_PREFIX "__pthread_disable_asynccancel") #else # define LIBC_CANCEL_ASYNC() 0 /* Just a dummy value. */ # define LIBC_CANCEL_RESET(val) ((void)(val)) /* Nothing, but evaluate it. */ +# define LIBC_CANCEL_HANDLED() /* Nothing. */ #endif --- libc/nptl/tst-cancel-wrappers.sh.jj 2003-01-05 21:00:49.000000000 +0100 +++ libc/nptl/tst-cancel-wrappers.sh 2003-01-06 15:59:24.000000000 +0100 @@ -67,8 +67,7 @@ C["__xpg_sigpause"]=1 /:$/ { if (seen) { - # pt-system.o* in NPTL calls __libc_system directly. - if ((!seen_enable || !seen_disable) && !(object ~ /^pt-system.o/)) + if (!seen_enable || !seen_disable) { printf "in '$1'(%s) %s'\''s cancellation missing\n", object, seen ret = 1 --- libc/nptl/pt-system.c.jj 2002-12-28 11:35:31.000000000 +0100 +++ libc/nptl/pt-system.c 2003-01-06 16:00:03.000000000 +0100 @@ -1,4 +1,4 @@ -/* Copyright (C) 2002 Free Software Foundation, Inc. +/* Copyright (C) 2002, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@redhat.com>, 2002. @@ -28,3 +28,6 @@ system (const char *line) { return __libc_system (line); } + +/* __libc_system in libc.so handles cancellation. */ +LIBC_CANCEL_HANDLED (); Jakub
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |