aboutsummaryrefslogtreecommitdiff
path: root/linuxthreads_db
diff options
context:
space:
mode:
Diffstat (limited to 'linuxthreads_db')
-rw-r--r--linuxthreads_db/ChangeLog8
-rw-r--r--linuxthreads_db/td_symbol_list.c3
-rw-r--r--linuxthreads_db/td_thr_event_enable.c28
-rw-r--r--linuxthreads_db/thread_dbP.h1
4 files changed, 32 insertions, 8 deletions
diff --git a/linuxthreads_db/ChangeLog b/linuxthreads_db/ChangeLog
index 6cd9757..dd87f89 100644
--- a/linuxthreads_db/ChangeLog
+++ b/linuxthreads_db/ChangeLog
@@ -1,3 +1,11 @@
+2002-08-07 Ulrich Drepper <drepper@redhat.com>
+
+ * thread_dbP.h: Define LINUXTHREADS_INITIAL_REPORT_EVENTS.
+ * td_thr_event_enable.c (td_thr_event_enable): If th->th_unique is
+ null write to __linuxthreads_initial_report_events.
+ * td_symbol_list.c (symbol_list_arr): Add
+ __linuxthreads_initial_report_events.
+
2002-07-16 Ulrich Drepper <drepper@redhat.com>
* td_thr_clear_event.c: Yet more changes to help with TLS-enabled
diff --git a/linuxthreads_db/td_symbol_list.c b/linuxthreads_db/td_symbol_list.c
index e64d298..8132618 100644
--- a/linuxthreads_db/td_symbol_list.c
+++ b/linuxthreads_db/td_symbol_list.c
@@ -1,5 +1,5 @@
/* Return list of symbols the library can request.
- Copyright (C) 2001 Free Software Foundation, Inc.
+ Copyright (C) 2001, 2002 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 2001.
@@ -36,6 +36,7 @@ static const char *symbol_list_arr[] =
[LINUXTHREADS_CREATE_EVENT] = "__linuxthreads_create_event",
[LINUXTHREADS_DEATH_EVENT] = "__linuxthreads_death_event",
[LINUXTHREADS_REAP_EVENT] = "__linuxthreads_reap_event",
+ [LINUXTHREADS_INITIAL_REPORT_EVENTS] = "__linuxthreads_initial_report_events",
[NUM_MESSAGES] = NULL
};
diff --git a/linuxthreads_db/td_thr_event_enable.c b/linuxthreads_db/td_thr_event_enable.c
index b6ec4d0..407f3fc 100644
--- a/linuxthreads_db/td_thr_event_enable.c
+++ b/linuxthreads_db/td_thr_event_enable.c
@@ -31,13 +31,27 @@ td_thr_event_enable (th, onoff)
LOG ("td_thr_event_enable");
/* Write the new value into the thread data structure. */
- if (th->th_unique != NULL)
- if (ps_pdwrite (th->th_ta_p->ph,
- ((char *) th->th_unique
- + offsetof (struct _pthread_descr_struct,
- p_report_events)),
- &onoff, sizeof (int)) != PS_OK)
- return TD_ERR; /* XXX Other error value? */
+ if (th->th_unique == NULL)
+ {
+ psaddr_t addr;
+
+ if (td_lookup (th->th_ta_p->ph, LINUXTHREADS_INITIAL_REPORT_EVENTS,
+ &addr) != PS_OK)
+ /* Cannot read the symbol. This should not happen. */
+ return TD_ERR;
+
+ if (ps_pdwrite (th->th_ta_p->ph, addr, &onoff, sizeof (int)) != PS_OK)
+ return TD_ERR;
+
+ return TD_OK;
+ }
+
+ if (ps_pdwrite (th->th_ta_p->ph,
+ ((char *) th->th_unique
+ + offsetof (struct _pthread_descr_struct,
+ p_report_events)),
+ &onoff, sizeof (int)) != PS_OK)
+ return TD_ERR; /* XXX Other error value? */
return TD_OK;
}
diff --git a/linuxthreads_db/thread_dbP.h b/linuxthreads_db/thread_dbP.h
index a64a5b3..85222ab 100644
--- a/linuxthreads_db/thread_dbP.h
+++ b/linuxthreads_db/thread_dbP.h
@@ -23,6 +23,7 @@ enum
LINUXTHREADS_CREATE_EVENT,
LINUXTHREADS_DEATH_EVENT,
LINUXTHREADS_REAP_EVENT,
+ LINUXTHREADS_INITIAL_REPORT_EVENTS,
NUM_MESSAGES
};