1/* Copyright 2022-2024 Free Software Foundation, Inc. 2 3 This file is part of GDB. 4 5 This program is free software; you can redistribute it and/or modify 6 it under the terms of the GNU General Public License as published by 7 the Free Software Foundation; either version 3 of the License, or 8 (at your option) any later version. 9 10 This program is distributed in the hope that it will be useful, 11 but WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 GNU General Public License for more details. 14 15 You should have received a copy of the GNU General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 17 18#include <pthread.h> 19#include <unistd.h> 20 21#define NUM_THREADS 3 22 23int 24is_matching_tid (int *tid_ptr, int tid_value) 25{ 26 return *tid_ptr == tid_value; 27} 28 29int 30return_true () 31{ 32 return 1; 33} 34 35int 36return_false () 37{ 38 return 0; 39} 40 41int 42function_that_segfaults () 43{ 44 int *p = 0; 45 *p = 1; /* Segfault happens here. */ 46} 47 48int 49function_with_breakpoint () 50{ 51 return 1; /* Nested breakpoint. */ 52} 53 54void * 55worker_func (void *arg) 56{ 57 int a = 42; /* Breakpoint here. */ 58} 59 60void 61stop_marker () 62{ 63 int b = 99; /* Stop marker. */ 64} 65 66int 67main () 68{ 69 pthread_t threads[NUM_THREADS]; 70 int args[NUM_THREADS]; 71 72 alarm (300); 73 74 for (int i = 0; i < NUM_THREADS; i++) 75 { 76 args[i] = i; 77 pthread_create (&threads[i], NULL, worker_func, &args[i]); 78 } 79 80 for (int i = 0; i < NUM_THREADS; i++) 81 { 82 void *retval; 83 pthread_join (threads[i], &retval); 84 } 85 86 stop_marker (); 87 88 return 0; 89} 90