Introduce assign_operation
[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
95ce627a
AB
1938 /* Target description. */
1939 gcore_elf_make_tdesc_note (obfd, &note_data, note_size);
1940
6432734d
UW
1941 return note_data;
1942}
1943
eb14d406
SDJ
1944/* Implementation of `gdbarch_gdb_signal_from_target', as defined in
1945 gdbarch.h. This function is not static because it is exported to
1946 other -tdep files. */
1947
1948enum gdb_signal
1949linux_gdb_signal_from_target (struct gdbarch *gdbarch, int signal)
1950{
1951 switch (signal)
1952 {
1953 case 0:
1954 return GDB_SIGNAL_0;
1955
1956 case LINUX_SIGHUP:
1957 return GDB_SIGNAL_HUP;
1958
1959 case LINUX_SIGINT:
1960 return GDB_SIGNAL_INT;
1961
1962 case LINUX_SIGQUIT:
1963 return GDB_SIGNAL_QUIT;
1964
1965 case LINUX_SIGILL:
1966 return GDB_SIGNAL_ILL;
1967
1968 case LINUX_SIGTRAP:
1969 return GDB_SIGNAL_TRAP;
1970
1971 case LINUX_SIGABRT:
1972 return GDB_SIGNAL_ABRT;
1973
1974 case LINUX_SIGBUS:
1975 return GDB_SIGNAL_BUS;
1976
1977 case LINUX_SIGFPE:
1978 return GDB_SIGNAL_FPE;
1979
1980 case LINUX_SIGKILL:
1981 return GDB_SIGNAL_KILL;
1982
1983 case LINUX_SIGUSR1:
1984 return GDB_SIGNAL_USR1;
1985
1986 case LINUX_SIGSEGV:
1987 return GDB_SIGNAL_SEGV;
1988
1989 case LINUX_SIGUSR2:
1990 return GDB_SIGNAL_USR2;
1991
1992 case LINUX_SIGPIPE:
1993 return GDB_SIGNAL_PIPE;
1994
1995 case LINUX_SIGALRM:
1996 return GDB_SIGNAL_ALRM;
1997
1998 case LINUX_SIGTERM:
1999 return GDB_SIGNAL_TERM;
2000
2001 case LINUX_SIGCHLD:
2002 return GDB_SIGNAL_CHLD;
2003
2004 case LINUX_SIGCONT:
2005 return GDB_SIGNAL_CONT;
2006
2007 case LINUX_SIGSTOP:
2008 return GDB_SIGNAL_STOP;
2009
2010 case LINUX_SIGTSTP:
2011 return GDB_SIGNAL_TSTP;
2012
2013 case LINUX_SIGTTIN:
2014 return GDB_SIGNAL_TTIN;
2015
2016 case LINUX_SIGTTOU:
2017 return GDB_SIGNAL_TTOU;
2018
2019 case LINUX_SIGURG:
2020 return GDB_SIGNAL_URG;
2021
2022 case LINUX_SIGXCPU:
2023 return GDB_SIGNAL_XCPU;
2024
2025 case LINUX_SIGXFSZ:
2026 return GDB_SIGNAL_XFSZ;
2027
2028 case LINUX_SIGVTALRM:
2029 return GDB_SIGNAL_VTALRM;
2030
2031 case LINUX_SIGPROF:
2032 return GDB_SIGNAL_PROF;
2033
2034 case LINUX_SIGWINCH:
2035 return GDB_SIGNAL_WINCH;
2036
2037 /* No way to differentiate between SIGIO and SIGPOLL.
2038 Therefore, we just handle the first one. */
2039 case LINUX_SIGIO:
2040 return GDB_SIGNAL_IO;
2041
2042 case LINUX_SIGPWR:
2043 return GDB_SIGNAL_PWR;
2044
2045 case LINUX_SIGSYS:
2046 return GDB_SIGNAL_SYS;
2047
2048 /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>,
2049 therefore we have to handle them here. */
2050 case LINUX_SIGRTMIN:
2051 return GDB_SIGNAL_REALTIME_32;
2052
2053 case LINUX_SIGRTMAX:
2054 return GDB_SIGNAL_REALTIME_64;
2055 }
2056
2057 if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1)
2058 {
2059 int offset = signal - LINUX_SIGRTMIN + 1;
2060
2061 return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset);
2062 }
2063
2064 return GDB_SIGNAL_UNKNOWN;
2065}
2066
2067/* Implementation of `gdbarch_gdb_signal_to_target', as defined in
2068 gdbarch.h. This function is not static because it is exported to
2069 other -tdep files. */
2070
2071int
2072linux_gdb_signal_to_target (struct gdbarch *gdbarch,
2073 enum gdb_signal signal)
2074{
2075 switch (signal)
2076 {
2077 case GDB_SIGNAL_0:
2078 return 0;
2079
2080 case GDB_SIGNAL_HUP:
2081 return LINUX_SIGHUP;
2082
2083 case GDB_SIGNAL_INT:
2084 return LINUX_SIGINT;
2085
2086 case GDB_SIGNAL_QUIT:
2087 return LINUX_SIGQUIT;
2088
2089 case GDB_SIGNAL_ILL:
2090 return LINUX_SIGILL;
2091
2092 case GDB_SIGNAL_TRAP:
2093 return LINUX_SIGTRAP;
2094
2095 case GDB_SIGNAL_ABRT:
2096 return LINUX_SIGABRT;
2097
2098 case GDB_SIGNAL_FPE:
2099 return LINUX_SIGFPE;
2100
2101 case GDB_SIGNAL_KILL:
2102 return LINUX_SIGKILL;
2103
2104 case GDB_SIGNAL_BUS:
2105 return LINUX_SIGBUS;
2106
2107 case GDB_SIGNAL_SEGV:
2108 return LINUX_SIGSEGV;
2109
2110 case GDB_SIGNAL_SYS:
2111 return LINUX_SIGSYS;
2112
2113 case GDB_SIGNAL_PIPE:
2114 return LINUX_SIGPIPE;
2115
2116 case GDB_SIGNAL_ALRM:
2117 return LINUX_SIGALRM;
2118
2119 case GDB_SIGNAL_TERM:
2120 return LINUX_SIGTERM;
2121
2122 case GDB_SIGNAL_URG:
2123 return LINUX_SIGURG;
2124
2125 case GDB_SIGNAL_STOP:
2126 return LINUX_SIGSTOP;
2127
2128 case GDB_SIGNAL_TSTP:
2129 return LINUX_SIGTSTP;
2130
2131 case GDB_SIGNAL_CONT:
2132 return LINUX_SIGCONT;
2133
2134 case GDB_SIGNAL_CHLD:
2135 return LINUX_SIGCHLD;
2136
2137 case GDB_SIGNAL_TTIN:
2138 return LINUX_SIGTTIN;
2139
2140 case GDB_SIGNAL_TTOU:
2141 return LINUX_SIGTTOU;
2142
2143 case GDB_SIGNAL_IO:
2144 return LINUX_SIGIO;
2145
2146 case GDB_SIGNAL_XCPU:
2147 return LINUX_SIGXCPU;
2148
2149 case GDB_SIGNAL_XFSZ:
2150 return LINUX_SIGXFSZ;
2151
2152 case GDB_SIGNAL_VTALRM:
2153 return LINUX_SIGVTALRM;
2154
2155 case GDB_SIGNAL_PROF:
2156 return LINUX_SIGPROF;
2157
2158 case GDB_SIGNAL_WINCH:
2159 return LINUX_SIGWINCH;
2160
2161 case GDB_SIGNAL_USR1:
2162 return LINUX_SIGUSR1;
2163
2164 case GDB_SIGNAL_USR2:
2165 return LINUX_SIGUSR2;
2166
2167 case GDB_SIGNAL_PWR:
2168 return LINUX_SIGPWR;
2169
2170 case GDB_SIGNAL_POLL:
2171 return LINUX_SIGPOLL;
2172
2173 /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>,
2174 therefore we have to handle it here. */
2175 case GDB_SIGNAL_REALTIME_32:
2176 return LINUX_SIGRTMIN;
2177
2178 /* Same comment applies to _64. */
2179 case GDB_SIGNAL_REALTIME_64:
2180 return LINUX_SIGRTMAX;
2181 }
2182
2183 /* GDB_SIGNAL_REALTIME_33 to _64 are continuous. */
2184 if (signal >= GDB_SIGNAL_REALTIME_33
2185 && signal <= GDB_SIGNAL_REALTIME_63)
2186 {
2187 int offset = signal - GDB_SIGNAL_REALTIME_33;
2188
2189 return LINUX_SIGRTMIN + 1 + offset;
2190 }
2191
2192 return -1;
2193}
2194
cdfa0b0a
PA
2195/* Helper for linux_vsyscall_range that does the real work of finding
2196 the vsyscall's address range. */
3437254d
PA
2197
2198static int
cdfa0b0a 2199linux_vsyscall_range_raw (struct gdbarch *gdbarch, struct mem_range *range)
3437254d 2200{
95e94c3f
PA
2201 char filename[100];
2202 long pid;
95e94c3f 2203
8b88a78e 2204 if (target_auxv_search (current_top_target (), AT_SYSINFO_EHDR, &range->start) <= 0)
95e94c3f
PA
2205 return 0;
2206
6bb90213
PA
2207 /* It doesn't make sense to access the host's /proc when debugging a
2208 core file. Instead, look for the PT_LOAD segment that matches
2209 the vDSO. */
55f6301a 2210 if (!target_has_execution ())
6bb90213 2211 {
6bb90213
PA
2212 long phdrs_size;
2213 int num_phdrs, i;
2214
2215 phdrs_size = bfd_get_elf_phdr_upper_bound (core_bfd);
2216 if (phdrs_size == -1)
2217 return 0;
2218
31aceee8
TV
2219 gdb::unique_xmalloc_ptr<Elf_Internal_Phdr>
2220 phdrs ((Elf_Internal_Phdr *) xmalloc (phdrs_size));
2221 num_phdrs = bfd_get_elf_phdrs (core_bfd, phdrs.get ());
6bb90213
PA
2222 if (num_phdrs == -1)
2223 return 0;
2224
2225 for (i = 0; i < num_phdrs; i++)
31aceee8
TV
2226 if (phdrs.get ()[i].p_type == PT_LOAD
2227 && phdrs.get ()[i].p_vaddr == range->start)
6bb90213 2228 {
31aceee8 2229 range->length = phdrs.get ()[i].p_memsz;
6bb90213
PA
2230 return 1;
2231 }
2232
2233 return 0;
2234 }
2235
95e94c3f
PA
2236 /* We need to know the real target PID to access /proc. */
2237 if (current_inferior ()->fake_pid_p)
2238 return 0;
2239
95e94c3f 2240 pid = current_inferior ()->pid;
3437254d 2241
95e94c3f
PA
2242 /* Note that reading /proc/PID/task/PID/maps (1) is much faster than
2243 reading /proc/PID/maps (2). The later identifies thread stacks
2244 in the output, which requires scanning every thread in the thread
2245 group to check whether a VMA is actually a thread's stack. With
2246 Linux 4.4 on an Intel i7-4810MQ @ 2.80GHz, with an inferior with
2247 a few thousand threads, (1) takes a few miliseconds, while (2)
2248 takes several seconds. Also note that "smaps", what we read for
2249 determining core dump mappings, is even slower than "maps". */
2250 xsnprintf (filename, sizeof filename, "/proc/%ld/task/%ld/maps", pid, pid);
87028b87
TT
2251 gdb::unique_xmalloc_ptr<char> data
2252 = target_fileio_read_stralloc (NULL, filename);
95e94c3f
PA
2253 if (data != NULL)
2254 {
95e94c3f
PA
2255 char *line;
2256 char *saveptr = NULL;
2257
87028b87 2258 for (line = strtok_r (data.get (), "\n", &saveptr);
95e94c3f
PA
2259 line != NULL;
2260 line = strtok_r (NULL, "\n", &saveptr))
2261 {
2262 ULONGEST addr, endaddr;
2263 const char *p = line;
2264
2265 addr = strtoulst (p, &p, 16);
2266 if (addr == range->start)
2267 {
2268 if (*p == '-')
2269 p++;
2270 endaddr = strtoulst (p, &p, 16);
2271 range->length = endaddr - addr;
95e94c3f
PA
2272 return 1;
2273 }
2274 }
95e94c3f
PA
2275 }
2276 else
2277 warning (_("unable to open /proc file '%s'"), filename);
2278
2279 return 0;
3437254d
PA
2280}
2281
cdfa0b0a
PA
2282/* Implementation of the "vsyscall_range" gdbarch hook. Handles
2283 caching, and defers the real work to linux_vsyscall_range_raw. */
2284
2285static int
2286linux_vsyscall_range (struct gdbarch *gdbarch, struct mem_range *range)
2287{
94b24c74 2288 struct linux_info *info = get_linux_inferior_data (current_inferior ());
cdfa0b0a
PA
2289
2290 if (info->vsyscall_range_p == 0)
2291 {
2292 if (linux_vsyscall_range_raw (gdbarch, &info->vsyscall_range))
2293 info->vsyscall_range_p = 1;
2294 else
2295 info->vsyscall_range_p = -1;
2296 }
2297
2298 if (info->vsyscall_range_p < 0)
2299 return 0;
2300
2301 *range = info->vsyscall_range;
2302 return 1;
2303}
2304
3bc3cebe
JK
2305/* Symbols for linux_infcall_mmap's ARG_FLAGS; their Linux MAP_* system
2306 definitions would be dependent on compilation host. */
2307#define GDB_MMAP_MAP_PRIVATE 0x02 /* Changes are private. */
2308#define GDB_MMAP_MAP_ANONYMOUS 0x20 /* Don't use a file. */
2309
2310/* See gdbarch.sh 'infcall_mmap'. */
2311
2312static CORE_ADDR
2313linux_infcall_mmap (CORE_ADDR size, unsigned prot)
2314{
2315 struct objfile *objf;
2316 /* Do there still exist any Linux systems without "mmap64"?
2317 "mmap" uses 64-bit off_t on x86_64 and 32-bit off_t on i386 and x32. */
2318 struct value *mmap_val = find_function_in_inferior ("mmap64", &objf);
2319 struct value *addr_val;
08feed99 2320 struct gdbarch *gdbarch = objf->arch ();
3bc3cebe
JK
2321 CORE_ADDR retval;
2322 enum
2323 {
2a546367 2324 ARG_ADDR, ARG_LENGTH, ARG_PROT, ARG_FLAGS, ARG_FD, ARG_OFFSET, ARG_LAST
3bc3cebe 2325 };
2a546367 2326 struct value *arg[ARG_LAST];
3bc3cebe
JK
2327
2328 arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2329 0);
2330 /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2331 arg[ARG_LENGTH] = value_from_ulongest
2332 (builtin_type (gdbarch)->builtin_unsigned_long, size);
2333 gdb_assert ((prot & ~(GDB_MMAP_PROT_READ | GDB_MMAP_PROT_WRITE
2334 | GDB_MMAP_PROT_EXEC))
2335 == 0);
2336 arg[ARG_PROT] = value_from_longest (builtin_type (gdbarch)->builtin_int, prot);
2337 arg[ARG_FLAGS] = value_from_longest (builtin_type (gdbarch)->builtin_int,
2338 GDB_MMAP_MAP_PRIVATE
2339 | GDB_MMAP_MAP_ANONYMOUS);
2340 arg[ARG_FD] = value_from_longest (builtin_type (gdbarch)->builtin_int, -1);
2341 arg[ARG_OFFSET] = value_from_longest (builtin_type (gdbarch)->builtin_int64,
2342 0);
e71585ff 2343 addr_val = call_function_by_hand (mmap_val, NULL, arg);
3bc3cebe
JK
2344 retval = value_as_address (addr_val);
2345 if (retval == (CORE_ADDR) -1)
2346 error (_("Failed inferior mmap call for %s bytes, errno is changed."),
2347 pulongest (size));
2348 return retval;
2349}
2350
7f361056
JK
2351/* See gdbarch.sh 'infcall_munmap'. */
2352
2353static void
2354linux_infcall_munmap (CORE_ADDR addr, CORE_ADDR size)
2355{
2356 struct objfile *objf;
2357 struct value *munmap_val = find_function_in_inferior ("munmap", &objf);
2358 struct value *retval_val;
08feed99 2359 struct gdbarch *gdbarch = objf->arch ();
7f361056
JK
2360 LONGEST retval;
2361 enum
2362 {
2363 ARG_ADDR, ARG_LENGTH, ARG_LAST
2364 };
2365 struct value *arg[ARG_LAST];
2366
2367 arg[ARG_ADDR] = value_from_pointer (builtin_type (gdbarch)->builtin_data_ptr,
2368 addr);
2369 /* Assuming sizeof (unsigned long) == sizeof (size_t). */
2370 arg[ARG_LENGTH] = value_from_ulongest
2371 (builtin_type (gdbarch)->builtin_unsigned_long, size);
e71585ff 2372 retval_val = call_function_by_hand (munmap_val, NULL, arg);
7f361056
JK
2373 retval = value_as_long (retval_val);
2374 if (retval != 0)
2375 warning (_("Failed inferior munmap call at %s for %s bytes, "
2376 "errno is changed."),
2377 hex_string (addr), pulongest (size));
2378}
2379
906d60cf
PA
2380/* See linux-tdep.h. */
2381
2382CORE_ADDR
2383linux_displaced_step_location (struct gdbarch *gdbarch)
2384{
2385 CORE_ADDR addr;
2386 int bp_len;
2387
2388 /* Determine entry point from target auxiliary vector. This avoids
2389 the need for symbols. Also, when debugging a stand-alone SPU
2390 executable, entry_point_address () will point to an SPU
2391 local-store address and is thus not usable as displaced stepping
2392 location. The auxiliary vector gets us the PowerPC-side entry
2393 point address instead. */
8b88a78e 2394 if (target_auxv_search (current_top_target (), AT_ENTRY, &addr) <= 0)
16b41842
PA
2395 throw_error (NOT_SUPPORTED_ERROR,
2396 _("Cannot find AT_ENTRY auxiliary vector entry."));
906d60cf
PA
2397
2398 /* Make certain that the address points at real code, and not a
2399 function descriptor. */
2400 addr = gdbarch_convert_from_func_ptr_addr (gdbarch, addr,
8b88a78e 2401 current_top_target ());
906d60cf
PA
2402
2403 /* Inferior calls also use the entry point as a breakpoint location.
2404 We don't want displaced stepping to interfere with those
2405 breakpoints, so leave space. */
2406 gdbarch_breakpoint_from_pc (gdbarch, &addr, &bp_len);
2407 addr += bp_len * 2;
2408
2409 return addr;
2410}
2411
0f83012e
AH
2412/* See linux-tdep.h. */
2413
187b041e
SM
2414displaced_step_prepare_status
2415linux_displaced_step_prepare (gdbarch *arch, thread_info *thread,
2416 CORE_ADDR &displaced_pc)
2417{
2418 linux_info *per_inferior = get_linux_inferior_data (thread->inf);
2419
480af54c 2420 if (!per_inferior->disp_step_bufs.has_value ())
187b041e 2421 {
480af54c
SM
2422 /* Figure out the location of the buffers. They are contiguous, starting
2423 at DISP_STEP_BUF_ADDR. They are all of size BUF_LEN. */
187b041e
SM
2424 CORE_ADDR disp_step_buf_addr
2425 = linux_displaced_step_location (thread->inf->gdbarch);
480af54c 2426 int buf_len = gdbarch_max_insn_length (arch);
187b041e 2427
480af54c
SM
2428 linux_gdbarch_data *gdbarch_data = get_linux_gdbarch_data (arch);
2429 gdb_assert (gdbarch_data->num_disp_step_buffers > 0);
2430
2431 std::vector<CORE_ADDR> buffers;
2432 for (int i = 0; i < gdbarch_data->num_disp_step_buffers; i++)
2433 buffers.push_back (disp_step_buf_addr + i * buf_len);
2434
2435 per_inferior->disp_step_bufs.emplace (buffers);
187b041e
SM
2436 }
2437
480af54c 2438 return per_inferior->disp_step_bufs->prepare (thread, displaced_pc);
187b041e
SM
2439}
2440
2441/* See linux-tdep.h. */
2442
2443displaced_step_finish_status
2444linux_displaced_step_finish (gdbarch *arch, thread_info *thread, gdb_signal sig)
2445{
2446 linux_info *per_inferior = get_linux_inferior_data (thread->inf);
2447
480af54c 2448 gdb_assert (per_inferior->disp_step_bufs.has_value ());
187b041e 2449
480af54c 2450 return per_inferior->disp_step_bufs->finish (arch, thread, sig);
187b041e
SM
2451}
2452
2453/* See linux-tdep.h. */
2454
2455const displaced_step_copy_insn_closure *
2456linux_displaced_step_copy_insn_closure_by_addr (inferior *inf, CORE_ADDR addr)
2457{
2458 linux_info *per_inferior = linux_inferior_data.get (inf);
2459
2460 if (per_inferior == nullptr
480af54c 2461 || !per_inferior->disp_step_bufs.has_value ())
187b041e
SM
2462 return nullptr;
2463
480af54c 2464 return per_inferior->disp_step_bufs->copy_insn_closure_by_addr (addr);
187b041e
SM
2465}
2466
2467/* See linux-tdep.h. */
2468
2469void
2470linux_displaced_step_restore_all_in_ptid (inferior *parent_inf, ptid_t ptid)
2471{
2472 linux_info *per_inferior = linux_inferior_data.get (parent_inf);
2473
2474 if (per_inferior == nullptr
480af54c 2475 || !per_inferior->disp_step_bufs.has_value ())
187b041e
SM
2476 return;
2477
480af54c 2478 per_inferior->disp_step_bufs->restore_in_ptid (ptid);
187b041e
SM
2479}
2480
2481/* See linux-tdep.h. */
2482
0f83012e
AH
2483CORE_ADDR
2484linux_get_hwcap (struct target_ops *target)
2485{
2486 CORE_ADDR field;
2487 if (target_auxv_search (target, AT_HWCAP, &field) != 1)
2488 return 0;
2489 return field;
2490}
2491
2492/* See linux-tdep.h. */
2493
2494CORE_ADDR
2495linux_get_hwcap2 (struct target_ops *target)
2496{
2497 CORE_ADDR field;
2498 if (target_auxv_search (target, AT_HWCAP2, &field) != 1)
2499 return 0;
2500 return field;
2501}
2502
df8411da
SDJ
2503/* Display whether the gcore command is using the
2504 /proc/PID/coredump_filter file. */
2505
2506static void
2507show_use_coredump_filter (struct ui_file *file, int from_tty,
2508 struct cmd_list_element *c, const char *value)
2509{
2510 fprintf_filtered (file, _("Use of /proc/PID/coredump_filter file to generate"
2511 " corefiles is %s.\n"), value);
2512}
2513
afa840dc
SL
2514/* Display whether the gcore command is dumping mappings marked with
2515 the VM_DONTDUMP flag. */
2516
2517static void
2518show_dump_excluded_mappings (struct ui_file *file, int from_tty,
2519 struct cmd_list_element *c, const char *value)
2520{
2521 fprintf_filtered (file, _("Dumping of mappings marked with the VM_DONTDUMP"
2522 " flag is %s.\n"), value);
2523}
2524
a5ee0f0c 2525/* To be called from the various GDB_OSABI_LINUX handlers for the
480af54c
SM
2526 various GNU/Linux architectures and machine types.
2527
2528 NUM_DISP_STEP_BUFFERS is the number of displaced step buffers to use. If 0,
2529 displaced stepping is not supported. */
a5ee0f0c
PA
2530
2531void
187b041e 2532linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
480af54c 2533 int num_disp_step_buffers)
a5ee0f0c 2534{
480af54c 2535 if (num_disp_step_buffers > 0)
187b041e 2536 {
480af54c
SM
2537 linux_gdbarch_data *gdbarch_data = get_linux_gdbarch_data (gdbarch);
2538 gdbarch_data->num_disp_step_buffers = num_disp_step_buffers;
2539
2540 set_gdbarch_displaced_step_prepare (gdbarch,
2541 linux_displaced_step_prepare);
187b041e
SM
2542 set_gdbarch_displaced_step_finish (gdbarch, linux_displaced_step_finish);
2543 set_gdbarch_displaced_step_copy_insn_closure_by_addr
2544 (gdbarch, linux_displaced_step_copy_insn_closure_by_addr);
2545 set_gdbarch_displaced_step_restore_all_in_ptid
2546 (gdbarch, linux_displaced_step_restore_all_in_ptid);
2547 }
2548
a5ee0f0c 2549 set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str);
3030c96e 2550 set_gdbarch_info_proc (gdbarch, linux_info_proc);
451b7c33 2551 set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc);
382b69bb 2552 set_gdbarch_core_xfer_siginfo (gdbarch, linux_core_xfer_siginfo);
db082f59 2553 set_gdbarch_read_core_file_mappings (gdbarch, linux_read_core_file_mappings);
35c2fab7 2554 set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions);
f968fe80 2555 set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes);
33fbcbee
PA
2556 set_gdbarch_has_shared_address_space (gdbarch,
2557 linux_has_shared_address_space);
eb14d406
SDJ
2558 set_gdbarch_gdb_signal_from_target (gdbarch,
2559 linux_gdb_signal_from_target);
2560 set_gdbarch_gdb_signal_to_target (gdbarch,
2561 linux_gdb_signal_to_target);
3437254d 2562 set_gdbarch_vsyscall_range (gdbarch, linux_vsyscall_range);
3bc3cebe 2563 set_gdbarch_infcall_mmap (gdbarch, linux_infcall_mmap);
7f361056 2564 set_gdbarch_infcall_munmap (gdbarch, linux_infcall_munmap);
5cd867b4 2565 set_gdbarch_get_siginfo_type (gdbarch, linux_get_siginfo_type);
a5ee0f0c 2566}
06253dd3 2567
6c265988 2568void _initialize_linux_tdep ();
06253dd3 2569void
6c265988 2570_initialize_linux_tdep ()
06253dd3
JK
2571{
2572 linux_gdbarch_data_handle =
d9655058 2573 gdbarch_data_register_pre_init (init_linux_gdbarch_data);
cdfa0b0a 2574
cdfa0b0a 2575 /* Observers used to invalidate the cache when needed. */
76727919
TT
2576 gdb::observers::inferior_exit.attach (invalidate_linux_cache_inf);
2577 gdb::observers::inferior_appeared.attach (invalidate_linux_cache_inf);
187b041e 2578 gdb::observers::inferior_execd.attach (invalidate_linux_cache_inf);
df8411da
SDJ
2579
2580 add_setshow_boolean_cmd ("use-coredump-filter", class_files,
2581 &use_coredump_filter, _("\
2582Set whether gcore should consider /proc/PID/coredump_filter."),
2583 _("\
2584Show whether gcore should consider /proc/PID/coredump_filter."),
2585 _("\
2586Use this command to set whether gcore should consider the contents\n\
2587of /proc/PID/coredump_filter when generating the corefile. For more information\n\
2588about this file, refer to the manpage of core(5)."),
2589 NULL, show_use_coredump_filter,
2590 &setlist, &showlist);
afa840dc
SL
2591
2592 add_setshow_boolean_cmd ("dump-excluded-mappings", class_files,
2593 &dump_excluded_mappings, _("\
2594Set whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2595 _("\
2596Show whether gcore should dump mappings marked with the VM_DONTDUMP flag."),
2597 _("\
2598Use this command to set whether gcore should dump mappings marked with the\n\
2599VM_DONTDUMP flag (\"dd\" in /proc/PID/smaps) when generating the corefile. For\n\
2600more information about this file, refer to the manpage of proc(5) and core(5)."),
2601 NULL, show_dump_excluded_mappings,
2602 &setlist, &showlist);
06253dd3 2603}
This page took 1.266077 seconds and 4 git commands to generate.