| OLD | NEW |
| 1 /* This testcase is part of GDB, the GNU debugger. | 1 /* This testcase is part of GDB, the GNU debugger. |
| 2 | 2 |
| 3 Copyright 2011-2012 Free Software Foundation, Inc. | 3 Copyright 2012 Free Software Foundation, Inc. |
| 4 | 4 |
| 5 This program is free software; you can redistribute it and/or modify | 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 | 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 | 7 the Free Software Foundation; either version 3 of the License, or |
| 8 (at your option) any later version. | 8 (at your option) any later version. |
| 9 | 9 |
| 10 This program is distributed in the hope that it will be useful, | 10 This program is distributed in the hope that it will be useful, |
| 11 but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 13 GNU General Public License for more details. | 13 GNU General Public License for more details. |
| 14 | 14 |
| 15 You should have received a copy of the GNU General Public License | 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/>. */ | 16 along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 17 | 17 |
| 18 #include <pthread.h> |
| 19 |
| 18 #ifdef SYMBOL_PREFIX | 20 #ifdef SYMBOL_PREFIX |
| 19 #define SYMBOL(str) SYMBOL_PREFIX #str | 21 #define SYMBOL(str) SYMBOL_PREFIX #str |
| 20 #else | 22 #else |
| 21 #define SYMBOL(str) #str | 23 #define SYMBOL(str) #str |
| 22 #endif | 24 #endif |
| 23 | |
| 24 int globvar; | |
| 25 | |
| 26 static void | |
| 27 begin (void) | |
| 28 {} | |
| 29 | |
| 30 /* Called from asm. */ | 25 /* Called from asm. */ |
| 31 static void __attribute__((used)) | 26 static void __attribute__((used)) |
| 32 func (void) | 27 func (void) |
| 33 {} | 28 {} |
| 34 | 29 |
| 35 static void | 30 static void * |
| 36 marker (int anarg) | 31 thread_function(void *arg) |
| 37 { | 32 { |
| 38 /* `set_point' is the label at which to set a fast tracepoint. The | 33 /* `set_point1' is the label at which to set a fast tracepoint. The |
| 39 insn at the label must be large enough to fit a fast tracepoint | 34 insn at the label must be large enough to fit a fast tracepoint |
| 40 jump. */ | 35 jump. */ |
| 41 asm (" .global " SYMBOL(set_point) "\n" | 36 asm (" .global " SYMBOL(set_point1) "\n" |
| 42 SYMBOL(set_point) ":\n" | 37 SYMBOL(set_point1) ":\n" |
| 43 #if (defined __x86_64__ || defined __i386__) | 38 #if (defined __x86_64__ || defined __i386__) |
| 44 " call " SYMBOL(func) "\n" | 39 " call " SYMBOL(func) "\n" |
| 45 #endif | 40 #endif |
| 46 ); | 41 ); |
| 47 | |
| 48 ++anarg; | |
| 49 | |
| 50 /* Set up a known 4-byte instruction so we can try to set a shorter | |
| 51 fast tracepoint at it. */ | |
| 52 asm (" .global " SYMBOL(four_byter) "\n" | |
| 53 SYMBOL(four_byter) ":\n" | |
| 54 #if (defined __i386__) | |
| 55 " cmpl $0x1,0x8(%ebp) \n" | |
| 56 #endif | |
| 57 ); | |
| 58 } | 42 } |
| 59 | 43 |
| 60 static void | 44 static void |
| 61 end (void) | 45 end (void) |
| 62 {} | 46 {} |
| 63 | 47 |
| 64 int | 48 int |
| 65 main () | 49 main (int argc, char *argv[], char *envp[]) |
| 66 { | 50 { |
| 67 begin (); | 51 pthread_t threads[2]; |
| 52 int i; |
| 68 | 53 |
| 69 for (globvar = 1; globvar < 11; ++globvar) | 54 for (i = 0; i < 2; i++) |
| 70 { | 55 pthread_create (&threads[i], NULL, thread_function, NULL); |
| 71 marker (globvar * 100); | 56 |
| 72 } | 57 for (i = 0; i < 2; i++) |
| 58 pthread_join (threads[i], NULL); |
| 73 | 59 |
| 74 end (); | 60 end (); |
| 61 |
| 75 return 0; | 62 return 0; |
| 76 } | 63 } |
| OLD | NEW |