bfd/binutils: support for gdb target descriptions in the core file
[deliverable/binutils-gdb.git] / gdb / linux-tdep.c
CommitLineData
4aa995e1
PA
1/* Target-dependent code for GNU/Linux, architecture independent.
2
3666a048 3 Copyright (C) 2009-2021 Free Software Foundation, Inc.
4aa995e1
PA
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 "gdbtypes.h"
2c0b251b 22#include "linux-tdep.h"
6c95b8df
PA
23#include "auxv.h"
24#include "target.h"
6432734d
UW
25#include "gdbthread.h"
26#include "gdbcore.h"
27#include "regcache.h"
28#include "regset.h"
6c95b8df 29#include "elf/common.h"
6432734d 30#include "elf-bfd.h" /* for elfcore_write_* */
a5ee0f0c 31#include "inferior.h"
3030c96e 32#include "cli/cli-utils.h"
451b7c33
TT
33#include "arch-utils.h"
34#include "gdb_obstack.h"
76727919 35#include "observable.h"
3bc3cebe
JK
36#include "objfiles.h"
37#include "infcall.h"
df8411da 38#include "gdbcmd.h"
db1ff28b 39#include "gdb_regex.h"
268a13a5
TT
40#include "gdbsupport/enum-flags.h"
41#include "gdbsupport/gdb_optional.h"
f3a5df7b
AB
42#include "gcore.h"
43#include "gcore-elf.h"
3030c96e
UW
44
45#include <ctype.h>
4aa995e1 46
db1ff28b
JK
47/* This enum represents the values that the user can choose when
48 informing the Linux kernel about which memory mappings will be
49 dumped in a corefile. They are described in the file
50 Documentation/filesystems/proc.txt, inside the Linux kernel
51 tree. */
52
8d297bbf 53enum filter_flag
db1ff28b
JK
54 {
55 COREFILTER_ANON_PRIVATE = 1 << 0,
56 COREFILTER_ANON_SHARED = 1 << 1,
57 COREFILTER_MAPPED_PRIVATE = 1 << 2,
58 COREFILTER_MAPPED_SHARED = 1 << 3,
59 COREFILTER_ELF_HEADERS = 1 << 4,
60 COREFILTER_HUGETLB_PRIVATE = 1 << 5,
61 COREFILTER_HUGETLB_SHARED = 1 << 6,
62 };
8d297bbf 63DEF_ENUM_FLAGS_TYPE (enum filter_flag, filter_flags);
db1ff28b
JK
64
65/* This struct is used to map flags found in the "VmFlags:" field (in
66 the /proc/<PID>/smaps file). */
67
68struct smaps_vmflags
69 {
70 /* Zero if this structure has not been initialized yet. It
71 probably means that the Linux kernel being used does not emit
72 the "VmFlags:" field on "/proc/PID/smaps". */
73
74 unsigned int initialized_p : 1;
75
76 /* Memory mapped I/O area (VM_IO, "io"). */
77
78 unsigned int io_page : 1;
79
80 /* Area uses huge TLB pages (VM_HUGETLB, "ht"). */
81
82 unsigned int uses_huge_tlb : 1;
83
84 /* Do not include this memory region on the coredump (VM_DONTDUMP, "dd"). */
85
86 unsigned int exclude_coredump : 1;
87
88 /* Is this a MAP_SHARED mapping (VM_SHARED, "sh"). */
89
90 unsigned int shared_mapping : 1;
91 };
92
df8411da
SDJ
93/* Whether to take the /proc/PID/coredump_filter into account when
94 generating a corefile. */
95
491144b5 96static bool use_coredump_filter = true;
df8411da 97
afa840dc
SL
98/* Whether the value of smaps_vmflags->exclude_coredump should be
99 ignored, including mappings marked with the VM_DONTDUMP flag in
100 the dump. */
491144b5 101static bool dump_excluded_mappings = false;
afa840dc 102
eb14d406
SDJ
103/* This enum represents the signals' numbers on a generic architecture
104 running the Linux kernel. The definition of "generic" comes from
105 the file <include/uapi/asm-generic/signal.h>, from the Linux kernel
106 tree, which is the "de facto" implementation of signal numbers to
107 be used by new architecture ports.
108
109 For those architectures which have differences between the generic
110 standard (e.g., Alpha), we define the different signals (and *only*
111 those) in the specific target-dependent file (e.g.,
112 alpha-linux-tdep.c, for Alpha). Please refer to the architecture's
113 tdep file for more information.
114
115 ARM deserves a special mention here. On the file
116 <arch/arm/include/uapi/asm/signal.h>, it defines only one different
117 (and ARM-only) signal, which is SIGSWI, with the same number as
118 SIGRTMIN. This signal is used only for a very specific target,
119 called ArthurOS (from RISCOS). Therefore, we do not handle it on
120 the ARM-tdep file, and we can safely use the generic signal handler
121 here for ARM targets.
122
123 As stated above, this enum is derived from
124 <include/uapi/asm-generic/signal.h>, from the Linux kernel
125 tree. */
126
127enum
128 {
129 LINUX_SIGHUP = 1,
130 LINUX_SIGINT = 2,
131 LINUX_SIGQUIT = 3,
132 LINUX_SIGILL = 4,
133 LINUX_SIGTRAP = 5,
134 LINUX_SIGABRT = 6,
135 LINUX_SIGIOT = 6,
136 LINUX_SIGBUS = 7,
137 LINUX_SIGFPE = 8,
138 LINUX_SIGKILL = 9,
139 LINUX_SIGUSR1 = 10,
140 LINUX_SIGSEGV = 11,
141 LINUX_SIGUSR2 = 12,
142 LINUX_SIGPIPE = 13,
143 LINUX_SIGALRM = 14,
144 LINUX_SIGTERM = 15,
145 LINUX_SIGSTKFLT = 16,
146 LINUX_SIGCHLD = 17,
147 LINUX_SIGCONT = 18,
148 LINUX_SIGSTOP = 19,
149 LINUX_SIGTSTP = 20,
150 LINUX_SIGTTIN = 21,
151 LINUX_SIGTTOU = 22,
152 LINUX_SIGURG = 23,
153 LINUX_SIGXCPU = 24,
154 LINUX_SIGXFSZ = 25,
155 LINUX_SIGVTALRM = 26,
156 LINUX_SIGPROF = 27,
157 LINUX_SIGWINCH = 28,
158 LINUX_SIGIO = 29,
159 LINUX_SIGPOLL = LINUX_SIGIO,
160 LINUX_SIGPWR = 30,
161 LINUX_SIGSYS = 31,
162 LINUX_SIGUNUSED = 31,
163
164 LINUX_SIGRTMIN = 32,
165 LINUX_SIGRTMAX = 64,
166 };
167
06253dd3
JK
168static struct gdbarch_data *linux_gdbarch_data_handle;
169
170struct linux_gdbarch_data
480af54c
SM
171{
172 struct type *siginfo_type;
173 int num_disp_step_buffers;
174};
06253dd3
JK
175
176static void *
d9655058 177init_linux_gdbarch_data (struct obstack *obstack)
06253dd3 178{
d9655058 179 return obstack_zalloc<linux_gdbarch_data> (obstack);
06253dd3
JK
180}
181
182static struct linux_gdbarch_data *
183get_linux_gdbarch_data (struct gdbarch *gdbarch)
184{
9a3c8263
SM
185 return ((struct linux_gdbarch_data *)
186 gdbarch_data (gdbarch, linux_gdbarch_data_handle));
06253dd3
JK
187}
188
cdfa0b0a
PA
189/* Linux-specific cached data. This is used by GDB for caching
190 purposes for each inferior. This helps reduce the overhead of
191 transfering data from a remote target to the local host. */
192struct linux_info
193{
194 /* Cache of the inferior's vsyscall/vDSO mapping range. Only valid
195 if VSYSCALL_RANGE_P is positive. This is cached because getting
196 at this info requires an auxv lookup (which is itself cached),
197 and looking through the inferior's mappings (which change
198 throughout execution and therefore cannot be cached). */
89fb8848 199 struct mem_range vsyscall_range {};
cdfa0b0a
PA
200
201 /* Zero if we haven't tried looking up the vsyscall's range before
202 yet. Positive if we tried looking it up, and found it. Negative
203 if we tried looking it up but failed. */
89fb8848 204 int vsyscall_range_p = 0;
187b041e 205
480af54c
SM
206 /* Inferior's displaced step buffers. */
207 gdb::optional<displaced_step_buffers> disp_step_bufs;
cdfa0b0a
PA
208};
209
89fb8848
TT
210/* Per-inferior data key. */
211static const struct inferior_key<linux_info> linux_inferior_data;
212
cdfa0b0a
PA
213/* Frees whatever allocated space there is to be freed and sets INF's
214 linux cache data pointer to NULL. */
215
216static void
217invalidate_linux_cache_inf (struct inferior *inf)
218{
89fb8848 219 linux_inferior_data.clear (inf);
cdfa0b0a
PA
220}
221
222/* Fetch the linux cache info for INF. This function always returns a
223 valid INFO pointer. */
224
225static struct linux_info *
94b24c74 226get_linux_inferior_data (inferior *inf)
cdfa0b0a 227{
94b24c74 228 linux_info *info = linux_inferior_data.get (inf);
cdfa0b0a 229
94b24c74 230 if (info == nullptr)
89fb8848 231 info = linux_inferior_data.emplace (inf);
cdfa0b0a
PA
232
233 return info;
234}
235
190b495d 236/* See linux-tdep.h. */
4aa995e1 237
190b495d 238struct type *
43564574
WT
239linux_get_siginfo_type_with_fields (struct gdbarch *gdbarch,
240 linux_siginfo_extra_fields extra_fields)
4aa995e1 241{
06253dd3 242 struct linux_gdbarch_data *linux_gdbarch_data;
96b5c49f 243 struct type *int_type, *uint_type, *long_type, *void_ptr_type, *short_type;
4aa995e1
PA
244 struct type *uid_type, *pid_type;
245 struct type *sigval_type, *clock_type;
246 struct type *siginfo_type, *sifields_type;
247 struct type *type;
248
06253dd3
JK
249 linux_gdbarch_data = get_linux_gdbarch_data (gdbarch);
250 if (linux_gdbarch_data->siginfo_type != NULL)
251 return linux_gdbarch_data->siginfo_type;
252
e9bb382b
UW
253 int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
254 0, "int");
255 uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch),
256 1, "unsigned int");
257 long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
258 0, "long");
96b5c49f
WT
259 short_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch),
260 0, "short");
4aa995e1
PA
261 void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void);
262
263 /* sival_t */
e9bb382b 264 sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
d0e39ea2 265 sigval_type->set_name (xstrdup ("sigval_t"));
4aa995e1
PA
266 append_composite_type_field (sigval_type, "sival_int", int_type);
267 append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type);
268
269 /* __pid_t */
e3aa49af 270 pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
77b7c781 271 TYPE_LENGTH (int_type) * TARGET_CHAR_BIT, "__pid_t");
4aa995e1 272 TYPE_TARGET_TYPE (pid_type) = int_type;
8f53807e 273 pid_type->set_target_is_stub (true);
4aa995e1
PA
274
275 /* __uid_t */
e3aa49af 276 uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
77b7c781 277 TYPE_LENGTH (uint_type) * TARGET_CHAR_BIT, "__uid_t");
4aa995e1 278 TYPE_TARGET_TYPE (uid_type) = uint_type;
8f53807e 279 uid_type->set_target_is_stub (true);
4aa995e1
PA
280
281 /* __clock_t */
e3aa49af 282 clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF,
77b7c781
UW
283 TYPE_LENGTH (long_type) * TARGET_CHAR_BIT,
284 "__clock_t");
4aa995e1 285 TYPE_TARGET_TYPE (clock_type) = long_type;
8f53807e 286 clock_type->set_target_is_stub (true);
4aa995e1
PA
287
288 /* _sifields */
e9bb382b 289 sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION);
4aa995e1
PA
290
291 {
292 const int si_max_size = 128;
293 int si_pad_size;
294 int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT;
295
296 /* _pad */
297 if (gdbarch_ptr_bit (gdbarch) == 64)
298 si_pad_size = (si_max_size / size_of_int) - 4;
299 else
300 si_pad_size = (si_max_size / size_of_int) - 3;
301 append_composite_type_field (sifields_type, "_pad",
302 init_vector_type (int_type, si_pad_size));
303 }
304
305 /* _kill */
e9bb382b 306 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1
PA
307 append_composite_type_field (type, "si_pid", pid_type);
308 append_composite_type_field (type, "si_uid", uid_type);
309 append_composite_type_field (sifields_type, "_kill", type);
310
311 /* _timer */
e9bb382b 312 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1
PA
313 append_composite_type_field (type, "si_tid", int_type);
314 append_composite_type_field (type, "si_overrun", int_type);
315 append_composite_type_field (type, "si_sigval", sigval_type);
316 append_composite_type_field (sifields_type, "_timer", type);
317
318 /* _rt */
e9bb382b 319 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1
PA
320 append_composite_type_field (type, "si_pid", pid_type);
321 append_composite_type_field (type, "si_uid", uid_type);
322 append_composite_type_field (type, "si_sigval", sigval_type);
323 append_composite_type_field (sifields_type, "_rt", type);
324
325 /* _sigchld */
e9bb382b 326 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1
PA
327 append_composite_type_field (type, "si_pid", pid_type);
328 append_composite_type_field (type, "si_uid", uid_type);
329 append_composite_type_field (type, "si_status", int_type);
330 append_composite_type_field (type, "si_utime", clock_type);
331 append_composite_type_field (type, "si_stime", clock_type);
332 append_composite_type_field (sifields_type, "_sigchld", type);
333
334 /* _sigfault */
e9bb382b 335 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1 336 append_composite_type_field (type, "si_addr", void_ptr_type);
96b5c49f
WT
337
338 /* Additional bound fields for _sigfault in case they were requested. */
339 if ((extra_fields & LINUX_SIGINFO_FIELD_ADDR_BND) != 0)
340 {
341 struct type *sigfault_bnd_fields;
342
343 append_composite_type_field (type, "_addr_lsb", short_type);
344 sigfault_bnd_fields = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
345 append_composite_type_field (sigfault_bnd_fields, "_lower", void_ptr_type);
346 append_composite_type_field (sigfault_bnd_fields, "_upper", void_ptr_type);
347 append_composite_type_field (type, "_addr_bnd", sigfault_bnd_fields);
348 }
4aa995e1
PA
349 append_composite_type_field (sifields_type, "_sigfault", type);
350
351 /* _sigpoll */
e9bb382b 352 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
4aa995e1
PA
353 append_composite_type_field (type, "si_band", long_type);
354 append_composite_type_field (type, "si_fd", int_type);
355 append_composite_type_field (sifields_type, "_sigpoll", type);
356
357 /* struct siginfo */
e9bb382b 358 siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT);
d0e39ea2 359 siginfo_type->set_name (xstrdup ("siginfo"));
4aa995e1
PA
360 append_composite_type_field (siginfo_type, "si_signo", int_type);
361 append_composite_type_field (siginfo_type, "si_errno", int_type);
362 append_composite_type_field (siginfo_type, "si_code", int_type);
363 append_composite_type_field_aligned (siginfo_type,
364 "_sifields", sifields_type,
365 TYPE_LENGTH (long_type));
366
06253dd3
JK
367 linux_gdbarch_data->siginfo_type = siginfo_type;
368
4aa995e1
PA
369 return siginfo_type;
370}
6b3ae818 371
43564574
WT
372/* This function is suitable for architectures that don't
373 extend/override the standard siginfo structure. */
374
375static struct type *
376linux_get_siginfo_type (struct gdbarch *gdbarch)
377{
378 return linux_get_siginfo_type_with_fields (gdbarch, 0);
379}
380
c01cbb3d
YQ
381/* Return true if the target is running on uClinux instead of normal
382 Linux kernel. */
383
384int
385linux_is_uclinux (void)
6c95b8df 386{
6c95b8df 387 CORE_ADDR dummy;
6c95b8df 388
8b88a78e
PA
389 return (target_auxv_search (current_top_target (), AT_NULL, &dummy) > 0
390 && target_auxv_search (current_top_target (), AT_PAGESZ, &dummy) == 0);
c01cbb3d 391}
6c95b8df 392
c01cbb3d
YQ
393static int
394linux_has_shared_address_space (struct gdbarch *gdbarch)
395{
396 return linux_is_uclinux ();
6c95b8df 397}
a5ee0f0c
PA
398
399/* This is how we want PTIDs from core files to be printed. */
400
a068643d 401static std::string
a5ee0f0c
PA
402linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid)
403{
e38504b3 404 if (ptid.lwp () != 0)
a068643d 405 return string_printf ("LWP %ld", ptid.lwp ());
a5ee0f0c
PA
406
407 return normal_pid_to_str (ptid);
408}
409
db1ff28b
JK
410/* Service function for corefiles and info proc. */
411
412static void
413read_mapping (const char *line,
414 ULONGEST *addr, ULONGEST *endaddr,
415 const char **permissions, size_t *permissions_len,
416 ULONGEST *offset,
dda83cd7 417 const char **device, size_t *device_len,
db1ff28b
JK
418 ULONGEST *inode,
419 const char **filename)
420{
421 const char *p = line;
422
423 *addr = strtoulst (p, &p, 16);
424 if (*p == '-')
425 p++;
426 *endaddr = strtoulst (p, &p, 16);
427
f1735a53 428 p = skip_spaces (p);
db1ff28b
JK
429 *permissions = p;
430 while (*p && !isspace (*p))
431 p++;
432 *permissions_len = p - *permissions;
433
434 *offset = strtoulst (p, &p, 16);
435
f1735a53 436 p = skip_spaces (p);
db1ff28b
JK
437 *device = p;
438 while (*p && !isspace (*p))
439 p++;
440 *device_len = p - *device;
441
442 *inode = strtoulst (p, &p, 10);
443
f1735a53 444 p = skip_spaces (p);
db1ff28b
JK
445 *filename = p;
446}
447
448/* Helper function to decode the "VmFlags" field in /proc/PID/smaps.
449
450 This function was based on the documentation found on
451 <Documentation/filesystems/proc.txt>, on the Linux kernel.
452
453 Linux kernels before commit
454 834f82e2aa9a8ede94b17b656329f850c1471514 (3.10) do not have this
455 field on smaps. */
456
457static void
458decode_vmflags (char *p, struct smaps_vmflags *v)
459{
460 char *saveptr = NULL;
461 const char *s;
462
463 v->initialized_p = 1;
464 p = skip_to_space (p);
465 p = skip_spaces (p);
466
467 for (s = strtok_r (p, " ", &saveptr);
468 s != NULL;
469 s = strtok_r (NULL, " ", &saveptr))
470 {
471 if (strcmp (s, "io") == 0)
472 v->io_page = 1;
473 else if (strcmp (s, "ht") == 0)
474 v->uses_huge_tlb = 1;
475 else if (strcmp (s, "dd") == 0)
476 v->exclude_coredump = 1;
477 else if (strcmp (s, "sh") == 0)
478 v->shared_mapping = 1;
479 }
480}
481
2d7cc5c7
PA
482/* Regexes used by mapping_is_anonymous_p. Put in a structure because
483 they're initialized lazily. */
484
485struct mapping_regexes
486{
487 /* Matches "/dev/zero" filenames (with or without the "(deleted)"
488 string in the end). We know for sure, based on the Linux kernel
489 code, that memory mappings whose associated filename is
490 "/dev/zero" are guaranteed to be MAP_ANONYMOUS. */
491 compiled_regex dev_zero
492 {"^/dev/zero\\( (deleted)\\)\\?$", REG_NOSUB,
493 _("Could not compile regex to match /dev/zero filename")};
494
495 /* Matches "/SYSV%08x" filenames (with or without the "(deleted)"
496 string in the end). These filenames refer to shared memory
497 (shmem), and memory mappings associated with them are
498 MAP_ANONYMOUS as well. */
499 compiled_regex shmem_file
500 {"^/\\?SYSV[0-9a-fA-F]\\{8\\}\\( (deleted)\\)\\?$", REG_NOSUB,
501 _("Could not compile regex to match shmem filenames")};
502
503 /* A heuristic we use to try to mimic the Linux kernel's 'n_link ==
504 0' code, which is responsible to decide if it is dealing with a
505 'MAP_SHARED | MAP_ANONYMOUS' mapping. In other words, if
506 FILE_DELETED matches, it does not necessarily mean that we are
507 dealing with an anonymous shared mapping. However, there is no
508 easy way to detect this currently, so this is the best
509 approximation we have.
510
511 As a result, GDB will dump readonly pages of deleted executables
512 when using the default value of coredump_filter (0x33), while the
513 Linux kernel will not dump those pages. But we can live with
514 that. */
515 compiled_regex file_deleted
516 {" (deleted)$", REG_NOSUB,
517 _("Could not compile regex to match '<file> (deleted)'")};
518};
519
db1ff28b
JK
520/* Return 1 if the memory mapping is anonymous, 0 otherwise.
521
522 FILENAME is the name of the file present in the first line of the
523 memory mapping, in the "/proc/PID/smaps" output. For example, if
524 the first line is:
525
526 7fd0ca877000-7fd0d0da0000 r--p 00000000 fd:02 2100770 /path/to/file
527
528 Then FILENAME will be "/path/to/file". */
529
530static int
531mapping_is_anonymous_p (const char *filename)
532{
2d7cc5c7 533 static gdb::optional<mapping_regexes> regexes;
db1ff28b
JK
534 static int init_regex_p = 0;
535
536 if (!init_regex_p)
537 {
db1ff28b
JK
538 /* Let's be pessimistic and assume there will be an error while
539 compiling the regex'es. */
540 init_regex_p = -1;
541
2d7cc5c7 542 regexes.emplace ();
db1ff28b
JK
543
544 /* If we reached this point, then everything succeeded. */
545 init_regex_p = 1;
546 }
547
548 if (init_regex_p == -1)
549 {
550 const char deleted[] = " (deleted)";
551 size_t del_len = sizeof (deleted) - 1;
552 size_t filename_len = strlen (filename);
553
554 /* There was an error while compiling the regex'es above. In
555 order to try to give some reliable information to the caller,
556 we just try to find the string " (deleted)" in the filename.
557 If we managed to find it, then we assume the mapping is
558 anonymous. */
559 return (filename_len >= del_len
560 && strcmp (filename + filename_len - del_len, deleted) == 0);
561 }
562
563 if (*filename == '\0'
2d7cc5c7
PA
564 || regexes->dev_zero.exec (filename, 0, NULL, 0) == 0
565 || regexes->shmem_file.exec (filename, 0, NULL, 0) == 0
566 || regexes->file_deleted.exec (filename, 0, NULL, 0) == 0)
db1ff28b
JK
567 return 1;
568
569 return 0;
570}
571
572/* Return 0 if the memory mapping (which is related to FILTERFLAGS, V,
57e5e645
SDJ
573 MAYBE_PRIVATE_P, MAPPING_ANONYMOUS_P, ADDR and OFFSET) should not
574 be dumped, or greater than 0 if it should.
db1ff28b
JK
575
576 In a nutshell, this is the logic that we follow in order to decide
577 if a mapping should be dumped or not.
578
579 - If the mapping is associated to a file whose name ends with
580 " (deleted)", or if the file is "/dev/zero", or if it is
581 "/SYSV%08x" (shared memory), or if there is no file associated
582 with it, or if the AnonHugePages: or the Anonymous: fields in the
583 /proc/PID/smaps have contents, then GDB considers this mapping to
584 be anonymous. Otherwise, GDB considers this mapping to be a
585 file-backed mapping (because there will be a file associated with
586 it).
587
588 It is worth mentioning that, from all those checks described
589 above, the most fragile is the one to see if the file name ends
590 with " (deleted)". This does not necessarily mean that the
591 mapping is anonymous, because the deleted file associated with
592 the mapping may have been a hard link to another file, for
593 example. The Linux kernel checks to see if "i_nlink == 0", but
594 GDB cannot easily (and normally) do this check (iff running as
595 root, it could find the mapping in /proc/PID/map_files/ and
596 determine whether there still are other hard links to the
597 inode/file). Therefore, we made a compromise here, and we assume
598 that if the file name ends with " (deleted)", then the mapping is
599 indeed anonymous. FWIW, this is something the Linux kernel could
600 do better: expose this information in a more direct way.
601
602 - If we see the flag "sh" in the "VmFlags:" field (in
603 /proc/PID/smaps), then certainly the memory mapping is shared
604 (VM_SHARED). If we have access to the VmFlags, and we don't see
605 the "sh" there, then certainly the mapping is private. However,
606 Linux kernels before commit
607 834f82e2aa9a8ede94b17b656329f850c1471514 (3.10) do not have the
608 "VmFlags:" field; in that case, we use another heuristic: if we
609 see 'p' in the permission flags, then we assume that the mapping
610 is private, even though the presence of the 's' flag there would
611 mean VM_MAYSHARE, which means the mapping could still be private.
57e5e645
SDJ
612 This should work OK enough, however.
613
614 - Even if, at the end, we decided that we should not dump the
615 mapping, we still have to check if it is something like an ELF
616 header (of a DSO or an executable, for example). If it is, and
617 if the user is interested in dump it, then we should dump it. */
db1ff28b
JK
618
619static int
8d297bbf 620dump_mapping_p (filter_flags filterflags, const struct smaps_vmflags *v,
db1ff28b 621 int maybe_private_p, int mapping_anon_p, int mapping_file_p,
57e5e645 622 const char *filename, ULONGEST addr, ULONGEST offset)
db1ff28b
JK
623{
624 /* Initially, we trust in what we received from our caller. This
625 value may not be very precise (i.e., it was probably gathered
626 from the permission line in the /proc/PID/smaps list, which
627 actually refers to VM_MAYSHARE, and not VM_SHARED), but it is
628 what we have until we take a look at the "VmFlags:" field
629 (assuming that the version of the Linux kernel being used
630 supports it, of course). */
631 int private_p = maybe_private_p;
57e5e645 632 int dump_p;
db1ff28b
JK
633
634 /* We always dump vDSO and vsyscall mappings, because it's likely that
635 there'll be no file to read the contents from at core load time.
636 The kernel does the same. */
637 if (strcmp ("[vdso]", filename) == 0
638 || strcmp ("[vsyscall]", filename) == 0)
639 return 1;
640
641 if (v->initialized_p)
642 {
643 /* We never dump I/O mappings. */
644 if (v->io_page)
645 return 0;
646
647 /* Check if we should exclude this mapping. */
afa840dc 648 if (!dump_excluded_mappings && v->exclude_coredump)
db1ff28b
JK
649 return 0;
650
651 /* Update our notion of whether this mapping is shared or
652 private based on a trustworthy value. */
653 private_p = !v->shared_mapping;
654
655 /* HugeTLB checking. */
656 if (v->uses_huge_tlb)
657 {
658 if ((private_p && (filterflags & COREFILTER_HUGETLB_PRIVATE))
659 || (!private_p && (filterflags & COREFILTER_HUGETLB_SHARED)))
660 return 1;
661
662 return 0;
663 }
664 }
665
666 if (private_p)
667 {
668 if (mapping_anon_p && mapping_file_p)
669 {
670 /* This is a special situation. It can happen when we see a
671 mapping that is file-backed, but that contains anonymous
672 pages. */
57e5e645
SDJ
673 dump_p = ((filterflags & COREFILTER_ANON_PRIVATE) != 0
674 || (filterflags & COREFILTER_MAPPED_PRIVATE) != 0);
db1ff28b
JK
675 }
676 else if (mapping_anon_p)
57e5e645 677 dump_p = (filterflags & COREFILTER_ANON_PRIVATE) != 0;
db1ff28b 678 else
57e5e645 679 dump_p = (filterflags & COREFILTER_MAPPED_PRIVATE) != 0;
db1ff28b
JK
680 }
681 else
682 {
683 if (mapping_anon_p && mapping_file_p)
684 {
685 /* This is a special situation. It can happen when we see a
686 mapping that is file-backed, but that contains anonymous
687 pages. */
57e5e645
SDJ
688 dump_p = ((filterflags & COREFILTER_ANON_SHARED) != 0
689 || (filterflags & COREFILTER_MAPPED_SHARED) != 0);
db1ff28b
JK
690 }
691 else if (mapping_anon_p)
57e5e645 692 dump_p = (filterflags & COREFILTER_ANON_SHARED) != 0;
db1ff28b 693 else
57e5e645 694 dump_p = (filterflags & COREFILTER_MAPPED_SHARED) != 0;
db1ff28b 695 }
57e5e645
SDJ
696
697 /* Even if we decided that we shouldn't dump this mapping, we still
698 have to check whether (a) the user wants us to dump mappings
699 containing an ELF header, and (b) the mapping in question
700 contains an ELF header. If (a) and (b) are true, then we should
701 dump this mapping.
702
703 A mapping contains an ELF header if it is a private mapping, its
704 offset is zero, and its first word is ELFMAG. */
705 if (!dump_p && private_p && offset == 0
706 && (filterflags & COREFILTER_ELF_HEADERS) != 0)
707 {
57e5e645
SDJ
708 /* Useful define specifying the size of the ELF magical
709 header. */
710#ifndef SELFMAG
711#define SELFMAG 4
712#endif
713
a5d871dd
TT
714 /* Let's check if we have an ELF header. */
715 gdb_byte h[SELFMAG];
716 if (target_read_memory (addr, h, SELFMAG) == 0)
57e5e645 717 {
57e5e645
SDJ
718 /* The EI_MAG* and ELFMAG* constants come from
719 <elf/common.h>. */
720 if (h[EI_MAG0] == ELFMAG0 && h[EI_MAG1] == ELFMAG1
721 && h[EI_MAG2] == ELFMAG2 && h[EI_MAG3] == ELFMAG3)
722 {
723 /* This mapping contains an ELF header, so we
724 should dump it. */
725 dump_p = 1;
726 }
727 }
728 }
729
730 return dump_p;
db1ff28b
JK
731}
732
4ba11f89
KB
733/* As above, but return true only when we should dump the NT_FILE
734 entry. */
735
736static int
737dump_note_entry_p (filter_flags filterflags, const struct smaps_vmflags *v,
738 int maybe_private_p, int mapping_anon_p, int mapping_file_p,
739 const char *filename, ULONGEST addr, ULONGEST offset)
740{
741 /* vDSO and vsyscall mappings will end up in the core file. Don't
742 put them in the NT_FILE note. */
743 if (strcmp ("[vdso]", filename) == 0
744 || strcmp ("[vsyscall]", filename) == 0)
745 return 0;
746
747 /* Otherwise, any other file-based mapping should be placed in the
748 note. */
5b7d45d3 749 return 1;
4ba11f89
KB
750}
751
3030c96e
UW
752/* Implement the "info proc" command. */
753
754static void
7bc112c1 755linux_info_proc (struct gdbarch *gdbarch, const char *args,
3030c96e
UW
756 enum info_proc_what what)
757{
758 /* A long is used for pid instead of an int to avoid a loss of precision
759 compiler warning from the output of strtoul. */
760 long pid;
761 int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL);
762 int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL);
763 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
764 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
765 int status_f = (what == IP_STATUS || what == IP_ALL);
766 int stat_f = (what == IP_STAT || what == IP_ALL);
767 char filename[100];
3030c96e
UW
768 int target_errno;
769
770 if (args && isdigit (args[0]))
7bc112c1
TT
771 {
772 char *tem;
773
774 pid = strtoul (args, &tem, 10);
775 args = tem;
776 }
3030c96e
UW
777 else
778 {
55f6301a 779 if (!target_has_execution ())
3030c96e
UW
780 error (_("No current process: you must name one."));
781 if (current_inferior ()->fake_pid_p)
782 error (_("Can't determine the current process's PID: you must name one."));
783
784 pid = current_inferior ()->pid;
785 }
786
f1735a53 787 args = skip_spaces (args);
3030c96e
UW
788 if (args && args[0])
789 error (_("Too many parameters: %s"), args);
790
791 printf_filtered (_("process %ld\n"), pid);
792 if (cmdline_f)
793 {
794 xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid);
26d6cec4
AA
795 gdb_byte *buffer;
796 ssize_t len = target_fileio_read_alloc (NULL, filename, &buffer);
797
798 if (len > 0)
799 {
800 gdb::unique_xmalloc_ptr<char> cmdline ((char *) buffer);
801 ssize_t pos;
802
803 for (pos = 0; pos < len - 1; pos++)
804 {
805 if (buffer[pos] == '\0')
806 buffer[pos] = ' ';
807 }
808 buffer[len - 1] = '\0';
809 printf_filtered ("cmdline = '%s'\n", buffer);
810 }
3030c96e
UW
811 else
812 warning (_("unable to open /proc file '%s'"), filename);
813 }
814 if (cwd_f)
815 {
816 xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid);
e0d3522b
TT
817 gdb::optional<std::string> contents
818 = target_fileio_readlink (NULL, filename, &target_errno);
819 if (contents.has_value ())
820 printf_filtered ("cwd = '%s'\n", contents->c_str ());
3030c96e
UW
821 else
822 warning (_("unable to read link '%s'"), filename);
823 }
824 if (exe_f)
825 {
826 xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid);
e0d3522b
TT
827 gdb::optional<std::string> contents
828 = target_fileio_readlink (NULL, filename, &target_errno);
829 if (contents.has_value ())
830 printf_filtered ("exe = '%s'\n", contents->c_str ());
3030c96e
UW
831 else
832 warning (_("unable to read link '%s'"), filename);
833 }
834 if (mappings_f)
835 {
836 xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid);
87028b87
TT
837 gdb::unique_xmalloc_ptr<char> map
838 = target_fileio_read_stralloc (NULL, filename);
839 if (map != NULL)
3030c96e 840 {
3030c96e
UW
841 char *line;
842
843 printf_filtered (_("Mapped address spaces:\n\n"));
844 if (gdbarch_addr_bit (gdbarch) == 32)
845 {
846 printf_filtered ("\t%10s %10s %10s %10s %s\n",
847 "Start Addr",
848 " End Addr",
849 " Size", " Offset", "objfile");
dda83cd7 850 }
3030c96e 851 else
dda83cd7 852 {
3030c96e
UW
853 printf_filtered (" %18s %18s %10s %10s %s\n",
854 "Start Addr",
855 " End Addr",
856 " Size", " Offset", "objfile");
857 }
858
ca3a04f6
CB
859 char *saveptr;
860 for (line = strtok_r (map.get (), "\n", &saveptr);
87028b87 861 line;
ca3a04f6 862 line = strtok_r (NULL, "\n", &saveptr))
3030c96e
UW
863 {
864 ULONGEST addr, endaddr, offset, inode;
b926417a 865 const char *permissions, *device, *mapping_filename;
3030c96e
UW
866 size_t permissions_len, device_len;
867
868 read_mapping (line, &addr, &endaddr,
869 &permissions, &permissions_len,
870 &offset, &device, &device_len,
b926417a 871 &inode, &mapping_filename);
3030c96e
UW
872
873 if (gdbarch_addr_bit (gdbarch) == 32)
dda83cd7
SM
874 {
875 printf_filtered ("\t%10s %10s %10s %10s %s\n",
3030c96e
UW
876 paddress (gdbarch, addr),
877 paddress (gdbarch, endaddr),
878 hex_string (endaddr - addr),
879 hex_string (offset),
b926417a 880 *mapping_filename ? mapping_filename : "");
3030c96e
UW
881 }
882 else
dda83cd7
SM
883 {
884 printf_filtered (" %18s %18s %10s %10s %s\n",
3030c96e
UW
885 paddress (gdbarch, addr),
886 paddress (gdbarch, endaddr),
887 hex_string (endaddr - addr),
888 hex_string (offset),
b926417a 889 *mapping_filename ? mapping_filename : "");
dda83cd7 890 }
3030c96e 891 }
3030c96e
UW
892 }
893 else
894 warning (_("unable to open /proc file '%s'"), filename);
895 }
896 if (status_f)
897 {
898 xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid);
87028b87
TT
899 gdb::unique_xmalloc_ptr<char> status
900 = target_fileio_read_stralloc (NULL, filename);
901 if (status)
902 puts_filtered (status.get ());
3030c96e
UW
903 else
904 warning (_("unable to open /proc file '%s'"), filename);
905 }
906 if (stat_f)
907 {
908 xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid);
87028b87
TT
909 gdb::unique_xmalloc_ptr<char> statstr
910 = target_fileio_read_stralloc (NULL, filename);
911 if (statstr)
3030c96e 912 {
87028b87 913 const char *p = statstr.get ();
3030c96e
UW
914
915 printf_filtered (_("Process: %s\n"),
916 pulongest (strtoulst (p, &p, 10)));
917
f1735a53 918 p = skip_spaces (p);
a71b5a38 919 if (*p == '(')
3030c96e 920 {
184cd072
JK
921 /* ps command also relies on no trailing fields
922 ever contain ')'. */
923 const char *ep = strrchr (p, ')');
a71b5a38
UW
924 if (ep != NULL)
925 {
926 printf_filtered ("Exec file: %.*s\n",
927 (int) (ep - p - 1), p + 1);
928 p = ep + 1;
929 }
3030c96e
UW
930 }
931
f1735a53 932 p = skip_spaces (p);
3030c96e
UW
933 if (*p)
934 printf_filtered (_("State: %c\n"), *p++);
935
936 if (*p)
937 printf_filtered (_("Parent process: %s\n"),
938 pulongest (strtoulst (p, &p, 10)));
939 if (*p)
940 printf_filtered (_("Process group: %s\n"),
941 pulongest (strtoulst (p, &p, 10)));
942 if (*p)
943 printf_filtered (_("Session id: %s\n"),
944 pulongest (strtoulst (p, &p, 10)));
945 if (*p)
946 printf_filtered (_("TTY: %s\n"),
947 pulongest (strtoulst (p, &p, 10)));
948 if (*p)
949 printf_filtered (_("TTY owner process group: %s\n"),
950 pulongest (strtoulst (p, &p, 10)));
951
952 if (*p)
953 printf_filtered (_("Flags: %s\n"),
954 hex_string (strtoulst (p, &p, 10)));
955 if (*p)
956 printf_filtered (_("Minor faults (no memory page): %s\n"),
957 pulongest (strtoulst (p, &p, 10)));
958 if (*p)
959 printf_filtered (_("Minor faults, children: %s\n"),
960 pulongest (strtoulst (p, &p, 10)));
961 if (*p)
962 printf_filtered (_("Major faults (memory page faults): %s\n"),
963 pulongest (strtoulst (p, &p, 10)));
964 if (*p)
965 printf_filtered (_("Major faults, children: %s\n"),
966 pulongest (strtoulst (p, &p, 10)));
967 if (*p)
968 printf_filtered (_("utime: %s\n"),
969 pulongest (strtoulst (p, &p, 10)));
970 if (*p)
971 printf_filtered (_("stime: %s\n"),
972 pulongest (strtoulst (p, &p, 10)));
973 if (*p)
974 printf_filtered (_("utime, children: %s\n"),
975 pulongest (strtoulst (p, &p, 10)));
976 if (*p)
977 printf_filtered (_("stime, children: %s\n"),
978 pulongest (strtoulst (p, &p, 10)));
979 if (*p)
980 printf_filtered (_("jiffies remaining in current "
981 "time slice: %s\n"),
982 pulongest (strtoulst (p, &p, 10)));
983 if (*p)
984 printf_filtered (_("'nice' value: %s\n"),
985 pulongest (strtoulst (p, &p, 10)));
986 if (*p)
987 printf_filtered (_("jiffies until next timeout: %s\n"),
988 pulongest (strtoulst (p, &p, 10)));
989 if (*p)
990 printf_filtered (_("jiffies until next SIGALRM: %s\n"),
991 pulongest (strtoulst (p, &p, 10)));
992 if (*p)
993 printf_filtered (_("start time (jiffies since "
994 "system boot): %s\n"),
995 pulongest (strtoulst (p, &p, 10)));
996 if (*p)
997 printf_filtered (_("Virtual memory size: %s\n"),
998 pulongest (strtoulst (p, &p, 10)));
999 if (*p)
1000 printf_filtered (_("Resident set size: %s\n"),
1001 pulongest (strtoulst (p, &p, 10)));
1002 if (*p)
1003 printf_filtered (_("rlim: %s\n"),
1004 pulongest (strtoulst (p, &p, 10)));
1005 if (*p)
1006 printf_filtered (_("Start of text: %s\n"),
1007 hex_string (strtoulst (p, &p, 10)));
1008 if (*p)
1009 printf_filtered (_("End of text: %s\n"),
1010 hex_string (strtoulst (p, &p, 10)));
1011 if (*p)
1012 printf_filtered (_("Start of stack: %s\n"),
1013 hex_string (strtoulst (p, &p, 10)));
1014#if 0 /* Don't know how architecture-dependent the rest is...
1015 Anyway the signal bitmap info is available from "status". */
1016 if (*p)
1017 printf_filtered (_("Kernel stack pointer: %s\n"),
1018 hex_string (strtoulst (p, &p, 10)));
1019 if (*p)
1020 printf_filtered (_("Kernel instr pointer: %s\n"),
1021 hex_string (strtoulst (p, &p, 10)));
1022 if (*p)
1023 printf_filtered (_("Pending signals bitmap: %s\n"),
1024 hex_string (strtoulst (p, &p, 10)));
1025 if (*p)
1026 printf_filtered (_("Blocked signals bitmap: %s\n"),
1027 hex_string (strtoulst (p, &p, 10)));
1028 if (*p)
1029 printf_filtered (_("Ignored signals bitmap: %s\n"),
1030 hex_string (strtoulst (p, &p, 10)));
1031 if (*p)
1032 printf_filtered (_("Catched signals bitmap: %s\n"),
1033 hex_string (strtoulst (p, &p, 10)));
1034 if (*p)
1035 printf_filtered (_("wchan (system call): %s\n"),
1036 hex_string (strtoulst (p, &p, 10)));
1037#endif
3030c96e
UW
1038 }
1039 else
1040 warning (_("unable to open /proc file '%s'"), filename);
1041 }
1042}
1043
db082f59
KB
1044/* Implementation of `gdbarch_read_core_file_mappings', as defined in
1045 gdbarch.h.
1046
1047 This function reads the NT_FILE note (which BFD turns into the
1048 section ".note.linuxcore.file"). The format of this note / section
1049 is described as follows in the Linux kernel sources in
1050 fs/binfmt_elf.c:
1051
1052 long count -- how many files are mapped
1053 long page_size -- units for file_ofs
1054 array of [COUNT] elements of
1055 long start
1056 long end
1057 long file_ofs
1058 followed by COUNT filenames in ASCII: "FILE1" NUL "FILE2" NUL...
1059
1060 CBFD is the BFD of the core file.
1061
1062 PRE_LOOP_CB is the callback function to invoke prior to starting
1063 the loop which processes individual entries. This callback will
1064 only be executed after the note has been examined in enough
1065 detail to verify that it's not malformed in some way.
1066
1067 LOOP_CB is the callback function that will be executed once
1068 for each mapping. */
451b7c33
TT
1069
1070static void
db082f59
KB
1071linux_read_core_file_mappings (struct gdbarch *gdbarch,
1072 struct bfd *cbfd,
1073 gdb::function_view<void (ULONGEST count)>
dda83cd7 1074 pre_loop_cb,
db082f59 1075 gdb::function_view<void (int num,
dda83cd7 1076 ULONGEST start,
db082f59
KB
1077 ULONGEST end,
1078 ULONGEST file_ofs,
70125a45 1079 const char *filename)>
db082f59 1080 loop_cb)
451b7c33 1081{
db082f59 1082 /* Ensure that ULONGEST is big enough for reading 64-bit core files. */
451b7c33
TT
1083 gdb_static_assert (sizeof (ULONGEST) >= 8);
1084
db082f59
KB
1085 /* It's not required that the NT_FILE note exists, so return silently
1086 if it's not found. Beyond this point though, we'll complain
1087 if problems are found. */
1088 asection *section = bfd_get_section_by_name (cbfd, ".note.linuxcore.file");
1089 if (section == nullptr)
1090 return;
451b7c33 1091
db082f59
KB
1092 unsigned int addr_size_bits = gdbarch_addr_bit (gdbarch);
1093 unsigned int addr_size = addr_size_bits / 8;
1094 size_t note_size = bfd_section_size (section);
451b7c33
TT
1095
1096 if (note_size < 2 * addr_size)
db082f59
KB
1097 {
1098 warning (_("malformed core note - too short for header"));
1099 return;
1100 }
451b7c33 1101
db082f59 1102 gdb::def_vector<gdb_byte> contents (note_size);
9f584b37
TT
1103 if (!bfd_get_section_contents (core_bfd, section, contents.data (),
1104 0, note_size))
db082f59
KB
1105 {
1106 warning (_("could not get core note contents"));
1107 return;
1108 }
451b7c33 1109
db082f59
KB
1110 gdb_byte *descdata = contents.data ();
1111 char *descend = (char *) descdata + note_size;
451b7c33
TT
1112
1113 if (descdata[note_size - 1] != '\0')
db082f59
KB
1114 {
1115 warning (_("malformed note - does not end with \\0"));
1116 return;
1117 }
451b7c33 1118
db082f59 1119 ULONGEST count = bfd_get (addr_size_bits, core_bfd, descdata);
451b7c33
TT
1120 descdata += addr_size;
1121
db082f59 1122 ULONGEST page_size = bfd_get (addr_size_bits, core_bfd, descdata);
451b7c33
TT
1123 descdata += addr_size;
1124
1125 if (note_size < 2 * addr_size + count * 3 * addr_size)
451b7c33 1126 {
db082f59
KB
1127 warning (_("malformed note - too short for supplied file count"));
1128 return;
451b7c33
TT
1129 }
1130
db082f59
KB
1131 char *filenames = (char *) descdata + count * 3 * addr_size;
1132
1133 /* Make sure that the correct number of filenames exist. Complain
1134 if there aren't enough or are too many. */
1135 char *f = filenames;
1136 for (int i = 0; i < count; i++)
451b7c33 1137 {
db082f59 1138 if (f >= descend)
dda83cd7 1139 {
db082f59
KB
1140 warning (_("malformed note - filename area is too small"));
1141 return;
1142 }
1143 f += strnlen (f, descend - f) + 1;
1144 }
1145 /* Complain, but don't return early if the filename area is too big. */
1146 if (f != descend)
1147 warning (_("malformed note - filename area is too big"));
451b7c33 1148
db082f59 1149 pre_loop_cb (count);
451b7c33 1150
db082f59
KB
1151 for (int i = 0; i < count; i++)
1152 {
1153 ULONGEST start = bfd_get (addr_size_bits, core_bfd, descdata);
451b7c33 1154 descdata += addr_size;
db082f59 1155 ULONGEST end = bfd_get (addr_size_bits, core_bfd, descdata);
451b7c33 1156 descdata += addr_size;
db082f59 1157 ULONGEST file_ofs
dda83cd7 1158 = bfd_get (addr_size_bits, core_bfd, descdata) * page_size;
451b7c33 1159 descdata += addr_size;
db082f59
KB
1160 char * filename = filenames;
1161 filenames += strlen ((char *) filenames) + 1;
451b7c33 1162
70125a45 1163 loop_cb (i, start, end, file_ofs, filename);
451b7c33 1164 }
451b7c33
TT
1165}
1166
db082f59
KB
1167/* Implement "info proc mappings" for a corefile. */
1168
1169static void
1170linux_core_info_proc_mappings (struct gdbarch *gdbarch, const char *args)
1171{
1172 linux_read_core_file_mappings (gdbarch, core_bfd,
1173 [=] (ULONGEST count)
1174 {
1175 printf_filtered (_("Mapped address spaces:\n\n"));
1176 if (gdbarch_addr_bit (gdbarch) == 32)
1177 {
1178 printf_filtered ("\t%10s %10s %10s %10s %s\n",
1179 "Start Addr",
1180 " End Addr",
1181 " Size", " Offset", "objfile");
1182 }
1183 else
1184 {
1185 printf_filtered (" %18s %18s %10s %10s %s\n",
1186 "Start Addr",
1187 " End Addr",
1188 " Size", " Offset", "objfile");
1189 }
1190 },
1191 [=] (int num, ULONGEST start, ULONGEST end, ULONGEST file_ofs,
70125a45 1192 const char *filename)
db082f59
KB
1193 {
1194 if (gdbarch_addr_bit (gdbarch) == 32)
1195 printf_filtered ("\t%10s %10s %10s %10s %s\n",
1196 paddress (gdbarch, start),
1197 paddress (gdbarch, end),
1198 hex_string (end - start),
1199 hex_string (file_ofs),
1200 filename);
1201 else
1202 printf_filtered (" %18s %18s %10s %10s %s\n",
1203 paddress (gdbarch, start),
1204 paddress (gdbarch, end),
1205 hex_string (end - start),
1206 hex_string (file_ofs),
1207 filename);
1208 });
1209}
1210
451b7c33
TT
1211/* Implement "info proc" for a corefile. */
1212
1213static void
7bc112c1 1214linux_core_info_proc (struct gdbarch *gdbarch, const char *args,
451b7c33
TT
1215 enum info_proc_what what)
1216{
1217 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL);
1218 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL);
1219
1220 if (exe_f)
1221 {
1222 const char *exe;
1223
1224 exe = bfd_core_file_failing_command (core_bfd);
1225 if (exe != NULL)
1226 printf_filtered ("exe = '%s'\n", exe);
1227 else
1228 warning (_("unable to find command name in core file"));
1229 }
1230
1231 if (mappings_f)
1232 linux_core_info_proc_mappings (gdbarch, args);
1233
1234 if (!exe_f && !mappings_f)
1235 error (_("unable to handle request"));
1236}
1237
382b69bb
JB
1238/* Read siginfo data from the core, if possible. Returns -1 on
1239 failure. Otherwise, returns the number of bytes read. READBUF,
1240 OFFSET, and LEN are all as specified by the to_xfer_partial
1241 interface. */
1242
1243static LONGEST
1244linux_core_xfer_siginfo (struct gdbarch *gdbarch, gdb_byte *readbuf,
1245 ULONGEST offset, ULONGEST len)
1246{
1247 thread_section_name section_name (".note.linuxcore.siginfo", inferior_ptid);
1248 asection *section = bfd_get_section_by_name (core_bfd, section_name.c_str ());
1249 if (section == NULL)
1250 return -1;
1251
1252 if (!bfd_get_section_contents (core_bfd, section, readbuf, offset, len))
1253 return -1;
1254
1255 return len;
1256}
1257
db1ff28b
JK
1258typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size,
1259 ULONGEST offset, ULONGEST inode,
1260 int read, int write,
1261 int exec, int modified,
1262 const char *filename,
1263 void *data);
451b7c33 1264
4ba11f89
KB
1265typedef int linux_dump_mapping_p_ftype (filter_flags filterflags,
1266 const struct smaps_vmflags *v,
1267 int maybe_private_p,
1268 int mapping_anon_p,
1269 int mapping_file_p,
1270 const char *filename,
1271 ULONGEST addr,
1272 ULONGEST offset);
1273
db1ff28b 1274/* List memory regions in the inferior for a corefile. */
451b7c33
TT
1275
1276static int
db1ff28b 1277linux_find_memory_regions_full (struct gdbarch *gdbarch,
4ba11f89 1278 linux_dump_mapping_p_ftype *should_dump_mapping_p,
db1ff28b
JK
1279 linux_find_memory_region_ftype *func,
1280 void *obfd)
f7af1fcd 1281{
db1ff28b
JK
1282 char mapsfilename[100];
1283 char coredumpfilter_name[100];
f7af1fcd
JK
1284 pid_t pid;
1285 /* Default dump behavior of coredump_filter (0x33), according to
1286 Documentation/filesystems/proc.txt from the Linux kernel
1287 tree. */
8d297bbf
PA
1288 filter_flags filterflags = (COREFILTER_ANON_PRIVATE
1289 | COREFILTER_ANON_SHARED
1290 | COREFILTER_ELF_HEADERS
1291 | COREFILTER_HUGETLB_PRIVATE);
f7af1fcd 1292
db1ff28b 1293 /* We need to know the real target PID to access /proc. */
f7af1fcd 1294 if (current_inferior ()->fake_pid_p)
db1ff28b 1295 return 1;
f7af1fcd
JK
1296
1297 pid = current_inferior ()->pid;
1298
1299 if (use_coredump_filter)
1300 {
f7af1fcd
JK
1301 xsnprintf (coredumpfilter_name, sizeof (coredumpfilter_name),
1302 "/proc/%d/coredump_filter", pid);
87028b87
TT
1303 gdb::unique_xmalloc_ptr<char> coredumpfilterdata
1304 = target_fileio_read_stralloc (NULL, coredumpfilter_name);
f7af1fcd
JK
1305 if (coredumpfilterdata != NULL)
1306 {
8d297bbf
PA
1307 unsigned int flags;
1308
87028b87 1309 sscanf (coredumpfilterdata.get (), "%x", &flags);
8d297bbf 1310 filterflags = (enum filter_flag) flags;
f7af1fcd
JK
1311 }
1312 }
1313
db1ff28b 1314 xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/smaps", pid);
87028b87
TT
1315 gdb::unique_xmalloc_ptr<char> data
1316 = target_fileio_read_stralloc (NULL, mapsfilename);
db1ff28b
JK
1317 if (data == NULL)
1318 {
1319 /* Older Linux kernels did not support /proc/PID/smaps. */
1320 xsnprintf (mapsfilename, sizeof mapsfilename, "/proc/%d/maps", pid);
1321 data = target_fileio_read_stralloc (NULL, mapsfilename);
1322 }
1323
1324 if (data != NULL)
1325 {
db1ff28b
JK
1326 char *line, *t;
1327
87028b87 1328 line = strtok_r (data.get (), "\n", &t);
db1ff28b
JK
1329 while (line != NULL)
1330 {
1331 ULONGEST addr, endaddr, offset, inode;
1332 const char *permissions, *device, *filename;
1333 struct smaps_vmflags v;
1334 size_t permissions_len, device_len;
1335 int read, write, exec, priv;
1336 int has_anonymous = 0;
1337 int should_dump_p = 0;
1338 int mapping_anon_p;
1339 int mapping_file_p;
1340
1341 memset (&v, 0, sizeof (v));
1342 read_mapping (line, &addr, &endaddr, &permissions, &permissions_len,
1343 &offset, &device, &device_len, &inode, &filename);
1344 mapping_anon_p = mapping_is_anonymous_p (filename);
1345 /* If the mapping is not anonymous, then we can consider it
1346 to be file-backed. These two states (anonymous or
1347 file-backed) seem to be exclusive, but they can actually
1348 coexist. For example, if a file-backed mapping has
1349 "Anonymous:" pages (see more below), then the Linux
1350 kernel will dump this mapping when the user specified
1351 that she only wants anonymous mappings in the corefile
1352 (*even* when she explicitly disabled the dumping of
1353 file-backed mappings). */
1354 mapping_file_p = !mapping_anon_p;
1355
1356 /* Decode permissions. */
1357 read = (memchr (permissions, 'r', permissions_len) != 0);
1358 write = (memchr (permissions, 'w', permissions_len) != 0);
1359 exec = (memchr (permissions, 'x', permissions_len) != 0);
1360 /* 'private' here actually means VM_MAYSHARE, and not
1361 VM_SHARED. In order to know if a mapping is really
1362 private or not, we must check the flag "sh" in the
1363 VmFlags field. This is done by decode_vmflags. However,
1364 if we are using a Linux kernel released before the commit
1365 834f82e2aa9a8ede94b17b656329f850c1471514 (3.10), we will
1366 not have the VmFlags there. In this case, there is
1367 really no way to know if we are dealing with VM_SHARED,
1368 so we just assume that VM_MAYSHARE is enough. */
1369 priv = memchr (permissions, 'p', permissions_len) != 0;
1370
1371 /* Try to detect if region should be dumped by parsing smaps
1372 counters. */
1373 for (line = strtok_r (NULL, "\n", &t);
1374 line != NULL && line[0] >= 'A' && line[0] <= 'Z';
1375 line = strtok_r (NULL, "\n", &t))
1376 {
1377 char keyword[64 + 1];
1378
1379 if (sscanf (line, "%64s", keyword) != 1)
1380 {
1381 warning (_("Error parsing {s,}maps file '%s'"), mapsfilename);
1382 break;
1383 }
1384
1385 if (strcmp (keyword, "Anonymous:") == 0)
1386 {
1387 /* Older Linux kernels did not support the
1388 "Anonymous:" counter. Check it here. */
1389 has_anonymous = 1;
1390 }
1391 else if (strcmp (keyword, "VmFlags:") == 0)
1392 decode_vmflags (line, &v);
1393
1394 if (strcmp (keyword, "AnonHugePages:") == 0
1395 || strcmp (keyword, "Anonymous:") == 0)
1396 {
1397 unsigned long number;
1398
1399 if (sscanf (line, "%*s%lu", &number) != 1)
1400 {
1401 warning (_("Error parsing {s,}maps file '%s' number"),
1402 mapsfilename);
1403 break;
1404 }
1405 if (number > 0)
1406 {
1407 /* Even if we are dealing with a file-backed
1408 mapping, if it contains anonymous pages we
1409 consider it to be *also* an anonymous
1410 mapping, because this is what the Linux
1411 kernel does:
1412
1413 // Dump segments that have been written to.
1414 if (vma->anon_vma && FILTER(ANON_PRIVATE))
1415 goto whole;
1416
1417 Note that if the mapping is already marked as
1418 file-backed (i.e., mapping_file_p is
1419 non-zero), then this is a special case, and
1420 this mapping will be dumped either when the
1421 user wants to dump file-backed *or* anonymous
1422 mappings. */
1423 mapping_anon_p = 1;
1424 }
1425 }
1426 }
1427
1428 if (has_anonymous)
4ba11f89 1429 should_dump_p = should_dump_mapping_p (filterflags, &v, priv,
dda83cd7 1430 mapping_anon_p,
4ba11f89 1431 mapping_file_p,
dda83cd7 1432 filename, addr, offset);
db1ff28b
JK
1433 else
1434 {
1435 /* Older Linux kernels did not support the "Anonymous:" counter.
1436 If it is missing, we can't be sure - dump all the pages. */
1437 should_dump_p = 1;
1438 }
1439
1440 /* Invoke the callback function to create the corefile segment. */
1441 if (should_dump_p)
1442 func (addr, endaddr - addr, offset, inode,
1443 read, write, exec, 1, /* MODIFIED is true because we
1444 want to dump the mapping. */
1445 filename, obfd);
1446 }
1447
db1ff28b
JK
1448 return 0;
1449 }
1450
1451 return 1;
1452}
1453
1454/* A structure for passing information through
1455 linux_find_memory_regions_full. */
1456
1457struct linux_find_memory_regions_data
1458{
1459 /* The original callback. */
1460
1461 find_memory_region_ftype func;
1462
1463 /* The original datum. */
1464
1465 void *obfd;
1466};
1467
1468/* A callback for linux_find_memory_regions that converts between the
1469 "full"-style callback and find_memory_region_ftype. */
1470
1471static int
1472linux_find_memory_regions_thunk (ULONGEST vaddr, ULONGEST size,
1473 ULONGEST offset, ULONGEST inode,
1474 int read, int write, int exec, int modified,
1475 const char *filename, void *arg)
1476{
9a3c8263
SM
1477 struct linux_find_memory_regions_data *data
1478 = (struct linux_find_memory_regions_data *) arg;
db1ff28b
JK
1479
1480 return data->func (vaddr, size, read, write, exec, modified, data->obfd);
451b7c33
TT
1481}
1482
1483/* A variant of linux_find_memory_regions_full that is suitable as the
1484 gdbarch find_memory_regions method. */
1485
1486static int
1487linux_find_memory_regions (struct gdbarch *gdbarch,
db1ff28b 1488 find_memory_region_ftype func, void *obfd)
451b7c33
TT
1489{
1490 struct linux_find_memory_regions_data data;
1491
1492 data.func = func;
db1ff28b 1493 data.obfd = obfd;
451b7c33 1494
db1ff28b 1495 return linux_find_memory_regions_full (gdbarch,
4ba11f89 1496 dump_mapping_p,
db1ff28b
JK
1497 linux_find_memory_regions_thunk,
1498 &data);
451b7c33
TT
1499}
1500
451b7c33
TT
1501/* This is used to pass information from
1502 linux_make_mappings_corefile_notes through
1503 linux_find_memory_regions_full. */
1504
1505struct linux_make_mappings_data
1506{
1507 /* Number of files mapped. */
1508 ULONGEST file_count;
1509
1510 /* The obstack for the main part of the data. */
1511 struct obstack *data_obstack;
1512
1513 /* The filename obstack. */
1514 struct obstack *filename_obstack;
1515
1516 /* The architecture's "long" type. */
1517 struct type *long_type;
1518};
1519
1520static linux_find_memory_region_ftype linux_make_mappings_callback;
1521
1522/* A callback for linux_find_memory_regions_full that updates the
1523 mappings data for linux_make_mappings_corefile_notes. */
1524
1525static int
1526linux_make_mappings_callback (ULONGEST vaddr, ULONGEST size,
1527 ULONGEST offset, ULONGEST inode,
1528 int read, int write, int exec, int modified,
1529 const char *filename, void *data)
1530{
9a3c8263
SM
1531 struct linux_make_mappings_data *map_data
1532 = (struct linux_make_mappings_data *) data;
451b7c33
TT
1533 gdb_byte buf[sizeof (ULONGEST)];
1534
1535 if (*filename == '\0' || inode == 0)
1536 return 0;
1537
1538 ++map_data->file_count;
1539
1540 pack_long (buf, map_data->long_type, vaddr);
1541 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1542 pack_long (buf, map_data->long_type, vaddr + size);
1543 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1544 pack_long (buf, map_data->long_type, offset);
1545 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type));
1546
1547 obstack_grow_str0 (map_data->filename_obstack, filename);
1548
1549 return 0;
1550}
1551
1552/* Write the file mapping data to the core file, if possible. OBFD is
1553 the output BFD. NOTE_DATA is the current note data, and NOTE_SIZE
c21f37a8 1554 is a pointer to the note size. Updates NOTE_DATA and NOTE_SIZE. */
451b7c33 1555
c21f37a8 1556static void
451b7c33 1557linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd,
c21f37a8
SM
1558 gdb::unique_xmalloc_ptr<char> &note_data,
1559 int *note_size)
451b7c33 1560{
451b7c33
TT
1561 struct linux_make_mappings_data mapping_data;
1562 struct type *long_type
1563 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 0, "long");
1564 gdb_byte buf[sizeof (ULONGEST)];
1565
8268c778 1566 auto_obstack data_obstack, filename_obstack;
451b7c33
TT
1567
1568 mapping_data.file_count = 0;
1569 mapping_data.data_obstack = &data_obstack;
1570 mapping_data.filename_obstack = &filename_obstack;
1571 mapping_data.long_type = long_type;
1572
1573 /* Reserve space for the count. */
1574 obstack_blank (&data_obstack, TYPE_LENGTH (long_type));
1575 /* We always write the page size as 1 since we have no good way to
1576 determine the correct value. */
1577 pack_long (buf, long_type, 1);
1578 obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type));
1579
4ba11f89
KB
1580 linux_find_memory_regions_full (gdbarch,
1581 dump_note_entry_p,
1582 linux_make_mappings_callback,
db1ff28b 1583 &mapping_data);
451b7c33
TT
1584
1585 if (mapping_data.file_count != 0)
1586 {
1587 /* Write the count to the obstack. */
51a5cd90
PA
1588 pack_long ((gdb_byte *) obstack_base (&data_obstack),
1589 long_type, mapping_data.file_count);
451b7c33
TT
1590
1591 /* Copy the filenames to the data obstack. */
3fba72f7 1592 int size = obstack_object_size (&filename_obstack);
451b7c33 1593 obstack_grow (&data_obstack, obstack_base (&filename_obstack),
3fba72f7 1594 size);
451b7c33 1595
4cb1265b
MS
1596 note_data.reset (elfcore_write_file_note (obfd, note_data.release (), note_size,
1597 obstack_base (&data_obstack),
1598 obstack_object_size (&data_obstack)));
451b7c33 1599 }
451b7c33
TT
1600}
1601
2989a365 1602/* Fetch the siginfo data for the specified thread, if it exists. If
9f584b37
TT
1603 there is no data, or we could not read it, return an empty
1604 buffer. */
1605
1606static gdb::byte_vector
1607linux_get_siginfo_data (thread_info *thread, struct gdbarch *gdbarch)
9015683b
TT
1608{
1609 struct type *siginfo_type;
9015683b 1610 LONGEST bytes_read;
9015683b
TT
1611
1612 if (!gdbarch_get_siginfo_type_p (gdbarch))
9f584b37
TT
1613 return gdb::byte_vector ();
1614
41792d68
PA
1615 scoped_restore_current_thread save_current_thread;
1616 switch_to_thread (thread);
2989a365 1617
9015683b
TT
1618 siginfo_type = gdbarch_get_siginfo_type (gdbarch);
1619
9f584b37 1620 gdb::byte_vector buf (TYPE_LENGTH (siginfo_type));
9015683b 1621
8b88a78e 1622 bytes_read = target_read (current_top_target (), TARGET_OBJECT_SIGNAL_INFO, NULL,
9f584b37
TT
1623 buf.data (), 0, TYPE_LENGTH (siginfo_type));
1624 if (bytes_read != TYPE_LENGTH (siginfo_type))
1625 buf.clear ();
9015683b
TT
1626
1627 return buf;
1628}
1629
6432734d
UW
1630struct linux_corefile_thread_data
1631{
c21f37a8
SM
1632 linux_corefile_thread_data (struct gdbarch *gdbarch, bfd *obfd,
1633 gdb::unique_xmalloc_ptr<char> &note_data,
1634 int *note_size, gdb_signal stop_signal)
1635 : gdbarch (gdbarch), obfd (obfd), note_data (note_data),
1636 note_size (note_size), stop_signal (stop_signal)
1637 {}
1638
6432734d 1639 struct gdbarch *gdbarch;
6432734d 1640 bfd *obfd;
c21f37a8 1641 gdb::unique_xmalloc_ptr<char> &note_data;
6432734d 1642 int *note_size;
2ea28649 1643 enum gdb_signal stop_signal;
6432734d
UW
1644};
1645
050c224b
PA
1646/* Records the thread's register state for the corefile note
1647 section. */
6432734d 1648
050c224b
PA
1649static void
1650linux_corefile_thread (struct thread_info *info,
1651 struct linux_corefile_thread_data *args)
6432734d 1652{
f3a5df7b
AB
1653 gcore_elf_build_thread_register_notes (args->gdbarch, info,
1654 args->stop_signal,
1655 args->obfd, &args->note_data,
1656 args->note_size);
050c224b
PA
1657
1658 /* Don't return anything if we got no register information above,
1659 such a core file is useless. */
1660 if (args->note_data != NULL)
c21f37a8 1661 {
f3a5df7b
AB
1662 gdb::byte_vector siginfo_data
1663 = linux_get_siginfo_data (info, args->gdbarch);
c21f37a8
SM
1664 if (!siginfo_data.empty ())
1665 args->note_data.reset (elfcore_write_note (args->obfd,
1666 args->note_data.release (),
1667 args->note_size,
1668 "CORE", NT_SIGINFO,
1669 siginfo_data.data (),
1670 siginfo_data.size ()));
1671 }
6432734d
UW
1672}
1673
b3ac9c77
SDJ
1674/* Fill the PRPSINFO structure with information about the process being
1675 debugged. Returns 1 in case of success, 0 for failures. Please note that
1676 even if the structure cannot be entirely filled (e.g., GDB was unable to
1677 gather information about the process UID/GID), this function will still
1678 return 1 since some information was already recorded. It will only return
1679 0 iff nothing can be gathered. */
1680
1681static int
1682linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p)
1683{
1684 /* The filename which we will use to obtain some info about the process.
1685 We will basically use this to store the `/proc/PID/FILENAME' file. */
1686 char filename[100];
b3ac9c77
SDJ
1687 /* The basename of the executable. */
1688 const char *basename;
cbaaa0ca 1689 const char *infargs;
b3ac9c77
SDJ
1690 /* Temporary buffer. */
1691 char *tmpstr;
1692 /* The valid states of a process, according to the Linux kernel. */
1693 const char valid_states[] = "RSDTZW";
1694 /* The program state. */
1695 const char *prog_state;
1696 /* The state of the process. */
1697 char pr_sname;
1698 /* The PID of the program which generated the corefile. */
1699 pid_t pid;
1700 /* Process flags. */
1701 unsigned int pr_flag;
1702 /* Process nice value. */
1703 long pr_nice;
1704 /* The number of fields read by `sscanf'. */
1705 int n_fields = 0;
b3ac9c77
SDJ
1706
1707 gdb_assert (p != NULL);
1708
1709 /* Obtaining PID and filename. */
e99b03dc 1710 pid = inferior_ptid.pid ();
b3ac9c77 1711 xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid);
87028b87
TT
1712 /* The full name of the program which generated the corefile. */
1713 gdb::unique_xmalloc_ptr<char> fname
1714 = target_fileio_read_stralloc (NULL, filename);
b3ac9c77 1715
87028b87 1716 if (fname == NULL || fname.get ()[0] == '\0')
b3ac9c77
SDJ
1717 {
1718 /* No program name was read, so we won't be able to retrieve more
1719 information about the process. */
b3ac9c77
SDJ
1720 return 0;
1721 }
1722
b3ac9c77
SDJ
1723 memset (p, 0, sizeof (*p));
1724
1725 /* Defining the PID. */
1726 p->pr_pid = pid;
1727
1728 /* Copying the program name. Only the basename matters. */
87028b87 1729 basename = lbasename (fname.get ());
f67210ff 1730 strncpy (p->pr_fname, basename, sizeof (p->pr_fname) - 1);
b3ac9c77
SDJ
1731 p->pr_fname[sizeof (p->pr_fname) - 1] = '\0';
1732
1733 infargs = get_inferior_args ();
1734
87028b87
TT
1735 /* The arguments of the program. */
1736 std::string psargs = fname.get ();
b3ac9c77 1737 if (infargs != NULL)
87028b87 1738 psargs = psargs + " " + infargs;
b3ac9c77 1739
f67210ff 1740 strncpy (p->pr_psargs, psargs.c_str (), sizeof (p->pr_psargs) - 1);
b3ac9c77
SDJ
1741 p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0';
1742
1743 xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid);
87028b87
TT
1744 /* The contents of `/proc/PID/stat'. */
1745 gdb::unique_xmalloc_ptr<char> proc_stat_contents
1746 = target_fileio_read_stralloc (NULL, filename);
1747 char *proc_stat = proc_stat_contents.get ();
b3ac9c77
SDJ
1748
1749 if (proc_stat == NULL || *proc_stat == '\0')
1750 {
1751 /* Despite being unable to read more information about the
1752 process, we return 1 here because at least we have its
1753 command line, PID and arguments. */
b3ac9c77
SDJ
1754 return 1;
1755 }
1756
1757 /* Ok, we have the stats. It's time to do a little parsing of the
1758 contents of the buffer, so that we end up reading what we want.
1759
1760 The following parsing mechanism is strongly based on the
1761 information generated by the `fs/proc/array.c' file, present in
1762 the Linux kernel tree. More details about how the information is
1763 displayed can be obtained by seeing the manpage of proc(5),
1764 specifically under the entry of `/proc/[pid]/stat'. */
1765
1766 /* Getting rid of the PID, since we already have it. */
1767 while (isdigit (*proc_stat))
1768 ++proc_stat;
1769
1770 proc_stat = skip_spaces (proc_stat);
1771
184cd072
JK
1772 /* ps command also relies on no trailing fields ever contain ')'. */
1773 proc_stat = strrchr (proc_stat, ')');
1774 if (proc_stat == NULL)
87028b87 1775 return 1;
184cd072 1776 proc_stat++;
b3ac9c77
SDJ
1777
1778 proc_stat = skip_spaces (proc_stat);
1779
1780 n_fields = sscanf (proc_stat,
1781 "%c" /* Process state. */
1782 "%d%d%d" /* Parent PID, group ID, session ID. */
1783 "%*d%*d" /* tty_nr, tpgid (not used). */
1784 "%u" /* Flags. */
1785 "%*s%*s%*s%*s" /* minflt, cminflt, majflt,
1786 cmajflt (not used). */
1787 "%*s%*s%*s%*s" /* utime, stime, cutime,
1788 cstime (not used). */
1789 "%*s" /* Priority (not used). */
1790 "%ld", /* Nice. */
1791 &pr_sname,
1792 &p->pr_ppid, &p->pr_pgrp, &p->pr_sid,
1793 &pr_flag,
1794 &pr_nice);
1795
1796 if (n_fields != 6)
1797 {
1798 /* Again, we couldn't read the complementary information about
1799 the process state. However, we already have minimal
1800 information, so we just return 1 here. */
b3ac9c77
SDJ
1801 return 1;
1802 }
1803
1804 /* Filling the structure fields. */
1805 prog_state = strchr (valid_states, pr_sname);
1806 if (prog_state != NULL)
1807 p->pr_state = prog_state - valid_states;
1808 else
1809 {
1810 /* Zero means "Running". */
1811 p->pr_state = 0;
1812 }
1813
1814 p->pr_sname = p->pr_state > 5 ? '.' : pr_sname;
1815 p->pr_zomb = p->pr_sname == 'Z';
1816 p->pr_nice = pr_nice;
1817 p->pr_flag = pr_flag;
1818
1819 /* Finally, obtaining the UID and GID. For that, we read and parse the
1820 contents of the `/proc/PID/status' file. */
1821 xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid);
87028b87
TT
1822 /* The contents of `/proc/PID/status'. */
1823 gdb::unique_xmalloc_ptr<char> proc_status_contents
1824 = target_fileio_read_stralloc (NULL, filename);
1825 char *proc_status = proc_status_contents.get ();
b3ac9c77
SDJ
1826
1827 if (proc_status == NULL || *proc_status == '\0')
1828 {
1829 /* Returning 1 since we already have a bunch of information. */
b3ac9c77
SDJ
1830 return 1;
1831 }
1832
1833 /* Extracting the UID. */
1834 tmpstr = strstr (proc_status, "Uid:");
1835 if (tmpstr != NULL)
1836 {
1837 /* Advancing the pointer to the beginning of the UID. */
1838 tmpstr += sizeof ("Uid:");
1839 while (*tmpstr != '\0' && !isdigit (*tmpstr))
1840 ++tmpstr;
1841
1842 if (isdigit (*tmpstr))
1843 p->pr_uid = strtol (tmpstr, &tmpstr, 10);
1844 }
1845
1846 /* Extracting the GID. */
1847 tmpstr = strstr (proc_status, "Gid:");
1848 if (tmpstr != NULL)
1849 {
1850 /* Advancing the pointer to the beginning of the GID. */
1851 tmpstr += sizeof ("Gid:");
1852 while (*tmpstr != '\0' && !isdigit (*tmpstr))
1853 ++tmpstr;
1854
1855 if (isdigit (*tmpstr))
1856 p->pr_gid = strtol (tmpstr, &tmpstr, 10);
1857 }
1858
b3ac9c77
SDJ
1859 return 1;
1860}
1861
f968fe80
AA
1862/* Build the note section for a corefile, and return it in a malloc
1863 buffer. */
6432734d 1864
c21f37a8 1865static gdb::unique_xmalloc_ptr<char>
f968fe80 1866linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size)
6432734d 1867{
b3ac9c77 1868 struct elf_internal_linux_prpsinfo prpsinfo;
c21f37a8 1869 gdb::unique_xmalloc_ptr<char> note_data;
6432734d 1870
f968fe80
AA
1871 if (! gdbarch_iterate_over_regset_sections_p (gdbarch))
1872 return NULL;
1873
b3ac9c77 1874 if (linux_fill_prpsinfo (&prpsinfo))
6432734d 1875 {
fe220226 1876 if (gdbarch_ptr_bit (gdbarch) == 64)
c21f37a8
SM
1877 note_data.reset (elfcore_write_linux_prpsinfo64 (obfd,
1878 note_data.release (),
1879 note_size, &prpsinfo));
b3ac9c77 1880 else
c21f37a8
SM
1881 note_data.reset (elfcore_write_linux_prpsinfo32 (obfd,
1882 note_data.release (),
1883 note_size, &prpsinfo));
6432734d
UW
1884 }
1885
1886 /* Thread register information. */
a70b8144 1887 try
22fd09ae
JK
1888 {
1889 update_thread_list ();
1890 }
230d2906 1891 catch (const gdb_exception_error &e)
492d29ea
PA
1892 {
1893 exception_print (gdb_stderr, e);
1894 }
492d29ea 1895
050c224b 1896 /* Like the kernel, prefer dumping the signalled thread first.
8df01799
PA
1897 "First thread" is what tools use to infer the signalled
1898 thread. */
f3a5df7b 1899 thread_info *signalled_thr = gcore_find_signalled_thread ();
c21f37a8 1900 gdb_signal stop_signal;
8df01799 1901 if (signalled_thr != nullptr)
c21f37a8 1902 stop_signal = signalled_thr->suspend.stop_signal;
8df01799 1903 else
c21f37a8
SM
1904 stop_signal = GDB_SIGNAL_0;
1905
1906 linux_corefile_thread_data thread_args (gdbarch, obfd, note_data, note_size,
1907 stop_signal);
050c224b 1908
8df01799
PA
1909 if (signalled_thr != nullptr)
1910 linux_corefile_thread (signalled_thr, &thread_args);
08036331 1911 for (thread_info *thr : current_inferior ()->non_exited_threads ())
050c224b
PA
1912 {
1913 if (thr == signalled_thr)
1914 continue;
050c224b
PA
1915
1916 linux_corefile_thread (thr, &thread_args);
1917 }
1918
6432734d
UW
1919 if (!note_data)
1920 return NULL;
1921
1922 /* Auxillary vector. */
9018be22 1923 gdb::optional<gdb::byte_vector> auxv =
8b88a78e 1924 target_read_alloc (current_top_target (), TARGET_OBJECT_AUXV, NULL);
9018be22 1925 if (auxv && !auxv->empty ())
6432734d 1926 {
c21f37a8
SM
1927 note_data.reset (elfcore_write_note (obfd, note_data.release (),
1928 note_size, "CORE", NT_AUXV,
1929 auxv->data (), auxv->size ()));
6432734d
UW
1930
1931 if (!note_data)
1932 return NULL;
1933 }
1934
451b7c33 1935 /* File mappings. */
c21f37a8 1936 linux_make_mappings_corefile_notes (gdbarch, obfd, note_data, note_size);
451b7c33 1937
6432734d
UW
1938 return note_data;
1939}
1940
eb14d406
SDJ
1941/* Implementation of `gdbarch_gdb_signal_from_target', as defined in
1942 gdbarch.h. This function is not static because it is exported to
1943 other -tdep files. */
1944
1945enum gdb_signal
1946linux_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
1947{
1948 switch (signal)
1949 {
1950 case 0:
1951 return GDB_SIGNAL_0;
1952
1953 case LINUX_SIGHUP:
1954 return GDB_SIGNAL_HUP;
1955
1956 case LINUX_SIGINT:
1957 return GDB_SIGNAL_INT;
1958
1959 case LINUX_SIGQUIT:
1960 return GDB_SIGNAL_QUIT;
1961
1962 case LINUX_SIGILL:
1963 return GDB_SIGNAL_ILL;
1964
1965 case LINUX_SIGTRAP:
1966 return GDB_SIGNAL_TRAP;
1967
1968 case LINUX_SIGABRT:
1969 return GDB_SIGNAL_ABRT;
1970
1971 case LINUX_SIGBUS:
1972 return GDB_SIGNAL_BUS;
1973
1974 case LINUX_SIGFPE:
1975 return GDB_SIGNAL_FPE;
1976
1977 case LINUX_SIGKILL:
1978 return GDB_SIGNAL_KILL;
1979
1980 case LINUX_SIGUSR1:
1981 return GDB_SIGNAL_USR1;
1982
1983 case LINUX_SIGSEGV:
1984 return GDB_SIGNAL_SEGV;
1985
1986 case LINUX_SIGUSR2:
1987 return GDB_SIGNAL_USR2;
1988
1989 case LINUX_SIGPIPE:
1990 return GDB_SIGNAL_PIPE;
1991
1992 case LINUX_SIGALRM:
1993 return GDB_SIGNAL_ALRM;
1994
1995 case LINUX_SIGTERM:
1996 return GDB_SIGNAL_TERM;
1997
1998 case LINUX_SIGCHLD:
1999 return GDB_SIGNAL_CHLD;
2000
2001 case LINUX_SIGCONT:
2002 return GDB_SIGNAL_CONT;
2003
2004 case LINUX_SIGSTOP:
2005 return GDB_SIGNAL_STOP;
2006
2007 case LINUX_SIGTSTP:
2008 return GDB_SIGNAL_TSTP;
2009
2010 case LINUX_SIGTTIN:
2011 return GDB_SIGNAL_TTIN;
2012
2013 case LINUX_SIGTTOU:
2014 return GDB_SIGNAL_TTOU;
2015
2016 case LINUX_SIGURG:
2017 return GDB_SIGNAL_URG;
2018
2019 case LINUX_SIGXCPU:
2020 return GDB_SIGNAL_XCPU;
2021
2022 case LINUX_SIGXFSZ:
2023 return GDB_SIGNAL_XFSZ;
2024
2025 case LINUX_SIGVTALRM:
2026 return GDB_SIGNAL_VTALRM;
2027
2028 case LINUX_SIGPROF:
2029 return GDB_SIGNAL_PROF;
2030
2031 case LINUX_SIGWINCH:
2032 return GDB_SIGNAL_WINCH;
2033
2034 /* No way to differentiate between SIGIO and SIGPOLL.
2035 Therefore, we just handle the first one. */
2036 case LINUX_SIGIO:
2037 return GDB_SIGNAL_IO;
2038
2039 case LINUX_SIGPWR:
2040 return GDB_SIGNAL_PWR;
2041
2042 case LINUX_SIGSYS:
2043 return GDB_SIGNAL_SYS;
2044
2045 /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
2046 therefore we have to handle them here. */
2047 case LINUX_SIGRTMIN:
2048 return GDB_SIGNAL_REALTIME_32;
2049
2050 case LINUX_SIGRTMAX:
2051 return GDB_SIGNAL_REALTIME_64;
2052 }
2053
2054 if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1)
2055 {
2056 int offset = signal - LINUX_SIGRTMIN + 1;
2057
2058 return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset);
2059 }
2060
2061 return GDB_SIGNAL_UNKNOWN;
2062}
2063
2064/* Implementation of `gdbarch_gdb_signal_to_target', as defined in
2065 gdbarch.h. This function is not static because it is exported to
2066 other -tdep files. */
2067
2068int
2069linux_gdb_signal_to_target (struct gdbarch *gdbarch,
2070 enum gdb_signal signal)
2071{
2072 switch (signal)
2073 {
2074 case GDB_SIGNAL_0:
2075 return 0;
2076
2077 case GDB_SIGNAL_HUP:
2078 return LINUX_SIGHUP;
2079
2080 case GDB_SIGNAL_INT:
2081 return LINUX_SIGINT;
2082
2083 case GDB_SIGNAL_QUIT:
2084 return LINUX_SIGQUIT;
2085
2086 case GDB_SIGNAL_ILL:
2087 return LINUX_SIGILL;
2088
2089 case GDB_SIGNAL_TRAP:
2090 return LINUX_SIGTRAP;
2091
2092 case GDB_SIGNAL_ABRT:
2093 return LINUX_SIGABRT;
2094
2095 case GDB_SIGNAL_FPE:
2096 return LINUX_SIGFPE;
2097
2098 case GDB_SIGNAL_KILL:
2099 return LINUX_SIGKILL;
2100
2101 case GDB_SIGNAL_BUS:
2102 return LINUX_SIGBUS;
2103
2104 case GDB_SIGNAL_SEGV:
2105 return LINUX_SIGSEGV;
2106
2107 case GDB_SIGNAL_SYS:
2108 return LINUX_SIGSYS;
2109
2110 case GDB_SIGNAL_PIPE:
2111 return LINUX_SIGPIPE;
2112
2113 case GDB_SIGNAL_ALRM:
2114 return LINUX_SIGALRM;
2115
2116 case GDB_SIGNAL_TERM:
2117 return LINUX_SIGTERM;
2118
2119 case GDB_SIGNAL_URG:
2120 return LINUX_SIGURG;
2121
2122 case GDB_SIGNAL_STOP:
2123 return LINUX_SIGSTOP;
2124
2125 case GDB_SIGNAL_TSTP:
2126 return LINUX_SIGTSTP;
2127
2128 case GDB_SIGNAL_CONT:
2129 return LINUX_SIGCONT;
2130
2131 case GDB_SIGNAL_CHLD:
2132 return LINUX_SIGCHLD;
2133
2134 case GDB_SIGNAL_TTIN:
2135 return LINUX_SIGTTIN;
2136
2137 case GDB_SIGNAL_TTOU:
2138 return LINUX_SIGTTOU;
2139
2140 case GDB_SIGNAL_IO:
2141 return LINUX_SIGIO;
2142
2143 case GDB_SIGNAL_XCPU:
2144 return LINUX_SIGXCPU;
2145
2146 case GDB_SIGNAL_XFSZ:
2147 return LINUX_SIGXFSZ;
2148
2149 case GDB_SIGNAL_VTALRM:
2150 return LINUX_SIGVTALRM;
2151
2152 case GDB_SIGNAL_PROF:
2153 return LINUX_SIGPROF;
2154
2155 case GDB_SIGNAL_WINCH:
2156 return LINUX_SIGWINCH;
2157
2158 case GDB_SIGNAL_USR1:
2159 return LINUX_SIGUSR1;
2160
2161 case GDB_SIGNAL_USR2:
2162 return LINUX_SIGUSR2;
2163
2164 case GDB_SIGNAL_PWR:
2165 return LINUX_SIGPWR;
2166
2167 case GDB_SIGNAL_POLL:
2168 return LINUX_SIGPOLL;
2169
2170 /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
2171 therefore we have to handle it here. */
2172 case GDB_SIGNAL_REALTIME_32:
2173 return LINUX_SIGRTMIN;
2174
2175 /* Same comment applies to _64. */
2176 case GDB_SIGNAL_REALTIME_64:
2177 return LINUX_SIGRTMAX;
2178 }
2179
2180 /* GDB_SIGNAL_REALTIME_33 to _64 are continuous. */
2181 if (signal >= GDB_SIGNAL_REALTIME_33
2182 && signal <= GDB_SIGNAL_REALTIME_63)
2183 {
2184 int offset = signal - GDB_SIGNAL_REALTIME_33;
2185
2186 return LINUX_SIGRTMIN + 1 + offset;
2187 }
2188
2189 return -1;
2190}
2191
cdfa0b0a
PA
2192/* Helper for linux_vsyscall_range that does the real work of finding
2193 the vsyscall's address range. */
3437254d
PA
2194
2195static int
cdfa0b0a 2196linux_vsyscall_range_raw (struct gdbarch *gdbarch, struct mem_range *range)
3437254d 2197{
95e94c3f
PA
2198 char filename[100];
2199 long pid;
95e94c3f 2200
8b88a78e 2201 if (target_auxv_search (current_top_target (), AT_SYSINFO_EHDR, &range->start) <= 0)
95e94c3f
PA
2202 return 0;
2203
6bb90213
PA
2204 /* It doesn't make sense to access the host's /proc when debugging a
2205 core file. Instead, look for the PT_LOAD segment that matches
2206 the vDSO. */
55f6301a 2207 if (!target_has_execution ())
6bb90213 2208 {
6bb90213
PA
2209 long phdrs_size;
2210 int num_phdrs, i;
2211
2212 phdrs_size = bfd_get_elf_phdr_upper_bound (core_bfd);
2213 if (phdrs_size == -1)
2214 return 0;
2215
31aceee8
TV
2216 gdb::unique_xmalloc_ptr<Elf_Internal_Phdr>
2217 phdrs ((Elf_Internal_Phdr *) xmalloc (phdrs_size));
2218 num_phdrs = bfd_get_elf_phdrs (core_bfd, phdrs.get ());
6bb90213
PA
2219 if (num_phdrs == -1)
2220 return 0;
2221
2222 for (i = 0; i < num_phdrs; i++)
31aceee8
TV
2223 if (phdrs.get ()[i].p_type == PT_LOAD
2224 && phdrs.get ()[i].p_vaddr == range->start)
6bb90213 2225 {
31aceee8 2226 range->length = phdrs.get ()[i].p_memsz;
6bb90213
PA
2227 return 1;
2228 }
2229
2230 return 0;
2231 }
2232
95e94c3f
PA
2233 /* We need to know the real target PID to access /proc. */
2234 if (current_inferior ()->fake_pid_p)
2235 return 0;
2236
95e94c3f 2237 pid = current_inferior ()->pid;
3437254d 2238
95e94c3f
PA
2239 /* Note that reading /proc/PID/task/PID/maps (1) is much faster than
2240 reading /proc/PID/maps (2). The later identifies thread stacks
2241 in the output, which requires scanning every thread in the thread
2242 group to check whether a VMA is actually a thread's stack. With
2243 Linux 4.4 on an Intel i7-4810MQ @ 2.80GHz, with an inferior with
2244 a few thousand threads, (1) takes a few miliseconds, while (2)
2245 takes several seconds. Also note that "smaps", what we read for
2246 determining core dump mappings, is even slower than "maps". */
2247 xsnprintf (filename, sizeof filename, "/proc/%ld/task/%ld/maps", pid, pid);
87028b87
TT
2248 gdb::unique_xmalloc_ptr<char> data
2249 = target_fileio_read_stralloc (NULL, filename);
95e94c3f
PA
2250 if (data != NULL)
2251 {
95e94c3f
PA
2252 char *line;
2253 char *saveptr = NULL;
2254
87028b87 2255 for (line = strtok_r (data.get (), "\n", &saveptr);
95e94c3f
PA
2256 line != NULL;
2257 line = strtok_r (NULL, "\n", &saveptr))
2258 {
2259 ULONGEST addr, endaddr;
2260 const char *p = line;
2261
2262 addr = strtoulst (p, &p, 16);
2263 if (addr == range->start)
2264 {
2265 if (*p == '-')
2266 p++;
2267 endaddr = strtoulst (p, &p, 16);
2268 range->length = endaddr - addr;
95e94c3f
PA
2269 return 1;
2270 }
2271 }
95e94c3f
PA
2272 }
2273 else
2274 warning (_("unable to open /proc file '%s'"), filename);
2275
2276 return 0;
3437254d
PA
2277}
2278
cdfa0b0a
PA
2279/* Implementation of the "vsyscall_range" gdbarch hook. Handles
2280 caching, and defers the real work to linux_vsyscall_range_raw. */
2281
2282static int
2283linux_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
2284{
94b24c74 2285 struct linux_info *info = get_linux_inferior_data (current_inferior ());
cdfa0b0a
PA
2286
2287 if (info->vsyscall_range_p == 0)
2288 {
2289 if (linux_vsyscall_range_raw (gdbarch, &info->vsyscall_range))
2290 info->vsyscall_range_p = 1;
2291 else
2292 info->vsyscall_range_p = -1;
2293 }
2294
2295 if (info->vsyscall_range_p < 0)
2296 return 0;
2297
2298 *range = info->vsyscall_range;
2299 return 1;
2300}
2301
3bc3cebe
JK
2302/* Symbols for linux_infcall_mmap's ARG_FLAGS; their Linux MAP_* system
2303 definitions would be dependent on compilation host. */
2304#define GDB_MMAP_MAP_PRIVATE 0x02 /* Changes are private. */
2305#define GDB_MMAP_MAP_ANONYMOUS 0x20 /* Don't use a file. */
2306
2307/* See gdbarch.sh 'infcall_mmap'. */
2308
2309static CORE_ADDR
2310linux_infcall_mmap (CORE_ADDR size, unsigned prot)
2311{
2312 struct objfile *objf;
2313 /* Do there still exist any Linux systems without "mmap64"?
2314 "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32. */
2315 struct value *mmap_val = find_function_in_inferior ("mmap64", &objf);
2316 struct value *addr_val;
08feed99 2317 struct gdbarch *gdbarch = objf->arch ();
3bc3cebe
JK
2318 CORE_ADDR retval;
2319 enum
2320 {
2a546367 2321 ARG_ADDR, ARG_LENGTH, ARG_PROT, ARG_FLAGS, ARG_FD, ARG_OFFSET, ARG_LAST
3bc3cebe 2322 };
2a546367 2323 struct value *arg[ARG_LAST];
3bc3cebe
JK
2324
2325 arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2326 0);
2327 /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2328 arg[ARG_LENGTH] = value_from_ulongest
2329 (builtin_type (gdbarch)->builtin_unsigned_long, size);
2330 gdb_assert ((prot & ~(GDB_MMAP_PROT_READ | GDB_MMAP_PROT_WRITE
2331 | GDB_MMAP_PROT_EXEC))
2332 == 0);
2333 arg[ARG_PROT] = value_from_longest (builtin_type (gdbarch)->builtin_int, prot);
2334 arg[ARG_FLAGS] = value_from_longest (builtin_type (gdbarch)->builtin_int,
2335 GDB_MMAP_MAP_PRIVATE
2336 | GDB_MMAP_MAP_ANONYMOUS);
2337 arg[ARG_FD] = value_from_longest (builtin_type (gdbarch)->builtin_int, -1);
2338 arg[ARG_OFFSET] = value_from_longest (builtin_type (gdbarch)->builtin_int64,
2339 0);
e71585ff 2340 addr_val = call_function_by_hand (mmap_val, NULL, arg);
3bc3cebe
JK
2341 retval = value_as_address (addr_val);
2342 if (retval == (CORE_ADDR) -1)
2343 error (_("Failed inferior mmap call for %s bytes, errno is changed."),
2344 pulongest (size));
2345 return retval;
2346}
2347
7f361056
JK
2348/* See gdbarch.sh 'infcall_munmap'. */
2349
2350static void
2351linux_infcall_munmap (CORE_ADDR addr, CORE_ADDR size)
2352{
2353 struct objfile *objf;
2354 struct value *munmap_val = find_function_in_inferior ("munmap", &objf);
2355 struct value *retval_val;
08feed99 2356 struct gdbarch *gdbarch = objf->arch ();
7f361056
JK
2357 LONGEST retval;
2358 enum
2359 {
2360 ARG_ADDR, ARG_LENGTH, ARG_LAST
2361 };
2362 struct value *arg[ARG_LAST];
2363
2364 arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2365 addr);
2366 /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2367 arg[ARG_LENGTH] = value_from_ulongest
2368 (builtin_type (gdbarch)->builtin_unsigned_long, size);
e71585ff 2369 retval_val = call_function_by_hand (munmap_val, NULL, arg);
7f361056
JK
2370 retval = value_as_long (retval_val);
2371 if (retval != 0)
2372 warning (_("Failed inferior munmap call at %s for %s bytes, "
2373 "errno is changed."),
2374 hex_string (addr), pulongest (size));
2375}
2376
906d60cf
PA
2377/* See linux-tdep.h. */
2378
2379CORE_ADDR
2380linux_displaced_step_location (struct gdbarch *gdbarch)
2381{
2382 CORE_ADDR addr;
2383 int bp_len;
2384
2385 /* Determine entry point from target auxiliary vector. This avoids
2386 the need for symbols. Also, when debugging a stand-alone SPU
2387 executable, entry_point_address () will point to an SPU
2388 local-store address and is thus not usable as displaced stepping
2389 location. The auxiliary vector gets us the PowerPC-side entry
2390 point address instead. */
8b88a78e 2391 if (target_auxv_search (current_top_target (), AT_ENTRY, &addr) <= 0)
16b41842
PA
2392 throw_error (NOT_SUPPORTED_ERROR,
2393 _("Cannot find AT_ENTRY auxiliary vector entry."));
906d60cf
PA
2394
2395 /* Make certain that the address points at real code, and not a
2396 function descriptor. */
2397 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
8b88a78e 2398 current_top_target ());
906d60cf
PA
2399
2400 /* Inferior calls also use the entry point as a breakpoint location.
2401 We don't want displaced stepping to interfere with those
2402 breakpoints, so leave space. */
2403 gdbarch_breakpoint_from_pc (gdbarch, &addr, &bp_len);
2404 addr += bp_len * 2;
2405
2406 return addr;
2407}
2408
0f83012e
AH
2409/* See linux-tdep.h. */
2410
187b041e
SM
2411displaced_step_prepare_status
2412linux_displaced_step_prepare (gdbarch *arch, thread_info *thread,
2413 CORE_ADDR &displaced_pc)
2414{
2415 linux_info *per_inferior = get_linux_inferior_data (thread->inf);
2416
480af54c 2417 if (!per_inferior->disp_step_bufs.has_value ())
187b041e 2418 {
480af54c
SM
2419 /* Figure out the location of the buffers. They are contiguous, starting
2420 at DISP_STEP_BUF_ADDR. They are all of size BUF_LEN. */
187b041e
SM
2421 CORE_ADDR disp_step_buf_addr
2422 = linux_displaced_step_location (thread->inf->gdbarch);
480af54c 2423 int buf_len = gdbarch_max_insn_length (arch);
187b041e 2424
480af54c
SM
2425 linux_gdbarch_data *gdbarch_data = get_linux_gdbarch_data (arch);
2426 gdb_assert (gdbarch_data->num_disp_step_buffers > 0);
2427
2428 std::vector<CORE_ADDR> buffers;
2429 for (int i = 0; i < gdbarch_data->num_disp_step_buffers; i++)
2430 buffers.push_back (disp_step_buf_addr + i * buf_len);
2431
2432 per_inferior->disp_step_bufs.emplace (buffers);
187b041e
SM
2433 }
2434
480af54c 2435 return per_inferior->disp_step_bufs->prepare (thread, displaced_pc);
187b041e
SM
2436}
2437
2438/* See linux-tdep.h. */
2439
2440displaced_step_finish_status
2441linux_displaced_step_finish (gdbarch *arch, thread_info *thread, gdb_signal sig)
2442{
2443 linux_info *per_inferior = get_linux_inferior_data (thread->inf);
2444
480af54c 2445 gdb_assert (per_inferior->disp_step_bufs.has_value ());
187b041e 2446
480af54c 2447 return per_inferior->disp_step_bufs->finish (arch, thread, sig);
187b041e
SM
2448}
2449
2450/* See linux-tdep.h. */
2451
2452const displaced_step_copy_insn_closure *
2453linux_displaced_step_copy_insn_closure_by_addr (inferior *inf, CORE_ADDR addr)
2454{
2455 linux_info *per_inferior = linux_inferior_data.get (inf);
2456
2457 if (per_inferior == nullptr
480af54c 2458 || !per_inferior->disp_step_bufs.has_value ())
187b041e
SM
2459 return nullptr;
2460
480af54c 2461 return per_inferior->disp_step_bufs->copy_insn_closure_by_addr (addr);
187b041e
SM
2462}
2463
2464/* See linux-tdep.h. */
2465
2466void
2467linux_displaced_step_restore_all_in_ptid (inferior *parent_inf, ptid_t ptid)
2468{
2469 linux_info *per_inferior = linux_inferior_data.get (parent_inf);
2470
2471 if (per_inferior == nullptr
480af54c 2472 || !per_inferior->disp_step_bufs.has_value ())
187b041e
SM
2473 return;
2474
480af54c 2475 per_inferior->disp_step_bufs->restore_in_ptid (ptid);
187b041e
SM
2476}
2477
2478/* See linux-tdep.h. */
2479
0f83012e
AH
2480CORE_ADDR
2481linux_get_hwcap (struct target_ops *target)
2482{
2483 CORE_ADDR field;
2484 if (target_auxv_search (target, AT_HWCAP, &field) != 1)
2485 return 0;
2486 return field;
2487}
2488
2489/* See linux-tdep.h. */
2490
2491CORE_ADDR
2492linux_get_hwcap2 (struct target_ops *target)
2493{
2494 CORE_ADDR field;
2495 if (target_auxv_search (target, AT_HWCAP2, &field) != 1)
2496 return 0;
2497 return field;
2498}
2499
df8411da
SDJ
2500/* Display whether the gcore command is using the
2501 /proc/PID/coredump_filter file. */
2502
2503static void
2504show_use_coredump_filter (struct ui_file *file, int from_tty,
2505 struct cmd_list_element *c, const char *value)
2506{
2507 fprintf_filtered (file, _("Use of /proc/PID/coredump_filter file to generate"
2508 " corefiles is %s.\n"), value);
2509}
2510
afa840dc
SL
2511/* Display whether the gcore command is dumping mappings marked with
2512 the VM_DONTDUMP flag. */
2513
2514static void
2515show_dump_excluded_mappings (struct ui_file *file, int from_tty,
2516 struct cmd_list_element *c, const char *value)
2517{
2518 fprintf_filtered (file, _("Dumping of mappings marked with the VM_DONTDUMP"
2519 " flag is %s.\n"), value);
2520}
2521
a5ee0f0c 2522/* To be called from the various GDB_OSABI_LINUX handlers for the
480af54c
SM
2523 various GNU/Linux architectures and machine types.
2524
2525 NUM_DISP_STEP_BUFFERS is the number of displaced step buffers to use. If 0,
2526 displaced stepping is not supported. */
a5ee0f0c
PA
2527
2528void
187b041e 2529linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
480af54c 2530 int num_disp_step_buffers)
a5ee0f0c 2531{
480af54c 2532 if (num_disp_step_buffers > 0)
187b041e 2533 {
480af54c
SM
2534 linux_gdbarch_data *gdbarch_data = get_linux_gdbarch_data (gdbarch);
2535 gdbarch_data->num_disp_step_buffers = num_disp_step_buffers;
2536
2537 set_gdbarch_displaced_step_prepare (gdbarch,
2538 linux_displaced_step_prepare);
187b041e
SM
2539 set_gdbarch_displaced_step_finish (gdbarch, linux_displaced_step_finish);
2540 set_gdbarch_displaced_step_copy_insn_closure_by_addr
2541 (gdbarch, linux_displaced_step_copy_insn_closure_by_addr);
2542 set_gdbarch_displaced_step_restore_all_in_ptid
2543 (gdbarch, linux_displaced_step_restore_all_in_ptid);
2544 }
2545
a5ee0f0c 2546 set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
3030c96e 2547 set_gdbarch_info_proc (gdbarch, linux_info_proc);
451b7c33 2548 set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc);
382b69bb 2549 set_gdbarch_core_xfer_siginfo (gdbarch, linux_core_xfer_siginfo);
db082f59 2550 set_gdbarch_read_core_file_mappings (gdbarch, linux_read_core_file_mappings);
35c2fab7 2551 set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
f968fe80 2552 set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes);
33fbcbee
PA
2553 set_gdbarch_has_shared_address_space (gdbarch,
2554 linux_has_shared_address_space);
eb14d406
SDJ
2555 set_gdbarch_gdb_signal_from_target (gdbarch,
2556 linux_gdb_signal_from_target);
2557 set_gdbarch_gdb_signal_to_target (gdbarch,
2558 linux_gdb_signal_to_target);
3437254d 2559 set_gdbarch_vsyscall_range (gdbarch, linux_vsyscall_range);
3bc3cebe 2560 set_gdbarch_infcall_mmap (gdbarch, linux_infcall_mmap);
7f361056 2561 set_gdbarch_infcall_munmap (gdbarch, linux_infcall_munmap);
5cd867b4 2562 set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
a5ee0f0c 2563}
06253dd3 2564
6c265988 2565void _initialize_linux_tdep ();
06253dd3 2566void
6c265988 2567_initialize_linux_tdep ()
06253dd3
JK
2568{
2569 linux_gdbarch_data_handle =
d9655058 2570 gdbarch_data_register_pre_init (init_linux_gdbarch_data);
cdfa0b0a 2571
cdfa0b0a 2572 /* Observers used to invalidate the cache when needed. */
76727919
TT
2573 gdb::observers::inferior_exit.attach (invalidate_linux_cache_inf);
2574 gdb::observers::inferior_appeared.attach (invalidate_linux_cache_inf);
187b041e 2575 gdb::observers::inferior_execd.attach (invalidate_linux_cache_inf);
df8411da
SDJ
2576
2577 add_setshow_boolean_cmd ("use-coredump-filter", class_files,
2578 &use_coredump_filter, _("\
2579Set whether gcore should consider /proc/PID/coredump_filter."),
2580 _("\
2581Show whether gcore should consider /proc/PID/coredump_filter."),
2582 _("\
2583Use this command to set whether gcore should consider the contents\n\
2584of /proc/PID/coredump_filter when generating the corefile. For more information\n\
2585about this file, refer to the manpage of core(5)."),
2586 NULL, show_use_coredump_filter,
2587 &setlist, &showlist);
afa840dc
SL
2588
2589 add_setshow_boolean_cmd ("dump-excluded-mappings", class_files,
2590 &dump_excluded_mappings, _("\
2591Set whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2592 _("\
2593Show whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2594 _("\
2595Use this command to set whether gcore should dump mappings marked with the\n\
2596VM_DONTDUMP flag (\"dd\" in /proc/PID/smaps) when generating the corefile. For\n\
2597more information about this file, refer to the manpage of proc(5) and core(5)."),
2598 NULL, show_dump_excluded_mappings,
2599 &setlist, &showlist);
06253dd3 2600}
This page took 1.316098 seconds and 4 git commands to generate.