Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(59)

Side by Side Diff: gdb/linux-thread-db.c

Issue 11969036: Merge GDB 7.5.1 (Closed) Base URL: http://git.chromium.org/native_client/nacl-gdb.git@master
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « gdb/linux-tdep.c ('k') | gdb/lm32-tdep.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
None
OLDNEW
1 /* libthread_db assisted debugging support, generic parts. 1 /* libthread_db assisted debugging support, generic parts.
2 2
3 Copyright (C) 1999-2001, 2003-2012 Free Software Foundation, Inc. 3 Copyright (C) 1999-2001, 2003-2012 Free Software Foundation, Inc.
4 4
5 This file is part of GDB. 5 This file is part of GDB.
6 6
7 This program is free software; you can redistribute it and/or modify 7 This program is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by 8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3 of the License, or 9 the Free Software Foundation; either version 3 of the License, or
10 (at your option) any later version. 10 (at your option) any later version.
(...skipping 22 matching lines...) Expand all
33 #include "symfile.h" 33 #include "symfile.h"
34 #include "objfiles.h" 34 #include "objfiles.h"
35 #include "target.h" 35 #include "target.h"
36 #include "regcache.h" 36 #include "regcache.h"
37 #include "solib.h" 37 #include "solib.h"
38 #include "solib-svr4.h" 38 #include "solib-svr4.h"
39 #include "gdbcore.h" 39 #include "gdbcore.h"
40 #include "observer.h" 40 #include "observer.h"
41 #include "linux-nat.h" 41 #include "linux-nat.h"
42 #include "linux-procfs.h" 42 #include "linux-procfs.h"
43 #include "linux-osdata.h"
44 #include "auto-load.h"
43 45
44 #include <signal.h> 46 #include <signal.h>
45 47 #include <ctype.h>
46 #ifdef HAVE_GNU_LIBC_VERSION_H
47 #include <gnu/libc-version.h>
48 #endif
49 48
50 /* GNU/Linux libthread_db support. 49 /* GNU/Linux libthread_db support.
51 50
52 libthread_db is a library, provided along with libpthread.so, which 51 libthread_db is a library, provided along with libpthread.so, which
53 exposes the internals of the thread library to a debugger. It 52 exposes the internals of the thread library to a debugger. It
54 allows GDB to find existing threads, new threads as they are 53 allows GDB to find existing threads, new threads as they are
55 created, thread IDs (usually, the result of pthread_self), and 54 created, thread IDs (usually, the result of pthread_self), and
56 thread-local variables. 55 thread-local variables.
57 56
58 The libthread_db interface originates on Solaris, where it is 57 The libthread_db interface originates on Solaris, where it is
59 both more powerful and more complicated. This implementation 58 both more powerful and more complicated. This implementation
60 only works for LinuxThreads and NPTL, the two glibc threading 59 only works for LinuxThreads and NPTL, the two glibc threading
61 libraries. It assumes that each thread is permanently assigned 60 libraries. It assumes that each thread is permanently assigned
62 to a single light-weight process (LWP). 61 to a single light-weight process (LWP).
63 62
64 libthread_db-specific information is stored in the "private" field 63 libthread_db-specific information is stored in the "private" field
65 of struct thread_info. When the field is NULL we do not yet have 64 of struct thread_info. When the field is NULL we do not yet have
66 information about the new thread; this could be temporary (created, 65 information about the new thread; this could be temporary (created,
67 but the thread library's data structures do not reflect it yet) 66 but the thread library's data structures do not reflect it yet)
68 or permanent (created using clone instead of pthread_create). 67 or permanent (created using clone instead of pthread_create).
69 68
70 Process IDs managed by linux-thread-db.c match those used by 69 Process IDs managed by linux-thread-db.c match those used by
71 linux-nat.c: a common PID for all processes, an LWP ID for each 70 linux-nat.c: a common PID for all processes, an LWP ID for each
72 thread, and no TID. We save the TID in private. Keeping it out 71 thread, and no TID. We save the TID in private. Keeping it out
73 of the ptid_t prevents thread IDs changing when libpthread is 72 of the ptid_t prevents thread IDs changing when libpthread is
74 loaded or unloaded. */ 73 loaded or unloaded. */
75 74
76 static char *libthread_db_search_path; 75 static char *libthread_db_search_path;
77 76
77 /* Set to non-zero if thread_db auto-loading is enabled
78 by the "set auto-load libthread-db" command. */
79 static int auto_load_thread_db = 1;
80
81 /* "show" command for the auto_load_thread_db configuration variable. */
82
83 static void
84 show_auto_load_thread_db (struct ui_file *file, int from_tty,
85 struct cmd_list_element *c, const char *value)
86 {
87 fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
88 "is %s.\n"),
89 value);
90 }
91
78 static void 92 static void
79 set_libthread_db_search_path (char *ignored, int from_tty, 93 set_libthread_db_search_path (char *ignored, int from_tty,
80 struct cmd_list_element *c) 94 struct cmd_list_element *c)
81 { 95 {
82 if (*libthread_db_search_path == '\0') 96 if (*libthread_db_search_path == '\0')
83 { 97 {
84 xfree (libthread_db_search_path); 98 xfree (libthread_db_search_path);
85 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH); 99 libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
86 } 100 }
87 } 101 }
(...skipping 24 matching lines...) Expand all
112 struct thread_db_info 126 struct thread_db_info
113 { 127 {
114 struct thread_db_info *next; 128 struct thread_db_info *next;
115 129
116 /* Process id this object refers to. */ 130 /* Process id this object refers to. */
117 int pid; 131 int pid;
118 132
119 /* Handle from dlopen for libthread_db.so. */ 133 /* Handle from dlopen for libthread_db.so. */
120 void *handle; 134 void *handle;
121 135
136 /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
137 HANDLE. It may be NULL for system library. */
138 char *filename;
139
122 /* Structure that identifies the child process for the 140 /* Structure that identifies the child process for the
123 <proc_service.h> interface. */ 141 <proc_service.h> interface. */
124 struct ps_prochandle proc_handle; 142 struct ps_prochandle proc_handle;
125 143
126 /* Connection to the libthread_db library. */ 144 /* Connection to the libthread_db library. */
127 td_thragent_t *thread_agent; 145 td_thragent_t *thread_agent;
128 146
129 /* True if we need to apply the workaround for glibc/BZ5983. When 147 /* True if we need to apply the workaround for glibc/BZ5983. When
130 we catch a PTRACE_O_TRACEFORK, and go query the child's thread 148 we catch a PTRACE_O_TRACEFORK, and go query the child's thread
131 list, nptl_db returns the parent's threads in addition to the new 149 list, nptl_db returns the parent's threads in addition to the new
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after
241 for (info = thread_db_list; info; info_prev = info, info = info->next) 259 for (info = thread_db_list; info; info_prev = info, info = info->next)
242 if (pid == info->pid) 260 if (pid == info->pid)
243 break; 261 break;
244 262
245 if (info == NULL) 263 if (info == NULL)
246 return; 264 return;
247 265
248 if (info->handle != NULL) 266 if (info->handle != NULL)
249 dlclose (info->handle); 267 dlclose (info->handle);
250 268
269 xfree (info->filename);
270
251 if (info_prev) 271 if (info_prev)
252 info_prev->next = info->next; 272 info_prev->next = info->next;
253 else 273 else
254 thread_db_list = info->next; 274 thread_db_list = info->next;
255 275
256 xfree (info); 276 xfree (info);
257 } 277 }
258 278
259 /* Prototypes for local functions. */ 279 /* Prototypes for local functions. */
260 static int attach_thread (ptid_t ptid, const td_thrhandle_t *th_p, 280 static int attach_thread (ptid_t ptid, const td_thrhandle_t *th_p,
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
542 err = info->td_ta_event_addr_p (info->thread_agent, event, &notify); 562 err = info->td_ta_event_addr_p (info->thread_agent, event, &notify);
543 if (err != TD_OK) 563 if (err != TD_OK)
544 return err; 564 return err;
545 565
546 /* Set up the breakpoint. */ 566 /* Set up the breakpoint. */
547 gdb_assert (exec_bfd); 567 gdb_assert (exec_bfd);
548 (*bp) = (gdbarch_convert_from_func_ptr_addr 568 (*bp) = (gdbarch_convert_from_func_ptr_addr
549 (target_gdbarch, 569 (target_gdbarch,
550 /* Do proper sign extension for the target. */ 570 /* Do proper sign extension for the target. */
551 (bfd_get_sign_extend_vma (exec_bfd) > 0 571 (bfd_get_sign_extend_vma (exec_bfd) > 0

error: old chunk mismatch

OLDNEW
« no previous file with comments | « gdb/linux-tdep.c ('k') | gdb/lm32-tdep.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698