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