Add test for user context selection sync

This patch adds a test to verify that events are sent properly to all
UIs when the user selection context (inferior, thread, frame) changes.

The goal of the C test file is to provide two threads that are stopped with the
same predictable backtrace (so that we can test frame switching).  The barrier
helps us know when the child threads are started.  Then, scheduler-locking is
used to bring each thread one by one to the position we expect them to be
during the test.

gdb/testsuite/ChangeLog:

YYYY-MM-DD  Antoine Tremblay  <antoine.tremblay@ericsson.com>
YYYY-MM-DD  Simon Marchi  <simon.marchi@ericsson.com>

	PR gdb/20487
	* gdb.mi/user-selected-context-sync.exp: New file.
	* gdb.mi/user-selected-context-sync.c: New file.
This commit is contained in:
Antoine Tremblay 2016-10-03 16:55:35 -04:00 committed by Simon Marchi
parent 4034d0ff52
commit 9c36d9544f
3 changed files with 1355 additions and 0 deletions

View File

@ -1,3 +1,10 @@
2016-10-03 Antoine Tremblay <antoine.tremblay@ericsson.com>
2016-10-03 Simon Marchi <simon.marchi@ericsson.com>
PR gdb/20487
* gdb.mi/user-selected-context-sync.exp: New file.
* gdb.mi/user-selected-context-sync.c: New file.
2016-10-03 Antoine Tremblay <antoine.tremblay@ericsson.com>
2016-10-03 Simon Marchi <simon.marchi@ericsson.com>

View File

@ -0,0 +1,63 @@
/* This testcase is part of GDB, the GNU debugger.
Copyright 2016 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 <unistd.h>
#define NUM_THREADS 2
static pthread_barrier_t barrier;
static void
child_sub_function (void)
{
while (1); /* thread loop line */
}
static void *
child_function (void *args)
{
pthread_barrier_wait (&barrier);
child_sub_function (); /* thread caller line */
return NULL;
}
int
main (void)
{
int i = 0;
pthread_t threads[NUM_THREADS];
/* Make the test exit eventually. */
alarm (20);
/* Initialize the barrier, NUM_THREADS plus the main thread. */
pthread_barrier_init (&barrier, NULL, NUM_THREADS + 1);
for (i = 0; i < NUM_THREADS; i++)
pthread_create (&threads[i], NULL, child_function, NULL);
pthread_barrier_wait (&barrier);
while (1); /* main break line */
return 0;
}

File diff suppressed because it is too large Load Diff