1 /*--------------------------------------------------------------------*/ 2 /*--- Relay between gdb and gdbserver embedded in valgrind vgdb.c ---*/ 3 /*--------------------------------------------------------------------*/ 4 5 /* 6 This file is part of Valgrind, a dynamic binary instrumentation 7 framework. 8 9 Copyright (C) 2011-2012 Philippe Waroquiers 10 11 This program is free software; you can redistribute it and/or 12 modify it under the terms of the GNU General Public License as 13 published by the Free Software Foundation; either version 2 of the 14 License, or (at your option) any later version. 15 16 This program is distributed in the hope that it will be useful, but 17 WITHOUT ANY WARRANTY; without even the implied warranty of 18 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 General Public License for more details. 20 21 You should have received a copy of the GNU General Public License 22 along with this program; if not, write to the Free Software 23 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 24 02111-1307, USA. 25 26 The GNU General Public License is contained in the file COPYING. 27 */ 28 29 #include "pub_core_basics.h" 30 #include "pub_core_vki.h" 31 #include "pub_core_libcsetjmp.h" 32 #include "pub_core_threadstate.h" 33 #include "pub_core_gdbserver.h" 34 #include "config.h" 35 36 #include <limits.h> 37 #include <unistd.h> 38 #include <string.h> 39 #include <poll.h> 40 #include <pthread.h> 41 #include <stdlib.h> 42 #include <stdio.h> 43 #include <fcntl.h> 44 #include <dirent.h> 45 #include <sys/stat.h> 46 #include <sys/time.h> 47 #include <errno.h> 48 #include <signal.h> 49 #include <sys/types.h> 50 #include <sys/socket.h> 51 #include <netinet/in.h> 52 #include <arpa/inet.h> 53 #include <sys/mman.h> 54 #include <sys/ptrace.h> 55 #include <sys/wait.h> 56 #include <assert.h> 57 /* vgdb has two usages: 58 1. relay application between gdb and the gdbserver embedded in valgrind. 59 2. standalone to send monitor commands to a running valgrind-ified process 60 61 It is made of a main program which reads arguments. If no 62 arguments are given or only --pid and --vgdb-prefix, then usage 1 is 63 assumed. 64 65 As relay application, vgdb reads bytes from gdb on stdin and 66 writes these bytes to valgrind. Bytes read from valgrind are 67 written to gdb on stdout. Read/Write from/to valgrind is done 68 using FIFOs. There is one thread reading from stdin, writing to 69 valgrind on a FIFO. There is one thread reading from valgrind on a 70 FIFO, writing to gdb on stdout 71 72 As a standalone utility, vgdb builds command packets to write to valgrind, 73 sends it and reads the reply. The same two threads are used to write/read. 74 Once all the commands are sent and their replies received, vgdb will exit. 75 76 */ 77 78 /* define PTRACEINVOKER to compile the ptrace related code 79 which ensures a valgrind process blocked in a system call 80 can be "waken up". PTRACEINVOKER implies some architecture 81 specific code and/or some OS specific code. */ 82 #if defined(VGA_arm) || defined(VGA_x86) || defined(VGA_amd64) \ 83 || defined(VGA_ppc32) || defined(VGA_ppc64) || defined(VGA_s390x) \ 84 || defined(VGP_mips32_linux) 85 #define PTRACEINVOKER 86 #else 87 I_die_here : (PTRACEINVOKER) architecture missing in vgdb.c 88 #endif 89 90 /* Some darwin specific stuff is needed as ptrace is not 91 fully supported on MacOS. Till we find someone courageous 92 having access to Darwin, there is no PTRACEINVOKER. */ 93 #if defined(VGO_darwin) 94 #undef PTRACEINVOKER 95 #endif 96 97 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) 98 #undef PTRACEINVOKER 99 #endif 100 101 #if defined(PTRACEINVOKER) 102 #include <sys/user.h> 103 #if defined(VGO_linux) 104 # include <sys/prctl.h> 105 # include <linux/ptrace.h> 106 #endif 107 #endif 108 109 110 // Outputs information for the user about ptrace_scope protection 111 // or ptrace not working. 112 static void ptrace_restrictions_msg(void); 113 114 static int debuglevel; 115 static struct timeval dbgtv; 116 /* if level <= debuglevel, print timestamp, then print provided by debug info */ 117 #define DEBUG(level, ...) (level <= debuglevel ? \ 118 gettimeofday(&dbgtv, NULL), \ 119 fprintf(stderr, "%ld.%6.6ld ", \ 120 (long int)dbgtv.tv_sec, \ 121 (long int)dbgtv.tv_usec), \ 122 fprintf(stderr, __VA_ARGS__),fflush(stderr) \ 123 : 0) 124 125 /* same as DEBUG but does not print time stamp info */ 126 #define PDEBUG(level, ...) (level <= debuglevel ? \ 127 fprintf(stderr, __VA_ARGS__),fflush(stderr) \ 128 : 0) 129 130 /* if errno != 0, 131 report the errno and fprintf the ... varargs on stderr. */ 132 #define ERROR(errno, ...) ((errno == 0 ? 0 : perror("syscall failed")), \ 133 fprintf(stderr, __VA_ARGS__), \ 134 fflush(stderr)) 135 /* same as ERROR, but also exits with status 1 */ 136 #define XERROR(errno, ...) ((errno == 0 ? 0 : perror("syscall failed")), \ 137 fprintf(stderr, __VA_ARGS__), \ 138 fflush(stderr), \ 139 exit(1)) 140 141 static char *vgdb_prefix = NULL; 142 143 /* Will be set to True when any condition indicating we have to shutdown 144 is encountered. */ 145 static Bool shutting_down = False; 146 147 static VgdbShared32 *shared32; 148 static VgdbShared64 *shared64; 149 #define VS_written_by_vgdb (shared32 != NULL ? \ 150 shared32->written_by_vgdb \ 151 : shared64->written_by_vgdb) 152 #define VS_seen_by_valgrind (shared32 != NULL ? \ 153 shared32->seen_by_valgrind \ 154 : shared64->seen_by_valgrind) 155 156 #define VS_vgdb_pid (shared32 != NULL ? shared32->vgdb_pid : shared64->vgdb_pid) 157 158 /* Calls malloc (size). Exits if memory can't be allocated. */ 159 static 160 void *vmalloc(size_t size) 161 { 162 void * mem = malloc(size); 163 if (mem == NULL) 164 XERROR (errno, "can't allocate memory\n"); 165 return mem; 166 } 167 168 /* Calls realloc (size). Exits if memory can't be allocated. */ 169 static 170 void *vrealloc(void *ptr,size_t size) 171 { 172 void * mem = realloc(ptr, size); 173 if (mem == NULL) 174 XERROR (errno, "can't reallocate memory\n"); 175 return mem; 176 } 177 178 /* Return the name of a directory for temporary files. */ 179 static 180 const char *vgdb_tmpdir(void) 181 { 182 const char *tmpdir; 183 184 tmpdir = getenv("TMPDIR"); 185 if (tmpdir == NULL || *tmpdir == '\0') 186 tmpdir = VG_TMPDIR; 187 if (tmpdir == NULL || *tmpdir == '\0') 188 tmpdir = "/tmp"; /* fallback */ 189 190 return tmpdir; 191 } 192 193 /* Return the default path prefix for the named pipes (FIFOs) used by vgdb/gdb 194 to communicate with valgrind */ 195 static 196 char *vgdb_prefix_default(void) 197 { 198 static HChar *prefix; 199 200 if (prefix == NULL) { 201 const char *tmpdir = vgdb_tmpdir(); 202 prefix = vmalloc(strlen(tmpdir) + strlen("/vgdb-pipe") + 1); 203 strcpy(prefix, tmpdir); 204 strcat(prefix, "/vgdb-pipe"); 205 } 206 return prefix; 207 } 208 209 /* add nrw to the written_by_vgdb field of shared32 or shared64 */ 210 static 211 void add_written(int nrw) 212 { 213 if (shared32 != NULL) 214 shared32->written_by_vgdb += nrw; 215 else if (shared64 != NULL) 216 shared64->written_by_vgdb += nrw; 217 else 218 assert(0); 219 } 220 221 static int shared_mem_fd = -1; 222 static 223 void map_vgdbshared (char* shared_mem) 224 { 225 struct stat fdstat; 226 void **s; 227 shared_mem_fd = open(shared_mem, O_RDWR); 228 /* shared_mem_fd will not be closed till vgdb exits. */ 229 230 if (shared_mem_fd == -1) 231 XERROR (errno, "error opening %s shared memory file\n", shared_mem); 232 233 if (fstat(shared_mem_fd, &fdstat) != 0) 234 XERROR (errno, "fstat"); 235 236 if (fdstat.st_size == sizeof(VgdbShared64)) 237 s = (void*) &shared64; 238 else if (fdstat.st_size == sizeof(VgdbShared32)) 239 s = (void*) &shared32; 240 else 241 #if VEX_HOST_WORDSIZE == 8 242 XERROR (0, 243 "error size shared memory file %s.\n" 244 "expecting size %d (64bits) or %d (32bits) got %ld.\n", 245 shared_mem, 246 (int) sizeof(VgdbShared64), (int) sizeof(VgdbShared32), 247 (long int)fdstat.st_size); 248 #elif VEX_HOST_WORDSIZE == 4 249 XERROR (0, 250 "error size shared memory file %s.\n" 251 "expecting size %d (32bits) got %ld.\n", 252 shared_mem, 253 (int) sizeof(VgdbShared32), 254 fdstat.st_size); 255 #else 256 # error "unexpected wordsize" 257 #endif 258 259 #if VEX_HOST_WORDSIZE == 4 260 if (shared64 != NULL) 261 XERROR (0, "cannot use 32 bits vgdb with a 64bits valgrind process\n"); 262 /* But we can use a 64 bits vgdb with a 32 bits valgrind */ 263 #endif 264 265 *s = (void*) mmap (NULL, fdstat.st_size, 266 PROT_READ|PROT_WRITE, MAP_SHARED, 267 shared_mem_fd, 0); 268 269 if (*s == (void *) -1) 270 XERROR (errno, "error mmap shared memory file %s\n", shared_mem); 271 272 } 273 274 #if VEX_HOST_WORDSIZE == 8 275 typedef Addr64 CORE_ADDR; 276 typedef Addr64 PTRACE_XFER_TYPE; 277 typedef void* PTRACE_ARG3_TYPE; 278 #elif VEX_HOST_WORDSIZE == 4 279 typedef Addr32 CORE_ADDR; 280 typedef Addr32 PTRACE_XFER_TYPE; 281 typedef void* PTRACE_ARG3_TYPE; 282 #else 283 # error "unexpected wordsize" 284 #endif 285 286 static Bool pid_of_save_regs_continued = False; 287 // True if we have continued pid_of_save_regs after PTRACE_ATTACH 288 289 static Bool dying = False; 290 // Set to True when loss of connection indicating that the Valgrind 291 // process is dying. 292 293 /* To be called when connection with valgrind is lost. In case we 294 have lost the connection, it means that Valgrind has closed the 295 connection and is busy exiting. We can't and don't have to stop it in 296 this case. */ 297 static 298 void valgrind_dying(void) 299 { 300 pid_of_save_regs_continued = False; 301 dying = True; 302 } 303 304 305 #ifdef PTRACEINVOKER 306 /* ptrace_(read|write)_memory are modified extracts of linux-low.c 307 from gdb 6.6. Copyrighted FSF */ 308 /* Copy LEN bytes from inferior's memory starting at MEMADDR 309 to debugger memory starting at MYADDR. */ 310 311 static 312 int ptrace_read_memory (pid_t inferior_pid, CORE_ADDR memaddr, 313 unsigned char *myaddr, int len) 314 { 315 register int i; 316 /* Round starting address down to longword boundary. */ 317 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); 318 /* Round ending address up; get number of longwords that makes. */ 319 register int count 320 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) 321 / sizeof (PTRACE_XFER_TYPE); 322 /* Allocate buffer of that many longwords. */ 323 register PTRACE_XFER_TYPE *buffer 324 = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE)); 325 326 /* Read all the longwords */ 327 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) { 328 errno = 0; 329 buffer[i] = ptrace (PTRACE_PEEKTEXT, inferior_pid, 330 (PTRACE_ARG3_TYPE) addr, 0); 331 if (errno) 332 return errno; 333 } 334 335 /* Copy appropriate bytes out of the buffer. */ 336 memcpy (myaddr, 337 (char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), len); 338 339 return 0; 340 } 341 342 /* Copy LEN bytes of data from debugger memory at MYADDR 343 to inferior's memory at MEMADDR. 344 On failure (cannot write the inferior) 345 returns the value of errno. */ 346 __attribute__((unused)) /* not used on all platforms */ 347 static 348 int ptrace_write_memory (pid_t inferior_pid, CORE_ADDR memaddr, 349 const unsigned char *myaddr, int len) 350 { 351 register int i; 352 /* Round starting address down to longword boundary. */ 353 register CORE_ADDR addr = memaddr & -(CORE_ADDR) sizeof (PTRACE_XFER_TYPE); 354 /* Round ending address up; get number of longwords that makes. */ 355 register int count 356 = (((memaddr + len) - addr) + sizeof (PTRACE_XFER_TYPE) - 1) 357 / sizeof (PTRACE_XFER_TYPE); 358 /* Allocate buffer of that many longwords. */ 359 register PTRACE_XFER_TYPE *buffer 360 = (PTRACE_XFER_TYPE *) alloca (count * sizeof (PTRACE_XFER_TYPE)); 361 362 if (debuglevel >= 1) { 363 DEBUG (1, "Writing "); 364 for (i = 0; i < len; i++) 365 PDEBUG (1, "%02x", (unsigned)myaddr[i]); 366 PDEBUG(1, " to %p\n", (void *) memaddr); 367 } 368 369 /* Fill start and end extra bytes of buffer with existing memory data. */ 370 371 buffer[0] = ptrace (PTRACE_PEEKTEXT, inferior_pid, 372 (PTRACE_ARG3_TYPE) addr, 0); 373 374 if (count > 1) { 375 buffer[count - 1] 376 = ptrace (PTRACE_PEEKTEXT, inferior_pid, 377 (PTRACE_ARG3_TYPE) (addr + (count - 1) 378 * sizeof (PTRACE_XFER_TYPE)), 379 0); 380 } 381 382 /* Copy data to be written over corresponding part of buffer */ 383 384 memcpy ((char *) buffer + (memaddr & (sizeof (PTRACE_XFER_TYPE) - 1)), 385 myaddr, len); 386 387 /* Write the entire buffer. */ 388 389 for (i = 0; i < count; i++, addr += sizeof (PTRACE_XFER_TYPE)) { 390 errno = 0; 391 ptrace (PTRACE_POKETEXT, inferior_pid, 392 (PTRACE_ARG3_TYPE) addr, buffer[i]); 393 if (errno) 394 return errno; 395 } 396 397 return 0; 398 } 399 400 /* subset of VG_(threads) needed for vgdb ptrace. 401 This is initialized when process is attached. */ 402 typedef struct { 403 ThreadStatus status; 404 Int lwpid; 405 } 406 VgdbThreadState; 407 static VgdbThreadState vgdb_threads[VG_N_THREADS]; 408 409 static const 410 HChar* name_of_ThreadStatus ( ThreadStatus status ) 411 { 412 switch (status) { 413 case VgTs_Empty: return "VgTs_Empty"; 414 case VgTs_Init: return "VgTs_Init"; 415 case VgTs_Runnable: return "VgTs_Runnable"; 416 case VgTs_WaitSys: return "VgTs_WaitSys"; 417 case VgTs_Yielding: return "VgTs_Yielding"; 418 case VgTs_Zombie: return "VgTs_Zombie"; 419 default: return "VgTs_???"; 420 } 421 } 422 423 static 424 char *status_image (int status) 425 { 426 static char result[256]; 427 int sz = 0; 428 #define APPEND(...) sz += snprintf (result+sz, 256 - sz - 1, __VA_ARGS__) 429 430 result[0] = 0; 431 432 if (WIFEXITED(status)) 433 APPEND ("WIFEXITED %d ", WEXITSTATUS(status)); 434 435 if (WIFSIGNALED(status)) { 436 APPEND ("WIFSIGNALED %d ", WTERMSIG(status)); 437 if (WCOREDUMP(status)) APPEND ("WCOREDUMP "); 438 } 439 440 if (WIFSTOPPED(status)) 441 APPEND ("WIFSTOPPED %d ", WSTOPSIG(status)); 442 443 #ifdef WIFCONTINUED 444 if (WIFCONTINUED(status)) 445 APPEND ("WIFCONTINUED "); 446 #endif 447 448 return result; 449 #undef APPEND 450 } 451 452 /* Wait till the process pid is reported as stopped with signal_expected. 453 If other signal(s) than signal_expected are received, waitstopped 454 will pass them to pid, waiting for signal_expected to stop pid. 455 Returns True when process is in stopped state with signal_expected. 456 Returns False if a problem was encountered while waiting for pid 457 to be stopped. 458 459 If pid is reported as being dead/exited, waitstopped will return False. 460 */ 461 static 462 Bool waitstopped (int pid, int signal_expected, char *msg) 463 { 464 pid_t p; 465 int status = 0; 466 int signal_received; 467 int res; 468 469 while (1) { 470 DEBUG(1, "waitstopped %s before waitpid signal_expected %d\n", 471 msg, signal_expected); 472 p = waitpid(pid, &status, __WALL); 473 DEBUG(1, "after waitpid pid %d p %d status 0x%x %s\n", pid, p, 474 status, status_image (status)); 475 if (p != pid) { 476 ERROR(errno, "%s waitpid pid %d in waitstopped %d status 0x%x %s\n", 477 msg, pid, p, status, status_image (status)); 478 return False; 479 } 480 481 if (WIFEXITED(status)) { 482 shutting_down = True; 483 return False; 484 } 485 486 assert (WIFSTOPPED(status)); 487 signal_received = WSTOPSIG(status); 488 if (signal_received == signal_expected) 489 break; 490 491 /* pid received a signal which is not the signal we are waiting for. 492 We continue pid, transmitting this signal. */ 493 DEBUG(1, "waitstopped PTRACE_CONT with signal %d\n", signal_received); 494 res = ptrace (PTRACE_CONT, pid, NULL, signal_received); 495 if (res != 0) { 496 ERROR(errno, "waitstopped PTRACE_CONT\n"); 497 return False; 498 } 499 } 500 501 return True; 502 } 503 504 /* Stops the given pid, wait for the process to be stopped. 505 Returns True if succesful, False otherwise. 506 msg is used in tracing and error reporting. */ 507 static 508 Bool stop (int pid, char *msg) 509 { 510 long res; 511 512 DEBUG(1, "%s SIGSTOP pid %d\n", msg, pid); 513 res = kill (pid, SIGSTOP); 514 if (res != 0) { 515 ERROR(errno, "%s SIGSTOP pid %d %ld\n", msg, pid, res); 516 return False; 517 } 518 519 return waitstopped (pid, SIGSTOP, msg); 520 521 } 522 523 /* Attaches to given pid, wait for the process to be stopped. 524 Returns True if succesful, False otherwise. 525 msg is used in tracing and error reporting. */ 526 static 527 Bool attach (int pid, char *msg) 528 { 529 long res; 530 static Bool output_error = True; 531 static Bool initial_attach = True; 532 // For a ptrace_scope protected system, we do not want to output 533 // repetitively attach error. We will output once an error 534 // for the initial_attach. Once the 1st attach has succeeded, we 535 // again show all errors. 536 537 DEBUG(1, "%s PTRACE_ATTACH pid %d\n", msg, pid); 538 res = ptrace (PTRACE_ATTACH, pid, NULL, NULL); 539 if (res != 0) { 540 if (output_error || debuglevel > 0) { 541 ERROR(errno, "%s PTRACE_ATTACH pid %d %ld\n", msg, pid, res); 542 if (initial_attach) 543 output_error = False; 544 } 545 return False; 546 } 547 548 initial_attach = False; 549 output_error = True; 550 return waitstopped(pid, SIGSTOP, msg); 551 } 552 553 /* once we are attached to the pid, get the list of threads and stop 554 them all. 555 Returns True if all threads properly suspended, False otherwise. */ 556 static 557 Bool acquire_and_suspend_threads(int pid) 558 { 559 int i; 560 int rw; 561 Bool pid_found = False; 562 Addr vgt; 563 int sz_tst; 564 int off_status; 565 int off_lwpid; 566 int nr_live_threads = 0; 567 568 if (shared32 != NULL) { 569 vgt = shared32->threads; 570 sz_tst = shared32->sizeof_ThreadState; 571 off_status = shared32->offset_status; 572 off_lwpid = shared32->offset_lwpid; 573 } 574 else if (shared64 != NULL) { 575 vgt = shared64->threads; 576 sz_tst = shared64->sizeof_ThreadState; 577 off_status = shared64->offset_status; 578 off_lwpid = shared64->offset_lwpid; 579 } else { 580 assert (0); 581 } 582 583 /* note: the entry 0 is unused */ 584 for (i = 1; i < VG_N_THREADS; i++) { 585 vgt += sz_tst; 586 rw = ptrace_read_memory(pid, vgt+off_status, 587 (unsigned char *)&(vgdb_threads[i].status), 588 sizeof(ThreadStatus)); 589 if (rw != 0) { 590 ERROR(rw, "status ptrace_read_memory\n"); 591 return False; 592 } 593 594 rw = ptrace_read_memory(pid, vgt+off_lwpid, 595 (unsigned char *)&(vgdb_threads[i].lwpid), 596 sizeof(Int)); 597 if (rw != 0) { 598 ERROR(rw, "lwpid ptrace_read_memory\n"); 599 return False; 600 } 601 602 if (vgdb_threads[i].status != VgTs_Empty) { 603 DEBUG(1, "found tid %d status %s lwpid %d\n", 604 i, name_of_ThreadStatus(vgdb_threads[i].status), 605 vgdb_threads[i].lwpid); 606 nr_live_threads++; 607 if (vgdb_threads[i].lwpid <= 1) { 608 if (vgdb_threads[i].lwpid == 0 609 && vgdb_threads[i].status == VgTs_Init) { 610 DEBUG(1, "not set lwpid tid %d status %s lwpid %d\n", 611 i, name_of_ThreadStatus(vgdb_threads[i].status), 612 vgdb_threads[i].lwpid); 613 } else { 614 ERROR(1, "unexpected lwpid tid %d status %s lwpid %d\n", 615 i, name_of_ThreadStatus(vgdb_threads[i].status), 616 vgdb_threads[i].lwpid); 617 } 618 /* in case we have a VtTs_Init thread with lwpid not yet set, 619 we try again later. */ 620 return False; 621 } 622 if (vgdb_threads[i].lwpid == pid) { 623 assert (!pid_found); 624 assert (i == 1); 625 pid_found = True; 626 } else { 627 if (!attach(vgdb_threads[i].lwpid, "attach_thread")) { 628 ERROR(0, "ERROR attach pid %d tid %d\n", 629 vgdb_threads[i].lwpid, i); 630 return False; 631 } 632 } 633 } 634 } 635 /* If we found no thread, it means the process is stopping, and 636 we better do not force anything to happen during that. */ 637 if (nr_live_threads > 0) 638 return True; 639 else 640 return False; 641 } 642 643 static 644 void detach_from_all_threads(int pid) 645 { 646 int i; 647 long res; 648 Bool pid_found = False; 649 650 /* detach from all the threads */ 651 for (i = 1; i < VG_N_THREADS; i++) { 652 if (vgdb_threads[i].status != VgTs_Empty) { 653 if (vgdb_threads[i].status == VgTs_Init 654 && vgdb_threads[i].lwpid == 0) { 655 DEBUG(1, "skipping PTRACE_DETACH pid %d tid %d status %s\n", 656 vgdb_threads[i].lwpid, i, 657 name_of_ThreadStatus (vgdb_threads[i].status)); 658 } else { 659 if (vgdb_threads[i].lwpid == pid) { 660 assert (!pid_found); 661 pid_found = True; 662 } 663 DEBUG(1, "PTRACE_DETACH pid %d tid %d status %s\n", 664 vgdb_threads[i].lwpid, i, 665 name_of_ThreadStatus (vgdb_threads[i].status)); 666 res = ptrace (PTRACE_DETACH, vgdb_threads[i].lwpid, NULL, NULL); 667 if (res != 0) { 668 ERROR(errno, "PTRACE_DETACH pid %d tid %d status %s res %ld\n", 669 vgdb_threads[i].lwpid, i, 670 name_of_ThreadStatus (vgdb_threads[i].status), 671 res); 672 } 673 } 674 } 675 } 676 677 if (!pid_found && pid) { 678 /* No threads are live. Process is busy stopping. 679 We need to detach from pid explicitely. */ 680 DEBUG(1, "no thread live => PTRACE_DETACH pid %d\n", pid); 681 res = ptrace (PTRACE_DETACH, pid, NULL, NULL); 682 if (res != 0) 683 ERROR(errno, "PTRACE_DETACH pid %d res %ld\n", pid, res); 684 } 685 } 686 687 // if > 0, pid for which registers have to be restored. 688 static int pid_of_save_regs = 0; 689 static struct user user_save; 690 691 // The below indicates if ptrace_getregs (and ptrace_setregs) can be used. 692 // Note that some linux versions are defining PTRACE_GETREGS but using 693 // it gives back EIO. 694 // has_working_ptrace_getregs can take the following values: 695 // -1 : PTRACE_GETREGS is defined 696 // runtime check not yet done. 697 // 0 : PTRACE_GETREGS runtime check has failed. 698 // 1 : PTRACE_GETREGS defined and runtime check ok. 699 #ifdef PTRACE_GETREGS 700 static int has_working_ptrace_getregs = -1; 701 #endif 702 703 /* Get the registers from pid into regs. 704 regs_bsz value gives the length of *regs. 705 Returns True if all ok, otherwise False. */ 706 static 707 Bool getregs (int pid, void *regs, long regs_bsz) 708 { 709 DEBUG(1, "getregs regs_bsz %ld\n", regs_bsz); 710 # ifdef PTRACE_GETREGS 711 if (has_working_ptrace_getregs) { 712 // Platforms having GETREGS 713 long res; 714 DEBUG(1, "getregs PTRACE_GETREGS\n"); 715 res = ptrace (PTRACE_GETREGS, pid, NULL, regs); 716 if (res == 0) { 717 if (has_working_ptrace_getregs == -1) { 718 // First call to PTRACE_GETREGS succesful => 719 has_working_ptrace_getregs = 1; 720 DEBUG(1, "detected a working PTRACE_GETREGS\n"); 721 } 722 assert (has_working_ptrace_getregs == 1); 723 return True; 724 } 725 else if (has_working_ptrace_getregs == 1) { 726 // We had a working call, but now it fails. 727 // This is unexpected. 728 ERROR(errno, "PTRACE_GETREGS %ld\n", res); 729 return False; 730 } else { 731 // Check this is the first call: 732 assert (has_working_ptrace_getregs == -1); 733 if (errno == EIO) { 734 DEBUG(1, "detected a broken PTRACE_GETREGS with EIO\n"); 735 has_working_ptrace_getregs = 0; 736 // Fall over to the PTRACE_PEEKUSER case. 737 } else { 738 ERROR(errno, "broken PTRACE_GETREGS unexpected errno %ld\n", res); 739 return False; 740 } 741 } 742 } 743 # endif 744 745 // We assume PTRACE_PEEKUSER is defined everywhere. 746 { 747 # ifdef PT_ENDREGS 748 long peek_bsz = PT_ENDREGS; 749 assert (peek_bsz <= regs_bsz); 750 # else 751 long peek_bsz = regs_bsz-1; 752 # endif 753 char *pregs = (char *) regs; 754 long offset; 755 errno = 0; 756 DEBUG(1, "getregs PTRACE_PEEKUSER(s) peek_bsz %ld\n", peek_bsz); 757 for (offset = 0; offset < peek_bsz; offset = offset + sizeof(long)) { 758 *(long *)(pregs+offset) = ptrace(PTRACE_PEEKUSER, pid, offset, NULL); 759 if (errno != 0) { 760 ERROR(errno, "PTRACE_PEEKUSER offset %ld\n", offset); 761 return False; 762 } 763 } 764 return True; 765 } 766 767 // If neither PTRACE_GETREGS not PTRACE_PEEKUSER have returned, 768 // then we are in serious trouble. 769 assert (0); 770 } 771 772 /* Set the registers of pid to regs. 773 regs_bsz value gives the length of *regs. 774 Returns True if all ok, otherwise False. */ 775 static 776 Bool setregs (int pid, void *regs, long regs_bsz) 777 { 778 DEBUG(1, "setregs regs_bsz %ld\n", regs_bsz); 779 // Note : the below is checking for GETREGS, not SETREGS 780 // as if one is defined and working, the other one should also work. 781 # ifdef PTRACE_GETREGS 782 if (has_working_ptrace_getregs) { 783 // Platforms having SETREGS 784 long res; 785 // setregs can never be called before getregs has done a runtime check. 786 assert (has_working_ptrace_getregs == 1); 787 DEBUG(1, "setregs PTRACE_SETREGS\n"); 788 res = ptrace (PTRACE_SETREGS, pid, NULL, regs); 789 if (res != 0) { 790 ERROR(errno, "PTRACE_SETREGS %ld\n", res); 791 return False; 792 } 793 return True; 794 } 795 # endif 796 797 { 798 char *pregs = (char *) regs; 799 long offset; 800 long res; 801 # ifdef PT_ENDREGS 802 long peek_bsz = PT_ENDREGS; 803 assert (peek_bsz <= regs_bsz); 804 # else 805 long peek_bsz = regs_bsz-1; 806 # endif 807 errno = 0; 808 DEBUG(1, "setregs PTRACE_POKEUSER(s) %ld\n", peek_bsz); 809 for (offset = 0; offset < peek_bsz; offset = offset + sizeof(long)) { 810 res = ptrace(PTRACE_POKEUSER, pid, offset, *(long*)(pregs+offset)); 811 if (errno != 0) { 812 ERROR(errno, "PTRACE_POKEUSER offset %ld res %ld\n", offset, res); 813 return False; 814 } 815 } 816 return True; 817 } 818 819 // If neither PTRACE_SETREGS not PTRACE_POKEUSER have returned, 820 // then we are in serious trouble. 821 assert (0); 822 } 823 824 /* Restore the registers to the saved value, then detaches from all threads */ 825 static 826 void restore_and_detach(int pid) 827 { 828 if (pid_of_save_regs) { 829 /* In case the 'main pid' has been continued, we need to stop it 830 before resetting the registers. */ 831 if (pid_of_save_regs_continued) { 832 pid_of_save_regs_continued = False; 833 if (!stop(pid_of_save_regs, "sigstop before reset regs")) 834 DEBUG(0, "Could not sigstop before reset"); 835 } 836 837 DEBUG(1, "setregs restore registers pid %d\n", pid_of_save_regs); 838 if (!setregs(pid_of_save_regs, &user_save.regs, sizeof(user_save.regs))) { 839 ERROR(errno, "setregs restore registers pid %d after cont\n", 840 pid_of_save_regs); 841 } 842 pid_of_save_regs = 0; 843 } else { 844 DEBUG(1, "PTRACE_SETREGS restore registers: no pid\n"); 845 } 846 detach_from_all_threads(pid); 847 } 848 849 /* Ensures that the gdbserver code is invoked by pid. 850 If an error occurs, resets to the valgrind process 851 to the state it has before being ptrace-d. 852 Returns True if invoke successful, False otherwise. 853 */ 854 static 855 Bool invoke_gdbserver (int pid) 856 { 857 static Bool ptrace_restrictions_msg_given = False; 858 long res; 859 Bool stopped; 860 struct user user_mod; 861 Addr sp; 862 /* A specific int value is passed to invoke_gdbserver, to check 863 everything goes according to the plan. */ 864 const int check = 0x8BADF00D; // ate bad food. 865 866 const Addr bad_return = 0; 867 // A bad return address will be pushed on the stack. 868 // The function invoke_gdbserver cannot return. If ever it returns, a NULL 869 // address pushed on the stack should ensure this is detected. 870 871 /* Not yet attached. If problem, vgdb can abort, 872 no cleanup needed. 873 874 On Ubuntu>= 10.10, a /proc setting can disable ptrace. 875 So, Valgrind has to SET_PTRACER this vgdb. Once this 876 is done, this vgdb can ptrace the valgrind process. */ 877 878 DEBUG(1, "attach to 'main' pid %d\n", pid); 879 if (!attach(pid, "attach main pid")) { 880 if (!ptrace_restrictions_msg_given) { 881 ptrace_restrictions_msg_given = True; 882 ERROR(0, "error attach main pid %d\n", pid); 883 ptrace_restrictions_msg(); 884 } 885 return False; 886 } 887 888 /* Now, we are attached. If problem, detach and return. */ 889 890 if (!acquire_and_suspend_threads(pid)) { 891 detach_from_all_threads(pid); 892 /* if the pid does not exist anymore, we better stop */ 893 if (kill(pid, 0) != 0) 894 XERROR (errno, "invoke_gdbserver: check for pid %d existence failed\n", 895 pid); 896 return False; 897 } 898 899 if (!getregs(pid, &user_mod.regs, sizeof(user_mod.regs))) { 900 detach_from_all_threads(pid); 901 return False; 902 } 903 user_save = user_mod; 904 905 #if defined(VGA_x86) 906 sp = user_mod.regs.esp; 907 #elif defined(VGA_amd64) 908 sp = user_mod.regs.rsp; 909 if (shared32 != NULL) { 910 /* 64bit vgdb speaking with a 32bit executable. 911 To have system call restart properly, we need to sign extend rax. 912 For more info: 913 web search '[patch] Fix syscall restarts for amd64->i386 biarch' 914 e.g. http://sourceware.org/ml/gdb-patches/2009-11/msg00592.html */ 915 *(long *)&user_save.regs.rax = *(int*)&user_save.regs.rax; 916 DEBUG(1, "Sign extending %8.8lx to %8.8lx\n", 917 user_mod.regs.rax, user_save.regs.rax); 918 } 919 #elif defined(VGA_arm) 920 sp = user_mod.regs.uregs[13]; 921 #elif defined(VGA_ppc32) 922 sp = user_mod.regs.gpr[1]; 923 #elif defined(VGA_ppc64) 924 sp = user_mod.regs.gpr[1]; 925 #elif defined(VGA_s390x) 926 sp = user_mod.regs.gprs[15]; 927 #elif defined(VGA_mips32) 928 sp = user_mod.regs[29*2]; 929 #else 930 I_die_here : (sp) architecture missing in vgdb.c 931 #endif 932 933 934 // the magic below is derived from spying what gdb sends to 935 // the (classical) gdbserver when invoking a C function. 936 if (shared32 != NULL) { 937 // vgdb speaking with a 32bit executable. 938 #if defined(VGA_x86) || defined(VGA_amd64) 939 const int regsize = 4; 940 int rw; 941 /* push check arg on the stack */ 942 sp = sp - regsize; 943 DEBUG(1, "push check arg ptrace_write_memory\n"); 944 assert(regsize == sizeof(check)); 945 rw = ptrace_write_memory(pid, sp, 946 (unsigned char *) &check, 947 regsize); 948 if (rw != 0) { 949 ERROR(rw, "push check arg ptrace_write_memory"); 950 detach_from_all_threads(pid); 951 return False; 952 } 953 954 sp = sp - regsize; 955 DEBUG(1, "push bad_return return address ptrace_write_memory\n"); 956 // Note that for a 64 bits vgdb, only 4 bytes of NULL bad_return 957 // are written. 958 rw = ptrace_write_memory(pid, sp, 959 (unsigned char *) &bad_return, 960 regsize); 961 if (rw != 0) { 962 ERROR(rw, "push bad_return return address ptrace_write_memory"); 963 detach_from_all_threads(pid); 964 return False; 965 } 966 #if defined(VGA_x86) 967 /* set ebp, esp, eip and orig_eax to invoke gdbserver */ 968 // compiled in 32bits, speaking with a 32bits exe 969 user_mod.regs.ebp = sp; // bp set to sp 970 user_mod.regs.esp = sp; 971 user_mod.regs.eip = shared32->invoke_gdbserver; 972 user_mod.regs.orig_eax = -1L; 973 #elif defined(VGA_amd64) 974 /* set ebp, esp, eip and orig_eax to invoke gdbserver */ 975 // compiled in 64bits, speaking with a 32bits exe 976 user_mod.regs.rbp = sp; // bp set to sp 977 user_mod.regs.rsp = sp; 978 user_mod.regs.rip = shared32->invoke_gdbserver; 979 user_mod.regs.orig_rax = -1L; 980 #else 981 I_die_here : not x86 or amd64 in x86/amd64 section/ 982 #endif 983 984 #elif defined(VGA_ppc32) || defined(VGA_ppc64) 985 user_mod.regs.nip = shared32->invoke_gdbserver; 986 user_mod.regs.trap = -1L; 987 /* put check arg in register 3 */ 988 user_mod.regs.gpr[3] = check; 989 /* put NULL return address in Link Register */ 990 user_mod.regs.link = bad_return; 991 992 #elif defined(VGA_arm) 993 /* put check arg in register 0 */ 994 user_mod.regs.uregs[0] = check; 995 /* put NULL return address in Link Register */ 996 user_mod.regs.uregs[14] = bad_return; 997 user_mod.regs.uregs[15] = shared32->invoke_gdbserver; 998 999 #elif defined(VGA_s390x) 1000 XERROR(0, "(fn32) s390x has no 32bits implementation"); 1001 #elif defined(VGA_mips32) 1002 /* put check arg in register 4 */ 1003 user_mod.regs[4*2] = check; 1004 user_mod.regs[4*2+1] = 0xffffffff; // sign extend $a0 1005 /* This sign extension is needed when vgdb 32 bits runs 1006 on a 64 bits OS. */ 1007 /* put NULL return address in ra */ 1008 user_mod.regs[31*2] = bad_return; 1009 user_mod.regs[31*2+1] = 0; 1010 user_mod.regs[34*2] = shared32->invoke_gdbserver; 1011 user_mod.regs[34*2+1] = 0; 1012 user_mod.regs[25*2] = shared32->invoke_gdbserver; 1013 user_mod.regs[25*2+1] = 0; 1014 #else 1015 I_die_here : architecture missing in vgdb.c 1016 #endif 1017 } 1018 1019 else if (shared64 != NULL) { 1020 #if defined(VGA_x86) 1021 assert(0); // cannot vgdb a 64 bits executable with a 32 bits exe 1022 #elif defined(VGA_amd64) 1023 // vgdb speaking with a 64 bit executable. 1024 const int regsize = 8; 1025 int rw; 1026 1027 /* give check arg in rdi */ 1028 user_mod.regs.rdi = check; 1029 1030 /* push return address on stack : return to breakaddr */ 1031 sp = sp - regsize; 1032 DEBUG(1, "push bad_return return address ptrace_write_memory\n"); 1033 rw = ptrace_write_memory(pid, sp, 1034 (unsigned char *) &bad_return, 1035 sizeof(bad_return)); 1036 if (rw != 0) { 1037 ERROR(rw, "push bad_return return address ptrace_write_memory"); 1038 detach_from_all_threads(pid); 1039 return False; 1040 } 1041 1042 /* set rbp, rsp, rip and orig_rax to invoke gdbserver */ 1043 user_mod.regs.rbp = sp; // bp set to sp 1044 user_mod.regs.rsp = sp; 1045 user_mod.regs.rip = shared64->invoke_gdbserver; 1046 user_mod.regs.orig_rax = -1L; 1047 1048 #elif defined(VGA_arm) 1049 assert(0); // cannot vgdb a 64 bits executable with a 32 bits exe 1050 #elif defined(VGA_ppc32) 1051 assert(0); // cannot vgdb a 64 bits executable with a 32 bits exe 1052 #elif defined(VGA_ppc64) 1053 Addr64 func_addr; 1054 Addr64 toc_addr; 1055 int rw; 1056 rw = ptrace_read_memory(pid, shared64->invoke_gdbserver, 1057 (unsigned char *)&func_addr, 1058 sizeof(Addr64)); 1059 if (rw != 0) { 1060 ERROR(rw, "ppc64 read func_addr\n"); 1061 detach_from_all_threads(pid); 1062 return False; 1063 } 1064 rw = ptrace_read_memory(pid, shared64->invoke_gdbserver+8, 1065 (unsigned char *)&toc_addr, 1066 sizeof(Addr64)); 1067 if (rw != 0) { 1068 ERROR(rw, "ppc64 read toc_addr\n"); 1069 detach_from_all_threads(pid); 1070 return False; 1071 } 1072 // We are not pushing anything on the stack, so it is not 1073 // very clear why the sp has to be decreased, but it seems 1074 // needed. The ppc64 ABI might give some lights on this ? 1075 user_mod.regs.gpr[1] = sp - 220; 1076 user_mod.regs.gpr[2] = toc_addr; 1077 user_mod.regs.nip = func_addr; 1078 user_mod.regs.trap = -1L; 1079 /* put check arg in register 3 */ 1080 user_mod.regs.gpr[3] = check; 1081 /* put bad_return return address in Link Register */ 1082 user_mod.regs.link = bad_return; 1083 #elif defined(VGA_s390x) 1084 /* put check arg in register r2 */ 1085 user_mod.regs.gprs[2] = check; 1086 /* bad_return Return address is in r14 */ 1087 user_mod.regs.gprs[14] = bad_return; 1088 /* minimum stack frame */ 1089 sp = sp - 160; 1090 user_mod.regs.gprs[15] = sp; 1091 /* set program counter */ 1092 user_mod.regs.psw.addr = shared64->invoke_gdbserver; 1093 #elif defined(VGA_mips32) 1094 assert(0); // cannot vgdb a 64 bits executable with a 32 bits exe 1095 #else 1096 I_die_here: architecture missing in vgdb.c 1097 #endif 1098 } 1099 else { 1100 assert(0); 1101 } 1102 1103 if (!setregs(pid, &user_mod.regs, sizeof(user_mod.regs))) { 1104 detach_from_all_threads(pid); 1105 return False; 1106 } 1107 /* Now that we have modified the registers, we set 1108 pid_of_save_regs to indicate that restore_and_detach 1109 must restore the registers in case of cleanup. */ 1110 pid_of_save_regs = pid; 1111 pid_of_save_regs_continued = False; 1112 1113 1114 /* We PTRACE_CONT-inue pid. 1115 Either gdbserver will be invoked directly (if all 1116 threads are interruptible) or gdbserver will be 1117 called soon by the scheduler. In the first case, 1118 pid will stop on the break inserted above when 1119 gdbserver returns. In the 2nd case, the break will 1120 be encountered directly. */ 1121 DEBUG(1, "PTRACE_CONT to invoke\n"); 1122 res = ptrace (PTRACE_CONT, pid, NULL, NULL); 1123 if (res != 0) { 1124 ERROR(errno, "PTRACE_CONT\n"); 1125 restore_and_detach(pid); 1126 return False; 1127 } 1128 pid_of_save_regs_continued = True; 1129 /* Wait for SIGSTOP generated by m_gdbserver.c give_control_back_to_vgdb */ 1130 stopped = waitstopped (pid, SIGSTOP, 1131 "waitpid status after PTRACE_CONT to invoke"); 1132 if (stopped) { 1133 /* Here pid has properly stopped on the break. */ 1134 pid_of_save_regs_continued = False; 1135 restore_and_detach(pid); 1136 return True; 1137 } else { 1138 /* Whatever kind of problem happened. We shutdown */ 1139 shutting_down = True; 1140 return False; 1141 } 1142 } 1143 #endif 1144 1145 static 1146 void cleanup_restore_and_detach(void *v_pid) 1147 { 1148 DEBUG(1, "cleanup_restore_and_detach dying: %d\n", dying); 1149 #ifdef PTRACEINVOKER 1150 if (!dying) 1151 restore_and_detach(*(int*)v_pid); 1152 #endif 1153 } 1154 1155 /* This function loops till shutting_down becomes true. In this loop, 1156 it verifies if valgrind process is reading the characters written 1157 by vgdb. The verification is done every max_invoke_ms ms. If 1158 valgrind is not reading characters, it will use invoke_gdbserver 1159 (if PTRACE_INVOKER is defined) to ensure that the gdbserver code is 1160 called soon by valgrind. */ 1161 static int max_invoke_ms = 100; 1162 #define NEVER 99999999 1163 static int cmd_time_out = NEVER; 1164 static 1165 void *invoke_gdbserver_in_valgrind(void *v_pid) 1166 { 1167 struct timeval cmd_max_end_time; 1168 Bool cmd_started = False; 1169 struct timeval invoke_time; 1170 1171 int pid = *(int *)v_pid; 1172 int written_by_vgdb_before_sleep; 1173 int seen_by_valgrind_before_sleep; 1174 1175 int invoked_written = -1; 1176 unsigned int usecs; 1177 1178 pthread_cleanup_push(cleanup_restore_and_detach, v_pid); 1179 1180 while (!shutting_down) { 1181 written_by_vgdb_before_sleep = VS_written_by_vgdb; 1182 seen_by_valgrind_before_sleep = VS_seen_by_valgrind; 1183 DEBUG(3, 1184 "written_by_vgdb_before_sleep %d " 1185 "seen_by_valgrind_before_sleep %d\n", 1186 written_by_vgdb_before_sleep, 1187 seen_by_valgrind_before_sleep); 1188 if (cmd_time_out != NEVER 1189 && !cmd_started 1190 && written_by_vgdb_before_sleep > seen_by_valgrind_before_sleep) { 1191 /* A command was started. Record the time at which it was started. */ 1192 DEBUG(1, "IO for command started\n"); 1193 gettimeofday(&cmd_max_end_time, NULL); 1194 cmd_max_end_time.tv_sec += cmd_time_out; 1195 cmd_started = True; 1196 } 1197 if (max_invoke_ms > 0) { 1198 usecs = 1000 * max_invoke_ms; 1199 gettimeofday(&invoke_time, NULL); 1200 invoke_time.tv_sec += max_invoke_ms / 1000; 1201 invoke_time.tv_usec += 1000 * (max_invoke_ms % 1000); 1202 invoke_time.tv_sec += invoke_time.tv_usec / (1000 * 1000); 1203 invoke_time.tv_usec = invoke_time.tv_usec % (1000 * 1000); 1204 } else { 1205 usecs = 0; 1206 } 1207 if (cmd_started) { 1208 // 0 usecs here means the thread just has to check gdbserver eats 1209 // the characters in <= cmd_time_out seconds. 1210 // We will just wait by 1 second max at a time. 1211 if (usecs == 0 || usecs > 1000 * 1000) 1212 usecs = 1000 * 1000; 1213 } 1214 usleep(usecs); 1215 1216 /* If nothing happened during our sleep, let's try to wake up valgrind 1217 or check for cmd time out. */ 1218 if (written_by_vgdb_before_sleep == VS_written_by_vgdb 1219 && seen_by_valgrind_before_sleep == VS_seen_by_valgrind 1220 && VS_written_by_vgdb > VS_seen_by_valgrind) { 1221 struct timeval now; 1222 gettimeofday(&now, NULL); 1223 DEBUG(2, 1224 "after sleep " 1225 "written_by_vgdb %d " 1226 "seen_by_valgrind %d " 1227 "invoked_written %d\n", 1228 VS_written_by_vgdb, 1229 VS_seen_by_valgrind, 1230 invoked_written); 1231 /* if the pid does not exist anymore, we better stop */ 1232 if (kill(pid, 0) != 0) 1233 XERROR (errno, 1234 "invoke_gdbserver_in_valgrind: " 1235 "check for pid %d existence failed\n", pid); 1236 if (cmd_started) { 1237 if (timercmp (&now, &cmd_max_end_time, >)) 1238 XERROR (0, 1239 "pid %d did not handle a command in %d seconds\n", 1240 pid, cmd_time_out); 1241 } 1242 if (max_invoke_ms > 0 && timercmp (&now, &invoke_time, >=)) { 1243 #if defined(PTRACEINVOKER) 1244 /* only need to wake up if the nr written has changed since 1245 last invoke. */ 1246 if (invoked_written != written_by_vgdb_before_sleep) { 1247 if (invoke_gdbserver(pid)) { 1248 /* If invoke succesful, no need to invoke again 1249 for the same value of written_by_vgdb_before_sleep. */ 1250 invoked_written = written_by_vgdb_before_sleep; 1251 } 1252 } 1253 #else 1254 DEBUG(2, "invoke_gdbserver via ptrace not (yet) implemented\n"); 1255 #endif 1256 } 1257 } else { 1258 // Something happened => restart timer check. 1259 if (cmd_time_out != NEVER) { 1260 DEBUG(2, "some IO was done => restart command\n"); 1261 cmd_started = False; 1262 } 1263 } 1264 } 1265 pthread_cleanup_pop(0); 1266 return NULL; 1267 } 1268 1269 static 1270 int open_fifo (char* name, int flags, char* desc) 1271 { 1272 int fd; 1273 DEBUG(1, "opening %s %s\n", name, desc); 1274 fd = open(name, flags); 1275 if (fd == -1) 1276 XERROR (errno, "error opening %s %s\n", name, desc); 1277 1278 DEBUG(1, "opened %s %s fd %d\n", name, desc, fd); 1279 return fd; 1280 } 1281 1282 /* acquire a lock on the first byte of the given fd. If not successful, 1283 exits with error. 1284 This allows to avoid having two vgdb speaking with the same Valgrind 1285 gdbserver as this causes serious headaches to the protocol. */ 1286 static 1287 void acquire_lock (int fd, int valgrind_pid) 1288 { 1289 struct flock fl; 1290 fl.l_type = F_WRLCK; 1291 fl.l_whence = SEEK_SET; 1292 fl.l_start = 0; 1293 fl.l_len = 1; 1294 if (fcntl(fd, F_SETLK, &fl) < 0) { 1295 if (errno == EAGAIN || errno == EACCES) { 1296 XERROR(errno, 1297 "Cannot acquire lock.\n" 1298 "Probably vgdb pid %d already speaks with Valgrind pid %d\n", 1299 VS_vgdb_pid, 1300 valgrind_pid); 1301 } else { 1302 XERROR(errno, "cannot acquire lock.\n"); 1303 } 1304 } 1305 1306 /* Here, we have the lock. It will be released when fd will be closed. */ 1307 /* We indicate our pid to Valgrind gdbserver */ 1308 if (shared32 != NULL) 1309 shared32->vgdb_pid = getpid(); 1310 else if (shared64 != NULL) 1311 shared64->vgdb_pid = getpid(); 1312 else 1313 assert(0); 1314 } 1315 1316 #define PBUFSIZ 16384 /* keep in sync with server.h */ 1317 1318 /* read some characters from fd. 1319 Returns the nr of characters read, -1 if error. 1320 desc is a string used in tracing */ 1321 static 1322 int read_buf (int fd, char* buf, char* desc) 1323 { 1324 int nrread; 1325 DEBUG(2, "reading %s\n", desc); 1326 nrread = read(fd, buf, PBUFSIZ); 1327 if (nrread == -1) { 1328 ERROR (errno, "error reading %s\n", desc); 1329 return -1; 1330 } 1331 buf[nrread] = '\0'; 1332 DEBUG(2, "read %s %s\n", desc, buf); 1333 return nrread; 1334 } 1335 1336 /* write size bytes from buf to fd. 1337 desc is a description of the action for which the write is done. 1338 If notify, then add size to the shared cntr indicating to the 1339 valgrind process that there is new data. 1340 Returns True if write is ok, False if there was a problem. */ 1341 static 1342 Bool write_buf(int fd, char* buf, int size, char* desc, Bool notify) 1343 { 1344 int nrwritten; 1345 int nrw; 1346 DEBUG(2, "writing %s len %d %s notify: %d\n", desc, size, buf, notify); 1347 nrwritten = 0; 1348 while (nrwritten < size) { 1349 nrw = write (fd, buf+nrwritten, size - nrwritten); 1350 if (nrw == -1) { 1351 ERROR(errno, "error write %s\n", desc); 1352 return False; 1353 } 1354 nrwritten = nrwritten + nrw; 1355 if (notify) 1356 add_written(nrw); 1357 } 1358 return True; 1359 } 1360 1361 typedef enum { 1362 FROM_GDB, 1363 TO_GDB, 1364 FROM_PID, 1365 TO_PID } ConnectionKind; 1366 static const int NumConnectionKind = TO_PID+1; 1367 static 1368 char *ppConnectionKind (ConnectionKind con) 1369 { 1370 switch (con) { 1371 case FROM_GDB: return "FROM_GDB"; 1372 case TO_GDB: return "TO_GDB"; 1373 case FROM_PID: return "FROM_PID"; 1374 case TO_PID: return "TO_PID"; 1375 default: return "invalid connection kind"; 1376 } 1377 } 1378 1379 static char *shared_mem; 1380 1381 static int from_gdb = 0; /* stdin by default, changed if --port is given. */ 1382 static char *from_gdb_to_pid; /* fifo name to write gdb command to pid */ 1383 /* Returns True in case read/write operations were done properly. 1384 Returns False in case of error. 1385 to_pid is the file descriptor to write to the process pid. */ 1386 static 1387 Bool read_from_gdb_write_to_pid(int to_pid) 1388 { 1389 char buf[PBUFSIZ+1]; // +1 for trailing \0 1390 int nrread; 1391 1392 nrread = read_buf(from_gdb, buf, "from gdb on stdin"); 1393 if (nrread <= 0) { 1394 if (nrread == 0) 1395 DEBUG(1, "read 0 bytes from gdb => assume exit\n"); 1396 else 1397 DEBUG(1, "error reading bytes from gdb\n"); 1398 close (from_gdb); 1399 shutting_down = True; 1400 return False; 1401 } 1402 return write_buf(to_pid, buf, nrread, "to_pid", /* notify */ True); 1403 } 1404 1405 static int to_gdb = 1; /* stdout by default, changed if --port is given. */ 1406 static char *to_gdb_from_pid; /* fifo name to read pid replies */ 1407 /* Returns True in case read/write operations were done properly. 1408 Returns False in case of error. 1409 from_pid is the file descriptor to read data from the process pid. */ 1410 static 1411 Bool read_from_pid_write_to_gdb(int from_pid) 1412 { 1413 char buf[PBUFSIZ+1]; // +1 for trailing \0 1414 int nrread; 1415 1416 nrread = read_buf(from_pid, buf, "from pid"); 1417 if (nrread <= 0) { 1418 if (nrread == 0) 1419 DEBUG(1, "read 0 bytes from pid => assume exit\n"); 1420 else 1421 DEBUG(1, "error reading bytes from pid\n"); 1422 close (from_pid); 1423 shutting_down = True; 1424 return False; 1425 } 1426 return write_buf(to_gdb, buf, nrread, "to_gdb", /* notify */ False); 1427 } 1428 1429 static 1430 void wait_for_gdb_connect (int in_port) 1431 { 1432 struct sockaddr_in addr; 1433 1434 int listen_gdb = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP); 1435 int gdb_connect; 1436 1437 if (-1 == listen_gdb) { 1438 XERROR(errno, "cannot create socket"); 1439 } 1440 1441 memset(&addr, 0, sizeof(addr)); 1442 1443 addr.sin_family = AF_INET; 1444 addr.sin_port = htons((unsigned short int)in_port); 1445 addr.sin_addr.s_addr = INADDR_ANY; 1446 1447 if (-1 == bind(listen_gdb,(struct sockaddr *)&addr, sizeof(addr))) { 1448 XERROR(errno, "bind failed"); 1449 } 1450 fprintf(stderr, "listening on port %d ...", in_port); 1451 fflush(stderr); 1452 if (-1 == listen(listen_gdb, 1)) { 1453 XERROR(errno, "error listen failed"); 1454 } 1455 1456 gdb_connect = accept(listen_gdb, NULL, NULL); 1457 if (gdb_connect < 0) { 1458 XERROR(errno, "accept failed"); 1459 } 1460 fprintf(stderr, "connected.\n"); 1461 fflush(stderr); 1462 close(listen_gdb); 1463 from_gdb = gdb_connect; 1464 to_gdb = gdb_connect; 1465 } 1466 1467 /* prepares the FIFOs filenames, map the shared memory. */ 1468 static 1469 void prepare_fifos_and_shared_mem(int pid) 1470 { 1471 const HChar *user, *host; 1472 unsigned len; 1473 1474 user = getenv("LOGNAME"); 1475 if (user == NULL) user = getenv("USER"); 1476 if (user == NULL) user = "???"; 1477 1478 host = getenv("HOST"); 1479 if (host == NULL) host = getenv("HOSTNAME"); 1480 if (host == NULL) host = "???"; 1481 1482 len = strlen(vgdb_prefix) + strlen(user) + strlen(host) + 40; 1483 from_gdb_to_pid = vmalloc (len); 1484 to_gdb_from_pid = vmalloc (len); 1485 shared_mem = vmalloc (len); 1486 /* below 3 lines must match the equivalent in remote-utils.c */ 1487 sprintf(from_gdb_to_pid, "%s-from-vgdb-to-%d-by-%s-on-%s", vgdb_prefix, 1488 pid, user, host); 1489 sprintf(to_gdb_from_pid, "%s-to-vgdb-from-%d-by-%s-on-%s", vgdb_prefix, 1490 pid, user, host); 1491 sprintf(shared_mem, "%s-shared-mem-vgdb-%d-by-%s-on-%s", vgdb_prefix, 1492 pid, user, host); 1493 DEBUG (1, "vgdb: using %s %s %s\n", 1494 from_gdb_to_pid, to_gdb_from_pid, shared_mem); 1495 1496 map_vgdbshared(shared_mem); 1497 } 1498 1499 /* Convert hex digit A to a number. */ 1500 1501 static int 1502 fromhex (int a) 1503 { 1504 if (a >= '0' && a <= '9') 1505 return a - '0'; 1506 else if (a >= 'a' && a <= 'f') 1507 return a - 'a' + 10; 1508 else 1509 XERROR(0, "Reply contains invalid hex digit %c\n", a); 1510 return 0; 1511 } 1512 1513 /* Returns next char from fd. -1 if error, -2 if EOF. 1514 NB: must always call it with the same fd */ 1515 static int 1516 readchar (int fd) 1517 { 1518 static unsigned char buf[PBUFSIZ+1]; // +1 for trailing \0 1519 static int bufcnt = 0; 1520 static unsigned char *bufp; 1521 1522 if (bufcnt-- > 0) 1523 return *bufp++; 1524 1525 bufcnt = read_buf (fd, buf, "static buf readchar"); 1526 1527 if (bufcnt <= 0) { 1528 if (bufcnt == 0) { 1529 fprintf (stderr, "readchar: Got EOF\n"); 1530 return -2; 1531 } else { 1532 ERROR (errno, "readchar\n"); 1533 return -1; 1534 } 1535 } 1536 1537 bufp = buf; 1538 bufcnt--; 1539 return *bufp++; 1540 } 1541 1542 /* Read a packet from fromfd, with error checking, 1543 and store it in BUF. 1544 Returns length of packet, or -1 if error or -2 if EOF. 1545 Writes ack on ackfd */ 1546 1547 static int 1548 getpkt (char *buf, int fromfd, int ackfd) 1549 { 1550 char *bp; 1551 unsigned char csum, c1, c2; 1552 int c; 1553 1554 while (1) { 1555 csum = 0; 1556 1557 while (1) { 1558 c = readchar (fromfd); 1559 if (c == '$') 1560 break; 1561 DEBUG(2, "[getpkt: discarding char '%c']\n", c); 1562 if (c < 0) 1563 return c; 1564 } 1565 1566 bp = buf; 1567 while (1) { 1568 c = readchar (fromfd); 1569 if (c < 0) 1570 return c; 1571 if (c == '#') 1572 break; 1573 if (c == '*') { 1574 int repeat; 1575 int r; 1576 int prev; 1577 prev = *(bp-1); 1578 csum += c; 1579 repeat = readchar (fromfd); 1580 csum += repeat; 1581 for (r = 0; r < repeat - 29; r ++) 1582 *bp++ = prev; 1583 } else { 1584 *bp++ = c; 1585 csum += c; 1586 } 1587 } 1588 *bp = 0; 1589 1590 c1 = fromhex (readchar (fromfd)); 1591 c2 = fromhex (readchar (fromfd)); 1592 1593 if (csum == (c1 << 4) + c2) 1594 break; 1595 1596 fprintf (stderr, "Bad checksum, sentsum=0x%x, csum=0x%x, buf=%s\n", 1597 (c1 << 4) + c2, csum, buf); 1598 if (write (ackfd, "-", 1) != 1) 1599 ERROR(0, "error when writing - (nack)\n"); 1600 else 1601 add_written(1); 1602 } 1603 1604 DEBUG(2, "getpkt (\"%s\"); [sending ack] \n", buf); 1605 if (write (ackfd, "+", 1) != 1) 1606 ERROR(0, "error when writing + (ack)\n"); 1607 else 1608 add_written(1); 1609 return bp - buf; 1610 } 1611 1612 static int sigint = 0; 1613 static int sigterm = 0; 1614 static int sigpipe = 0; 1615 static int sighup = 0; 1616 static int sigusr1 = 0; 1617 static int sigalrm = 0; 1618 static int sigusr1_fd = -1; 1619 static pthread_t invoke_gdbserver_in_valgrind_thread; 1620 1621 static 1622 void received_signal (int signum) 1623 { 1624 if (signum == SIGINT) 1625 sigint++; 1626 else if (signum == SIGUSR1) { 1627 sigusr1++; 1628 if (sigusr1_fd >= 0) { 1629 char control_c = '\003'; 1630 write_buf(sigusr1_fd, &control_c, 1, 1631 "write \\003 on SIGUSR1", /* notify */ True); 1632 } 1633 } 1634 else if (signum == SIGTERM) { 1635 shutting_down = True; 1636 sigterm++; 1637 } else if (signum == SIGHUP) { 1638 shutting_down = True; 1639 sighup++; 1640 } else if (signum == SIGPIPE) { 1641 sigpipe++; 1642 } else if (signum == SIGALRM) { 1643 sigalrm++; 1644 #if defined(VGPV_arm_linux_android) || defined(VGPV_x86_linux_android) 1645 /* Android has no pthread_cancel. As it also does not have 1646 PTRACE_INVOKER, there is no need for cleanup action. 1647 So, we just do nothing. */ 1648 DEBUG(1, "sigalrm received, no action on android\n"); 1649 #else 1650 /* Note: we cannot directly invoke restore_and_detach : this must 1651 be done by the thread that has attached. 1652 We have in this thread pushed a cleanup handler that will 1653 cleanup what is needed. */ 1654 DEBUG(1, "pthread_cancel invoke_gdbserver_in_valgrind_thread\n"); 1655 pthread_cancel(invoke_gdbserver_in_valgrind_thread); 1656 #endif 1657 } else { 1658 ERROR(0, "unexpected signal %d\n", signum); 1659 } 1660 } 1661 1662 /* install the signal handlers allowing e.g. vgdb to cleanup in 1663 case of termination. */ 1664 static 1665 void install_handlers(void) 1666 { 1667 struct sigaction action, oldaction; 1668 1669 action.sa_handler = received_signal; 1670 sigemptyset (&action.sa_mask); 1671 action.sa_flags = 0; 1672 1673 /* SIGINT: when user types C-c in gdb, this sends 1674 a SIGINT to vgdb + causes a character to be sent to remote gdbserver. 1675 The later is enough to wakeup the valgrind process. */ 1676 if (sigaction (SIGINT, &action, &oldaction) != 0) 1677 XERROR (errno, "vgdb error sigaction SIGINT\n"); 1678 /* We might do something more intelligent than just 1679 reporting this SIGINT E.g. behave similarly to the gdb: two 1680 control-C without feedback from the debugged process would 1681 mean to stop debugging it. */ 1682 1683 /* SIGUSR1: this is used to facilitate automatic testing. When 1684 vgdb receives this signal, it will simulate the user typing C-c. */ 1685 if (sigaction (SIGUSR1, &action, &oldaction) != 0) 1686 XERROR (errno, "vgdb error sigaction SIGUSR1\n"); 1687 1688 1689 /* SIGTERM: can receive this signal (e.g. from gdb) to terminate vgdb 1690 when detaching or similar. A clean shutdown will be done as both 1691 the read and write side will detect an end of file. */ 1692 if (sigaction (SIGTERM, &action, &oldaction) != 0) 1693 XERROR (errno, "vgdb error sigaction SIGTERM\n"); 1694 1695 /* SIGPIPE: can receive this signal when gdb detaches or kill the 1696 process debugged: gdb will close its pipes to vgdb. vgdb 1697 must resist to this signal to allow a clean shutdown. */ 1698 if (sigaction (SIGPIPE, &action, &oldaction) != 0) 1699 XERROR (errno, "vgdb error sigaction SIGPIPE\n"); 1700 1701 /* SIGALRM: in case invoke thread is blocked, alarm is used 1702 to cleanup. */ 1703 if (sigaction (SIGALRM, &action, &oldaction) != 0) 1704 XERROR (errno, "vgdb error sigaction SIGALRM\n"); 1705 } 1706 1707 /* close the FIFOs provided connections, terminate the invoker thread. */ 1708 static 1709 void close_connection(int to_pid, int from_pid) 1710 { 1711 DEBUG(1, "nr received signals: sigint %d sigterm %d sighup %d sigpipe %d\n", 1712 sigint, sigterm, sighup, sigpipe); 1713 /* Note that we do not forward sigterm to the valgrind process: 1714 a sigterm signal is (probably) received from gdb if the user wants to 1715 kill the debugged process. The kill instruction has been given to 1716 the valgrind process, which should execute a clean exit. */ 1717 1718 /* We first close the connection to pid. The pid will then 1719 terminates its gdbserver work. We keep the from pid 1720 fifo opened till the invoker thread is finished. 1721 This allows the gdbserver to finish sending its last reply. */ 1722 if (close(to_pid) != 0) 1723 ERROR(errno, "close to_pid\n"); 1724 1725 /* if there is a task that was busy trying to wake up valgrind 1726 process, we wait for it to be terminated otherwise threads 1727 in the valgrind process can stay stopped if vgdb main 1728 exits before the invoke thread had time to detach from 1729 all valgrind threads. */ 1730 if (max_invoke_ms > 0 || cmd_time_out != NEVER) { 1731 int join; 1732 1733 /* It is surprisingly complex to properly shutdown or exit the 1734 valgrind process in which gdbserver has been invoked through 1735 ptrace. In the normal case (gdb detaches from the process, 1736 or process is continued), the valgrind process will reach the 1737 breakpoint place. Using ptrace, vgdb will ensure the 1738 previous activity of the process is resumed (e.g. restart a 1739 blocking system call). The special case is when gdb asks the 1740 valgrind process to exit (using either the "kill" command or 1741 "monitor exit"). In such a case, the valgrind process will 1742 call exit. But a ptraced process will be blocked in exit, 1743 waiting for the ptracing process to detach or die. vgdb 1744 cannot detach unconditionally as otherwise, in the normal 1745 case, the valgrind process would stop abnormally with SIGSTOP 1746 (as vgdb would not be there to catch it). vgdb can also not 1747 die unconditionally otherwise again, similar problem. So, we 1748 assume that most of the time, we arrive here in the normal 1749 case, and so, the breakpoint has been encountered by the 1750 valgrind process, so the invoker thread will exit and the 1751 join will succeed. For the "kill" case, we cause an alarm 1752 signal to be sent after a few seconds. This means that in the 1753 normal case, the gdbserver code in valgrind process must have 1754 returned the control in less than the alarm nr of seconds, 1755 otherwise, valgrind will stop abnormally with SIGSTOP. */ 1756 (void) alarm (3); 1757 1758 DEBUG(1, "joining with invoke_gdbserver_in_valgrind_thread\n"); 1759 join = pthread_join(invoke_gdbserver_in_valgrind_thread, NULL); 1760 if (join != 0) 1761 XERROR 1762 (join, 1763 "vgdb error pthread_join invoke_gdbserver_in_valgrind_thread\n"); 1764 } 1765 if (close(from_pid) != 0) 1766 ERROR(errno, "close from_pid\n"); 1767 } 1768 1769 /* Relay data between gdb and Valgrind gdbserver, till EOF or an 1770 error is encountered. */ 1771 static 1772 void gdb_relay (int pid) 1773 { 1774 int from_pid = -1; /* fd to read from pid */ 1775 int to_pid = -1; /* fd to write to pid */ 1776 1777 int shutdown_loop = 0; 1778 fprintf (stderr, "relaying data between gdb and process %d\n", pid); 1779 fflush (stderr); 1780 1781 if (max_invoke_ms > 0) 1782 pthread_create(&invoke_gdbserver_in_valgrind_thread, NULL, 1783 invoke_gdbserver_in_valgrind, (void *) &pid); 1784 to_pid = open_fifo(from_gdb_to_pid, O_WRONLY, "write to pid"); 1785 acquire_lock (shared_mem_fd, pid); 1786 1787 from_pid = open_fifo (to_gdb_from_pid, O_RDONLY|O_NONBLOCK, 1788 "read mode from pid"); 1789 1790 sigusr1_fd = to_pid; /* allow simulating user typing control-c */ 1791 1792 while (1) { 1793 ConnectionKind ck; 1794 int ret; 1795 struct pollfd pollfds[NumConnectionKind]; 1796 1797 /* watch data written by gdb, watch POLLERR on both gdb fd */ 1798 pollfds[FROM_GDB].fd = from_gdb; 1799 pollfds[FROM_GDB].events = POLLIN; 1800 pollfds[FROM_GDB].revents = 0; 1801 pollfds[TO_GDB].fd = to_gdb; 1802 pollfds[TO_GDB].events = 0; 1803 pollfds[TO_GDB].revents = 0; 1804 1805 /* watch data written by pid, watch POLLERR on both pid fd */ 1806 pollfds[FROM_PID].fd = from_pid; 1807 pollfds[FROM_PID].events = POLLIN; 1808 pollfds[FROM_PID].revents = 0; 1809 pollfds[TO_PID].fd = to_pid; 1810 pollfds[TO_PID].events = 0; 1811 pollfds[TO_PID].revents = 0; 1812 1813 ret = poll(pollfds, 1814 NumConnectionKind, 1815 (shutting_down ? 1816 1 /* one second */ 1817 : -1 /* infinite */)); 1818 DEBUG(2, "poll ret %d errno %d\n", ret, errno); 1819 1820 /* check for unexpected error */ 1821 if (ret <= 0 && errno != EINTR) { 1822 ERROR (errno, "unexpected poll ret %d\n", ret); 1823 shutting_down = True; 1824 break; 1825 } 1826 1827 /* check for data to read */ 1828 for (ck = 0; ck < NumConnectionKind; ck ++) { 1829 if (pollfds[ck].revents & POLLIN) { 1830 switch (ck) { 1831 case FROM_GDB: 1832 if (!read_from_gdb_write_to_pid(to_pid)) 1833 shutting_down = True; 1834 break; 1835 case FROM_PID: 1836 if (!read_from_pid_write_to_gdb(from_pid)) 1837 shutting_down = True; 1838 break; 1839 default: XERROR(0, "unexpected POLLIN on %s\n", 1840 ppConnectionKind(ck)); 1841 } 1842 } 1843 } 1844 1845 /* check for an fd being in error condition */ 1846 for (ck = 0; ck < NumConnectionKind; ck ++) { 1847 if (pollfds[ck].revents & POLLERR) { 1848 DEBUG(1, "connection %s fd %d POLLERR error condition\n", 1849 ppConnectionKind(ck), pollfds[ck].fd); 1850 valgrind_dying(); 1851 shutting_down = True; 1852 } 1853 if (pollfds[ck].revents & POLLHUP) { 1854 DEBUG(1, "connection %s fd %d POLLHUP error condition\n", 1855 ppConnectionKind(ck), pollfds[ck].fd); 1856 valgrind_dying(); 1857 shutting_down = True; 1858 } 1859 if (pollfds[ck].revents & POLLNVAL) { 1860 DEBUG(1, "connection %s fd %d POLLNVAL error condition\n", 1861 ppConnectionKind(ck), pollfds[ck].fd); 1862 valgrind_dying(); 1863 shutting_down = True; 1864 } 1865 } 1866 1867 if (shutting_down) { 1868 /* we let some time to the final packets to be transferred */ 1869 shutdown_loop++; 1870 if (shutdown_loop > 3) 1871 break; 1872 } 1873 } 1874 close_connection(to_pid, from_pid); 1875 } 1876 1877 static int packet_len_for_command(char *cmd) 1878 { 1879 /* cmd will be send as a packet $qRcmd,xxxx....................xx#cc */ 1880 return 7+ 2*strlen(cmd) +3 + 1; 1881 } 1882 1883 /* hyper-minimal protocol implementation that 1884 sends the provided commands (using qRcmd packets) 1885 and read and display their replies. */ 1886 static 1887 void standalone_send_commands(int pid, 1888 int last_command, 1889 char *commands[] ) 1890 { 1891 int from_pid = -1; /* fd to read from pid */ 1892 int to_pid = -1; /* fd to write to pid */ 1893 1894 int i; 1895 int hi; 1896 unsigned char hex[3]; 1897 unsigned char cksum; 1898 unsigned char *hexcommand; 1899 unsigned char buf[PBUFSIZ+1]; // +1 for trailing \0 1900 int buflen; 1901 int nc; 1902 1903 1904 if (max_invoke_ms > 0 || cmd_time_out != NEVER) 1905 pthread_create(&invoke_gdbserver_in_valgrind_thread, NULL, 1906 invoke_gdbserver_in_valgrind, (void *) &pid); 1907 1908 to_pid = open_fifo(from_gdb_to_pid, O_WRONLY, "write to pid"); 1909 acquire_lock (shared_mem_fd, pid); 1910 1911 /* first send a C-c \003 to pid, so that it wakes up the process 1912 After that, we can open the fifo from the pid in read mode 1913 We then start to wait for packets (normally first a resume reply) 1914 At that point, we send our command and expect replies */ 1915 buf[0] = '\003'; 1916 write_buf(to_pid, buf, 1, "write \\003 to wake up", /* notify */ True); 1917 from_pid = open_fifo(to_gdb_from_pid, O_RDONLY, 1918 "read cmd result from pid"); 1919 1920 for (nc = 0; nc <= last_command; nc++) { 1921 fprintf (stderr, "sending command %s to pid %d\n", commands[nc], pid); 1922 fflush (stderr); 1923 1924 /* prepare hexcommand $qRcmd,xxxx....................xx#cc */ 1925 hexcommand = vmalloc (packet_len_for_command(commands[nc])); 1926 hexcommand[0] = 0; 1927 strcat (hexcommand, "$qRcmd,"); 1928 for (i = 0; i < strlen(commands[nc]); i++) { 1929 sprintf(hex, "%02x", commands[nc][i]); 1930 strcat (hexcommand, hex); 1931 } 1932 /* checksum (but without the $) */ 1933 cksum = 0; 1934 for (hi = 1; hi < strlen(hexcommand); hi++) 1935 cksum+=hexcommand[hi]; 1936 strcat(hexcommand, "#"); 1937 sprintf(hex, "%02x", cksum); 1938 strcat(hexcommand, hex); 1939 write_buf(to_pid, hexcommand, strlen(hexcommand), 1940 "writing hex command to pid", /* notify */ True); 1941 1942 /* we exit of the below loop explicitely when the command has 1943 been handled or because a signal handler will set 1944 shutting_down. */ 1945 while (!shutting_down) { 1946 buflen = getpkt(buf, from_pid, to_pid); 1947 if (buflen < 0) { 1948 ERROR (0, "error reading packet\n"); 1949 if (buflen == -2) 1950 valgrind_dying(); 1951 break; 1952 } 1953 if (strlen(buf) == 0) { 1954 DEBUG(0, "empty packet rcvd (packet qRcmd not recognised?)\n"); 1955 break; 1956 } 1957 if (strcmp(buf, "OK") == 0) { 1958 DEBUG(1, "OK packet rcvd\n"); 1959 break; 1960 } 1961 if (buf[0] == 'E') { 1962 DEBUG(0, 1963 "E NN error packet rcvd: %s (unknown monitor command?)\n", 1964 buf); 1965 break; 1966 } 1967 if (buf[0] == 'W') { 1968 DEBUG(0, "W stopped packet rcvd: %s\n", buf); 1969 break; 1970 } 1971 if (buf[0] == 'T') { 1972 DEBUG(1, "T resume reply packet received: %s\n", buf); 1973 continue; 1974 } 1975 1976 /* must be here an O packet with hex encoded string reply 1977 => decode and print it */ 1978 if (buf[0] != 'O') { 1979 DEBUG(0, "expecting O packet, received: %s\n", buf); 1980 continue; 1981 } 1982 { 1983 char buf_print[buflen/2 + 1]; 1984 for (i = 1; i < buflen; i = i + 2) 1985 buf_print[i/2] = (fromhex(*(buf+i)) << 4) 1986 + fromhex(*(buf+i+1)); 1987 buf_print[buflen/2] = 0; 1988 printf("%s", buf_print); 1989 fflush(stdout); 1990 } 1991 } 1992 free (hexcommand); 1993 } 1994 shutting_down = True; 1995 1996 close_connection(to_pid, from_pid); 1997 } 1998 1999 /* report to user the existence of a vgdb-able valgrind process 2000 with given pid */ 2001 static 2002 void report_pid (int pid, Bool on_stdout) 2003 { 2004 char cmdline_file[100]; 2005 char cmdline[1000]; 2006 int fd; 2007 int i, sz; 2008 2009 sprintf(cmdline_file, "/proc/%d/cmdline", pid); 2010 fd = open (cmdline_file, O_RDONLY); 2011 if (fd == -1) { 2012 DEBUG(1, "error opening cmdline file %s %s\n", 2013 cmdline_file, strerror(errno)); 2014 sprintf(cmdline, "(could not obtain process command line)"); 2015 } else { 2016 sz = read(fd, cmdline, 1000); 2017 for (i = 0; i < sz; i++) 2018 if (cmdline[i] == 0) 2019 cmdline[i] = ' '; 2020 cmdline[sz] = 0; 2021 close (fd); 2022 } 2023 fprintf((on_stdout ? stdout : stderr), "use --pid=%d for %s\n", pid, cmdline); 2024 fflush((on_stdout ? stdout : stderr)); 2025 } 2026 2027 /* Possibly produces additional usage information documenting the 2028 ptrace restrictions. */ 2029 static 2030 void ptrace_restrictions_msg(void) 2031 { 2032 # ifdef PR_SET_PTRACER 2033 char *ptrace_scope_setting_file = "/proc/sys/kernel/yama/ptrace_scope"; 2034 int fd = -1; 2035 char ptrace_scope = 'X'; 2036 fd = open (ptrace_scope_setting_file, O_RDONLY, 0); 2037 if (fd >= 0 && (read (fd, &ptrace_scope, 1) == 1) && (ptrace_scope != '0')) { 2038 fprintf (stderr, 2039 "Note: your kernel restricts ptrace invoker using %s\n" 2040 "vgdb will only be able to attach to a Valgrind process\n" 2041 "blocked in a system call *after* an initial successful attach\n", 2042 ptrace_scope_setting_file); 2043 } else if (ptrace_scope == 'X') { 2044 DEBUG (1, 2045 "PR_SET_PTRACER defined" 2046 " but could not determine ptrace scope from %s\n", 2047 ptrace_scope_setting_file); 2048 } 2049 if (fd >= 0) 2050 close (fd); 2051 # endif 2052 2053 # ifndef PTRACEINVOKER 2054 fprintf(stderr, 2055 "Note: ptrace invoker not implemented\n" 2056 "For more info: read user manual section" 2057 " 'Limitations of the Valgrind gdbserver'\n"); 2058 # endif 2059 } 2060 2061 static 2062 void usage(void) 2063 { 2064 fprintf(stderr, 2065 "Usage: vgdb [OPTION]... [[-c] COMMAND]...\n" 2066 "vgdb (valgrind gdb) has two usages\n" 2067 " 1. standalone to send monitor commands to a Valgrind gdbserver.\n" 2068 " The OPTION(s) must be followed by the command to send\n" 2069 " To send more than one command, separate the commands with -c\n" 2070 " 2. relay application between gdb and a Valgrind gdbserver.\n" 2071 " Only OPTION(s) can be given.\n" 2072 "\n" 2073 " OPTIONS are [--pid=<number>] [--vgdb-prefix=<prefix>]\n" 2074 " [--wait=<number>] [--max-invoke-ms=<number>]\n" 2075 " [--port=<portnr>\n" 2076 " [--cmd-time-out=<number>] [-l] [-D] [-d]\n" 2077 " \n" 2078 " --pid arg must be given if multiple Valgrind gdbservers are found.\n" 2079 " --vgdb-prefix arg must be given to both Valgrind and vgdb utility\n" 2080 " if you want to change the default prefix for the FIFOs communication\n" 2081 " between the Valgrind gdbserver and vgdb.\n" 2082 " --wait (default 0) tells vgdb to check during the specified number\n" 2083 " of seconds if a Valgrind gdbserver can be found.\n" 2084 " --max-invoke-ms (default 100) gives the nr of milli-seconds after which vgdb\n" 2085 " will force the invocation of the Valgrind gdbserver (if the Valgrind\n" 2086 " process is blocked in a system call).\n" 2087 " --port instructs vgdb to listen for gdb on the specified port nr.\n" 2088 " --cmd-time-out (default 99999999) tells vgdb to exit if the found Valgrind\n" 2089 " gdbserver has not processed a command after number seconds\n" 2090 " -l arg tells to show the list of running Valgrind gdbserver and then exit.\n" 2091 " -D arg tells to show shared mem status and then exit.\n" 2092 " -d arg tells to show debug info. Multiple -d args for more debug info\n" 2093 "\n" 2094 " -h --help shows this message\n" 2095 " To get help from the Valgrind gdbserver, use vgdb help\n" 2096 "\n" 2097 ); 2098 ptrace_restrictions_msg(); 2099 } 2100 2101 /* If show_list, outputs on stdout the list of Valgrind processes with gdbserver activated. 2102 and then exits. 2103 2104 else if arg_pid == -1, waits maximum check_trials seconds to discover 2105 a valgrind pid appearing. 2106 2107 Otherwise verify arg_pid is valid and corresponds to a Valgrind process 2108 with gdbserver activated. 2109 2110 Returns the pid to work with 2111 or exits in case of error (e.g. no pid found corresponding to arg_pid */ 2112 2113 static 2114 int search_arg_pid(int arg_pid, int check_trials, Bool show_list) 2115 { 2116 int i; 2117 int pid = -1; 2118 2119 if (arg_pid == 0 || arg_pid < -1) { 2120 fprintf (stderr, "vgdb error: invalid pid %d given\n", arg_pid); 2121 exit (1); 2122 } else { 2123 /* search for a matching named fifo. 2124 If we have been given a pid, we will check that the matching FIFO is 2125 there (or wait the nr of check_trials for this to appear). 2126 If no pid has been given, then if we find only one FIFO, 2127 we will use this to build the pid to use. 2128 If we find multiple processes with valid FIFO, we report them and will 2129 exit with an error. */ 2130 DIR *vgdb_dir; 2131 char *vgdb_dir_name = vmalloc (strlen (vgdb_prefix) + 3); 2132 struct dirent *f; 2133 int is; 2134 int nr_valid_pid = 0; 2135 const char *suffix = "-from-vgdb-to-"; /* followed by pid */ 2136 char *vgdb_format = vmalloc (strlen(vgdb_prefix) + strlen(suffix) + 1); 2137 2138 strcpy (vgdb_format, vgdb_prefix); 2139 strcat (vgdb_format, suffix); 2140 2141 strcpy (vgdb_dir_name, vgdb_prefix); 2142 2143 for (is = strlen(vgdb_prefix) - 1; is >= 0; is--) 2144 if (vgdb_dir_name[is] == '/') { 2145 vgdb_dir_name[is+1] = '\0'; 2146 break; 2147 } 2148 if (strlen(vgdb_dir_name) == 0) 2149 strcpy (vgdb_dir_name, "./"); 2150 2151 DEBUG(1, "searching pid in directory %s format %s\n", 2152 vgdb_dir_name, vgdb_format); 2153 2154 /* try to find FIFOs with valid pid. 2155 On exit of the loop, pid is set to: 2156 the last pid found if show_list (or -1 if no process was listed) 2157 -1 if no FIFOs matching a running process is found 2158 -2 if multiple FIFOs of running processes are found 2159 otherwise it is set to the (only) pid found that can be debugged 2160 */ 2161 for (i = 0; i < check_trials; i++) { 2162 DEBUG(1, "check_trial %d \n", i); 2163 if (i > 0) 2164 /* wait one second before checking again */ 2165 sleep(1); 2166 2167 vgdb_dir = opendir (vgdb_dir_name); 2168 if (vgdb_dir == NULL) 2169 XERROR (errno, 2170 "vgdb error: opening directory %s searching vgdb fifo\n", 2171 vgdb_dir_name); 2172 2173 errno = 0; /* avoid complain if vgdb_dir is empty */ 2174 while ((f = readdir (vgdb_dir))) { 2175 struct stat st; 2176 char pathname[strlen(vgdb_dir_name) + strlen(f->d_name) + 1]; 2177 char *wrongpid; 2178 int newpid; 2179 2180 strcpy (pathname, vgdb_dir_name); 2181 strcat (pathname, f->d_name); 2182 DEBUG(3, "checking pathname is FIFO %s\n", pathname); 2183 if (stat (pathname, &st) != 0) { 2184 if (debuglevel >= 3) 2185 ERROR (errno, "vgdb error: stat %s searching vgdb fifo\n", 2186 pathname); 2187 } else if (S_ISFIFO (st.st_mode)) { 2188 DEBUG(3, "trying FIFO %s\n", pathname); 2189 if (strncmp (pathname, vgdb_format, 2190 strlen (vgdb_format)) == 0) { 2191 newpid = strtol(pathname + strlen (vgdb_format), 2192 &wrongpid, 10); 2193 if (*wrongpid == '-' && newpid > 0 2194 && kill (newpid, 0) == 0) { 2195 nr_valid_pid++; 2196 if (show_list) { 2197 report_pid (newpid, /*on_stdout*/ True); 2198 pid = newpid; 2199 } else if (arg_pid != -1) { 2200 if (arg_pid == newpid) { 2201 pid = newpid; 2202 } 2203 } else if (nr_valid_pid > 1) { 2204 if (nr_valid_pid == 2) { 2205 fprintf 2206 (stderr, 2207 "no --pid= arg given" 2208 " and multiple valgrind pids found:\n"); 2209 report_pid (pid, /*on_stdout*/ False); 2210 } 2211 pid = -2; 2212 report_pid (newpid, /*on_stdout*/ False); 2213 } else { 2214 pid = newpid; 2215 } 2216 } 2217 } 2218 } 2219 errno = 0; /* avoid complain if at the end of vgdb_dir */ 2220 } 2221 if (f == NULL && errno != 0) 2222 XERROR (errno, "vgdb error: reading directory %s for vgdb fifo\n", 2223 vgdb_dir_name); 2224 2225 closedir (vgdb_dir); 2226 if (pid != -1) 2227 break; 2228 } 2229 2230 free (vgdb_dir_name); 2231 free (vgdb_format); 2232 } 2233 2234 if (show_list) { 2235 exit (1); 2236 } else if (pid == -1) { 2237 if (arg_pid == -1) 2238 fprintf (stderr, "vgdb error: no FIFO found and no pid given\n"); 2239 else 2240 fprintf (stderr, "vgdb error: no FIFO found matching pid %d\n", 2241 arg_pid); 2242 exit (1); 2243 } 2244 else if (pid == -2) { 2245 /* no arg_pid given, multiple FIFOs found */ 2246 exit (1); 2247 } 2248 else { 2249 return pid; 2250 } 2251 } 2252 2253 /* return true if the numeric value of an option of the 2254 form --xxxxxxxxx=<number> could properly be extracted 2255 from arg. If True is returned, *value contains the 2256 extracted value.*/ 2257 static 2258 Bool numeric_val(char* arg, int *value) 2259 { 2260 const char *eq_pos = strchr(arg, '='); 2261 char *wrong; 2262 long long int long_value; 2263 2264 if (eq_pos == NULL) 2265 return False; 2266 2267 long_value = strtoll(eq_pos+1, &wrong, 10); 2268 if (long_value < 0 || long_value > INT_MAX) 2269 return False; 2270 if (*wrong) 2271 return False; 2272 2273 *value = (int) long_value; 2274 return True; 2275 } 2276 2277 /* true if arg matches the provided option */ 2278 static 2279 Bool is_opt(char* arg, char *option) 2280 { 2281 int option_len = strlen(option); 2282 if (option[option_len-1] == '=') 2283 return (0 == strncmp(option, arg, option_len)); 2284 else 2285 return (0 == strcmp(option, arg)); 2286 } 2287 2288 /* Parse command lines options. If error(s), exits. 2289 Otherwise returns the options in *p_... args. 2290 commands must be big enough for the commands extracted from argv. 2291 On return, *p_last_command gives the position in commands where 2292 the last command has been allocated (using vmalloc). */ 2293 static 2294 void parse_options(int argc, char** argv, 2295 Bool *p_show_shared_mem, 2296 Bool *p_show_list, 2297 int *p_arg_pid, 2298 int *p_check_trials, 2299 int *p_port, 2300 int *p_last_command, 2301 char *commands[]) 2302 { 2303 Bool show_shared_mem = False; 2304 Bool show_list = False; 2305 int arg_pid = -1; 2306 int check_trials = 1; 2307 int last_command = -1; 2308 int int_port = 0; 2309 2310 int i; 2311 int arg_errors = 0; 2312 2313 for (i = 1; i < argc; i++) { 2314 if (is_opt(argv[i], "--help") || is_opt(argv[i], "-h")) { 2315 usage(); 2316 exit(0); 2317 } else if (is_opt(argv[i], "-d")) { 2318 debuglevel++; 2319 } else if (is_opt(argv[i], "-D")) { 2320 show_shared_mem = True; 2321 } else if (is_opt(argv[i], "-l")) { 2322 show_list = True; 2323 } else if (is_opt(argv[i], "--pid=")) { 2324 int newpid; 2325 if (!numeric_val(argv[i], &newpid)) { 2326 fprintf (stderr, "invalid --pid argument %s\n", argv[i]); 2327 arg_errors++; 2328 } else if (arg_pid != -1) { 2329 fprintf (stderr, "multiple --pid arguments given\n"); 2330 arg_errors++; 2331 } else { 2332 arg_pid = newpid; 2333 } 2334 } else if (is_opt(argv[i], "--wait=")) { 2335 if (!numeric_val(argv[i], &check_trials)) { 2336 fprintf (stderr, "invalid --wait argument %s\n", argv[i]); 2337 arg_errors++; 2338 } 2339 } else if (is_opt(argv[i], "--max-invoke-ms=")) { 2340 if (!numeric_val(argv[i], &max_invoke_ms)) { 2341 fprintf (stderr, "invalid --max-invoke-ms argument %s\n", argv[i]); 2342 arg_errors++; 2343 } 2344 } else if (is_opt(argv[i], "--cmd-time-out=")) { 2345 if (!numeric_val(argv[i], &cmd_time_out)) { 2346 fprintf (stderr, "invalid --cmd-time-out argument %s\n", argv[i]); 2347 arg_errors++; 2348 } 2349 } else if (is_opt(argv[i], "--port=")) { 2350 if (!numeric_val(argv[i], &int_port)) { 2351 fprintf (stderr, "invalid --port argument %s\n", argv[i]); 2352 arg_errors++; 2353 } 2354 } else if (is_opt(argv[i], "--vgdb-prefix=")) { 2355 vgdb_prefix = argv[i] + 14; 2356 } else if (is_opt(argv[i], "-c")) { 2357 last_command++; 2358 commands[last_command] = vmalloc (1); 2359 commands[last_command][0] = '\0'; 2360 } else if (0 == strncmp(argv[i], "-", 1)) { 2361 fprintf (stderr, "unknown or invalid argument %s\n", argv[i]); 2362 arg_errors++; 2363 } else { 2364 int len; 2365 if (last_command == -1) { 2366 /* only one command, no -c command indicator */ 2367 last_command++; 2368 commands[last_command] = vmalloc (1); 2369 commands[last_command][0] = '\0'; 2370 } 2371 len = strlen(commands[last_command]); 2372 commands[last_command] = vrealloc (commands[last_command], 2373 len + 1 + strlen(argv[i]) + 1); 2374 if (len > 0) 2375 strcat (commands[last_command], " "); 2376 strcat (commands[last_command], argv[i]); 2377 if (packet_len_for_command(commands[last_command]) > PBUFSIZ) { 2378 fprintf (stderr, "command %s too long\n", commands[last_command]); 2379 arg_errors++; 2380 } 2381 2382 } 2383 } 2384 2385 if (vgdb_prefix == NULL) 2386 vgdb_prefix = vgdb_prefix_default(); 2387 2388 if (isatty(0) 2389 && !show_shared_mem 2390 && !show_list 2391 && int_port == 0 2392 && last_command == -1) { 2393 arg_errors++; 2394 fprintf (stderr, 2395 "Using vgdb standalone implies to give -D or -l or a COMMAND\n"); 2396 } 2397 2398 if (show_shared_mem && show_list) { 2399 arg_errors++; 2400 fprintf (stderr, 2401 "Can't use both -D and -l options\n"); 2402 } 2403 2404 if (max_invoke_ms > 0 2405 && cmd_time_out != NEVER 2406 && (cmd_time_out * 1000) <= max_invoke_ms) { 2407 arg_errors++; 2408 fprintf (stderr, 2409 "--max-invoke-ms must be < --cmd-time-out * 1000\n"); 2410 } 2411 2412 if (show_list && arg_pid != -1) { 2413 arg_errors++; 2414 fprintf (stderr, 2415 "Can't use both --pid and -l options\n"); 2416 } 2417 2418 if (int_port > 0 && last_command != -1) { 2419 arg_errors++; 2420 fprintf (stderr, 2421 "Can't use --port to send commands\n"); 2422 } 2423 2424 if (arg_errors > 0) { 2425 fprintf (stderr, "args error. Try `vgdb --help` for more information\n"); 2426 exit(1); 2427 } 2428 2429 *p_show_shared_mem = show_shared_mem; 2430 *p_show_list = show_list; 2431 *p_arg_pid = arg_pid; 2432 *p_check_trials = check_trials; 2433 *p_port = int_port; 2434 *p_last_command = last_command; 2435 } 2436 2437 int main(int argc, char** argv) 2438 { 2439 int i; 2440 int pid; 2441 2442 Bool show_shared_mem; 2443 Bool show_list; 2444 int arg_pid; 2445 int check_trials; 2446 int in_port; 2447 int last_command; 2448 char *commands[argc]; // we will never have more commands than args. 2449 2450 parse_options(argc, argv, 2451 &show_shared_mem, 2452 &show_list, 2453 &arg_pid, 2454 &check_trials, 2455 &in_port, 2456 &last_command, 2457 commands); 2458 2459 /* when we are working as a relay for gdb, handle some signals by 2460 only reporting them (according to debug level). Also handle these 2461 when ptrace will be used: vgdb must clean up the ptrace effect before 2462 dying. */ 2463 if (max_invoke_ms > 0 || last_command == -1) 2464 install_handlers(); 2465 2466 pid = search_arg_pid (arg_pid, check_trials, show_list); 2467 2468 prepare_fifos_and_shared_mem(pid); 2469 2470 if (in_port > 0) 2471 wait_for_gdb_connect(in_port); 2472 2473 if (show_shared_mem) { 2474 fprintf(stderr, 2475 "vgdb %d " 2476 "written_by_vgdb %d " 2477 "seen_by_valgrind %d\n" 2478 "vgdb pid %d\n", 2479 VS_vgdb_pid, 2480 VS_written_by_vgdb, 2481 VS_seen_by_valgrind, 2482 VS_vgdb_pid); 2483 exit (0); 2484 } 2485 2486 if (last_command >= 0) { 2487 standalone_send_commands(pid, last_command, commands); 2488 } else { 2489 gdb_relay(pid); 2490 } 2491 2492 2493 free (from_gdb_to_pid); 2494 free (to_gdb_from_pid); 2495 free (shared_mem); 2496 2497 for (i = 0; i <= last_command; i++) 2498 free (commands[i]); 2499 return 0; 2500 } 2501