gdb/
* python/py-inferior.c (infpy_threads): Call update_thread_list (). gdb/testsuite/ * gdb.python/py-inferior.c (thread): New function. (check_threads): New function. (test_threads): New function. * gdb.python/py-inferior.exp: Added test. Replaced runto with continue to breakpoint.
This commit is contained in:
parent
8223e12c08
commit
f66713d24a
5 changed files with 70 additions and 3 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
2012-07-26 Markus Metzger <markus.t.metzger@intel.com>
|
||||||
|
|
||||||
|
* python/py-inferior.c (infpy_threads): Call update_thread_list ().
|
||||||
|
|
||||||
2012-07-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
2012-07-26 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
* auto-load.c (auto_load_info_scripts): Remove immediate_quit increment
|
* auto-load.c (auto_load_info_scripts): Remove immediate_quit increment
|
||||||
|
|
|
@ -300,9 +300,14 @@ infpy_threads (PyObject *self, PyObject *args)
|
||||||
struct threadlist_entry *entry;
|
struct threadlist_entry *entry;
|
||||||
inferior_object *inf_obj = (inferior_object *) self;
|
inferior_object *inf_obj = (inferior_object *) self;
|
||||||
PyObject *tuple;
|
PyObject *tuple;
|
||||||
|
volatile struct gdb_exception except;
|
||||||
|
|
||||||
INFPY_REQUIRE_VALID (inf_obj);
|
INFPY_REQUIRE_VALID (inf_obj);
|
||||||
|
|
||||||
|
TRY_CATCH (except, RETURN_MASK_ALL)
|
||||||
|
update_thread_list ();
|
||||||
|
GDB_PY_HANDLE_EXCEPTION (except);
|
||||||
|
|
||||||
tuple = PyTuple_New (inf_obj->nthreads);
|
tuple = PyTuple_New (inf_obj->nthreads);
|
||||||
if (!tuple)
|
if (!tuple)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
|
@ -1,3 +1,11 @@
|
||||||
|
2012-07-26 Markus Metzger <markus.t.metzger@intel.com>
|
||||||
|
|
||||||
|
* gdb.python/py-inferior.c (thread): New function.
|
||||||
|
(check_threads): New function.
|
||||||
|
(test_threads): New function.
|
||||||
|
* gdb.python/py-inferior.exp: Added test.
|
||||||
|
Replaced runto with continue to breakpoint.
|
||||||
|
|
||||||
2012-07-26 Tom Tromey <tromey@redhat.com>
|
2012-07-26 Tom Tromey <tromey@redhat.com>
|
||||||
|
|
||||||
* lib/ada.exp (standard_ada_testfile): New proc.
|
* lib/ada.exp (standard_ada_testfile): New proc.
|
||||||
|
|
|
@ -2,9 +2,11 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
#define CHUNK_SIZE 16000 /* same as findcmd.c's */
|
#define CHUNK_SIZE 16000 /* same as findcmd.c's */
|
||||||
#define BUF_SIZE (2 * CHUNK_SIZE) /* at least two chunks */
|
#define BUF_SIZE (2 * CHUNK_SIZE) /* at least two chunks */
|
||||||
|
#define NUMTH 8
|
||||||
|
|
||||||
int8_t int8_search_buf[100];
|
int8_t int8_search_buf[100];
|
||||||
int16_t int16_search_buf[100];
|
int16_t int16_search_buf[100];
|
||||||
|
@ -43,8 +45,47 @@ init_bufs ()
|
||||||
memset (search_buf, 'x', search_buf_size);
|
memset (search_buf, 'x', search_buf_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void *
|
||||||
|
thread (void *param)
|
||||||
|
{
|
||||||
|
pthread_barrier_t *barrier = (pthread_barrier_t *) param;
|
||||||
|
|
||||||
|
pthread_barrier_wait (barrier);
|
||||||
|
|
||||||
|
return param;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
check_threads (pthread_barrier_t *barrier)
|
||||||
|
{
|
||||||
|
pthread_barrier_wait (barrier);
|
||||||
|
}
|
||||||
|
|
||||||
|
extern int
|
||||||
|
test_threads (void)
|
||||||
|
{
|
||||||
|
pthread_t threads[NUMTH];
|
||||||
|
pthread_barrier_t barrier;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
pthread_barrier_init (&barrier, NULL, NUMTH + 1);
|
||||||
|
|
||||||
|
for (i = 0; i < NUMTH; ++i)
|
||||||
|
pthread_create (&threads[i], NULL, thread, &barrier);
|
||||||
|
|
||||||
|
check_threads (&barrier);
|
||||||
|
|
||||||
|
for (i = 0; i < NUMTH; ++i)
|
||||||
|
pthread_join (threads[i], NULL);
|
||||||
|
|
||||||
|
pthread_barrier_destroy (&barrier);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
int main (int argc, char *argv[])
|
int main (int argc, char *argv[])
|
||||||
{
|
{
|
||||||
|
test_threads ();
|
||||||
init_bufs ();
|
init_bufs ();
|
||||||
|
|
||||||
return f1 (1, 2);
|
return f1 (1, 2);
|
||||||
|
|
|
@ -20,7 +20,7 @@ load_lib gdb-python.exp
|
||||||
|
|
||||||
standard_testfile
|
standard_testfile
|
||||||
|
|
||||||
if { [prepare_for_testing ${testfile}.exp ${testfile} ${srcfile}] } {
|
if { [gdb_compile_pthreads ${srcdir}/${subdir}/${srcfile} ${binfile} executable {debug}] != "" } {
|
||||||
return -1
|
return -1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,8 +48,6 @@ if ![runto_main] then {
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
runto [gdb_get_line_number "Break here."]
|
|
||||||
|
|
||||||
# Test basic gdb.Inferior attributes and methods.
|
# Test basic gdb.Inferior attributes and methods.
|
||||||
|
|
||||||
gdb_py_test_silent_cmd "python inferiors = gdb.inferiors ()" "get inferiors list" 1
|
gdb_py_test_silent_cmd "python inferiors = gdb.inferiors ()" "get inferiors list" 1
|
||||||
|
@ -62,6 +60,17 @@ gdb_test "python print 'result =', i0.pid" " = \[0-9\]+" "test Inferior.pid"
|
||||||
gdb_test "python print 'result =', i0.was_attached" " = False" "test Inferior.was_attached"
|
gdb_test "python print 'result =', i0.was_attached" " = False" "test Inferior.was_attached"
|
||||||
gdb_test "python print i0.threads ()" "\\(<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"
|
gdb_test "python print i0.threads ()" "\\(<gdb.InferiorThread object at 0x\[\[:xdigit:\]\]+>,\\)" "test Inferior.threads"
|
||||||
|
|
||||||
|
# Test the number of inferior threads.
|
||||||
|
|
||||||
|
gdb_breakpoint check_threads
|
||||||
|
gdb_continue_to_breakpoint "cont to check_threads" ".*pthread_barrier_wait.*"
|
||||||
|
gdb_test "python print len (i0.threads ())" "\r\n9" "test Inferior.threads 2"
|
||||||
|
|
||||||
|
# Proceed to the next test.
|
||||||
|
|
||||||
|
gdb_breakpoint [gdb_get_line_number "Break here."]
|
||||||
|
gdb_continue_to_breakpoint "cont to Break here." ".*Break here\..*"
|
||||||
|
|
||||||
# Test memory read and write operations.
|
# Test memory read and write operations.
|
||||||
|
|
||||||
gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \
|
gdb_py_test_silent_cmd "python addr = gdb.selected_frame ().read_var ('str')" \
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue