Add arm epilogue unwinder
[external/binutils.git] / gdb / linux-thread-db.c
1 /* libthread_db assisted debugging support, generic parts.
2
3    Copyright (C) 1999-2016 Free Software Foundation, Inc.
4
5    This file is part of GDB.
6
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
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19
20 #include "defs.h"
21 #include <dlfcn.h>
22 #include "gdb_proc_service.h"
23 #include "nat/gdb_thread_db.h"
24 #include "gdb_vecs.h"
25 #include "bfd.h"
26 #include "command.h"
27 #include "gdbcmd.h"
28 #include "gdbthread.h"
29 #include "inferior.h"
30 #include "infrun.h"
31 #include "symfile.h"
32 #include "objfiles.h"
33 #include "target.h"
34 #include "regcache.h"
35 #include "solib.h"
36 #include "solib-svr4.h"
37 #include "gdbcore.h"
38 #include "observer.h"
39 #include "linux-nat.h"
40 #include "nat/linux-procfs.h"
41 #include "nat/linux-ptrace.h"
42 #include "nat/linux-osdata.h"
43 #include "auto-load.h"
44 #include "cli/cli-utils.h"
45 #include <signal.h>
46 #include <ctype.h>
47 #include "nat/linux-namespaces.h"
48
49 /* GNU/Linux libthread_db support.
50
51    libthread_db is a library, provided along with libpthread.so, which
52    exposes the internals of the thread library to a debugger.  It
53    allows GDB to find existing threads, new threads as they are
54    created, thread IDs (usually, the result of pthread_self), and
55    thread-local variables.
56
57    The libthread_db interface originates on Solaris, where it is both
58    more powerful and more complicated.  This implementation only works
59    for NPTL, the glibc threading library.  It assumes that each thread
60    is permanently assigned to a single light-weight process (LWP).  At
61    some point it also supported the older LinuxThreads library, but it
62    no longer does.
63
64    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
66    information about the new thread; this could be temporary (created,
67    but the thread library's data structures do not reflect it yet)
68    or permanent (created using clone instead of pthread_create).
69
70    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
72    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
74    loaded or unloaded.  */
75
76 static char *libthread_db_search_path;
77
78 /* Set to non-zero if thread_db auto-loading is enabled
79    by the "set auto-load libthread-db" command.  */
80 static int auto_load_thread_db = 1;
81
82 /* "show" command for the auto_load_thread_db configuration variable.  */
83
84 static void
85 show_auto_load_thread_db (struct ui_file *file, int from_tty,
86                           struct cmd_list_element *c, const char *value)
87 {
88   fprintf_filtered (file, _("Auto-loading of inferior specific libthread_db "
89                             "is %s.\n"),
90                     value);
91 }
92
93 static void
94 set_libthread_db_search_path (char *ignored, int from_tty,
95                               struct cmd_list_element *c)
96 {
97   if (*libthread_db_search_path == '\0')
98     {
99       xfree (libthread_db_search_path);
100       libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
101     }
102 }
103
104 /* If non-zero, print details of libthread_db processing.  */
105
106 static unsigned int libthread_db_debug;
107
108 static void
109 show_libthread_db_debug (struct ui_file *file, int from_tty,
110                          struct cmd_list_element *c, const char *value)
111 {
112   fprintf_filtered (file, _("libthread-db debugging is %s.\n"), value);
113 }
114
115 /* If we're running on GNU/Linux, we must explicitly attach to any new
116    threads.  */
117
118 /* This module's target vector.  */
119 static struct target_ops thread_db_ops;
120
121 /* Non-zero if we have determined the signals used by the threads
122    library.  */
123 static int thread_signals;
124 static sigset_t thread_stop_set;
125 static sigset_t thread_print_set;
126
127 struct thread_db_info
128 {
129   struct thread_db_info *next;
130
131   /* Process id this object refers to.  */
132   int pid;
133
134   /* Handle from dlopen for libthread_db.so.  */
135   void *handle;
136
137   /* Absolute pathname from gdb_realpath to disk file used for dlopen-ing
138      HANDLE.  It may be NULL for system library.  */
139   char *filename;
140
141   /* Structure that identifies the child process for the
142      <proc_service.h> interface.  */
143   struct ps_prochandle proc_handle;
144
145   /* Connection to the libthread_db library.  */
146   td_thragent_t *thread_agent;
147
148   /* True if we need to apply the workaround for glibc/BZ5983.  When
149      we catch a PTRACE_O_TRACEFORK, and go query the child's thread
150      list, nptl_db returns the parent's threads in addition to the new
151      (single) child thread.  If this flag is set, we do extra work to
152      be able to ignore such stale entries.  */
153   int need_stale_parent_threads_check;
154
155   /* Pointers to the libthread_db functions.  */
156
157   td_init_ftype *td_init_p;
158   td_ta_new_ftype *td_ta_new_p;
159   td_ta_map_lwp2thr_ftype *td_ta_map_lwp2thr_p;
160   td_ta_thr_iter_ftype *td_ta_thr_iter_p;
161   td_thr_validate_ftype *td_thr_validate_p;
162   td_thr_get_info_ftype *td_thr_get_info_p;
163   td_thr_tls_get_addr_ftype *td_thr_tls_get_addr_p;
164   td_thr_tlsbase_ftype *td_thr_tlsbase_p;
165 };
166
167 /* List of known processes using thread_db, and the required
168    bookkeeping.  */
169 struct thread_db_info *thread_db_list;
170
171 static void thread_db_find_new_threads_1 (ptid_t ptid);
172 static void thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new);
173
174 static void check_thread_signals (void);
175
176 static struct thread_info *record_thread
177   (struct thread_db_info *info, struct thread_info *tp,
178    ptid_t ptid, const td_thrhandle_t *th_p, const td_thrinfo_t *ti_p);
179
180 /* Add the current inferior to the list of processes using libpthread.
181    Return a pointer to the newly allocated object that was added to
182    THREAD_DB_LIST.  HANDLE is the handle returned by dlopen'ing
183    LIBTHREAD_DB_SO.  */
184
185 static struct thread_db_info *
186 add_thread_db_info (void *handle)
187 {
188   struct thread_db_info *info = XCNEW (struct thread_db_info);
189
190   info->pid = ptid_get_pid (inferior_ptid);
191   info->handle = handle;
192
193   /* The workaround works by reading from /proc/pid/status, so it is
194      disabled for core files.  */
195   if (target_has_execution)
196     info->need_stale_parent_threads_check = 1;
197
198   info->next = thread_db_list;
199   thread_db_list = info;
200
201   return info;
202 }
203
204 /* Return the thread_db_info object representing the bookkeeping
205    related to process PID, if any; NULL otherwise.  */
206
207 static struct thread_db_info *
208 get_thread_db_info (int pid)
209 {
210   struct thread_db_info *info;
211
212   for (info = thread_db_list; info; info = info->next)
213     if (pid == info->pid)
214       return info;
215
216   return NULL;
217 }
218
219 /* When PID has exited or has been detached, we no longer want to keep
220    track of it as using libpthread.  Call this function to discard
221    thread_db related info related to PID.  Note that this closes
222    LIBTHREAD_DB_SO's dlopen'ed handle.  */
223
224 static void
225 delete_thread_db_info (int pid)
226 {
227   struct thread_db_info *info, *info_prev;
228
229   info_prev = NULL;
230
231   for (info = thread_db_list; info; info_prev = info, info = info->next)
232     if (pid == info->pid)
233       break;
234
235   if (info == NULL)
236     return;
237
238   if (info->handle != NULL)
239     dlclose (info->handle);
240
241   xfree (info->filename);
242
243   if (info_prev)
244     info_prev->next = info->next;
245   else
246     thread_db_list = info->next;
247
248   xfree (info);
249 }
250
251 /* Use "struct private_thread_info" to cache thread state.  This is
252    a substantial optimization.  */
253
254 struct private_thread_info
255 {
256   /* Flag set when we see a TD_DEATH event for this thread.  */
257   unsigned int dying:1;
258
259   /* Cached thread state.  */
260   td_thrhandle_t th;
261   thread_t tid;
262 };
263 \f
264
265 static char *
266 thread_db_err_str (td_err_e err)
267 {
268   static char buf[64];
269
270   switch (err)
271     {
272     case TD_OK:
273       return "generic 'call succeeded'";
274     case TD_ERR:
275       return "generic error";
276     case TD_NOTHR:
277       return "no thread to satisfy query";
278     case TD_NOSV:
279       return "no sync handle to satisfy query";
280     case TD_NOLWP:
281       return "no LWP to satisfy query";
282     case TD_BADPH:
283       return "invalid process handle";
284     case TD_BADTH:
285       return "invalid thread handle";
286     case TD_BADSH:
287       return "invalid synchronization handle";
288     case TD_BADTA:
289       return "invalid thread agent";
290     case TD_BADKEY:
291       return "invalid key";
292     case TD_NOMSG:
293       return "no event message for getmsg";
294     case TD_NOFPREGS:
295       return "FPU register set not available";
296     case TD_NOLIBTHREAD:
297       return "application not linked with libthread";
298     case TD_NOEVENT:
299       return "requested event is not supported";
300     case TD_NOCAPAB:
301       return "capability not available";
302     case TD_DBERR:
303       return "debugger service failed";
304     case TD_NOAPLIC:
305       return "operation not applicable to";
306     case TD_NOTSD:
307       return "no thread-specific data for this thread";
308     case TD_MALLOC:
309       return "malloc failed";
310     case TD_PARTIALREG:
311       return "only part of register set was written/read";
312     case TD_NOXREGS:
313       return "X register set not available for this thread";
314 #ifdef THREAD_DB_HAS_TD_NOTALLOC
315     case TD_NOTALLOC:
316       return "thread has not yet allocated TLS for given module";
317 #endif
318 #ifdef THREAD_DB_HAS_TD_VERSION
319     case TD_VERSION:
320       return "versions of libpthread and libthread_db do not match";
321 #endif
322 #ifdef THREAD_DB_HAS_TD_NOTLS
323     case TD_NOTLS:
324       return "there is no TLS segment in the given module";
325 #endif
326     default:
327       snprintf (buf, sizeof (buf), "unknown thread_db error '%d'", err);
328       return buf;
329     }
330 }
331
332 /* Fetch the user-level thread id of PTID.  */
333
334 static struct thread_info *
335 thread_from_lwp (ptid_t ptid)
336 {
337   td_thrhandle_t th;
338   td_thrinfo_t ti;
339   td_err_e err;
340   struct thread_db_info *info;
341   struct thread_info *tp;
342
343   /* Just in case td_ta_map_lwp2thr doesn't initialize it completely.  */
344   th.th_unique = 0;
345
346   /* This ptid comes from linux-nat.c, which should always fill in the
347      LWP.  */
348   gdb_assert (ptid_get_lwp (ptid) != 0);
349
350   info = get_thread_db_info (ptid_get_pid (ptid));
351
352   /* Access an lwp we know is stopped.  */
353   info->proc_handle.ptid = ptid;
354   err = info->td_ta_map_lwp2thr_p (info->thread_agent, ptid_get_lwp (ptid),
355                                    &th);
356   if (err != TD_OK)
357     error (_("Cannot find user-level thread for LWP %ld: %s"),
358            ptid_get_lwp (ptid), thread_db_err_str (err));
359
360   err = info->td_thr_get_info_p (&th, &ti);
361   if (err != TD_OK)
362     error (_("thread_get_info_callback: cannot get thread info: %s"),
363            thread_db_err_str (err));
364
365   /* Fill the cache.  */
366   tp = find_thread_ptid (ptid);
367   return record_thread (info, tp, ptid, &th, &ti);
368 }
369 \f
370
371 /* See linux-nat.h.  */
372
373 int
374 thread_db_notice_clone (ptid_t parent, ptid_t child)
375 {
376   td_thrhandle_t th;
377   td_thrinfo_t ti;
378   td_err_e err;
379   struct thread_db_info *info;
380
381   info = get_thread_db_info (ptid_get_pid (child));
382
383   if (info == NULL)
384     return 0;
385
386   thread_from_lwp (child);
387
388   /* If we do not know about the main thread yet, this would be a good
389      time to find it.  */
390   thread_from_lwp (parent);
391   return 1;
392 }
393
394 static void *
395 verbose_dlsym (void *handle, const char *name)
396 {
397   void *sym = dlsym (handle, name);
398   if (sym == NULL)
399     warning (_("Symbol \"%s\" not found in libthread_db: %s"),
400              name, dlerror ());
401   return sym;
402 }
403
404 /* Verify inferior's '\0'-terminated symbol VER_SYMBOL starts with "%d.%d" and
405    return 1 if this version is lower (and not equal) to
406    VER_MAJOR_MIN.VER_MINOR_MIN.  Return 0 in all other cases.  */
407
408 static int
409 inferior_has_bug (const char *ver_symbol, int ver_major_min, int ver_minor_min)
410 {
411   struct bound_minimal_symbol version_msym;
412   CORE_ADDR version_addr;
413   char *version;
414   int err, got, retval = 0;
415
416   version_msym = lookup_minimal_symbol (ver_symbol, NULL, NULL);
417   if (version_msym.minsym == NULL)
418     return 0;
419
420   version_addr = BMSYMBOL_VALUE_ADDRESS (version_msym);
421   got = target_read_string (version_addr, &version, 32, &err);
422   if (err == 0 && memchr (version, 0, got) == &version[got -1])
423     {
424       int major, minor;
425
426       retval = (sscanf (version, "%d.%d", &major, &minor) == 2
427                 && (major < ver_major_min
428                     || (major == ver_major_min && minor < ver_minor_min)));
429     }
430   xfree (version);
431
432   return retval;
433 }
434
435 /* Similar as thread_db_find_new_threads_1, but try to silently ignore errors
436    if appropriate.
437
438    Return 1 if the caller should abort libthread_db initialization.  Return 0
439    otherwise.  */
440
441 static int
442 thread_db_find_new_threads_silently (ptid_t ptid)
443 {
444
445   TRY
446     {
447       thread_db_find_new_threads_2 (ptid, 1);
448     }
449
450   CATCH (except, RETURN_MASK_ERROR)
451     {
452       if (libthread_db_debug)
453         exception_fprintf (gdb_stdlog, except,
454                            "Warning: thread_db_find_new_threads_silently: ");
455
456       /* There is a bug fixed between nptl 2.6.1 and 2.7 by
457            commit 7d9d8bd18906fdd17364f372b160d7ab896ce909
458          where calls to td_thr_get_info fail with TD_ERR for statically linked
459          executables if td_thr_get_info is called before glibc has initialized
460          itself.
461          
462          If the nptl bug is NOT present in the inferior and still thread_db
463          reports an error return 1.  It means the inferior has corrupted thread
464          list and GDB should fall back only to LWPs.
465
466          If the nptl bug is present in the inferior return 0 to silently ignore
467          such errors, and let gdb enumerate threads again later.  In such case
468          GDB cannot properly display LWPs if the inferior thread list is
469          corrupted.  For core files it does not apply, no 'later enumeration'
470          is possible.  */
471
472       if (!target_has_execution || !inferior_has_bug ("nptl_version", 2, 7))
473         {
474           exception_fprintf (gdb_stderr, except,
475                              _("Warning: couldn't activate thread debugging "
476                                "using libthread_db: "));
477           return 1;
478         }
479     }
480   END_CATCH
481
482   return 0;
483 }
484
485 /* Lookup a library in which given symbol resides.
486    Note: this is looking in GDB process, not in the inferior.
487    Returns library name, or NULL.  */
488
489 static const char *
490 dladdr_to_soname (const void *addr)
491 {
492   Dl_info info;
493
494   if (dladdr (addr, &info) != 0)
495     return info.dli_fname;
496   return NULL;
497 }
498
499 /* Attempt to initialize dlopen()ed libthread_db, described by INFO.
500    Return 1 on success.
501    Failure could happen if libthread_db does not have symbols we expect,
502    or when it refuses to work with the current inferior (e.g. due to
503    version mismatch between libthread_db and libpthread).  */
504
505 static int
506 try_thread_db_load_1 (struct thread_db_info *info)
507 {
508   td_err_e err;
509
510   /* Initialize pointers to the dynamic library functions we will use.
511      Essential functions first.  */
512
513 #define TDB_VERBOSE_DLSYM(info, func)                   \
514   info->func ## _p = (func ## _ftype *) verbose_dlsym (info->handle, #func)
515
516 #define TDB_DLSYM(info, func)                   \
517   info->func ## _p = (func ## _ftype *) dlsym (info->handle, #func)
518
519 #define CHK(a)                                                          \
520   do                                                                    \
521     {                                                                   \
522       if ((a) == NULL)                                                  \
523         return 0;                                                       \
524   } while (0)
525
526   CHK (TDB_VERBOSE_DLSYM (info, td_init));
527
528   err = info->td_init_p ();
529   if (err != TD_OK)
530     {
531       warning (_("Cannot initialize libthread_db: %s"),
532                thread_db_err_str (err));
533       return 0;
534     }
535
536   CHK (TDB_VERBOSE_DLSYM (info, td_ta_new));
537
538   /* Initialize the structure that identifies the child process.  */
539   info->proc_handle.ptid = inferior_ptid;
540
541   /* Now attempt to open a connection to the thread library.  */
542   err = info->td_ta_new_p (&info->proc_handle, &info->thread_agent);
543   if (err != TD_OK)
544     {
545       if (libthread_db_debug)
546         fprintf_unfiltered (gdb_stdlog, _("td_ta_new failed: %s\n"),
547                             thread_db_err_str (err));
548       else
549         switch (err)
550           {
551             case TD_NOLIBTHREAD:
552 #ifdef THREAD_DB_HAS_TD_VERSION
553             case TD_VERSION:
554 #endif
555               /* The errors above are not unexpected and silently ignored:
556                  they just mean we haven't found correct version of
557                  libthread_db yet.  */
558               break;
559             default:
560               warning (_("td_ta_new failed: %s"), thread_db_err_str (err));
561           }
562       return 0;
563     }
564
565   /* These are essential.  */
566   CHK (TDB_VERBOSE_DLSYM (info, td_ta_map_lwp2thr));
567   CHK (TDB_VERBOSE_DLSYM (info, td_thr_validate));
568   CHK (TDB_VERBOSE_DLSYM (info, td_thr_get_info));
569
570   /* These are not essential.  */
571   TDB_DLSYM (info, td_thr_tls_get_addr);
572   TDB_DLSYM (info, td_thr_tlsbase);
573
574   /* It's best to avoid td_ta_thr_iter if possible.  That walks data
575      structures in the inferior's address space that may be corrupted,
576      or, if the target is running, may change while we walk them.  If
577      there's execution (and /proc is mounted), then we're already
578      attached to all LWPs.  Use thread_from_lwp, which uses
579      td_ta_map_lwp2thr instead, which does not walk the thread list.
580
581      td_ta_map_lwp2thr uses ps_get_thread_area, but we can't use that
582      currently on core targets, as it uses ptrace directly.  */
583   if (target_has_execution
584       && linux_proc_task_list_dir_exists (ptid_get_pid (inferior_ptid)))
585     info->td_ta_thr_iter_p = NULL;
586   else
587     CHK (TDB_VERBOSE_DLSYM (info, td_ta_thr_iter));
588
589 #undef TDB_VERBOSE_DLSYM
590 #undef TDB_DLSYM
591 #undef CHK
592
593   if (info->td_ta_thr_iter_p == NULL)
594     {
595       struct lwp_info *lp;
596       int pid = ptid_get_pid (inferior_ptid);
597
598       linux_stop_and_wait_all_lwps ();
599
600       ALL_LWPS (lp)
601         if (ptid_get_pid (lp->ptid) == pid)
602           thread_from_lwp (lp->ptid);
603
604       linux_unstop_all_lwps ();
605     }
606   else if (thread_db_find_new_threads_silently (inferior_ptid) != 0)
607     {
608       /* Even if libthread_db initializes, if the thread list is
609          corrupted, we'd not manage to list any threads.  Better reject this
610          thread_db, and fall back to at least listing LWPs.  */
611       return 0;
612     }
613
614   printf_unfiltered (_("[Thread debugging using libthread_db enabled]\n"));
615
616   if (*libthread_db_search_path || libthread_db_debug)
617     {
618       struct ui_file *file;
619       const char *library;
620
621       library = dladdr_to_soname ((const void *) *info->td_ta_new_p);
622       if (library == NULL)
623         library = LIBTHREAD_DB_SO;
624
625       /* If we'd print this to gdb_stdout when debug output is
626          disabled, still print it to gdb_stdout if debug output is
627          enabled.  User visible output should not depend on debug
628          settings.  */
629       file = *libthread_db_search_path != '\0' ? gdb_stdout : gdb_stdlog;
630       fprintf_unfiltered (file, _("Using host libthread_db library \"%s\".\n"),
631                           library);
632     }
633
634   /* The thread library was detected.  Activate the thread_db target
635      if this is the first process using it.  */
636   if (thread_db_list->next == NULL)
637     push_target (&thread_db_ops);
638
639   return 1;
640 }
641
642 /* Attempt to use LIBRARY as libthread_db.  LIBRARY could be absolute,
643    relative, or just LIBTHREAD_DB.  */
644
645 static int
646 try_thread_db_load (const char *library, int check_auto_load_safe)
647 {
648   void *handle;
649   struct thread_db_info *info;
650
651   if (libthread_db_debug)
652     fprintf_unfiltered (gdb_stdlog,
653                         _("Trying host libthread_db library: %s.\n"),
654                         library);
655
656   if (check_auto_load_safe)
657     {
658       if (access (library, R_OK) != 0)
659         {
660           /* Do not print warnings by file_is_auto_load_safe if the library does
661              not exist at this place.  */
662           if (libthread_db_debug)
663             fprintf_unfiltered (gdb_stdlog, _("open failed: %s.\n"),
664                                 safe_strerror (errno));
665           return 0;
666         }
667
668       if (!file_is_auto_load_safe (library, _("auto-load: Loading libthread-db "
669                                               "library \"%s\" from explicit "
670                                               "directory.\n"),
671                                    library))
672         return 0;
673     }
674
675   handle = dlopen (library, RTLD_NOW);
676   if (handle == NULL)
677     {
678       if (libthread_db_debug)
679         fprintf_unfiltered (gdb_stdlog, _("dlopen failed: %s.\n"), dlerror ());
680       return 0;
681     }
682
683   if (libthread_db_debug && strchr (library, '/') == NULL)
684     {
685       void *td_init;
686
687       td_init = dlsym (handle, "td_init");
688       if (td_init != NULL)
689         {
690           const char *const libpath = dladdr_to_soname (td_init);
691
692           if (libpath != NULL)
693             fprintf_unfiltered (gdb_stdlog, _("Host %s resolved to: %s.\n"),
694                                library, libpath);
695         }
696     }
697
698   info = add_thread_db_info (handle);
699
700   /* Do not save system library name, that one is always trusted.  */
701   if (strchr (library, '/') != NULL)
702     info->filename = gdb_realpath (library);
703
704   if (try_thread_db_load_1 (info))
705     return 1;
706
707   /* This library "refused" to work on current inferior.  */
708   delete_thread_db_info (ptid_get_pid (inferior_ptid));
709   return 0;
710 }
711
712 /* Subroutine of try_thread_db_load_from_pdir to simplify it.
713    Try loading libthread_db in directory(OBJ)/SUBDIR.
714    SUBDIR may be NULL.  It may also be something like "../lib64".
715    The result is true for success.  */
716
717 static int
718 try_thread_db_load_from_pdir_1 (struct objfile *obj, const char *subdir)
719 {
720   struct cleanup *cleanup;
721   char *path, *cp;
722   int result;
723   const char *obj_name = objfile_name (obj);
724   int alloc_len;
725
726   if (obj_name[0] != '/')
727     {
728       warning (_("Expected absolute pathname for libpthread in the"
729                  " inferior, but got %s."), obj_name);
730       return 0;
731     }
732
733   alloc_len = (strlen (obj_name)
734                + (subdir ? strlen (subdir) + 1 : 0)
735                + 1 + strlen (LIBTHREAD_DB_SO) + 1);
736   path = (char *) xmalloc (alloc_len);
737   cleanup = make_cleanup (xfree, path);
738
739   strcpy (path, obj_name);
740   cp = strrchr (path, '/');
741   /* This should at minimum hit the first character.  */
742   gdb_assert (cp != NULL);
743   cp[1] = '\0';
744   if (subdir != NULL)
745     {
746       strcat (cp, subdir);
747       strcat (cp, "/");
748     }
749   strcat (cp, LIBTHREAD_DB_SO);
750
751   result = try_thread_db_load (path, 1);
752
753   do_cleanups (cleanup);
754   return result;
755 }
756
757 /* Handle $pdir in libthread-db-search-path.
758    Look for libthread_db in directory(libpthread)/SUBDIR.
759    SUBDIR may be NULL.  It may also be something like "../lib64".
760    The result is true for success.  */
761
762 static int
763 try_thread_db_load_from_pdir (const char *subdir)
764 {
765   struct objfile *obj;
766
767   if (!auto_load_thread_db)
768     return 0;
769
770   ALL_OBJFILES (obj)
771     if (libpthread_name_p (objfile_name (obj)))
772       {
773         if (try_thread_db_load_from_pdir_1 (obj, subdir))
774           return 1;
775
776         /* We may have found the separate-debug-info version of
777            libpthread, and it may live in a directory without a matching
778            libthread_db.  */
779         if (obj->separate_debug_objfile_backlink != NULL)
780           return try_thread_db_load_from_pdir_1 (obj->separate_debug_objfile_backlink,
781                                                  subdir);
782
783         return 0;
784       }
785
786   return 0;
787 }
788
789 /* Handle $sdir in libthread-db-search-path.
790    Look for libthread_db in the system dirs, or wherever a plain
791    dlopen(file_without_path) will look.
792    The result is true for success.  */
793
794 static int
795 try_thread_db_load_from_sdir (void)
796 {
797   return try_thread_db_load (LIBTHREAD_DB_SO, 0);
798 }
799
800 /* Try to load libthread_db from directory DIR of length DIR_LEN.
801    The result is true for success.  */
802
803 static int
804 try_thread_db_load_from_dir (const char *dir, size_t dir_len)
805 {
806   struct cleanup *cleanup;
807   char *path;
808   int result;
809
810   if (!auto_load_thread_db)
811     return 0;
812
813   path = (char *) xmalloc (dir_len + 1 + strlen (LIBTHREAD_DB_SO) + 1);
814   cleanup = make_cleanup (xfree, path);
815
816   memcpy (path, dir, dir_len);
817   path[dir_len] = '/';
818   strcpy (path + dir_len + 1, LIBTHREAD_DB_SO);
819
820   result = try_thread_db_load (path, 1);
821
822   do_cleanups (cleanup);
823   return result;
824 }
825
826 /* Search libthread_db_search_path for libthread_db which "agrees"
827    to work on current inferior.
828    The result is true for success.  */
829
830 static int
831 thread_db_load_search (void)
832 {
833   VEC (char_ptr) *dir_vec;
834   struct cleanup *cleanups;
835   char *this_dir;
836   int i, rc = 0;
837
838   dir_vec = dirnames_to_char_ptr_vec (libthread_db_search_path);
839   cleanups = make_cleanup_free_char_ptr_vec (dir_vec);
840
841   for (i = 0; VEC_iterate (char_ptr, dir_vec, i, this_dir); ++i)
842     {
843       const int pdir_len = sizeof ("$pdir") - 1;
844       size_t this_dir_len;
845
846       this_dir_len = strlen (this_dir);
847
848       if (strncmp (this_dir, "$pdir", pdir_len) == 0
849           && (this_dir[pdir_len] == '\0'
850               || this_dir[pdir_len] == '/'))
851         {
852           char *subdir = NULL;
853           struct cleanup *free_subdir_cleanup
854             = make_cleanup (null_cleanup, NULL);
855
856           if (this_dir[pdir_len] == '/')
857             {
858               subdir = (char *) xmalloc (strlen (this_dir));
859               make_cleanup (xfree, subdir);
860               strcpy (subdir, this_dir + pdir_len + 1);
861             }
862           rc = try_thread_db_load_from_pdir (subdir);
863           do_cleanups (free_subdir_cleanup);
864           if (rc)
865             break;
866         }
867       else if (strcmp (this_dir, "$sdir") == 0)
868         {
869           if (try_thread_db_load_from_sdir ())
870             {
871               rc = 1;
872               break;
873             }
874         }
875       else
876         {
877           if (try_thread_db_load_from_dir (this_dir, this_dir_len))
878             {
879               rc = 1;
880               break;
881             }
882         }
883     }
884
885   do_cleanups (cleanups);
886   if (libthread_db_debug)
887     fprintf_unfiltered (gdb_stdlog,
888                         _("thread_db_load_search returning %d\n"), rc);
889   return rc;
890 }
891
892 /* Return non-zero if the inferior has a libpthread.  */
893
894 static int
895 has_libpthread (void)
896 {
897   struct objfile *obj;
898
899   ALL_OBJFILES (obj)
900     if (libpthread_name_p (objfile_name (obj)))
901       return 1;
902
903   return 0;
904 }
905
906 /* Attempt to load and initialize libthread_db.
907    Return 1 on success.  */
908
909 static int
910 thread_db_load (void)
911 {
912   struct thread_db_info *info;
913
914   info = get_thread_db_info (ptid_get_pid (inferior_ptid));
915
916   if (info != NULL)
917     return 1;
918
919   /* Don't attempt to use thread_db on executables not running
920      yet.  */
921   if (!target_has_registers)
922     return 0;
923
924   /* Don't attempt to use thread_db for remote targets.  */
925   if (!(target_can_run (&current_target) || core_bfd))
926     return 0;
927
928   if (thread_db_load_search ())
929     return 1;
930
931   /* We couldn't find a libthread_db.
932      If the inferior has a libpthread warn the user.  */
933   if (has_libpthread ())
934     {
935       warning (_("Unable to find libthread_db matching inferior's thread"
936                  " library, thread debugging will not be available."));
937       return 0;
938     }
939
940   /* Either this executable isn't using libpthread at all, or it is
941      statically linked.  Since we can't easily distinguish these two cases,
942      no warning is issued.  */
943   return 0;
944 }
945
946 static void
947 check_thread_signals (void)
948 {
949   if (!thread_signals)
950     {
951       sigset_t mask;
952       int i;
953
954       lin_thread_get_thread_signals (&mask);
955       sigemptyset (&thread_stop_set);
956       sigemptyset (&thread_print_set);
957
958       for (i = 1; i < NSIG; i++)
959         {
960           if (sigismember (&mask, i))
961             {
962               if (signal_stop_update (gdb_signal_from_host (i), 0))
963                 sigaddset (&thread_stop_set, i);
964               if (signal_print_update (gdb_signal_from_host (i), 0))
965                 sigaddset (&thread_print_set, i);
966               thread_signals = 1;
967             }
968         }
969     }
970 }
971
972 /* Check whether thread_db is usable.  This function is called when
973    an inferior is created (or otherwise acquired, e.g. attached to)
974    and when new shared libraries are loaded into a running process.  */
975
976 void
977 check_for_thread_db (void)
978 {
979   /* Do nothing if we couldn't load libthread_db.so.1.  */
980   if (!thread_db_load ())
981     return;
982 }
983
984 /* This function is called via the new_objfile observer.  */
985
986 static void
987 thread_db_new_objfile (struct objfile *objfile)
988 {
989   /* This observer must always be called with inferior_ptid set
990      correctly.  */
991
992   if (objfile != NULL
993       /* libpthread with separate debug info has its debug info file already
994          loaded (and notified without successful thread_db initialization)
995          the time observer_notify_new_objfile is called for the library itself.
996          Static executables have their separate debug info loaded already
997          before the inferior has started.  */
998       && objfile->separate_debug_objfile_backlink == NULL
999       /* Only check for thread_db if we loaded libpthread,
1000          or if this is the main symbol file.
1001          We need to check OBJF_MAINLINE to handle the case of debugging
1002          a statically linked executable AND the symbol file is specified AFTER
1003          the exec file is loaded (e.g., gdb -c core ; file foo).
1004          For dynamically linked executables, libpthread can be near the end
1005          of the list of shared libraries to load, and in an app of several
1006          thousand shared libraries, this can otherwise be painful.  */
1007       && ((objfile->flags & OBJF_MAINLINE) != 0
1008           || libpthread_name_p (objfile_name (objfile))))
1009     check_for_thread_db ();
1010 }
1011
1012 static void
1013 check_pid_namespace_match (void)
1014 {
1015   /* Check is only relevant for local targets targets.  */
1016   if (target_can_run (&current_target))
1017     {
1018       /* If the child is in a different PID namespace, its idea of its
1019          PID will differ from our idea of its PID.  When we scan the
1020          child's thread list, we'll mistakenly think it has no threads
1021          since the thread PID fields won't match the PID we give to
1022          libthread_db.  */
1023       if (!linux_ns_same (ptid_get_pid (inferior_ptid), LINUX_NS_PID))
1024         {
1025           warning (_ ("Target and debugger are in different PID "
1026                       "namespaces; thread lists and other data are "
1027                       "likely unreliable.  "
1028                       "Connect to gdbserver inside the container."));
1029         }
1030     }
1031 }
1032
1033 /* This function is called via the inferior_created observer.
1034    This handles the case of debugging statically linked executables.  */
1035
1036 static void
1037 thread_db_inferior_created (struct target_ops *target, int from_tty)
1038 {
1039   check_pid_namespace_match ();
1040   check_for_thread_db ();
1041 }
1042
1043 /* Update the thread's state (what's displayed in "info threads"),
1044    from libthread_db thread state information.  */
1045
1046 static void
1047 update_thread_state (struct private_thread_info *priv,
1048                      const td_thrinfo_t *ti_p)
1049 {
1050   priv->dying = (ti_p->ti_state == TD_THR_UNKNOWN
1051                  || ti_p->ti_state == TD_THR_ZOMBIE);
1052 }
1053
1054 /* Record a new thread in GDB's thread list.  Creates the thread's
1055    private info.  If TP is NULL or TP is marked as having exited,
1056    creates a new thread.  Otherwise, uses TP.  */
1057
1058 static struct thread_info *
1059 record_thread (struct thread_db_info *info,
1060                struct thread_info *tp,
1061                ptid_t ptid, const td_thrhandle_t *th_p,
1062                const td_thrinfo_t *ti_p)
1063 {
1064   td_err_e err;
1065   struct private_thread_info *priv;
1066   int new_thread = (tp == NULL);
1067
1068   /* A thread ID of zero may mean the thread library has not
1069      initialized yet.  Leave private == NULL until the thread library
1070      has initialized.  */
1071   if (ti_p->ti_tid == 0)
1072     return tp;
1073
1074   /* Construct the thread's private data.  */
1075   priv = XCNEW (struct private_thread_info);
1076
1077   priv->th = *th_p;
1078   priv->tid = ti_p->ti_tid;
1079   update_thread_state (priv, ti_p);
1080
1081   /* Add the thread to GDB's thread list.  If we already know about a
1082      thread with this PTID, but it's marked exited, then the kernel
1083      reused the tid of an old thread.  */
1084   if (tp == NULL || tp->state == THREAD_EXITED)
1085     tp = add_thread_with_info (ptid, priv);
1086   else
1087     tp->priv = priv;
1088
1089   if (target_has_execution)
1090     check_thread_signals ();
1091
1092   return tp;
1093 }
1094
1095 static void
1096 thread_db_detach (struct target_ops *ops, const char *args, int from_tty)
1097 {
1098   struct target_ops *target_beneath = find_target_beneath (ops);
1099   struct thread_db_info *info;
1100
1101   info = get_thread_db_info (ptid_get_pid (inferior_ptid));
1102
1103   if (info)
1104     delete_thread_db_info (ptid_get_pid (inferior_ptid));
1105
1106   target_beneath->to_detach (target_beneath, args, from_tty);
1107
1108   /* NOTE: From this point on, inferior_ptid is null_ptid.  */
1109
1110   /* If there are no more processes using libpthread, detach the
1111      thread_db target ops.  */
1112   if (!thread_db_list)
1113     unpush_target (&thread_db_ops);
1114 }
1115
1116 static ptid_t
1117 thread_db_wait (struct target_ops *ops,
1118                 ptid_t ptid, struct target_waitstatus *ourstatus,
1119                 int options)
1120 {
1121   struct thread_db_info *info;
1122   struct target_ops *beneath = find_target_beneath (ops);
1123
1124   ptid = beneath->to_wait (beneath, ptid, ourstatus, options);
1125
1126   if (ourstatus->kind == TARGET_WAITKIND_IGNORE)
1127     return ptid;
1128
1129   if (ourstatus->kind == TARGET_WAITKIND_EXITED
1130       || ourstatus->kind == TARGET_WAITKIND_SIGNALLED)
1131     return ptid;
1132
1133   info = get_thread_db_info (ptid_get_pid (ptid));
1134
1135   /* If this process isn't using thread_db, we're done.  */
1136   if (info == NULL)
1137     return ptid;
1138
1139   if (ourstatus->kind == TARGET_WAITKIND_EXECD)
1140     {
1141       /* New image, it may or may not end up using thread_db.  Assume
1142          not unless we find otherwise.  */
1143       delete_thread_db_info (ptid_get_pid (ptid));
1144       if (!thread_db_list)
1145         unpush_target (&thread_db_ops);
1146
1147       return ptid;
1148     }
1149
1150   /* Fill in the thread's user-level thread id and status.  */
1151   thread_from_lwp (ptid);
1152
1153   return ptid;
1154 }
1155
1156 static void
1157 thread_db_mourn_inferior (struct target_ops *ops)
1158 {
1159   struct target_ops *target_beneath = find_target_beneath (ops);
1160
1161   delete_thread_db_info (ptid_get_pid (inferior_ptid));
1162
1163   target_beneath->to_mourn_inferior (target_beneath);
1164
1165   /* Detach thread_db target ops.  */
1166   if (!thread_db_list)
1167     unpush_target (ops);
1168 }
1169
1170 struct callback_data
1171 {
1172   struct thread_db_info *info;
1173   int new_threads;
1174 };
1175
1176 static int
1177 find_new_threads_callback (const td_thrhandle_t *th_p, void *data)
1178 {
1179   td_thrinfo_t ti;
1180   td_err_e err;
1181   ptid_t ptid;
1182   struct thread_info *tp;
1183   struct callback_data *cb_data = (struct callback_data *) data;
1184   struct thread_db_info *info = cb_data->info;
1185
1186   err = info->td_thr_get_info_p (th_p, &ti);
1187   if (err != TD_OK)
1188     error (_("find_new_threads_callback: cannot get thread info: %s"),
1189            thread_db_err_str (err));
1190
1191   if (ti.ti_lid == -1)
1192     {
1193       /* A thread with kernel thread ID -1 is either a thread that
1194          exited and was joined, or a thread that is being created but
1195          hasn't started yet, and that is reusing the tcb/stack of a
1196          thread that previously exited and was joined.  (glibc marks
1197          terminated and joined threads with kernel thread ID -1.  See
1198          glibc PR17707.  */
1199       if (libthread_db_debug)
1200         fprintf_unfiltered (gdb_stdlog,
1201                             "thread_db: skipping exited and "
1202                             "joined thread (0x%lx)\n",
1203                             (unsigned long) ti.ti_tid);
1204       return 0;
1205     }
1206
1207   if (ti.ti_tid == 0)
1208     {
1209       /* A thread ID of zero means that this is the main thread, but
1210          glibc has not yet initialized thread-local storage and the
1211          pthread library.  We do not know what the thread's TID will
1212          be yet.  */
1213
1214       /* In that case, we're not stopped in a fork syscall and don't
1215          need this glibc bug workaround.  */
1216       info->need_stale_parent_threads_check = 0;
1217
1218       return 0;
1219     }
1220
1221   /* Ignore stale parent threads, caused by glibc/BZ5983.  This is a
1222      bit expensive, as it needs to open /proc/pid/status, so try to
1223      avoid doing the work if we know we don't have to.  */
1224   if (info->need_stale_parent_threads_check)
1225     {
1226       int tgid = linux_proc_get_tgid (ti.ti_lid);
1227
1228       if (tgid != -1 && tgid != info->pid)
1229         return 0;
1230     }
1231
1232   ptid = ptid_build (info->pid, ti.ti_lid, 0);
1233   tp = find_thread_ptid (ptid);
1234   if (tp == NULL || tp->priv == NULL)
1235     record_thread (info, tp, ptid, th_p, &ti);
1236
1237   return 0;
1238 }
1239
1240 /* Helper for thread_db_find_new_threads_2.
1241    Returns number of new threads found.  */
1242
1243 static int
1244 find_new_threads_once (struct thread_db_info *info, int iteration,
1245                        td_err_e *errp)
1246 {
1247   struct callback_data data;
1248   td_err_e err = TD_ERR;
1249
1250   data.info = info;
1251   data.new_threads = 0;
1252
1253   /* See comment in thread_db_update_thread_list.  */
1254   gdb_assert (info->td_ta_thr_iter_p != NULL);
1255
1256   TRY
1257     {
1258       /* Iterate over all user-space threads to discover new threads.  */
1259       err = info->td_ta_thr_iter_p (info->thread_agent,
1260                                     find_new_threads_callback,
1261                                     &data,
1262                                     TD_THR_ANY_STATE,
1263                                     TD_THR_LOWEST_PRIORITY,
1264                                     TD_SIGNO_MASK,
1265                                     TD_THR_ANY_USER_FLAGS);
1266     }
1267   CATCH (except, RETURN_MASK_ERROR)
1268     {
1269       if (libthread_db_debug)
1270         {
1271           exception_fprintf (gdb_stdlog, except,
1272                              "Warning: find_new_threads_once: ");
1273         }
1274     }
1275   END_CATCH
1276
1277   if (libthread_db_debug)
1278     {
1279       fprintf_unfiltered (gdb_stdlog,
1280                           _("Found %d new threads in iteration %d.\n"),
1281                           data.new_threads, iteration);
1282     }
1283
1284   if (errp != NULL)
1285     *errp = err;
1286
1287   return data.new_threads;
1288 }
1289
1290 /* Search for new threads, accessing memory through stopped thread
1291    PTID.  If UNTIL_NO_NEW is true, repeat searching until several
1292    searches in a row do not discover any new threads.  */
1293
1294 static void
1295 thread_db_find_new_threads_2 (ptid_t ptid, int until_no_new)
1296 {
1297   td_err_e err = TD_OK;
1298   struct thread_db_info *info;
1299   int i, loop;
1300
1301   info = get_thread_db_info (ptid_get_pid (ptid));
1302
1303   /* Access an lwp we know is stopped.  */
1304   info->proc_handle.ptid = ptid;
1305
1306   if (until_no_new)
1307     {
1308       /* Require 4 successive iterations which do not find any new threads.
1309          The 4 is a heuristic: there is an inherent race here, and I have
1310          seen that 2 iterations in a row are not always sufficient to
1311          "capture" all threads.  */
1312       for (i = 0, loop = 0; loop < 4 && err == TD_OK; ++i, ++loop)
1313         if (find_new_threads_once (info, i, &err) != 0)
1314           {
1315             /* Found some new threads.  Restart the loop from beginning.  */
1316             loop = -1;
1317           }
1318     }
1319   else
1320     find_new_threads_once (info, 0, &err);
1321
1322   if (err != TD_OK)
1323     error (_("Cannot find new threads: %s"), thread_db_err_str (err));
1324 }
1325
1326 static void
1327 thread_db_find_new_threads_1 (ptid_t ptid)
1328 {
1329   thread_db_find_new_threads_2 (ptid, 0);
1330 }
1331
1332 /* Implement the to_update_thread_list target method for this
1333    target.  */
1334
1335 static void
1336 thread_db_update_thread_list (struct target_ops *ops)
1337 {
1338   struct thread_db_info *info;
1339   struct inferior *inf;
1340
1341   prune_threads ();
1342
1343   ALL_INFERIORS (inf)
1344     {
1345       struct thread_info *thread;
1346
1347       if (inf->pid == 0)
1348         continue;
1349
1350       info = get_thread_db_info (inf->pid);
1351       if (info == NULL)
1352         continue;
1353
1354       thread = any_live_thread_of_process (inf->pid);
1355       if (thread == NULL || thread->executing)
1356         continue;
1357
1358       /* It's best to avoid td_ta_thr_iter if possible.  That walks
1359          data structures in the inferior's address space that may be
1360          corrupted, or, if the target is running, the list may change
1361          while we walk it.  In the latter case, it's possible that a
1362          thread exits just at the exact time that causes GDB to get
1363          stuck in an infinite loop.  To avoid pausing all threads
1364          whenever the core wants to refresh the thread list, we
1365          instead use thread_from_lwp immediately when we see an LWP
1366          stop.  That uses thread_db entry points that do not walk
1367          libpthread's thread list, so should be safe, as well as more
1368          efficient.  */
1369       if (target_has_execution_1 (thread->ptid))
1370         continue;
1371
1372       thread_db_find_new_threads_1 (thread->ptid);
1373     }
1374
1375   /* Give the beneath target a chance to do extra processing.  */
1376   ops->beneath->to_update_thread_list (ops->beneath);
1377 }
1378
1379 static char *
1380 thread_db_pid_to_str (struct target_ops *ops, ptid_t ptid)
1381 {
1382   struct thread_info *thread_info = find_thread_ptid (ptid);
1383   struct target_ops *beneath;
1384
1385   if (thread_info != NULL && thread_info->priv != NULL)
1386     {
1387       static char buf[64];
1388       thread_t tid;
1389
1390       tid = thread_info->priv->tid;
1391       snprintf (buf, sizeof (buf), "Thread 0x%lx (LWP %ld)",
1392                 (unsigned long) tid, ptid_get_lwp (ptid));
1393
1394       return buf;
1395     }
1396
1397   beneath = find_target_beneath (ops);
1398   return beneath->to_pid_to_str (beneath, ptid);
1399 }
1400
1401 /* Return a string describing the state of the thread specified by
1402    INFO.  */
1403
1404 static char *
1405 thread_db_extra_thread_info (struct target_ops *self,
1406                              struct thread_info *info)
1407 {
1408   if (info->priv == NULL)
1409     return NULL;
1410
1411   if (info->priv->dying)
1412     return "Exiting";
1413
1414   return NULL;
1415 }
1416
1417 /* Get the address of the thread local variable in load module LM which
1418    is stored at OFFSET within the thread local storage for thread PTID.  */
1419
1420 static CORE_ADDR
1421 thread_db_get_thread_local_address (struct target_ops *ops,
1422                                     ptid_t ptid,
1423                                     CORE_ADDR lm,
1424                                     CORE_ADDR offset)
1425 {
1426   struct thread_info *thread_info;
1427   struct target_ops *beneath;
1428
1429   /* Find the matching thread.  */
1430   thread_info = find_thread_ptid (ptid);
1431
1432   /* We may not have discovered the thread yet.  */
1433   if (thread_info != NULL && thread_info->priv == NULL)
1434     thread_info = thread_from_lwp (ptid);
1435
1436   if (thread_info != NULL && thread_info->priv != NULL)
1437     {
1438       td_err_e err;
1439       psaddr_t address;
1440       struct thread_db_info *info;
1441
1442       info = get_thread_db_info (ptid_get_pid (ptid));
1443
1444       /* Finally, get the address of the variable.  */
1445       if (lm != 0)
1446         {
1447           /* glibc doesn't provide the needed interface.  */
1448           if (!info->td_thr_tls_get_addr_p)
1449             throw_error (TLS_NO_LIBRARY_SUPPORT_ERROR,
1450                          _("No TLS library support"));
1451
1452           /* Note the cast through uintptr_t: this interface only works if
1453              a target address fits in a psaddr_t, which is a host pointer.
1454              So a 32-bit debugger can not access 64-bit TLS through this.  */
1455           err = info->td_thr_tls_get_addr_p (&thread_info->priv->th,
1456                                              (psaddr_t)(uintptr_t) lm,
1457                                              offset, &address);
1458         }
1459       else
1460         {
1461           /* If glibc doesn't provide the needed interface throw an error
1462              that LM is zero - normally cases it should not be.  */
1463           if (!info->td_thr_tlsbase_p)
1464             throw_error (TLS_LOAD_MODULE_NOT_FOUND_ERROR,
1465                          _("TLS load module not found"));
1466
1467           /* This code path handles the case of -static -pthread executables:
1468              https://sourceware.org/ml/libc-help/2014-03/msg00024.html
1469              For older GNU libc r_debug.r_map is NULL.  For GNU libc after
1470              PR libc/16831 due to GDB PR threads/16954 LOAD_MODULE is also NULL.
1471              The constant number 1 depends on GNU __libc_setup_tls
1472              initialization of l_tls_modid to 1.  */
1473           err = info->td_thr_tlsbase_p (&thread_info->priv->th,
1474                                         1, &address);
1475           address = (char *) address + offset;
1476         }
1477
1478 #ifdef THREAD_DB_HAS_TD_NOTALLOC
1479       /* The memory hasn't been allocated, yet.  */
1480       if (err == TD_NOTALLOC)
1481           /* Now, if libthread_db provided the initialization image's
1482              address, we *could* try to build a non-lvalue value from
1483              the initialization image.  */
1484         throw_error (TLS_NOT_ALLOCATED_YET_ERROR,
1485                      _("TLS not allocated yet"));
1486 #endif
1487
1488       /* Something else went wrong.  */
1489       if (err != TD_OK)
1490         throw_error (TLS_GENERIC_ERROR,
1491                      (("%s")), thread_db_err_str (err));
1492
1493       /* Cast assuming host == target.  Joy.  */
1494       /* Do proper sign extension for the target.  */
1495       gdb_assert (exec_bfd);
1496       return (bfd_get_sign_extend_vma (exec_bfd) > 0
1497               ? (CORE_ADDR) (intptr_t) address
1498               : (CORE_ADDR) (uintptr_t) address);
1499     }
1500
1501   beneath = find_target_beneath (ops);
1502   return beneath->to_get_thread_local_address (beneath, ptid, lm, offset);
1503 }
1504
1505 /* Implement the to_get_ada_task_ptid target method for this target.  */
1506
1507 static ptid_t
1508 thread_db_get_ada_task_ptid (struct target_ops *self, long lwp, long thread)
1509 {
1510   /* NPTL uses a 1:1 model, so the LWP id suffices.  */
1511   return ptid_build (ptid_get_pid (inferior_ptid), lwp, 0);
1512 }
1513
1514 static void
1515 thread_db_resume (struct target_ops *ops,
1516                   ptid_t ptid, int step, enum gdb_signal signo)
1517 {
1518   struct target_ops *beneath = find_target_beneath (ops);
1519   struct thread_db_info *info;
1520
1521   if (ptid_equal (ptid, minus_one_ptid))
1522     info = get_thread_db_info (ptid_get_pid (inferior_ptid));
1523   else
1524     info = get_thread_db_info (ptid_get_pid (ptid));
1525
1526   /* This workaround is only needed for child fork lwps stopped in a
1527      PTRACE_O_TRACEFORK event.  When the inferior is resumed, the
1528      workaround can be disabled.  */
1529   if (info)
1530     info->need_stale_parent_threads_check = 0;
1531
1532   beneath->to_resume (beneath, ptid, step, signo);
1533 }
1534
1535 /* qsort helper function for info_auto_load_libthread_db, sort the
1536    thread_db_info pointers primarily by their FILENAME and secondarily by their
1537    PID, both in ascending order.  */
1538
1539 static int
1540 info_auto_load_libthread_db_compare (const void *ap, const void *bp)
1541 {
1542   struct thread_db_info *a = *(struct thread_db_info **) ap;
1543   struct thread_db_info *b = *(struct thread_db_info **) bp;
1544   int retval;
1545
1546   retval = strcmp (a->filename, b->filename);
1547   if (retval)
1548     return retval;
1549
1550   return (a->pid > b->pid) - (a->pid - b->pid);
1551 }
1552
1553 /* Implement 'info auto-load libthread-db'.  */
1554
1555 static void
1556 info_auto_load_libthread_db (char *args, int from_tty)
1557 {
1558   struct ui_out *uiout = current_uiout;
1559   const char *cs = args ? args : "";
1560   struct thread_db_info *info, **array;
1561   unsigned info_count, unique_filenames;
1562   size_t max_filename_len, max_pids_len, pids_len;
1563   struct cleanup *back_to;
1564   char *pids;
1565   int i;
1566
1567   cs = skip_spaces_const (cs);
1568   if (*cs)
1569     error (_("'info auto-load libthread-db' does not accept any parameters"));
1570
1571   info_count = 0;
1572   for (info = thread_db_list; info; info = info->next)
1573     if (info->filename != NULL)
1574       info_count++;
1575
1576   array = XNEWVEC (struct thread_db_info *, info_count);
1577   back_to = make_cleanup (xfree, array);
1578
1579   info_count = 0;
1580   for (info = thread_db_list; info; info = info->next)
1581     if (info->filename != NULL)
1582       array[info_count++] = info;
1583
1584   /* Sort ARRAY by filenames and PIDs.  */
1585
1586   qsort (array, info_count, sizeof (*array),
1587          info_auto_load_libthread_db_compare);
1588
1589   /* Calculate the number of unique filenames (rows) and the maximum string
1590      length of PIDs list for the unique filenames (columns).  */
1591
1592   unique_filenames = 0;
1593   max_filename_len = 0;
1594   max_pids_len = 0;
1595   pids_len = 0;
1596   for (i = 0; i < info_count; i++)
1597     {
1598       int pid = array[i]->pid;
1599       size_t this_pid_len;
1600
1601       for (this_pid_len = 0; pid != 0; pid /= 10)
1602         this_pid_len++;
1603
1604       if (i == 0 || strcmp (array[i - 1]->filename, array[i]->filename) != 0)
1605         {
1606           unique_filenames++;
1607           max_filename_len = max (max_filename_len,
1608                                   strlen (array[i]->filename));
1609
1610           if (i > 0)
1611             {
1612               pids_len -= strlen (", ");
1613               max_pids_len = max (max_pids_len, pids_len);
1614             }
1615           pids_len = 0;
1616         }
1617       pids_len += this_pid_len + strlen (", ");
1618     }
1619   if (i)
1620     {
1621       pids_len -= strlen (", ");
1622       max_pids_len = max (max_pids_len, pids_len);
1623     }
1624
1625   /* Table header shifted right by preceding "libthread-db:  " would not match
1626      its columns.  */
1627   if (info_count > 0 && args == auto_load_info_scripts_pattern_nl)
1628     ui_out_text (uiout, "\n");
1629
1630   make_cleanup_ui_out_table_begin_end (uiout, 2, unique_filenames,
1631                                        "LinuxThreadDbTable");
1632
1633   ui_out_table_header (uiout, max_filename_len, ui_left, "filename",
1634                        "Filename");
1635   ui_out_table_header (uiout, pids_len, ui_left, "PIDs", "Pids");
1636   ui_out_table_body (uiout);
1637
1638   pids = (char *) xmalloc (max_pids_len + 1);
1639   make_cleanup (xfree, pids);
1640
1641   /* Note I is incremented inside the cycle, not at its end.  */
1642   for (i = 0; i < info_count;)
1643     {
1644       struct cleanup *chain = make_cleanup_ui_out_tuple_begin_end (uiout, NULL);
1645       char *pids_end;
1646
1647       info = array[i];
1648       ui_out_field_string (uiout, "filename", info->filename);
1649       pids_end = pids;
1650
1651       while (i < info_count && strcmp (info->filename, array[i]->filename) == 0)
1652         {
1653           if (pids_end != pids)
1654             {
1655               *pids_end++ = ',';
1656               *pids_end++ = ' ';
1657             }
1658           pids_end += xsnprintf (pids_end, &pids[max_pids_len + 1] - pids_end,
1659                                  "%u", array[i]->pid);
1660           gdb_assert (pids_end < &pids[max_pids_len + 1]);
1661
1662           i++;
1663         }
1664       *pids_end = '\0';
1665
1666       ui_out_field_string (uiout, "pids", pids);
1667
1668       ui_out_text (uiout, "\n");
1669       do_cleanups (chain);
1670     }
1671
1672   do_cleanups (back_to);
1673
1674   if (info_count == 0)
1675     ui_out_message (uiout, 0, _("No auto-loaded libthread-db.\n"));
1676 }
1677
1678 static void
1679 init_thread_db_ops (void)
1680 {
1681   thread_db_ops.to_shortname = "multi-thread";
1682   thread_db_ops.to_longname = "multi-threaded child process.";
1683   thread_db_ops.to_doc = "Threads and pthreads support.";
1684   thread_db_ops.to_detach = thread_db_detach;
1685   thread_db_ops.to_wait = thread_db_wait;
1686   thread_db_ops.to_resume = thread_db_resume;
1687   thread_db_ops.to_mourn_inferior = thread_db_mourn_inferior;
1688   thread_db_ops.to_update_thread_list = thread_db_update_thread_list;
1689   thread_db_ops.to_pid_to_str = thread_db_pid_to_str;
1690   thread_db_ops.to_stratum = thread_stratum;
1691   thread_db_ops.to_has_thread_control = tc_schedlock;
1692   thread_db_ops.to_get_thread_local_address
1693     = thread_db_get_thread_local_address;
1694   thread_db_ops.to_extra_thread_info = thread_db_extra_thread_info;
1695   thread_db_ops.to_get_ada_task_ptid = thread_db_get_ada_task_ptid;
1696   thread_db_ops.to_magic = OPS_MAGIC;
1697
1698   complete_target_initialization (&thread_db_ops);
1699 }
1700
1701 /* Provide a prototype to silence -Wmissing-prototypes.  */
1702 extern initialize_file_ftype _initialize_thread_db;
1703
1704 void
1705 _initialize_thread_db (void)
1706 {
1707   init_thread_db_ops ();
1708
1709   /* Defer loading of libthread_db.so until inferior is running.
1710      This allows gdb to load correct libthread_db for a given
1711      executable -- there could be multiple versions of glibc,
1712      and until there is a running inferior, we can't tell which
1713      libthread_db is the correct one to load.  */
1714
1715   libthread_db_search_path = xstrdup (LIBTHREAD_DB_SEARCH_PATH);
1716
1717   add_setshow_optional_filename_cmd ("libthread-db-search-path",
1718                                      class_support,
1719                                      &libthread_db_search_path, _("\
1720 Set search path for libthread_db."), _("\
1721 Show the current search path or libthread_db."), _("\
1722 This path is used to search for libthread_db to be loaded into \
1723 gdb itself.\n\
1724 Its value is a colon (':') separate list of directories to search.\n\
1725 Setting the search path to an empty list resets it to its default value."),
1726                             set_libthread_db_search_path,
1727                             NULL,
1728                             &setlist, &showlist);
1729
1730   add_setshow_zuinteger_cmd ("libthread-db", class_maintenance,
1731                              &libthread_db_debug, _("\
1732 Set libthread-db debugging."), _("\
1733 Show libthread-db debugging."), _("\
1734 When non-zero, libthread-db debugging is enabled."),
1735                              NULL,
1736                              show_libthread_db_debug,
1737                              &setdebuglist, &showdebuglist);
1738
1739   add_setshow_boolean_cmd ("libthread-db", class_support,
1740                            &auto_load_thread_db, _("\
1741 Enable or disable auto-loading of inferior specific libthread_db."), _("\
1742 Show whether auto-loading inferior specific libthread_db is enabled."), _("\
1743 If enabled, libthread_db will be searched in 'set libthread-db-search-path'\n\
1744 locations to load libthread_db compatible with the inferior.\n\
1745 Standard system libthread_db still gets loaded even with this option off.\n\
1746 This options has security implications for untrusted inferiors."),
1747                            NULL, show_auto_load_thread_db,
1748                            auto_load_set_cmdlist_get (),
1749                            auto_load_show_cmdlist_get ());
1750
1751   add_cmd ("libthread-db", class_info, info_auto_load_libthread_db,
1752            _("Print the list of loaded inferior specific libthread_db.\n\
1753 Usage: info auto-load libthread-db"),
1754            auto_load_info_cmdlist_get ());
1755
1756   /* Add ourselves to objfile event chain.  */
1757   observer_attach_new_objfile (thread_db_new_objfile);
1758
1759   /* Add ourselves to inferior_created event chain.
1760      This is needed to handle debugging statically linked programs where
1761      the new_objfile observer won't get called for libpthread.  */
1762   observer_attach_inferior_created (thread_db_inferior_created);
1763 }