From 249a3d0c4ffb36f4aacdbae357b371d53325f674 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 8 Jan 2004 18:23:53 +0000 Subject: Update. 2004-01-08 Jakub Jelinek * sysdeps/unix/sysv/linux/x86_64/clone.S (__clone): Add cfi_endproc right before syscall and cfi_startproc before PSEUDO_END. Clear %rbp in thread_start. --- nptl/ChangeLog | 5 +++ nptl/Makefile | 3 +- nptl/tst-backtrace1.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 93 insertions(+), 1 deletion(-) create mode 100644 nptl/tst-backtrace1.c (limited to 'nptl') diff --git a/nptl/ChangeLog b/nptl/ChangeLog index f77a2a1c5e..ef0dffc2e6 100644 --- a/nptl/ChangeLog +++ b/nptl/ChangeLog @@ -1,3 +1,8 @@ +2004-01-08 Jakub Jelinek + + * Makefile (tests): Add tst-backtrace1. + * tst-backtrace1.c: New test. + 2003-12-11 Ulrich Weigand * sysdeps/alpha/tls.h (DB_THREAD_SELF): Pass bit size of thread diff --git a/nptl/Makefile b/nptl/Makefile index 08ed1487a5..c67bfe4ef6 100644 --- a/nptl/Makefile +++ b/nptl/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2002, 2003 Free Software Foundation, Inc. +# Copyright (C) 2002, 2003, 2004 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 @@ -235,6 +235,7 @@ tests = tst-attr1 tst-attr2 tst-attr3 \ tst-clock1 tst-clock2 \ tst-context1 \ tst-sched1 \ + tst-backtrace1 \ tst-oddstacklimit # This sets the stack resource limit to 1023kb, which is not a multiple diff --git a/nptl/tst-backtrace1.c b/nptl/tst-backtrace1.c new file mode 100644 index 0000000000..903c493743 --- /dev/null +++ b/nptl/tst-backtrace1.c @@ -0,0 +1,86 @@ +/* Copyright (C) 2004 Free Software Foundation, Inc. + This file is part of the GNU C Library. + Contributed by Jakub Jelinek , 2004. + + 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. */ + +#include +#include +#include + +#define BT_SIZE 64 +void *bt_array[BT_SIZE]; +int bt_cnt; + +int +do_bt (void) +{ + bt_cnt = backtrace (bt_array, BT_SIZE); + return 56; +} + +int +call_do_bt (void) +{ + return do_bt () + 1; +} + +void * +tf (void *arg) +{ + if (call_do_bt () != 57) + return (void *) 1L; + return NULL; +} + +int +do_test (void) +{ + pthread_t th; + if (pthread_create (&th, NULL, tf, NULL)) + { + puts ("create failed"); + return 1; + } + + void *res; + if (pthread_join (th, &res)) + { + puts ("join failed"); + return 1; + } + + if (res != NULL) + { + puts ("thread failed"); + return 1; + } + + char **text = backtrace_symbols (bt_array, bt_cnt); + if (text == NULL) + { + puts ("backtrace_symbols failed"); + return 1; + } + + for (int i = 0; i < bt_cnt; ++i) + puts (text[i]); + + return 0; +} + +#define TEST_FUNCTION do_test () +#include "../test-skeleton.c" -- cgit v1.2.3