Files
binutils-gdb/gdb/testsuite/gdb.threads/step-over-thread-exit.c
Simon Marchi 7fde9d9131 Testcases for stepping over thread exit syscall (PR gdb/27338)
- New in this series version:

 - gdb.threads/step-over-thread-exit.exp has a couple new testing axes:

   - non-stop vs all-stop.

   - in non-stop have the testcase explicitly stop all threads in
     non-stop mode, vs not doing that.

 - bail out of gdb.threads/step-over-thread-exit.exp early on FAIL, to
   avoid cascading timeouts.

Add new gdb.threads/step-over-thread-exit.exp and
gdb.threads/step-over-thread-exit-while-stop-all-threads.exp
testcases, exercising stepping over thread exit syscall.  These make
use of lib/my-syscalls.S to define the exit syscall.

Co-authored-by: Pedro Alves <pedro@palves.net>
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=27338
Change-Id: Ie8b2c5747db99b7023463a897a8390d9e814a9c9
2023-03-10 19:14:19 +00:00

53 lines
1.3 KiB
C

/* This testcase is part of GDB, the GNU debugger.
Copyright 2021-2022 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 3 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
#include <pthread.h>
#include <assert.h>
#include <stdlib.h>
#include "../lib/my-syscalls.h"
static void *
thread_func (void *arg)
{
my_exit (0);
/* my_exit above should exit the thread, we don't expect to reach
here. */
abort ();
}
int
main (void)
{
int i;
/* Spawn and join a thread, 100 times. */
for (i = 0; i < 100; i++)
{
pthread_t thread;
int ret;
ret = pthread_create (&thread, NULL, thread_func, NULL);
assert (ret == 0);
ret = pthread_join (thread, NULL);
assert (ret == 0);
}
return 0;
}