1 /* Attach to target process.
2 Copyright (C) 1999-2023 Free Software Foundation, Inc.
3 This file is part of the GNU C Library.
5 The GNU C Library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 The GNU C Library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with the GNU C Library; if not, see
17 <https://www.gnu.org/licenses/>. */
24 #include "thread_dbP.h"
27 /* Datatype for the list of known thread agents. Normally there will
28 be exactly one so we don't spend much though on making it fast. */
29 LIST_HEAD (__td_agent_list
);
33 td_ta_new (struct ps_prochandle
*ps
, td_thragent_t
**ta
)
36 char versbuf
[sizeof (VERSION
)];
40 /* Check whether the versions match. */
41 if (td_lookup (ps
, SYM___nptl_version
, &versaddr
) != PS_OK
)
42 return TD_NOLIBTHREAD
;
43 if (ps_pdread (ps
, versaddr
, versbuf
, sizeof (versbuf
)) != PS_OK
)
46 if (memcmp (versbuf
, VERSION
, sizeof VERSION
) != 0)
47 /* Not the right version. */
50 /* Fill in the appropriate information. */
51 *ta
= (td_thragent_t
*) calloc (1, sizeof (td_thragent_t
));
55 /* Store the proc handle which we will pass to the callback functions
56 back into the debugger. */
59 /* Now add the new agent descriptor to the list. */
60 list_add (&(*ta
)->list
, &__td_agent_list
);