1 /* Target-dependent code for GNU/Linux, architecture independent. 2 3 Copyright (C) 2009-2014 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 "gdb_obstack.h" 35 36 #include <ctype.h> 37 38 /* This enum represents the signals' numbers on a generic architecture 39 running the Linux kernel. The definition of "generic" comes from 40 the file <include/uapi/asm-generic/signal.h>, from the Linux kernel 41 tree, which is the "de facto" implementation of signal numbers to 42 be used by new architecture ports. 43 44 For those architectures which have differences between the generic 45 standard (e.g., Alpha), we define the different signals (and *only* 46 those) in the specific target-dependent file (e.g., 47 alpha-linux-tdep.c, for Alpha). Please refer to the architecture's 48 tdep file for more information. 49 50 ARM deserves a special mention here. On the file 51 <arch/arm/include/uapi/asm/signal.h>, it defines only one different 52 (and ARM-only) signal, which is SIGSWI, with the same number as 53 SIGRTMIN. This signal is used only for a very specific target, 54 called ArthurOS (from RISCOS). Therefore, we do not handle it on 55 the ARM-tdep file, and we can safely use the generic signal handler 56 here for ARM targets. 57 58 As stated above, this enum is derived from 59 <include/uapi/asm-generic/signal.h>, from the Linux kernel 60 tree. */ 61 62 enum 63 { 64 LINUX_SIGHUP = 1, 65 LINUX_SIGINT = 2, 66 LINUX_SIGQUIT = 3, 67 LINUX_SIGILL = 4, 68 LINUX_SIGTRAP = 5, 69 LINUX_SIGABRT = 6, 70 LINUX_SIGIOT = 6, 71 LINUX_SIGBUS = 7, 72 LINUX_SIGFPE = 8, 73 LINUX_SIGKILL = 9, 74 LINUX_SIGUSR1 = 10, 75 LINUX_SIGSEGV = 11, 76 LINUX_SIGUSR2 = 12, 77 LINUX_SIGPIPE = 13, 78 LINUX_SIGALRM = 14, 79 LINUX_SIGTERM = 15, 80 LINUX_SIGSTKFLT = 16, 81 LINUX_SIGCHLD = 17, 82 LINUX_SIGCONT = 18, 83 LINUX_SIGSTOP = 19, 84 LINUX_SIGTSTP = 20, 85 LINUX_SIGTTIN = 21, 86 LINUX_SIGTTOU = 22, 87 LINUX_SIGURG = 23, 88 LINUX_SIGXCPU = 24, 89 LINUX_SIGXFSZ = 25, 90 LINUX_SIGVTALRM = 26, 91 LINUX_SIGPROF = 27, 92 LINUX_SIGWINCH = 28, 93 LINUX_SIGIO = 29, 94 LINUX_SIGPOLL = LINUX_SIGIO, 95 LINUX_SIGPWR = 30, 96 LINUX_SIGSYS = 31, 97 LINUX_SIGUNUSED = 31, 98 99 LINUX_SIGRTMIN = 32, 100 LINUX_SIGRTMAX = 64, 101 }; 102 103 static struct gdbarch_data *linux_gdbarch_data_handle; 104 105 struct linux_gdbarch_data 106 { 107 struct type *siginfo_type; 108 }; 109 110 static void * 111 init_linux_gdbarch_data (struct gdbarch *gdbarch) 112 { 113 return GDBARCH_OBSTACK_ZALLOC (gdbarch, struct linux_gdbarch_data); 114 } 115 116 static struct linux_gdbarch_data * 117 get_linux_gdbarch_data (struct gdbarch *gdbarch) 118 { 119 return gdbarch_data (gdbarch, linux_gdbarch_data_handle); 120 } 121 122 /* This function is suitable for architectures that don't 123 extend/override the standard siginfo structure. */ 124 125 struct type * 126 linux_get_siginfo_type (struct gdbarch *gdbarch) 127 { 128 struct linux_gdbarch_data *linux_gdbarch_data; 129 struct type *int_type, *uint_type, *long_type, *void_ptr_type; 130 struct type *uid_type, *pid_type; 131 struct type *sigval_type, *clock_type; 132 struct type *siginfo_type, *sifields_type; 133 struct type *type; 134 135 linux_gdbarch_data = get_linux_gdbarch_data (gdbarch); 136 if (linux_gdbarch_data->siginfo_type != NULL) 137 return linux_gdbarch_data->siginfo_type; 138 139 int_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 140 0, "int"); 141 uint_type = arch_integer_type (gdbarch, gdbarch_int_bit (gdbarch), 142 1, "unsigned int"); 143 long_type = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 144 0, "long"); 145 void_ptr_type = lookup_pointer_type (builtin_type (gdbarch)->builtin_void); 146 147 /* sival_t */ 148 sigval_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); 149 TYPE_NAME (sigval_type) = xstrdup ("sigval_t"); 150 append_composite_type_field (sigval_type, "sival_int", int_type); 151 append_composite_type_field (sigval_type, "sival_ptr", void_ptr_type); 152 153 /* __pid_t */ 154 pid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, 155 TYPE_LENGTH (int_type), "__pid_t"); 156 TYPE_TARGET_TYPE (pid_type) = int_type; 157 TYPE_TARGET_STUB (pid_type) = 1; 158 159 /* __uid_t */ 160 uid_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, 161 TYPE_LENGTH (uint_type), "__uid_t"); 162 TYPE_TARGET_TYPE (uid_type) = uint_type; 163 TYPE_TARGET_STUB (uid_type) = 1; 164 165 /* __clock_t */ 166 clock_type = arch_type (gdbarch, TYPE_CODE_TYPEDEF, 167 TYPE_LENGTH (long_type), "__clock_t"); 168 TYPE_TARGET_TYPE (clock_type) = long_type; 169 TYPE_TARGET_STUB (clock_type) = 1; 170 171 /* _sifields */ 172 sifields_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_UNION); 173 174 { 175 const int si_max_size = 128; 176 int si_pad_size; 177 int size_of_int = gdbarch_int_bit (gdbarch) / HOST_CHAR_BIT; 178 179 /* _pad */ 180 if (gdbarch_ptr_bit (gdbarch) == 64) 181 si_pad_size = (si_max_size / size_of_int) - 4; 182 else 183 si_pad_size = (si_max_size / size_of_int) - 3; 184 append_composite_type_field (sifields_type, "_pad", 185 init_vector_type (int_type, si_pad_size)); 186 } 187 188 /* _kill */ 189 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 190 append_composite_type_field (type, "si_pid", pid_type); 191 append_composite_type_field (type, "si_uid", uid_type); 192 append_composite_type_field (sifields_type, "_kill", type); 193 194 /* _timer */ 195 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 196 append_composite_type_field (type, "si_tid", int_type); 197 append_composite_type_field (type, "si_overrun", int_type); 198 append_composite_type_field (type, "si_sigval", sigval_type); 199 append_composite_type_field (sifields_type, "_timer", type); 200 201 /* _rt */ 202 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 203 append_composite_type_field (type, "si_pid", pid_type); 204 append_composite_type_field (type, "si_uid", uid_type); 205 append_composite_type_field (type, "si_sigval", sigval_type); 206 append_composite_type_field (sifields_type, "_rt", type); 207 208 /* _sigchld */ 209 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 210 append_composite_type_field (type, "si_pid", pid_type); 211 append_composite_type_field (type, "si_uid", uid_type); 212 append_composite_type_field (type, "si_status", int_type); 213 append_composite_type_field (type, "si_utime", clock_type); 214 append_composite_type_field (type, "si_stime", clock_type); 215 append_composite_type_field (sifields_type, "_sigchld", type); 216 217 /* _sigfault */ 218 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 219 append_composite_type_field (type, "si_addr", void_ptr_type); 220 append_composite_type_field (sifields_type, "_sigfault", type); 221 222 /* _sigpoll */ 223 type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 224 append_composite_type_field (type, "si_band", long_type); 225 append_composite_type_field (type, "si_fd", int_type); 226 append_composite_type_field (sifields_type, "_sigpoll", type); 227 228 /* struct siginfo */ 229 siginfo_type = arch_composite_type (gdbarch, NULL, TYPE_CODE_STRUCT); 230 TYPE_NAME (siginfo_type) = xstrdup ("siginfo"); 231 append_composite_type_field (siginfo_type, "si_signo", int_type); 232 append_composite_type_field (siginfo_type, "si_errno", int_type); 233 append_composite_type_field (siginfo_type, "si_code", int_type); 234 append_composite_type_field_aligned (siginfo_type, 235 "_sifields", sifields_type, 236 TYPE_LENGTH (long_type)); 237 238 linux_gdbarch_data->siginfo_type = siginfo_type; 239 240 return siginfo_type; 241 } 242 243 /* Return true if the target is running on uClinux instead of normal 244 Linux kernel. */ 245 246 int 247 linux_is_uclinux (void) 248 { 249 CORE_ADDR dummy; 250 251 return (target_auxv_search (¤t_target, AT_NULL, &dummy) > 0 252 && target_auxv_search (¤t_target, AT_PAGESZ, &dummy) == 0); 253 } 254 255 static int 256 linux_has_shared_address_space (struct gdbarch *gdbarch) 257 { 258 return linux_is_uclinux (); 259 } 260 261 /* This is how we want PTIDs from core files to be printed. */ 262 263 static char * 264 linux_core_pid_to_str (struct gdbarch *gdbarch, ptid_t ptid) 265 { 266 static char buf[80]; 267 268 if (ptid_get_lwp (ptid) != 0) 269 { 270 snprintf (buf, sizeof (buf), "LWP %ld", ptid_get_lwp (ptid)); 271 return buf; 272 } 273 274 return normal_pid_to_str (ptid); 275 } 276 277 /* Service function for corefiles and info proc. */ 278 279 static void 280 read_mapping (const char *line, 281 ULONGEST *addr, ULONGEST *endaddr, 282 const char **permissions, size_t *permissions_len, 283 ULONGEST *offset, 284 const char **device, size_t *device_len, 285 ULONGEST *inode, 286 const char **filename) 287 { 288 const char *p = line; 289 290 *addr = strtoulst (p, &p, 16); 291 if (*p == '-') 292 p++; 293 *endaddr = strtoulst (p, &p, 16); 294 295 p = skip_spaces_const (p); 296 *permissions = p; 297 while (*p && !isspace (*p)) 298 p++; 299 *permissions_len = p - *permissions; 300 301 *offset = strtoulst (p, &p, 16); 302 303 p = skip_spaces_const (p); 304 *device = p; 305 while (*p && !isspace (*p)) 306 p++; 307 *device_len = p - *device; 308 309 *inode = strtoulst (p, &p, 10); 310 311 p = skip_spaces_const (p); 312 *filename = p; 313 } 314 315 /* Implement the "info proc" command. */ 316 317 static void 318 linux_info_proc (struct gdbarch *gdbarch, char *args, 319 enum info_proc_what what) 320 { 321 /* A long is used for pid instead of an int to avoid a loss of precision 322 compiler warning from the output of strtoul. */ 323 long pid; 324 int cmdline_f = (what == IP_MINIMAL || what == IP_CMDLINE || what == IP_ALL); 325 int cwd_f = (what == IP_MINIMAL || what == IP_CWD || what == IP_ALL); 326 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL); 327 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL); 328 int status_f = (what == IP_STATUS || what == IP_ALL); 329 int stat_f = (what == IP_STAT || what == IP_ALL); 330 char filename[100]; 331 char *data; 332 int target_errno; 333 334 if (args && isdigit (args[0])) 335 pid = strtoul (args, &args, 10); 336 else 337 { 338 if (!target_has_execution) 339 error (_("No current process: you must name one.")); 340 if (current_inferior ()->fake_pid_p) 341 error (_("Can't determine the current process's PID: you must name one.")); 342 343 pid = current_inferior ()->pid; 344 } 345 346 args = skip_spaces (args); 347 if (args && args[0]) 348 error (_("Too many parameters: %s"), args); 349 350 printf_filtered (_("process %ld\n"), pid); 351 if (cmdline_f) 352 { 353 xsnprintf (filename, sizeof filename, "/proc/%ld/cmdline", pid); 354 data = target_fileio_read_stralloc (filename); 355 if (data) 356 { 357 struct cleanup *cleanup = make_cleanup (xfree, data); 358 printf_filtered ("cmdline = '%s'\n", data); 359 do_cleanups (cleanup); 360 } 361 else 362 warning (_("unable to open /proc file '%s'"), filename); 363 } 364 if (cwd_f) 365 { 366 xsnprintf (filename, sizeof filename, "/proc/%ld/cwd", pid); 367 data = target_fileio_readlink (filename, &target_errno); 368 if (data) 369 { 370 struct cleanup *cleanup = make_cleanup (xfree, data); 371 printf_filtered ("cwd = '%s'\n", data); 372 do_cleanups (cleanup); 373 } 374 else 375 warning (_("unable to read link '%s'"), filename); 376 } 377 if (exe_f) 378 { 379 xsnprintf (filename, sizeof filename, "/proc/%ld/exe", pid); 380 data = target_fileio_readlink (filename, &target_errno); 381 if (data) 382 { 383 struct cleanup *cleanup = make_cleanup (xfree, data); 384 printf_filtered ("exe = '%s'\n", data); 385 do_cleanups (cleanup); 386 } 387 else 388 warning (_("unable to read link '%s'"), filename); 389 } 390 if (mappings_f) 391 { 392 xsnprintf (filename, sizeof filename, "/proc/%ld/maps", pid); 393 data = target_fileio_read_stralloc (filename); 394 if (data) 395 { 396 struct cleanup *cleanup = make_cleanup (xfree, data); 397 char *line; 398 399 printf_filtered (_("Mapped address spaces:\n\n")); 400 if (gdbarch_addr_bit (gdbarch) == 32) 401 { 402 printf_filtered ("\t%10s %10s %10s %10s %s\n", 403 "Start Addr", 404 " End Addr", 405 " Size", " Offset", "objfile"); 406 } 407 else 408 { 409 printf_filtered (" %18s %18s %10s %10s %s\n", 410 "Start Addr", 411 " End Addr", 412 " Size", " Offset", "objfile"); 413 } 414 415 for (line = strtok (data, "\n"); line; line = strtok (NULL, "\n")) 416 { 417 ULONGEST addr, endaddr, offset, inode; 418 const char *permissions, *device, *filename; 419 size_t permissions_len, device_len; 420 421 read_mapping (line, &addr, &endaddr, 422 &permissions, &permissions_len, 423 &offset, &device, &device_len, 424 &inode, &filename); 425 426 if (gdbarch_addr_bit (gdbarch) == 32) 427 { 428 printf_filtered ("\t%10s %10s %10s %10s %s\n", 429 paddress (gdbarch, addr), 430 paddress (gdbarch, endaddr), 431 hex_string (endaddr - addr), 432 hex_string (offset), 433 *filename? filename : ""); 434 } 435 else 436 { 437 printf_filtered (" %18s %18s %10s %10s %s\n", 438 paddress (gdbarch, addr), 439 paddress (gdbarch, endaddr), 440 hex_string (endaddr - addr), 441 hex_string (offset), 442 *filename? filename : ""); 443 } 444 } 445 446 do_cleanups (cleanup); 447 } 448 else 449 warning (_("unable to open /proc file '%s'"), filename); 450 } 451 if (status_f) 452 { 453 xsnprintf (filename, sizeof filename, "/proc/%ld/status", pid); 454 data = target_fileio_read_stralloc (filename); 455 if (data) 456 { 457 struct cleanup *cleanup = make_cleanup (xfree, data); 458 puts_filtered (data); 459 do_cleanups (cleanup); 460 } 461 else 462 warning (_("unable to open /proc file '%s'"), filename); 463 } 464 if (stat_f) 465 { 466 xsnprintf (filename, sizeof filename, "/proc/%ld/stat", pid); 467 data = target_fileio_read_stralloc (filename); 468 if (data) 469 { 470 struct cleanup *cleanup = make_cleanup (xfree, data); 471 const char *p = data; 472 473 printf_filtered (_("Process: %s\n"), 474 pulongest (strtoulst (p, &p, 10))); 475 476 p = skip_spaces_const (p); 477 if (*p == '(') 478 { 479 const char *ep = strchr (p, ')'); 480 if (ep != NULL) 481 { 482 printf_filtered ("Exec file: %.*s\n", 483 (int) (ep - p - 1), p + 1); 484 p = ep + 1; 485 } 486 } 487 488 p = skip_spaces_const (p); 489 if (*p) 490 printf_filtered (_("State: %c\n"), *p++); 491 492 if (*p) 493 printf_filtered (_("Parent process: %s\n"), 494 pulongest (strtoulst (p, &p, 10))); 495 if (*p) 496 printf_filtered (_("Process group: %s\n"), 497 pulongest (strtoulst (p, &p, 10))); 498 if (*p) 499 printf_filtered (_("Session id: %s\n"), 500 pulongest (strtoulst (p, &p, 10))); 501 if (*p) 502 printf_filtered (_("TTY: %s\n"), 503 pulongest (strtoulst (p, &p, 10))); 504 if (*p) 505 printf_filtered (_("TTY owner process group: %s\n"), 506 pulongest (strtoulst (p, &p, 10))); 507 508 if (*p) 509 printf_filtered (_("Flags: %s\n"), 510 hex_string (strtoulst (p, &p, 10))); 511 if (*p) 512 printf_filtered (_("Minor faults (no memory page): %s\n"), 513 pulongest (strtoulst (p, &p, 10))); 514 if (*p) 515 printf_filtered (_("Minor faults, children: %s\n"), 516 pulongest (strtoulst (p, &p, 10))); 517 if (*p) 518 printf_filtered (_("Major faults (memory page faults): %s\n"), 519 pulongest (strtoulst (p, &p, 10))); 520 if (*p) 521 printf_filtered (_("Major faults, children: %s\n"), 522 pulongest (strtoulst (p, &p, 10))); 523 if (*p) 524 printf_filtered (_("utime: %s\n"), 525 pulongest (strtoulst (p, &p, 10))); 526 if (*p) 527 printf_filtered (_("stime: %s\n"), 528 pulongest (strtoulst (p, &p, 10))); 529 if (*p) 530 printf_filtered (_("utime, children: %s\n"), 531 pulongest (strtoulst (p, &p, 10))); 532 if (*p) 533 printf_filtered (_("stime, children: %s\n"), 534 pulongest (strtoulst (p, &p, 10))); 535 if (*p) 536 printf_filtered (_("jiffies remaining in current " 537 "time slice: %s\n"), 538 pulongest (strtoulst (p, &p, 10))); 539 if (*p) 540 printf_filtered (_("'nice' value: %s\n"), 541 pulongest (strtoulst (p, &p, 10))); 542 if (*p) 543 printf_filtered (_("jiffies until next timeout: %s\n"), 544 pulongest (strtoulst (p, &p, 10))); 545 if (*p) 546 printf_filtered (_("jiffies until next SIGALRM: %s\n"), 547 pulongest (strtoulst (p, &p, 10))); 548 if (*p) 549 printf_filtered (_("start time (jiffies since " 550 "system boot): %s\n"), 551 pulongest (strtoulst (p, &p, 10))); 552 if (*p) 553 printf_filtered (_("Virtual memory size: %s\n"), 554 pulongest (strtoulst (p, &p, 10))); 555 if (*p) 556 printf_filtered (_("Resident set size: %s\n"), 557 pulongest (strtoulst (p, &p, 10))); 558 if (*p) 559 printf_filtered (_("rlim: %s\n"), 560 pulongest (strtoulst (p, &p, 10))); 561 if (*p) 562 printf_filtered (_("Start of text: %s\n"), 563 hex_string (strtoulst (p, &p, 10))); 564 if (*p) 565 printf_filtered (_("End of text: %s\n"), 566 hex_string (strtoulst (p, &p, 10))); 567 if (*p) 568 printf_filtered (_("Start of stack: %s\n"), 569 hex_string (strtoulst (p, &p, 10))); 570 #if 0 /* Don't know how architecture-dependent the rest is... 571 Anyway the signal bitmap info is available from "status". */ 572 if (*p) 573 printf_filtered (_("Kernel stack pointer: %s\n"), 574 hex_string (strtoulst (p, &p, 10))); 575 if (*p) 576 printf_filtered (_("Kernel instr pointer: %s\n"), 577 hex_string (strtoulst (p, &p, 10))); 578 if (*p) 579 printf_filtered (_("Pending signals bitmap: %s\n"), 580 hex_string (strtoulst (p, &p, 10))); 581 if (*p) 582 printf_filtered (_("Blocked signals bitmap: %s\n"), 583 hex_string (strtoulst (p, &p, 10))); 584 if (*p) 585 printf_filtered (_("Ignored signals bitmap: %s\n"), 586 hex_string (strtoulst (p, &p, 10))); 587 if (*p) 588 printf_filtered (_("Catched signals bitmap: %s\n"), 589 hex_string (strtoulst (p, &p, 10))); 590 if (*p) 591 printf_filtered (_("wchan (system call): %s\n"), 592 hex_string (strtoulst (p, &p, 10))); 593 #endif 594 do_cleanups (cleanup); 595 } 596 else 597 warning (_("unable to open /proc file '%s'"), filename); 598 } 599 } 600 601 /* Implement "info proc mappings" for a corefile. */ 602 603 static void 604 linux_core_info_proc_mappings (struct gdbarch *gdbarch, char *args) 605 { 606 asection *section; 607 ULONGEST count, page_size; 608 unsigned char *descdata, *filenames, *descend, *contents; 609 size_t note_size; 610 unsigned int addr_size_bits, addr_size; 611 struct cleanup *cleanup; 612 struct gdbarch *core_gdbarch = gdbarch_from_bfd (core_bfd); 613 /* We assume this for reading 64-bit core files. */ 614 gdb_static_assert (sizeof (ULONGEST) >= 8); 615 616 section = bfd_get_section_by_name (core_bfd, ".note.linuxcore.file"); 617 if (section == NULL) 618 { 619 warning (_("unable to find mappings in core file")); 620 return; 621 } 622 623 addr_size_bits = gdbarch_addr_bit (core_gdbarch); 624 addr_size = addr_size_bits / 8; 625 note_size = bfd_get_section_size (section); 626 627 if (note_size < 2 * addr_size) 628 error (_("malformed core note - too short for header")); 629 630 contents = xmalloc (note_size); 631 cleanup = make_cleanup (xfree, contents); 632 if (!bfd_get_section_contents (core_bfd, section, contents, 0, note_size)) 633 error (_("could not get core note contents")); 634 635 descdata = contents; 636 descend = descdata + note_size; 637 638 if (descdata[note_size - 1] != '\0') 639 error (_("malformed note - does not end with \\0")); 640 641 count = bfd_get (addr_size_bits, core_bfd, descdata); 642 descdata += addr_size; 643 644 page_size = bfd_get (addr_size_bits, core_bfd, descdata); 645 descdata += addr_size; 646 647 if (note_size < 2 * addr_size + count * 3 * addr_size) 648 error (_("malformed note - too short for supplied file count")); 649 650 printf_filtered (_("Mapped address spaces:\n\n")); 651 if (gdbarch_addr_bit (gdbarch) == 32) 652 { 653 printf_filtered ("\t%10s %10s %10s %10s %s\n", 654 "Start Addr", 655 " End Addr", 656 " Size", " Offset", "objfile"); 657 } 658 else 659 { 660 printf_filtered (" %18s %18s %10s %10s %s\n", 661 "Start Addr", 662 " End Addr", 663 " Size", " Offset", "objfile"); 664 } 665 666 filenames = descdata + count * 3 * addr_size; 667 while (--count > 0) 668 { 669 ULONGEST start, end, file_ofs; 670 671 if (filenames == descend) 672 error (_("malformed note - filenames end too early")); 673 674 start = bfd_get (addr_size_bits, core_bfd, descdata); 675 descdata += addr_size; 676 end = bfd_get (addr_size_bits, core_bfd, descdata); 677 descdata += addr_size; 678 file_ofs = bfd_get (addr_size_bits, core_bfd, descdata); 679 descdata += addr_size; 680 681 file_ofs *= page_size; 682 683 if (gdbarch_addr_bit (gdbarch) == 32) 684 printf_filtered ("\t%10s %10s %10s %10s %s\n", 685 paddress (gdbarch, start), 686 paddress (gdbarch, end), 687 hex_string (end - start), 688 hex_string (file_ofs), 689 filenames); 690 else 691 printf_filtered (" %18s %18s %10s %10s %s\n", 692 paddress (gdbarch, start), 693 paddress (gdbarch, end), 694 hex_string (end - start), 695 hex_string (file_ofs), 696 filenames); 697 698 filenames += 1 + strlen ((char *) filenames); 699 } 700 701 do_cleanups (cleanup); 702 } 703 704 /* Implement "info proc" for a corefile. */ 705 706 static void 707 linux_core_info_proc (struct gdbarch *gdbarch, char *args, 708 enum info_proc_what what) 709 { 710 int exe_f = (what == IP_MINIMAL || what == IP_EXE || what == IP_ALL); 711 int mappings_f = (what == IP_MAPPINGS || what == IP_ALL); 712 713 if (exe_f) 714 { 715 const char *exe; 716 717 exe = bfd_core_file_failing_command (core_bfd); 718 if (exe != NULL) 719 printf_filtered ("exe = '%s'\n", exe); 720 else 721 warning (_("unable to find command name in core file")); 722 } 723 724 if (mappings_f) 725 linux_core_info_proc_mappings (gdbarch, args); 726 727 if (!exe_f && !mappings_f) 728 error (_("unable to handle request")); 729 } 730 731 typedef int linux_find_memory_region_ftype (ULONGEST vaddr, ULONGEST size, 732 ULONGEST offset, ULONGEST inode, 733 int read, int write, 734 int exec, int modified, 735 const char *filename, 736 void *data); 737 738 /* List memory regions in the inferior for a corefile. */ 739 740 static int 741 linux_find_memory_regions_full (struct gdbarch *gdbarch, 742 linux_find_memory_region_ftype *func, 743 void *obfd) 744 { 745 char mapsfilename[100]; 746 char *data; 747 748 /* We need to know the real target PID to access /proc. */ 749 if (current_inferior ()->fake_pid_p) 750 return 1; 751 752 xsnprintf (mapsfilename, sizeof mapsfilename, 753 "/proc/%d/smaps", current_inferior ()->pid); 754 data = target_fileio_read_stralloc (mapsfilename); 755 if (data == NULL) 756 { 757 /* Older Linux kernels did not support /proc/PID/smaps. */ 758 xsnprintf (mapsfilename, sizeof mapsfilename, 759 "/proc/%d/maps", current_inferior ()->pid); 760 data = target_fileio_read_stralloc (mapsfilename); 761 } 762 if (data) 763 { 764 struct cleanup *cleanup = make_cleanup (xfree, data); 765 char *line; 766 767 line = strtok (data, "\n"); 768 while (line) 769 { 770 ULONGEST addr, endaddr, offset, inode; 771 const char *permissions, *device, *filename; 772 size_t permissions_len, device_len; 773 int read, write, exec; 774 int modified = 0, has_anonymous = 0; 775 776 read_mapping (line, &addr, &endaddr, &permissions, &permissions_len, 777 &offset, &device, &device_len, &inode, &filename); 778 779 /* Decode permissions. */ 780 read = (memchr (permissions, 'r', permissions_len) != 0); 781 write = (memchr (permissions, 'w', permissions_len) != 0); 782 exec = (memchr (permissions, 'x', permissions_len) != 0); 783 784 /* Try to detect if region was modified by parsing smaps counters. */ 785 for (line = strtok (NULL, "\n"); 786 line && line[0] >= 'A' && line[0] <= 'Z'; 787 line = strtok (NULL, "\n")) 788 { 789 char keyword[64 + 1]; 790 791 if (sscanf (line, "%64s", keyword) != 1) 792 { 793 warning (_("Error parsing {s,}maps file '%s'"), mapsfilename); 794 break; 795 } 796 if (strcmp (keyword, "Anonymous:") == 0) 797 has_anonymous = 1; 798 if (strcmp (keyword, "Shared_Dirty:") == 0 799 || strcmp (keyword, "Private_Dirty:") == 0 800 || strcmp (keyword, "Swap:") == 0 801 || strcmp (keyword, "Anonymous:") == 0) 802 { 803 unsigned long number; 804 805 if (sscanf (line, "%*s%lu", &number) != 1) 806 { 807 warning (_("Error parsing {s,}maps file '%s' number"), 808 mapsfilename); 809 break; 810 } 811 if (number != 0) 812 modified = 1; 813 } 814 } 815 816 /* Older Linux kernels did not support the "Anonymous:" counter. 817 If it is missing, we can't be sure - dump all the pages. */ 818 if (!has_anonymous) 819 modified = 1; 820 821 /* Invoke the callback function to create the corefile segment. */ 822 func (addr, endaddr - addr, offset, inode, 823 read, write, exec, modified, filename, obfd); 824 } 825 826 do_cleanups (cleanup); 827 return 0; 828 } 829 830 return 1; 831 } 832 833 /* A structure for passing information through 834 linux_find_memory_regions_full. */ 835 836 struct linux_find_memory_regions_data 837 { 838 /* The original callback. */ 839 840 find_memory_region_ftype func; 841 842 /* The original datum. */ 843 844 void *obfd; 845 }; 846 847 /* A callback for linux_find_memory_regions that converts between the 848 "full"-style callback and find_memory_region_ftype. */ 849 850 static int 851 linux_find_memory_regions_thunk (ULONGEST vaddr, ULONGEST size, 852 ULONGEST offset, ULONGEST inode, 853 int read, int write, int exec, int modified, 854 const char *filename, void *arg) 855 { 856 struct linux_find_memory_regions_data *data = arg; 857 858 return data->func (vaddr, size, read, write, exec, modified, data->obfd); 859 } 860 861 /* A variant of linux_find_memory_regions_full that is suitable as the 862 gdbarch find_memory_regions method. */ 863 864 static int 865 linux_find_memory_regions (struct gdbarch *gdbarch, 866 find_memory_region_ftype func, void *obfd) 867 { 868 struct linux_find_memory_regions_data data; 869 870 data.func = func; 871 data.obfd = obfd; 872 873 return linux_find_memory_regions_full (gdbarch, 874 linux_find_memory_regions_thunk, 875 &data); 876 } 877 878 /* Determine which signal stopped execution. */ 879 880 static int 881 find_signalled_thread (struct thread_info *info, void *data) 882 { 883 if (info->suspend.stop_signal != GDB_SIGNAL_0 884 && ptid_get_pid (info->ptid) == ptid_get_pid (inferior_ptid)) 885 return 1; 886 887 return 0; 888 } 889 890 static enum gdb_signal 891 find_stop_signal (void) 892 { 893 struct thread_info *info = 894 iterate_over_threads (find_signalled_thread, NULL); 895 896 if (info) 897 return info->suspend.stop_signal; 898 else 899 return GDB_SIGNAL_0; 900 } 901 902 /* Generate corefile notes for SPU contexts. */ 903 904 static char * 905 linux_spu_make_corefile_notes (bfd *obfd, char *note_data, int *note_size) 906 { 907 static const char *spu_files[] = 908 { 909 "object-id", 910 "mem", 911 "regs", 912 "fpcr", 913 "lslr", 914 "decr", 915 "decr_status", 916 "signal1", 917 "signal1_type", 918 "signal2", 919 "signal2_type", 920 "event_mask", 921 "event_status", 922 "mbox_info", 923 "ibox_info", 924 "wbox_info", 925 "dma_info", 926 "proxydma_info", 927 }; 928 929 enum bfd_endian byte_order = gdbarch_byte_order (target_gdbarch ()); 930 gdb_byte *spu_ids; 931 LONGEST i, j, size; 932 933 /* Determine list of SPU ids. */ 934 size = target_read_alloc (¤t_target, TARGET_OBJECT_SPU, 935 NULL, &spu_ids); 936 937 /* Generate corefile notes for each SPU file. */ 938 for (i = 0; i < size; i += 4) 939 { 940 int fd = extract_unsigned_integer (spu_ids + i, 4, byte_order); 941 942 for (j = 0; j < sizeof (spu_files) / sizeof (spu_files[0]); j++) 943 { 944 char annex[32], note_name[32]; 945 gdb_byte *spu_data; 946 LONGEST spu_len; 947 948 xsnprintf (annex, sizeof annex, "%d/%s", fd, spu_files[j]); 949 spu_len = target_read_alloc (¤t_target, TARGET_OBJECT_SPU, 950 annex, &spu_data); 951 if (spu_len > 0) 952 { 953 xsnprintf (note_name, sizeof note_name, "SPU/%s", annex); 954 note_data = elfcore_write_note (obfd, note_data, note_size, 955 note_name, NT_SPU, 956 spu_data, spu_len); 957 xfree (spu_data); 958 959 if (!note_data) 960 { 961 xfree (spu_ids); 962 return NULL; 963 } 964 } 965 } 966 } 967 968 if (size > 0) 969 xfree (spu_ids); 970 971 return note_data; 972 } 973 974 /* This is used to pass information from 975 linux_make_mappings_corefile_notes through 976 linux_find_memory_regions_full. */ 977 978 struct linux_make_mappings_data 979 { 980 /* Number of files mapped. */ 981 ULONGEST file_count; 982 983 /* The obstack for the main part of the data. */ 984 struct obstack *data_obstack; 985 986 /* The filename obstack. */ 987 struct obstack *filename_obstack; 988 989 /* The architecture's "long" type. */ 990 struct type *long_type; 991 }; 992 993 static linux_find_memory_region_ftype linux_make_mappings_callback; 994 995 /* A callback for linux_find_memory_regions_full that updates the 996 mappings data for linux_make_mappings_corefile_notes. */ 997 998 static int 999 linux_make_mappings_callback (ULONGEST vaddr, ULONGEST size, 1000 ULONGEST offset, ULONGEST inode, 1001 int read, int write, int exec, int modified, 1002 const char *filename, void *data) 1003 { 1004 struct linux_make_mappings_data *map_data = data; 1005 gdb_byte buf[sizeof (ULONGEST)]; 1006 1007 if (*filename == '\0' || inode == 0) 1008 return 0; 1009 1010 ++map_data->file_count; 1011 1012 pack_long (buf, map_data->long_type, vaddr); 1013 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type)); 1014 pack_long (buf, map_data->long_type, vaddr + size); 1015 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type)); 1016 pack_long (buf, map_data->long_type, offset); 1017 obstack_grow (map_data->data_obstack, buf, TYPE_LENGTH (map_data->long_type)); 1018 1019 obstack_grow_str0 (map_data->filename_obstack, filename); 1020 1021 return 0; 1022 } 1023 1024 /* Write the file mapping data to the core file, if possible. OBFD is 1025 the output BFD. NOTE_DATA is the current note data, and NOTE_SIZE 1026 is a pointer to the note size. Returns the new NOTE_DATA and 1027 updates NOTE_SIZE. */ 1028 1029 static char * 1030 linux_make_mappings_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, 1031 char *note_data, int *note_size) 1032 { 1033 struct cleanup *cleanup; 1034 struct obstack data_obstack, filename_obstack; 1035 struct linux_make_mappings_data mapping_data; 1036 struct type *long_type 1037 = arch_integer_type (gdbarch, gdbarch_long_bit (gdbarch), 0, "long"); 1038 gdb_byte buf[sizeof (ULONGEST)]; 1039 1040 obstack_init (&data_obstack); 1041 cleanup = make_cleanup_obstack_free (&data_obstack); 1042 obstack_init (&filename_obstack); 1043 make_cleanup_obstack_free (&filename_obstack); 1044 1045 mapping_data.file_count = 0; 1046 mapping_data.data_obstack = &data_obstack; 1047 mapping_data.filename_obstack = &filename_obstack; 1048 mapping_data.long_type = long_type; 1049 1050 /* Reserve space for the count. */ 1051 obstack_blank (&data_obstack, TYPE_LENGTH (long_type)); 1052 /* We always write the page size as 1 since we have no good way to 1053 determine the correct value. */ 1054 pack_long (buf, long_type, 1); 1055 obstack_grow (&data_obstack, buf, TYPE_LENGTH (long_type)); 1056 1057 linux_find_memory_regions_full (gdbarch, linux_make_mappings_callback, 1058 &mapping_data); 1059 1060 if (mapping_data.file_count != 0) 1061 { 1062 /* Write the count to the obstack. */ 1063 pack_long ((gdb_byte *) obstack_base (&data_obstack), 1064 long_type, mapping_data.file_count); 1065 1066 /* Copy the filenames to the data obstack. */ 1067 obstack_grow (&data_obstack, obstack_base (&filename_obstack), 1068 obstack_object_size (&filename_obstack)); 1069 1070 note_data = elfcore_write_note (obfd, note_data, note_size, 1071 "CORE", NT_FILE, 1072 obstack_base (&data_obstack), 1073 obstack_object_size (&data_obstack)); 1074 } 1075 1076 do_cleanups (cleanup); 1077 return note_data; 1078 } 1079 1080 /* Records the thread's register state for the corefile note 1081 section. */ 1082 1083 static char * 1084 linux_collect_thread_registers (const struct regcache *regcache, 1085 ptid_t ptid, bfd *obfd, 1086 char *note_data, int *note_size, 1087 enum gdb_signal stop_signal) 1088 { 1089 struct gdbarch *gdbarch = get_regcache_arch (regcache); 1090 struct core_regset_section *sect_list; 1091 unsigned long lwp; 1092 1093 sect_list = gdbarch_core_regset_sections (gdbarch); 1094 gdb_assert (sect_list); 1095 1096 /* For remote targets the LWP may not be available, so use the TID. */ 1097 lwp = ptid_get_lwp (ptid); 1098 if (!lwp) 1099 lwp = ptid_get_tid (ptid); 1100 1101 while (sect_list->sect_name != NULL) 1102 { 1103 const struct regset *regset; 1104 char *buf; 1105 1106 regset = gdbarch_regset_from_core_section (gdbarch, 1107 sect_list->sect_name, 1108 sect_list->size); 1109 gdb_assert (regset && regset->collect_regset); 1110 1111 buf = xmalloc (sect_list->size); 1112 regset->collect_regset (regset, regcache, -1, buf, sect_list->size); 1113 1114 /* PRSTATUS still needs to be treated specially. */ 1115 if (strcmp (sect_list->sect_name, ".reg") == 0) 1116 note_data = (char *) elfcore_write_prstatus 1117 (obfd, note_data, note_size, lwp, 1118 gdb_signal_to_host (stop_signal), buf); 1119 else 1120 note_data = (char *) elfcore_write_register_note 1121 (obfd, note_data, note_size, 1122 sect_list->sect_name, buf, sect_list->size); 1123 xfree (buf); 1124 sect_list++; 1125 1126 if (!note_data) 1127 return NULL; 1128 } 1129 1130 return note_data; 1131 } 1132 1133 /* Fetch the siginfo data for the current thread, if it exists. If 1134 there is no data, or we could not read it, return NULL. Otherwise, 1135 return a newly malloc'd buffer holding the data and fill in *SIZE 1136 with the size of the data. The caller is responsible for freeing 1137 the data. */ 1138 1139 static gdb_byte * 1140 linux_get_siginfo_data (struct gdbarch *gdbarch, LONGEST *size) 1141 { 1142 struct type *siginfo_type; 1143 gdb_byte *buf; 1144 LONGEST bytes_read; 1145 struct cleanup *cleanups; 1146 1147 if (!gdbarch_get_siginfo_type_p (gdbarch)) 1148 return NULL; 1149 1150 siginfo_type = gdbarch_get_siginfo_type (gdbarch); 1151 1152 buf = xmalloc (TYPE_LENGTH (siginfo_type)); 1153 cleanups = make_cleanup (xfree, buf); 1154 1155 bytes_read = target_read (¤t_target, TARGET_OBJECT_SIGNAL_INFO, NULL, 1156 buf, 0, TYPE_LENGTH (siginfo_type)); 1157 if (bytes_read == TYPE_LENGTH (siginfo_type)) 1158 { 1159 discard_cleanups (cleanups); 1160 *size = bytes_read; 1161 } 1162 else 1163 { 1164 do_cleanups (cleanups); 1165 buf = NULL; 1166 } 1167 1168 return buf; 1169 } 1170 1171 struct linux_corefile_thread_data 1172 { 1173 struct gdbarch *gdbarch; 1174 int pid; 1175 bfd *obfd; 1176 char *note_data; 1177 int *note_size; 1178 enum gdb_signal stop_signal; 1179 linux_collect_thread_registers_ftype collect; 1180 }; 1181 1182 /* Called by gdbthread.c once per thread. Records the thread's 1183 register state for the corefile note section. */ 1184 1185 static int 1186 linux_corefile_thread_callback (struct thread_info *info, void *data) 1187 { 1188 struct linux_corefile_thread_data *args = data; 1189 1190 if (ptid_get_pid (info->ptid) == args->pid) 1191 { 1192 struct cleanup *old_chain; 1193 struct regcache *regcache; 1194 gdb_byte *siginfo_data; 1195 LONGEST siginfo_size = 0; 1196 1197 regcache = get_thread_arch_regcache (info->ptid, args->gdbarch); 1198 1199 old_chain = save_inferior_ptid (); 1200 inferior_ptid = info->ptid; 1201 target_fetch_registers (regcache, -1); 1202 siginfo_data = linux_get_siginfo_data (args->gdbarch, &siginfo_size); 1203 do_cleanups (old_chain); 1204 1205 old_chain = make_cleanup (xfree, siginfo_data); 1206 1207 args->note_data = args->collect (regcache, info->ptid, args->obfd, 1208 args->note_data, args->note_size, 1209 args->stop_signal); 1210 1211 /* Don't return anything if we got no register information above, 1212 such a core file is useless. */ 1213 if (args->note_data != NULL) 1214 if (siginfo_data != NULL) 1215 args->note_data = elfcore_write_note (args->obfd, 1216 args->note_data, 1217 args->note_size, 1218 "CORE", NT_SIGINFO, 1219 siginfo_data, siginfo_size); 1220 1221 do_cleanups (old_chain); 1222 } 1223 1224 return !args->note_data; 1225 } 1226 1227 /* Fill the PRPSINFO structure with information about the process being 1228 debugged. Returns 1 in case of success, 0 for failures. Please note that 1229 even if the structure cannot be entirely filled (e.g., GDB was unable to 1230 gather information about the process UID/GID), this function will still 1231 return 1 since some information was already recorded. It will only return 1232 0 iff nothing can be gathered. */ 1233 1234 static int 1235 linux_fill_prpsinfo (struct elf_internal_linux_prpsinfo *p) 1236 { 1237 /* The filename which we will use to obtain some info about the process. 1238 We will basically use this to store the `/proc/PID/FILENAME' file. */ 1239 char filename[100]; 1240 /* The full name of the program which generated the corefile. */ 1241 char *fname; 1242 /* The basename of the executable. */ 1243 const char *basename; 1244 /* The arguments of the program. */ 1245 char *psargs; 1246 char *infargs; 1247 /* The contents of `/proc/PID/stat' and `/proc/PID/status' files. */ 1248 char *proc_stat, *proc_status; 1249 /* Temporary buffer. */ 1250 char *tmpstr; 1251 /* The valid states of a process, according to the Linux kernel. */ 1252 const char valid_states[] = "RSDTZW"; 1253 /* The program state. */ 1254 const char *prog_state; 1255 /* The state of the process. */ 1256 char pr_sname; 1257 /* The PID of the program which generated the corefile. */ 1258 pid_t pid; 1259 /* Process flags. */ 1260 unsigned int pr_flag; 1261 /* Process nice value. */ 1262 long pr_nice; 1263 /* The number of fields read by `sscanf'. */ 1264 int n_fields = 0; 1265 /* Cleanups. */ 1266 struct cleanup *c; 1267 int i; 1268 1269 gdb_assert (p != NULL); 1270 1271 /* Obtaining PID and filename. */ 1272 pid = ptid_get_pid (inferior_ptid); 1273 xsnprintf (filename, sizeof (filename), "/proc/%d/cmdline", (int) pid); 1274 fname = target_fileio_read_stralloc (filename); 1275 1276 if (fname == NULL || *fname == '\0') 1277 { 1278 /* No program name was read, so we won't be able to retrieve more 1279 information about the process. */ 1280 xfree (fname); 1281 return 0; 1282 } 1283 1284 c = make_cleanup (xfree, fname); 1285 memset (p, 0, sizeof (*p)); 1286 1287 /* Defining the PID. */ 1288 p->pr_pid = pid; 1289 1290 /* Copying the program name. Only the basename matters. */ 1291 basename = lbasename (fname); 1292 strncpy (p->pr_fname, basename, sizeof (p->pr_fname)); 1293 p->pr_fname[sizeof (p->pr_fname) - 1] = '\0'; 1294 1295 infargs = get_inferior_args (); 1296 1297 psargs = xstrdup (fname); 1298 if (infargs != NULL) 1299 psargs = reconcat (psargs, psargs, " ", infargs, NULL); 1300 1301 make_cleanup (xfree, psargs); 1302 1303 strncpy (p->pr_psargs, psargs, sizeof (p->pr_psargs)); 1304 p->pr_psargs[sizeof (p->pr_psargs) - 1] = '\0'; 1305 1306 xsnprintf (filename, sizeof (filename), "/proc/%d/stat", (int) pid); 1307 proc_stat = target_fileio_read_stralloc (filename); 1308 make_cleanup (xfree, proc_stat); 1309 1310 if (proc_stat == NULL || *proc_stat == '\0') 1311 { 1312 /* Despite being unable to read more information about the 1313 process, we return 1 here because at least we have its 1314 command line, PID and arguments. */ 1315 do_cleanups (c); 1316 return 1; 1317 } 1318 1319 /* Ok, we have the stats. It's time to do a little parsing of the 1320 contents of the buffer, so that we end up reading what we want. 1321 1322 The following parsing mechanism is strongly based on the 1323 information generated by the `fs/proc/array.c' file, present in 1324 the Linux kernel tree. More details about how the information is 1325 displayed can be obtained by seeing the manpage of proc(5), 1326 specifically under the entry of `/proc/[pid]/stat'. */ 1327 1328 /* Getting rid of the PID, since we already have it. */ 1329 while (isdigit (*proc_stat)) 1330 ++proc_stat; 1331 1332 proc_stat = skip_spaces (proc_stat); 1333 1334 /* Getting rid of the executable name, since we already have it. We 1335 know that this name will be in parentheses, so we can safely look 1336 for the close-paren. */ 1337 while (*proc_stat != ')') 1338 ++proc_stat; 1339 ++proc_stat; 1340 1341 proc_stat = skip_spaces (proc_stat); 1342 1343 n_fields = sscanf (proc_stat, 1344 "%c" /* Process state. */ 1345 "%d%d%d" /* Parent PID, group ID, session ID. */ 1346 "%*d%*d" /* tty_nr, tpgid (not used). */ 1347 "%u" /* Flags. */ 1348 "%*s%*s%*s%*s" /* minflt, cminflt, majflt, 1349 cmajflt (not used). */ 1350 "%*s%*s%*s%*s" /* utime, stime, cutime, 1351 cstime (not used). */ 1352 "%*s" /* Priority (not used). */ 1353 "%ld", /* Nice. */ 1354 &pr_sname, 1355 &p->pr_ppid, &p->pr_pgrp, &p->pr_sid, 1356 &pr_flag, 1357 &pr_nice); 1358 1359 if (n_fields != 6) 1360 { 1361 /* Again, we couldn't read the complementary information about 1362 the process state. However, we already have minimal 1363 information, so we just return 1 here. */ 1364 do_cleanups (c); 1365 return 1; 1366 } 1367 1368 /* Filling the structure fields. */ 1369 prog_state = strchr (valid_states, pr_sname); 1370 if (prog_state != NULL) 1371 p->pr_state = prog_state - valid_states; 1372 else 1373 { 1374 /* Zero means "Running". */ 1375 p->pr_state = 0; 1376 } 1377 1378 p->pr_sname = p->pr_state > 5 ? '.' : pr_sname; 1379 p->pr_zomb = p->pr_sname == 'Z'; 1380 p->pr_nice = pr_nice; 1381 p->pr_flag = pr_flag; 1382 1383 /* Finally, obtaining the UID and GID. For that, we read and parse the 1384 contents of the `/proc/PID/status' file. */ 1385 xsnprintf (filename, sizeof (filename), "/proc/%d/status", (int) pid); 1386 proc_status = target_fileio_read_stralloc (filename); 1387 make_cleanup (xfree, proc_status); 1388 1389 if (proc_status == NULL || *proc_status == '\0') 1390 { 1391 /* Returning 1 since we already have a bunch of information. */ 1392 do_cleanups (c); 1393 return 1; 1394 } 1395 1396 /* Extracting the UID. */ 1397 tmpstr = strstr (proc_status, "Uid:"); 1398 if (tmpstr != NULL) 1399 { 1400 /* Advancing the pointer to the beginning of the UID. */ 1401 tmpstr += sizeof ("Uid:"); 1402 while (*tmpstr != '\0' && !isdigit (*tmpstr)) 1403 ++tmpstr; 1404 1405 if (isdigit (*tmpstr)) 1406 p->pr_uid = strtol (tmpstr, &tmpstr, 10); 1407 } 1408 1409 /* Extracting the GID. */ 1410 tmpstr = strstr (proc_status, "Gid:"); 1411 if (tmpstr != NULL) 1412 { 1413 /* Advancing the pointer to the beginning of the GID. */ 1414 tmpstr += sizeof ("Gid:"); 1415 while (*tmpstr != '\0' && !isdigit (*tmpstr)) 1416 ++tmpstr; 1417 1418 if (isdigit (*tmpstr)) 1419 p->pr_gid = strtol (tmpstr, &tmpstr, 10); 1420 } 1421 1422 do_cleanups (c); 1423 1424 return 1; 1425 } 1426 1427 /* Fills the "to_make_corefile_note" target vector. Builds the note 1428 section for a corefile, and returns it in a malloc buffer. */ 1429 1430 char * 1431 linux_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size, 1432 linux_collect_thread_registers_ftype collect) 1433 { 1434 struct linux_corefile_thread_data thread_args; 1435 struct elf_internal_linux_prpsinfo prpsinfo; 1436 char *note_data = NULL; 1437 gdb_byte *auxv; 1438 int auxv_len; 1439 1440 if (linux_fill_prpsinfo (&prpsinfo)) 1441 { 1442 if (gdbarch_elfcore_write_linux_prpsinfo_p (gdbarch)) 1443 { 1444 note_data = gdbarch_elfcore_write_linux_prpsinfo (gdbarch, obfd, 1445 note_data, note_size, 1446 &prpsinfo); 1447 } 1448 else 1449 { 1450 if (gdbarch_ptr_bit (gdbarch) == 64) 1451 note_data = elfcore_write_linux_prpsinfo64 (obfd, 1452 note_data, note_size, 1453 &prpsinfo); 1454 else 1455 note_data = elfcore_write_linux_prpsinfo32 (obfd, 1456 note_data, note_size, 1457 &prpsinfo); 1458 } 1459 } 1460 1461 /* Thread register information. */ 1462 thread_args.gdbarch = gdbarch; 1463 thread_args.pid = ptid_get_pid (inferior_ptid); 1464 thread_args.obfd = obfd; 1465 thread_args.note_data = note_data; 1466 thread_args.note_size = note_size; 1467 thread_args.stop_signal = find_stop_signal (); 1468 thread_args.collect = collect; 1469 iterate_over_threads (linux_corefile_thread_callback, &thread_args); 1470 note_data = thread_args.note_data; 1471 if (!note_data) 1472 return NULL; 1473 1474 /* Auxillary vector. */ 1475 auxv_len = target_read_alloc (¤t_target, TARGET_OBJECT_AUXV, 1476 NULL, &auxv); 1477 if (auxv_len > 0) 1478 { 1479 note_data = elfcore_write_note (obfd, note_data, note_size, 1480 "CORE", NT_AUXV, auxv, auxv_len); 1481 xfree (auxv); 1482 1483 if (!note_data) 1484 return NULL; 1485 } 1486 1487 /* SPU information. */ 1488 note_data = linux_spu_make_corefile_notes (obfd, note_data, note_size); 1489 if (!note_data) 1490 return NULL; 1491 1492 /* File mappings. */ 1493 note_data = linux_make_mappings_corefile_notes (gdbarch, obfd, 1494 note_data, note_size); 1495 1496 make_cleanup (xfree, note_data); 1497 return note_data; 1498 } 1499 1500 static char * 1501 linux_make_corefile_notes_1 (struct gdbarch *gdbarch, bfd *obfd, int *note_size) 1502 { 1503 /* FIXME: uweigand/2011-10-06: Once all GNU/Linux architectures have been 1504 converted to gdbarch_core_regset_sections, we no longer need to fall back 1505 to the target method at this point. */ 1506 1507 if (!gdbarch_core_regset_sections (gdbarch)) 1508 return target_make_corefile_notes (obfd, note_size); 1509 else 1510 return linux_make_corefile_notes (gdbarch, obfd, note_size, 1511 linux_collect_thread_registers); 1512 } 1513 1514 /* Implementation of `gdbarch_gdb_signal_from_target', as defined in 1515 gdbarch.h. This function is not static because it is exported to 1516 other -tdep files. */ 1517 1518 enum gdb_signal 1519 linux_gdb_signal_from_target (struct gdbarch *gdbarch, int signal) 1520 { 1521 switch (signal) 1522 { 1523 case 0: 1524 return GDB_SIGNAL_0; 1525 1526 case LINUX_SIGHUP: 1527 return GDB_SIGNAL_HUP; 1528 1529 case LINUX_SIGINT: 1530 return GDB_SIGNAL_INT; 1531 1532 case LINUX_SIGQUIT: 1533 return GDB_SIGNAL_QUIT; 1534 1535 case LINUX_SIGILL: 1536 return GDB_SIGNAL_ILL; 1537 1538 case LINUX_SIGTRAP: 1539 return GDB_SIGNAL_TRAP; 1540 1541 case LINUX_SIGABRT: 1542 return GDB_SIGNAL_ABRT; 1543 1544 case LINUX_SIGBUS: 1545 return GDB_SIGNAL_BUS; 1546 1547 case LINUX_SIGFPE: 1548 return GDB_SIGNAL_FPE; 1549 1550 case LINUX_SIGKILL: 1551 return GDB_SIGNAL_KILL; 1552 1553 case LINUX_SIGUSR1: 1554 return GDB_SIGNAL_USR1; 1555 1556 case LINUX_SIGSEGV: 1557 return GDB_SIGNAL_SEGV; 1558 1559 case LINUX_SIGUSR2: 1560 return GDB_SIGNAL_USR2; 1561 1562 case LINUX_SIGPIPE: 1563 return GDB_SIGNAL_PIPE; 1564 1565 case LINUX_SIGALRM: 1566 return GDB_SIGNAL_ALRM; 1567 1568 case LINUX_SIGTERM: 1569 return GDB_SIGNAL_TERM; 1570 1571 case LINUX_SIGCHLD: 1572 return GDB_SIGNAL_CHLD; 1573 1574 case LINUX_SIGCONT: 1575 return GDB_SIGNAL_CONT; 1576 1577 case LINUX_SIGSTOP: 1578 return GDB_SIGNAL_STOP; 1579 1580 case LINUX_SIGTSTP: 1581 return GDB_SIGNAL_TSTP; 1582 1583 case LINUX_SIGTTIN: 1584 return GDB_SIGNAL_TTIN; 1585 1586 case LINUX_SIGTTOU: 1587 return GDB_SIGNAL_TTOU; 1588 1589 case LINUX_SIGURG: 1590 return GDB_SIGNAL_URG; 1591 1592 case LINUX_SIGXCPU: 1593 return GDB_SIGNAL_XCPU; 1594 1595 case LINUX_SIGXFSZ: 1596 return GDB_SIGNAL_XFSZ; 1597 1598 case LINUX_SIGVTALRM: 1599 return GDB_SIGNAL_VTALRM; 1600 1601 case LINUX_SIGPROF: 1602 return GDB_SIGNAL_PROF; 1603 1604 case LINUX_SIGWINCH: 1605 return GDB_SIGNAL_WINCH; 1606 1607 /* No way to differentiate between SIGIO and SIGPOLL. 1608 Therefore, we just handle the first one. */ 1609 case LINUX_SIGIO: 1610 return GDB_SIGNAL_IO; 1611 1612 case LINUX_SIGPWR: 1613 return GDB_SIGNAL_PWR; 1614 1615 case LINUX_SIGSYS: 1616 return GDB_SIGNAL_SYS; 1617 1618 /* SIGRTMIN and SIGRTMAX are not continuous in <gdb/signals.def>, 1619 therefore we have to handle them here. */ 1620 case LINUX_SIGRTMIN: 1621 return GDB_SIGNAL_REALTIME_32; 1622 1623 case LINUX_SIGRTMAX: 1624 return GDB_SIGNAL_REALTIME_64; 1625 } 1626 1627 if (signal >= LINUX_SIGRTMIN + 1 && signal <= LINUX_SIGRTMAX - 1) 1628 { 1629 int offset = signal - LINUX_SIGRTMIN + 1; 1630 1631 return (enum gdb_signal) ((int) GDB_SIGNAL_REALTIME_33 + offset); 1632 } 1633 1634 return GDB_SIGNAL_UNKNOWN; 1635 } 1636 1637 /* Implementation of `gdbarch_gdb_signal_to_target', as defined in 1638 gdbarch.h. This function is not static because it is exported to 1639 other -tdep files. */ 1640 1641 int 1642 linux_gdb_signal_to_target (struct gdbarch *gdbarch, 1643 enum gdb_signal signal) 1644 { 1645 switch (signal) 1646 { 1647 case GDB_SIGNAL_0: 1648 return 0; 1649 1650 case GDB_SIGNAL_HUP: 1651 return LINUX_SIGHUP; 1652 1653 case GDB_SIGNAL_INT: 1654 return LINUX_SIGINT; 1655 1656 case GDB_SIGNAL_QUIT: 1657 return LINUX_SIGQUIT; 1658 1659 case GDB_SIGNAL_ILL: 1660 return LINUX_SIGILL; 1661 1662 case GDB_SIGNAL_TRAP: 1663 return LINUX_SIGTRAP; 1664 1665 case GDB_SIGNAL_ABRT: 1666 return LINUX_SIGABRT; 1667 1668 case GDB_SIGNAL_FPE: 1669 return LINUX_SIGFPE; 1670 1671 case GDB_SIGNAL_KILL: 1672 return LINUX_SIGKILL; 1673 1674 case GDB_SIGNAL_BUS: 1675 return LINUX_SIGBUS; 1676 1677 case GDB_SIGNAL_SEGV: 1678 return LINUX_SIGSEGV; 1679 1680 case GDB_SIGNAL_SYS: 1681 return LINUX_SIGSYS; 1682 1683 case GDB_SIGNAL_PIPE: 1684 return LINUX_SIGPIPE; 1685 1686 case GDB_SIGNAL_ALRM: 1687 return LINUX_SIGALRM; 1688 1689 case GDB_SIGNAL_TERM: 1690 return LINUX_SIGTERM; 1691 1692 case GDB_SIGNAL_URG: 1693 return LINUX_SIGURG; 1694 1695 case GDB_SIGNAL_STOP: 1696 return LINUX_SIGSTOP; 1697 1698 case GDB_SIGNAL_TSTP: 1699 return LINUX_SIGTSTP; 1700 1701 case GDB_SIGNAL_CONT: 1702 return LINUX_SIGCONT; 1703 1704 case GDB_SIGNAL_CHLD: 1705 return LINUX_SIGCHLD; 1706 1707 case GDB_SIGNAL_TTIN: 1708 return LINUX_SIGTTIN; 1709 1710 case GDB_SIGNAL_TTOU: 1711 return LINUX_SIGTTOU; 1712 1713 case GDB_SIGNAL_IO: 1714 return LINUX_SIGIO; 1715 1716 case GDB_SIGNAL_XCPU: 1717 return LINUX_SIGXCPU; 1718 1719 case GDB_SIGNAL_XFSZ: 1720 return LINUX_SIGXFSZ; 1721 1722 case GDB_SIGNAL_VTALRM: 1723 return LINUX_SIGVTALRM; 1724 1725 case GDB_SIGNAL_PROF: 1726 return LINUX_SIGPROF; 1727 1728 case GDB_SIGNAL_WINCH: 1729 return LINUX_SIGWINCH; 1730 1731 case GDB_SIGNAL_USR1: 1732 return LINUX_SIGUSR1; 1733 1734 case GDB_SIGNAL_USR2: 1735 return LINUX_SIGUSR2; 1736 1737 case GDB_SIGNAL_PWR: 1738 return LINUX_SIGPWR; 1739 1740 case GDB_SIGNAL_POLL: 1741 return LINUX_SIGPOLL; 1742 1743 /* GDB_SIGNAL_REALTIME_32 is not continuous in <gdb/signals.def>, 1744 therefore we have to handle it here. */ 1745 case GDB_SIGNAL_REALTIME_32: 1746 return LINUX_SIGRTMIN; 1747 1748 /* Same comment applies to _64. */ 1749 case GDB_SIGNAL_REALTIME_64: 1750 return LINUX_SIGRTMAX; 1751 } 1752 1753 /* GDB_SIGNAL_REALTIME_33 to _64 are continuous. */ 1754 if (signal >= GDB_SIGNAL_REALTIME_33 1755 && signal <= GDB_SIGNAL_REALTIME_63) 1756 { 1757 int offset = signal - GDB_SIGNAL_REALTIME_33; 1758 1759 return LINUX_SIGRTMIN + 1 + offset; 1760 } 1761 1762 return -1; 1763 } 1764 1765 /* To be called from the various GDB_OSABI_LINUX handlers for the 1766 various GNU/Linux architectures and machine types. */ 1767 1768 void 1769 linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) 1770 { 1771 set_gdbarch_core_pid_to_str (gdbarch, linux_core_pid_to_str); 1772 set_gdbarch_info_proc (gdbarch, linux_info_proc); 1773 set_gdbarch_core_info_proc (gdbarch, linux_core_info_proc); 1774 set_gdbarch_find_memory_regions (gdbarch, linux_find_memory_regions); 1775 set_gdbarch_make_corefile_notes (gdbarch, linux_make_corefile_notes_1); 1776 set_gdbarch_has_shared_address_space (gdbarch, 1777 linux_has_shared_address_space); 1778 set_gdbarch_gdb_signal_from_target (gdbarch, 1779 linux_gdb_signal_from_target); 1780 set_gdbarch_gdb_signal_to_target (gdbarch, 1781 linux_gdb_signal_to_target); 1782 } 1783 1784 /* Provide a prototype to silence -Wmissing-prototypes. */ 1785 extern initialize_file_ftype _initialize_linux_tdep; 1786 1787 void 1788 _initialize_linux_tdep (void) 1789 { 1790 linux_gdbarch_data_handle = 1791 gdbarch_data_register_post_init (init_linux_gdbarch_data); 1792 } 1793