From: Ulrich Drepper Date: Thu, 12 Apr 2001 23:09:44 +0000 (+0000) Subject: Update. X-Git-Tag: upstream/2.30~23232 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=a08877d0e029ed62dd55296a824d51355777f276;p=external%2Fglibc.git Update. 2001-04-13 Jakub Jelinek * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): Calculate load address differently. --- diff --git a/ChangeLog b/ChangeLog index 756ba43..1118073 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2001-04-13 Jakub Jelinek + + * sysdeps/sparc/sparc64/dl-machine.h (elf_machine_load_address): + Calculate load address differently. + 2001-04-12 Bruno Haible * iconvdata/TESTS2: New file. diff --git a/linuxthreads/ChangeLog b/linuxthreads/ChangeLog index d51bcd4..ebad330 100644 --- a/linuxthreads/ChangeLog +++ b/linuxthreads/ChangeLog @@ -1,8 +1,14 @@ 2001-04-12 Ulrich Drepper + * tst-cancel.c: Disable most tests. Add new test where all + cleanup handlers must run. + * Makefile (tests): Add tst-cancel again. + + * cancel.c (__pthread_perform_cleanup): Correct condition for + leaving cleanup loop early. + * sysdeps/i386/Makefile: Make sure gcc uses a frame pointer for all the files which use CURRENT_STACK_FRAME. - * sysdeps/i386/pt-machine.h (CURRENT_STACK_FRAME): Define using __builtin_frame_address. * sysdeps/i386/i686/pt-machine.h: Likewise. diff --git a/linuxthreads/Makefile b/linuxthreads/Makefile index d884a59..42f06a6 100644 --- a/linuxthreads/Makefile +++ b/linuxthreads/Makefile @@ -59,7 +59,7 @@ endif librt-tests = ex10 ex11 tests = ex1 ex2 ex3 ex4 ex5 ex6 ex7 ex8 ex9 $(librt-tests) ex12 ex13 joinrace \ tststack $(tests-nodelete-$(have-z-nodelete)) ecmutex ex14 ex15 ex16 \ - ex17 #tst-cancel + ex17 tst-cancel ifeq (yes,$(build-shared)) tests-nodelete-yes = unload diff --git a/linuxthreads/cancel.c b/linuxthreads/cancel.c index c9bbacd..7ecbd79 100644 --- a/linuxthreads/cancel.c +++ b/linuxthreads/cancel.c @@ -197,7 +197,8 @@ void __pthread_perform_cleanup(char *currentframe) last = c; c = c->__prev; - if (! FRAME_LEFT (last, c)) + + if (FRAME_LEFT (last, c)) break; } diff --git a/linuxthreads/tst-cancel.c b/linuxthreads/tst-cancel.c index 8f2d307..da32aaf 100644 --- a/linuxthreads/tst-cancel.c +++ b/linuxthreads/tst-cancel.c @@ -64,23 +64,32 @@ cleanupok (void *arg) } +static void * +t3 (void *arg) +{ + pthread_cleanup_push (cleanupok, (void *) (long int) 4); + inner ((int) (long int) arg); + pthread_exit (NULL); + pthread_cleanup_pop (0); +} + + static void innerok (int a) { - pthread_cleanup_push (cleanup, (void *) (long int) a); - if (a) - return; + pthread_cleanup_push (cleanupok, (void *) (long int) a); + pthread_exit (NULL); pthread_cleanup_pop (0); } static void * -t3 (void *arg) +t4 (void *arg) { - pthread_cleanup_push (cleanupok, (void *) (long int) 4); + pthread_cleanup_push (cleanupok, (void *) (long int) 6); innerok ((int) (long int) arg); - pthread_exit (NULL); pthread_cleanup_pop (0); + return NULL; } @@ -90,14 +99,14 @@ main (int argc, char *argv[]) pthread_t td; int err; char *tmp; - const char *path; + const char *prefix; const char template[] = "thtstXXXXXX"; struct stat64 st; int result = 0; - path = argc > 1 ? argv[1] : ""; - tmp = (char *) alloca (strlen (path) + sizeof template); - strcpy (stpcpy (tmp, path), template); + prefix = argc > 1 ? argv[1] : ""; + tmp = (char *) alloca (strlen (prefix) + sizeof template); + strcpy (stpcpy (tmp, prefix), template); fd = mkstemp (tmp); if (fd == -1) @@ -114,6 +123,7 @@ main (int argc, char *argv[]) exit (1); } +#ifdef NOT_YET err = pthread_create (&td, NULL, t1, NULL); if (err != 0) { @@ -155,6 +165,21 @@ main (int argc, char *argv[]) printf ("cannot join thread: %s\n", strerror (err)); exit (1); } +#endif + + err = pthread_create (&td, NULL, t4, (void *) 7); + if (err != 0) + { + printf ("cannot create thread t3: %s\n", strerror (err)); + exit (1); + } + + err = pthread_join (td, NULL); + if (err != 0) + { + printf ("cannot join thread: %s\n", strerror (err)); + exit (1); + } if (fstat64 (fd, &st) < 0) { @@ -177,7 +202,8 @@ main (int argc, char *argv[]) result = 1; } - if (cleanupokcnt != 1) + // if (cleanupokcnt != 3) will be three once t3 runs + if (cleanupokcnt != 2) { printf ("cleanupokcnt = %d\n", cleanupokcnt); result = 1;