+2011-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * linux-thread-db.c (find_new_threads_callback): Exit on zero TI_TID
+ even if !TARGET_HAS_EXECUTION.
+
2011-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
Fix convert_code_addr_to_desc_addr for ppc64 files after eu-strip.
if (ti.ti_state == TD_THR_UNKNOWN || ti.ti_state == TD_THR_ZOMBIE)
return 0; /* A zombie -- ignore. */
- if (ti.ti_tid == 0 && target_has_execution)
+ if (ti.ti_tid == 0)
{
/* A thread ID of zero means that this is the main thread, but
glibc has not yet initialized thread-local storage and the
need this glibc bug workaround. */
info->need_stale_parent_threads_check = 0;
- err = info->td_thr_event_enable_p (th_p, 1);
- if (err != TD_OK)
- error (_("Cannot enable thread event reporting for LWP %d: %s"),
- (int) ti.ti_lid, thread_db_err_str (err));
+ if (target_has_execution)
+ {
+ err = info->td_thr_event_enable_p (th_p, 1);
+ if (err != TD_OK)
+ error (_("Cannot enable thread event reporting for LWP %d: %s"),
+ (int) ti.ti_lid, thread_db_err_str (err));
+ }
return 0;
}
+2011-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.threads/gcore-thread.exp ($core0file): New variable.
+ (clear __stack_user.next, clear stack_used.next)
+ (save a zeroed-threads corefile): New test.
+ Call core_load for $core0file.
+ (zeroed-threads cannot be listed): New test.
+
2011-04-17 Jan Kratochvil <jan.kratochvil@redhat.com>
* gdb.threads/gcore-thread.exp ($testfile): Match it the .exp
set srcfile pthreads.c
set binfile ${objdir}/${subdir}/${testfile}
set corefile ${objdir}/${subdir}/${testfile}.test
+set core0file ${objdir}/${subdir}/${testfile}0.test
if [istarget "*-*-linux"] then {
set target_cflags "-D_MIT_POSIX_THREADS"
}
+# Test the uninitialized thread list.
+# Provide the case of glibc td_thr_get_info handling of:
+# /* Special case for the main thread before initialization. */
+
+foreach symbol {__stack_user stack_used} {
+ set test "clear ${symbol}.next"
+ gdb_test_multiple "p *(void **) &${symbol} = 0" $test {
+ -re " = \\(void \\*\\) 0x0\r\n$gdb_prompt $" {
+ pass $test
+ }
+ -re "No symbol \"${symbol}\" in current context\\.\r\n$gdb_prompt $" {
+ xfail $test
+ # Do not do the verification.
+ set core0file ""
+ }
+ }
+}
+
+if {"$core0file" != ""} {
+ gdb_test "gcore $core0file" "Saved corefile .*" "save a zeroed-threads corefile"
+}
+
+
# Now restart gdb and load the corefile.
clean_restart ${testfile}
gdb_test "info threads" ".*${nl}\\* ${horiz} thread2 .*" \
"thread2 is current thread in corefile"
+
+
+# Test the uninitialized thread list.
+
+if {"$core0file" != "" && [load_core $core0file]} {
+
+ gdb_test "info threads" "Cannot find new threads: .*" "zeroed-threads cannot be listed"
+}