1 //===-- Process.h -----------------------------------------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #ifndef liblldb_Process_h_ 11 #define liblldb_Process_h_ 12 13 // C Includes 14 #include <limits.h> 15 #include <spawn.h> 16 17 // C++ Includes 18 #include <list> 19 #include <iosfwd> 20 #include <vector> 21 22 // Other libraries and framework includes 23 // Project includes 24 #include "lldb/lldb-private.h" 25 #include "lldb/Core/ArchSpec.h" 26 #include "lldb/Core/Broadcaster.h" 27 #include "lldb/Core/Communication.h" 28 #include "lldb/Core/Error.h" 29 #include "lldb/Core/Event.h" 30 #include "lldb/Core/RangeMap.h" 31 #include "lldb/Core/StringList.h" 32 #include "lldb/Core/ThreadSafeValue.h" 33 #include "lldb/Core/PluginInterface.h" 34 #include "lldb/Core/UserSettingsController.h" 35 #include "lldb/Breakpoint/BreakpointSiteList.h" 36 #include "lldb/Expression/ClangPersistentVariables.h" 37 #include "lldb/Expression/IRDynamicChecks.h" 38 #include "lldb/Host/FileSpec.h" 39 #include "lldb/Host/Host.h" 40 #include "lldb/Host/ProcessRunLock.h" 41 #include "lldb/Interpreter/Args.h" 42 #include "lldb/Interpreter/Options.h" 43 #include "lldb/Target/ExecutionContextScope.h" 44 #include "lldb/Target/Memory.h" 45 #include "lldb/Target/ThreadList.h" 46 #include "lldb/Target/UnixSignals.h" 47 #include "lldb/Utility/PseudoTerminal.h" 48 49 namespace lldb_private { 50 51 //---------------------------------------------------------------------- 52 // ProcessProperties 53 //---------------------------------------------------------------------- 54 class ProcessProperties : public Properties 55 { 56 public: 57 ProcessProperties(bool is_global); 58 59 virtual 60 ~ProcessProperties(); 61 62 bool 63 GetDisableMemoryCache() const; 64 65 Args 66 GetExtraStartupCommands () const; 67 68 void 69 SetExtraStartupCommands (const Args &args); 70 71 FileSpec 72 GetPythonOSPluginPath () const; 73 74 void 75 SetPythonOSPluginPath (const FileSpec &file); 76 77 bool 78 GetIgnoreBreakpointsInExpressions () const; 79 80 void 81 SetIgnoreBreakpointsInExpressions (bool ignore); 82 83 bool 84 GetUnwindOnErrorInExpressions () const; 85 86 void 87 SetUnwindOnErrorInExpressions (bool ignore); 88 89 bool 90 GetStopOnSharedLibraryEvents () const; 91 92 void 93 SetStopOnSharedLibraryEvents (bool stop); 94 95 bool 96 GetDetachKeepsStopped () const; 97 98 void 99 SetDetachKeepsStopped (bool keep_stopped); 100 }; 101 102 typedef std::shared_ptr<ProcessProperties> ProcessPropertiesSP; 103 104 //---------------------------------------------------------------------- 105 // ProcessInfo 106 // 107 // A base class for information for a process. This can be used to fill 108 // out information for a process prior to launching it, or it can be 109 // used for an instance of a process and can be filled in with the 110 // existing values for that process. 111 //---------------------------------------------------------------------- 112 class ProcessInfo 113 { 114 public: 115 ProcessInfo () : 116 m_executable (), 117 m_arguments (), 118 m_environment (), 119 m_uid (UINT32_MAX), 120 m_gid (UINT32_MAX), 121 m_arch(), 122 m_pid (LLDB_INVALID_PROCESS_ID) 123 { 124 } 125 126 ProcessInfo (const char *name, 127 const ArchSpec &arch, 128 lldb::pid_t pid) : 129 m_executable (name, false), 130 m_arguments (), 131 m_environment(), 132 m_uid (UINT32_MAX), 133 m_gid (UINT32_MAX), 134 m_arch (arch), 135 m_pid (pid) 136 { 137 } 138 139 void 140 Clear () 141 { 142 m_executable.Clear(); 143 m_arguments.Clear(); 144 m_environment.Clear(); 145 m_uid = UINT32_MAX; 146 m_gid = UINT32_MAX; 147 m_arch.Clear(); 148 m_pid = LLDB_INVALID_PROCESS_ID; 149 } 150 151 const char * 152 GetName() const 153 { 154 return m_executable.GetFilename().GetCString(); 155 } 156 157 size_t 158 GetNameLength() const 159 { 160 return m_executable.GetFilename().GetLength(); 161 } 162 163 FileSpec & 164 GetExecutableFile () 165 { 166 return m_executable; 167 } 168 169 void 170 SetExecutableFile (const FileSpec &exe_file, bool add_exe_file_as_first_arg) 171 { 172 if (exe_file) 173 { 174 m_executable = exe_file; 175 if (add_exe_file_as_first_arg) 176 { 177 char filename[PATH_MAX]; 178 if (exe_file.GetPath(filename, sizeof(filename))) 179 m_arguments.InsertArgumentAtIndex (0, filename); 180 } 181 } 182 else 183 { 184 m_executable.Clear(); 185 } 186 } 187 188 const FileSpec & 189 GetExecutableFile () const 190 { 191 return m_executable; 192 } 193 194 uint32_t 195 GetUserID() const 196 { 197 return m_uid; 198 } 199 200 uint32_t 201 GetGroupID() const 202 { 203 return m_gid; 204 } 205 206 bool 207 UserIDIsValid () const 208 { 209 return m_uid != UINT32_MAX; 210 } 211 212 bool 213 GroupIDIsValid () const 214 { 215 return m_gid != UINT32_MAX; 216 } 217 218 void 219 SetUserID (uint32_t uid) 220 { 221 m_uid = uid; 222 } 223 224 void 225 SetGroupID (uint32_t gid) 226 { 227 m_gid = gid; 228 } 229 230 ArchSpec & 231 GetArchitecture () 232 { 233 return m_arch; 234 } 235 236 const ArchSpec & 237 GetArchitecture () const 238 { 239 return m_arch; 240 } 241 242 lldb::pid_t 243 GetProcessID () const 244 { 245 return m_pid; 246 } 247 248 void 249 SetProcessID (lldb::pid_t pid) 250 { 251 m_pid = pid; 252 } 253 254 bool 255 ProcessIDIsValid() const 256 { 257 return m_pid != LLDB_INVALID_PROCESS_ID; 258 } 259 260 void 261 Dump (Stream &s, Platform *platform) const; 262 263 Args & 264 GetArguments () 265 { 266 return m_arguments; 267 } 268 269 const Args & 270 GetArguments () const 271 { 272 return m_arguments; 273 } 274 275 const char * 276 GetArg0 () const 277 { 278 if (m_arg0.empty()) 279 return NULL; 280 return m_arg0.c_str(); 281 } 282 283 void 284 SetArg0 (const char *arg) 285 { 286 if (arg && arg[0]) 287 m_arg0 = arg; 288 else 289 m_arg0.clear(); 290 } 291 292 void 293 SetArguments (const Args& args, bool first_arg_is_executable); 294 295 void 296 SetArguments (char const **argv, bool first_arg_is_executable); 297 298 Args & 299 GetEnvironmentEntries () 300 { 301 return m_environment; 302 } 303 304 const Args & 305 GetEnvironmentEntries () const 306 { 307 return m_environment; 308 } 309 310 protected: 311 FileSpec m_executable; 312 std::string m_arg0; // argv[0] if supported. If empty, then use m_executable. 313 // Not all process plug-ins support specifying an argv[0] 314 // that differs from the resolved platform executable 315 // (which is in m_executable) 316 Args m_arguments; // All program arguments except argv[0] 317 Args m_environment; 318 uint32_t m_uid; 319 uint32_t m_gid; 320 ArchSpec m_arch; 321 lldb::pid_t m_pid; 322 }; 323 324 //---------------------------------------------------------------------- 325 // ProcessInstanceInfo 326 // 327 // Describes an existing process and any discoverable information that 328 // pertains to that process. 329 //---------------------------------------------------------------------- 330 class ProcessInstanceInfo : public ProcessInfo 331 { 332 public: 333 ProcessInstanceInfo () : 334 ProcessInfo (), 335 m_euid (UINT32_MAX), 336 m_egid (UINT32_MAX), 337 m_parent_pid (LLDB_INVALID_PROCESS_ID) 338 { 339 } 340 341 ProcessInstanceInfo (const char *name, 342 const ArchSpec &arch, 343 lldb::pid_t pid) : 344 ProcessInfo (name, arch, pid), 345 m_euid (UINT32_MAX), 346 m_egid (UINT32_MAX), 347 m_parent_pid (LLDB_INVALID_PROCESS_ID) 348 { 349 } 350 351 void 352 Clear () 353 { 354 ProcessInfo::Clear(); 355 m_euid = UINT32_MAX; 356 m_egid = UINT32_MAX; 357 m_parent_pid = LLDB_INVALID_PROCESS_ID; 358 } 359 360 uint32_t 361 GetEffectiveUserID() const 362 { 363 return m_euid; 364 } 365 366 uint32_t 367 GetEffectiveGroupID() const 368 { 369 return m_egid; 370 } 371 372 bool 373 EffectiveUserIDIsValid () const 374 { 375 return m_euid != UINT32_MAX; 376 } 377 378 bool 379 EffectiveGroupIDIsValid () const 380 { 381 return m_egid != UINT32_MAX; 382 } 383 384 void 385 SetEffectiveUserID (uint32_t uid) 386 { 387 m_euid = uid; 388 } 389 390 void 391 SetEffectiveGroupID (uint32_t gid) 392 { 393 m_egid = gid; 394 } 395 396 lldb::pid_t 397 GetParentProcessID () const 398 { 399 return m_parent_pid; 400 } 401 402 void 403 SetParentProcessID (lldb::pid_t pid) 404 { 405 m_parent_pid = pid; 406 } 407 408 bool 409 ParentProcessIDIsValid() const 410 { 411 return m_parent_pid != LLDB_INVALID_PROCESS_ID; 412 } 413 414 void 415 Dump (Stream &s, Platform *platform) const; 416 417 static void 418 DumpTableHeader (Stream &s, Platform *platform, bool show_args, bool verbose); 419 420 void 421 DumpAsTableRow (Stream &s, Platform *platform, bool show_args, bool verbose) const; 422 423 protected: 424 uint32_t m_euid; 425 uint32_t m_egid; 426 lldb::pid_t m_parent_pid; 427 }; 428 429 430 //---------------------------------------------------------------------- 431 // ProcessLaunchInfo 432 // 433 // Describes any information that is required to launch a process. 434 //---------------------------------------------------------------------- 435 436 class ProcessLaunchInfo : public ProcessInfo 437 { 438 public: 439 440 class FileAction 441 { 442 public: 443 enum Action 444 { 445 eFileActionNone, 446 eFileActionClose, 447 eFileActionDuplicate, 448 eFileActionOpen 449 }; 450 451 452 FileAction () : 453 m_action (eFileActionNone), 454 m_fd (-1), 455 m_arg (-1), 456 m_path () 457 { 458 } 459 460 void 461 Clear() 462 { 463 m_action = eFileActionNone; 464 m_fd = -1; 465 m_arg = -1; 466 m_path.clear(); 467 } 468 469 bool 470 Close (int fd); 471 472 bool 473 Duplicate (int fd, int dup_fd); 474 475 bool 476 Open (int fd, const char *path, bool read, bool write); 477 478 static bool 479 AddPosixSpawnFileAction (posix_spawn_file_actions_t *file_actions, 480 const FileAction *info, 481 Log *log, 482 Error& error); 483 484 int 485 GetFD () const 486 { 487 return m_fd; 488 } 489 490 Action 491 GetAction () const 492 { 493 return m_action; 494 } 495 496 int 497 GetActionArgument () const 498 { 499 return m_arg; 500 } 501 502 const char * 503 GetPath () const 504 { 505 if (m_path.empty()) 506 return NULL; 507 return m_path.c_str(); 508 } 509 510 protected: 511 Action m_action; // The action for this file 512 int m_fd; // An existing file descriptor 513 int m_arg; // oflag for eFileActionOpen*, dup_fd for eFileActionDuplicate 514 std::string m_path; // A file path to use for opening after fork or posix_spawn 515 }; 516 517 ProcessLaunchInfo () : 518 ProcessInfo(), 519 m_working_dir (), 520 m_plugin_name (), 521 m_shell (), 522 m_flags (0), 523 m_file_actions (), 524 m_pty (), 525 m_resume_count (0), 526 m_monitor_callback (NULL), 527 m_monitor_callback_baton (NULL), 528 m_monitor_signals (false) 529 { 530 } 531 532 ProcessLaunchInfo (const char *stdin_path, 533 const char *stdout_path, 534 const char *stderr_path, 535 const char *working_directory, 536 uint32_t launch_flags) : 537 ProcessInfo(), 538 m_working_dir (), 539 m_plugin_name (), 540 m_shell (), 541 m_flags (launch_flags), 542 m_file_actions (), 543 m_pty (), 544 m_resume_count (0), 545 m_monitor_callback (NULL), 546 m_monitor_callback_baton (NULL), 547 m_monitor_signals (false) 548 { 549 if (stdin_path) 550 { 551 ProcessLaunchInfo::FileAction file_action; 552 const bool read = true; 553 const bool write = false; 554 if (file_action.Open(STDIN_FILENO, stdin_path, read, write)) 555 AppendFileAction (file_action); 556 } 557 if (stdout_path) 558 { 559 ProcessLaunchInfo::FileAction file_action; 560 const bool read = false; 561 const bool write = true; 562 if (file_action.Open(STDOUT_FILENO, stdout_path, read, write)) 563 AppendFileAction (file_action); 564 } 565 if (stderr_path) 566 { 567 ProcessLaunchInfo::FileAction file_action; 568 const bool read = false; 569 const bool write = true; 570 if (file_action.Open(STDERR_FILENO, stderr_path, read, write)) 571 AppendFileAction (file_action); 572 } 573 if (working_directory) 574 SetWorkingDirectory(working_directory); 575 } 576 577 void 578 AppendFileAction (const FileAction &info) 579 { 580 m_file_actions.push_back(info); 581 } 582 583 bool 584 AppendCloseFileAction (int fd) 585 { 586 FileAction file_action; 587 if (file_action.Close (fd)) 588 { 589 AppendFileAction (file_action); 590 return true; 591 } 592 return false; 593 } 594 595 bool 596 AppendDuplicateFileAction (int fd, int dup_fd) 597 { 598 FileAction file_action; 599 if (file_action.Duplicate (fd, dup_fd)) 600 { 601 AppendFileAction (file_action); 602 return true; 603 } 604 return false; 605 } 606 607 bool 608 AppendOpenFileAction (int fd, const char *path, bool read, bool write) 609 { 610 FileAction file_action; 611 if (file_action.Open (fd, path, read, write)) 612 { 613 AppendFileAction (file_action); 614 return true; 615 } 616 return false; 617 } 618 619 bool 620 AppendSuppressFileAction (int fd, bool read, bool write) 621 { 622 FileAction file_action; 623 if (file_action.Open (fd, "/dev/null", read, write)) 624 { 625 AppendFileAction (file_action); 626 return true; 627 } 628 return false; 629 } 630 631 void 632 FinalizeFileActions (Target *target, 633 bool default_to_use_pty); 634 635 size_t 636 GetNumFileActions () const 637 { 638 return m_file_actions.size(); 639 } 640 641 const FileAction * 642 GetFileActionAtIndex (size_t idx) const 643 { 644 if (idx < m_file_actions.size()) 645 return &m_file_actions[idx]; 646 return NULL; 647 } 648 649 const FileAction * 650 GetFileActionForFD (int fd) const 651 { 652 for (size_t idx=0, count=m_file_actions.size(); idx < count; ++idx) 653 { 654 if (m_file_actions[idx].GetFD () == fd) 655 return &m_file_actions[idx]; 656 } 657 return NULL; 658 } 659 660 Flags & 661 GetFlags () 662 { 663 return m_flags; 664 } 665 666 const Flags & 667 GetFlags () const 668 { 669 return m_flags; 670 } 671 672 const char * 673 GetWorkingDirectory () const 674 { 675 if (m_working_dir.empty()) 676 return NULL; 677 return m_working_dir.c_str(); 678 } 679 680 void 681 SetWorkingDirectory (const char *working_dir) 682 { 683 if (working_dir && working_dir[0]) 684 m_working_dir.assign (working_dir); 685 else 686 m_working_dir.clear(); 687 } 688 689 void 690 SwapWorkingDirectory (std::string &working_dir) 691 { 692 m_working_dir.swap (working_dir); 693 } 694 695 696 const char * 697 GetProcessPluginName () const 698 { 699 if (m_plugin_name.empty()) 700 return NULL; 701 return m_plugin_name.c_str(); 702 } 703 704 void 705 SetProcessPluginName (const char *plugin) 706 { 707 if (plugin && plugin[0]) 708 m_plugin_name.assign (plugin); 709 else 710 m_plugin_name.clear(); 711 } 712 713 const char * 714 GetShell () const 715 { 716 if (m_shell.empty()) 717 return NULL; 718 return m_shell.c_str(); 719 } 720 721 void 722 SetShell (const char * path) 723 { 724 if (path && path[0]) 725 { 726 m_shell.assign (path); 727 m_flags.Set (lldb::eLaunchFlagLaunchInShell); 728 } 729 else 730 { 731 m_shell.clear(); 732 m_flags.Clear (lldb::eLaunchFlagLaunchInShell); 733 } 734 } 735 736 uint32_t 737 GetResumeCount () const 738 { 739 return m_resume_count; 740 } 741 742 void 743 SetResumeCount (uint32_t c) 744 { 745 m_resume_count = c; 746 } 747 748 bool 749 GetLaunchInSeparateProcessGroup () 750 { 751 return m_flags.Test(lldb::eLaunchFlagLaunchInSeparateProcessGroup); 752 } 753 754 void 755 SetLaunchInSeparateProcessGroup (bool separate) 756 { 757 if (separate) 758 m_flags.Set(lldb::eLaunchFlagLaunchInSeparateProcessGroup); 759 else 760 m_flags.Clear (lldb::eLaunchFlagLaunchInSeparateProcessGroup); 761 762 } 763 764 void 765 Clear () 766 { 767 ProcessInfo::Clear(); 768 m_working_dir.clear(); 769 m_plugin_name.clear(); 770 m_shell.clear(); 771 m_flags.Clear(); 772 m_file_actions.clear(); 773 m_resume_count = 0; 774 } 775 776 bool 777 ConvertArgumentsForLaunchingInShell (Error &error, 778 bool localhost, 779 bool will_debug, 780 bool first_arg_is_full_shell_command); 781 782 void 783 SetMonitorProcessCallback (Host::MonitorChildProcessCallback callback, 784 void *baton, 785 bool monitor_signals) 786 { 787 m_monitor_callback = callback; 788 m_monitor_callback_baton = baton; 789 m_monitor_signals = monitor_signals; 790 } 791 792 bool 793 MonitorProcess () const 794 { 795 if (m_monitor_callback && ProcessIDIsValid()) 796 { 797 Host::StartMonitoringChildProcess (m_monitor_callback, 798 m_monitor_callback_baton, 799 GetProcessID(), 800 m_monitor_signals); 801 return true; 802 } 803 return false; 804 } 805 806 lldb_utility::PseudoTerminal & 807 GetPTY () 808 { 809 return m_pty; 810 } 811 812 protected: 813 std::string m_working_dir; 814 std::string m_plugin_name; 815 std::string m_shell; 816 Flags m_flags; // Bitwise OR of bits from lldb::LaunchFlags 817 std::vector<FileAction> m_file_actions; // File actions for any other files 818 lldb_utility::PseudoTerminal m_pty; 819 uint32_t m_resume_count; // How many times do we resume after launching 820 Host::MonitorChildProcessCallback m_monitor_callback; 821 void *m_monitor_callback_baton; 822 bool m_monitor_signals; 823 824 }; 825 826 //---------------------------------------------------------------------- 827 // ProcessLaunchInfo 828 // 829 // Describes any information that is required to launch a process. 830 //---------------------------------------------------------------------- 831 832 class ProcessAttachInfo : public ProcessInstanceInfo 833 { 834 public: 835 ProcessAttachInfo() : 836 ProcessInstanceInfo(), 837 m_plugin_name (), 838 m_resume_count (0), 839 m_wait_for_launch (false), 840 m_ignore_existing (true), 841 m_continue_once_attached (false) 842 { 843 } 844 845 ProcessAttachInfo (const ProcessLaunchInfo &launch_info) : 846 ProcessInstanceInfo(), 847 m_plugin_name (), 848 m_resume_count (0), 849 m_wait_for_launch (false), 850 m_ignore_existing (true), 851 m_continue_once_attached (false) 852 { 853 ProcessInfo::operator= (launch_info); 854 SetProcessPluginName (launch_info.GetProcessPluginName()); 855 SetResumeCount (launch_info.GetResumeCount()); 856 } 857 858 bool 859 GetWaitForLaunch () const 860 { 861 return m_wait_for_launch; 862 } 863 864 void 865 SetWaitForLaunch (bool b) 866 { 867 m_wait_for_launch = b; 868 } 869 870 bool 871 GetIgnoreExisting () const 872 { 873 return m_ignore_existing; 874 } 875 876 void 877 SetIgnoreExisting (bool b) 878 { 879 m_ignore_existing = b; 880 } 881 882 bool 883 GetContinueOnceAttached () const 884 { 885 return m_continue_once_attached; 886 } 887 888 void 889 SetContinueOnceAttached (bool b) 890 { 891 m_continue_once_attached = b; 892 } 893 894 uint32_t 895 GetResumeCount () const 896 { 897 return m_resume_count; 898 } 899 900 void 901 SetResumeCount (uint32_t c) 902 { 903 m_resume_count = c; 904 } 905 906 const char * 907 GetProcessPluginName () const 908 { 909 if (m_plugin_name.empty()) 910 return NULL; 911 return m_plugin_name.c_str(); 912 } 913 914 void 915 SetProcessPluginName (const char *plugin) 916 { 917 if (plugin && plugin[0]) 918 m_plugin_name.assign (plugin); 919 else 920 m_plugin_name.clear(); 921 } 922 923 void 924 Clear () 925 { 926 ProcessInstanceInfo::Clear(); 927 m_plugin_name.clear(); 928 m_resume_count = 0; 929 m_wait_for_launch = false; 930 m_ignore_existing = true; 931 m_continue_once_attached = false; 932 } 933 934 bool 935 ProcessInfoSpecified () const 936 { 937 if (GetExecutableFile()) 938 return true; 939 if (GetProcessID() != LLDB_INVALID_PROCESS_ID) 940 return true; 941 if (GetParentProcessID() != LLDB_INVALID_PROCESS_ID) 942 return true; 943 return false; 944 } 945 protected: 946 std::string m_plugin_name; 947 uint32_t m_resume_count; // How many times do we resume after launching 948 bool m_wait_for_launch; 949 bool m_ignore_existing; 950 bool m_continue_once_attached; // Supports the use-case scenario of immediately continuing the process once attached. 951 }; 952 953 class ProcessLaunchCommandOptions : public Options 954 { 955 public: 956 957 ProcessLaunchCommandOptions (CommandInterpreter &interpreter) : 958 Options(interpreter) 959 { 960 // Keep default values of all options in one place: OptionParsingStarting () 961 OptionParsingStarting (); 962 } 963 964 ~ProcessLaunchCommandOptions () 965 { 966 } 967 968 Error 969 SetOptionValue (uint32_t option_idx, const char *option_arg); 970 971 void 972 OptionParsingStarting () 973 { 974 launch_info.Clear(); 975 } 976 977 const OptionDefinition* 978 GetDefinitions () 979 { 980 return g_option_table; 981 } 982 983 // Options table: Required for subclasses of Options. 984 985 static OptionDefinition g_option_table[]; 986 987 // Instance variables to hold the values for command options. 988 989 ProcessLaunchInfo launch_info; 990 }; 991 992 //---------------------------------------------------------------------- 993 // ProcessInstanceInfoMatch 994 // 995 // A class to help matching one ProcessInstanceInfo to another. 996 //---------------------------------------------------------------------- 997 998 class ProcessInstanceInfoMatch 999 { 1000 public: 1001 ProcessInstanceInfoMatch () : 1002 m_match_info (), 1003 m_name_match_type (eNameMatchIgnore), 1004 m_match_all_users (false) 1005 { 1006 } 1007 1008 ProcessInstanceInfoMatch (const char *process_name, 1009 NameMatchType process_name_match_type) : 1010 m_match_info (), 1011 m_name_match_type (process_name_match_type), 1012 m_match_all_users (false) 1013 { 1014 m_match_info.GetExecutableFile().SetFile(process_name, false); 1015 } 1016 1017 ProcessInstanceInfo & 1018 GetProcessInfo () 1019 { 1020 return m_match_info; 1021 } 1022 1023 const ProcessInstanceInfo & 1024 GetProcessInfo () const 1025 { 1026 return m_match_info; 1027 } 1028 1029 bool 1030 GetMatchAllUsers () const 1031 { 1032 return m_match_all_users; 1033 } 1034 1035 void 1036 SetMatchAllUsers (bool b) 1037 { 1038 m_match_all_users = b; 1039 } 1040 1041 NameMatchType 1042 GetNameMatchType () const 1043 { 1044 return m_name_match_type; 1045 } 1046 1047 void 1048 SetNameMatchType (NameMatchType name_match_type) 1049 { 1050 m_name_match_type = name_match_type; 1051 } 1052 1053 bool 1054 NameMatches (const char *process_name) const; 1055 1056 bool 1057 Matches (const ProcessInstanceInfo &proc_info) const; 1058 1059 bool 1060 MatchAllProcesses () const; 1061 void 1062 Clear (); 1063 1064 protected: 1065 ProcessInstanceInfo m_match_info; 1066 NameMatchType m_name_match_type; 1067 bool m_match_all_users; 1068 }; 1069 1070 class ProcessInstanceInfoList 1071 { 1072 public: 1073 ProcessInstanceInfoList () : 1074 m_infos() 1075 { 1076 } 1077 1078 void 1079 Clear() 1080 { 1081 m_infos.clear(); 1082 } 1083 1084 size_t 1085 GetSize() 1086 { 1087 return m_infos.size(); 1088 } 1089 1090 void 1091 Append (const ProcessInstanceInfo &info) 1092 { 1093 m_infos.push_back (info); 1094 } 1095 1096 const char * 1097 GetProcessNameAtIndex (size_t idx) 1098 { 1099 if (idx < m_infos.size()) 1100 return m_infos[idx].GetName(); 1101 return NULL; 1102 } 1103 1104 size_t 1105 GetProcessNameLengthAtIndex (size_t idx) 1106 { 1107 if (idx < m_infos.size()) 1108 return m_infos[idx].GetNameLength(); 1109 return 0; 1110 } 1111 1112 lldb::pid_t 1113 GetProcessIDAtIndex (size_t idx) 1114 { 1115 if (idx < m_infos.size()) 1116 return m_infos[idx].GetProcessID(); 1117 return 0; 1118 } 1119 1120 bool 1121 GetInfoAtIndex (size_t idx, ProcessInstanceInfo &info) 1122 { 1123 if (idx < m_infos.size()) 1124 { 1125 info = m_infos[idx]; 1126 return true; 1127 } 1128 return false; 1129 } 1130 1131 // You must ensure "idx" is valid before calling this function 1132 const ProcessInstanceInfo & 1133 GetProcessInfoAtIndex (size_t idx) const 1134 { 1135 assert (idx < m_infos.size()); 1136 return m_infos[idx]; 1137 } 1138 1139 protected: 1140 typedef std::vector<ProcessInstanceInfo> collection; 1141 collection m_infos; 1142 }; 1143 1144 1145 // This class tracks the Modification state of the process. Things that can currently modify 1146 // the program are running the program (which will up the StopID) and writing memory (which 1147 // will up the MemoryID.) 1148 // FIXME: Should we also include modification of register states? 1149 1150 class ProcessModID 1151 { 1152 friend bool operator== (const ProcessModID &lhs, const ProcessModID &rhs); 1153 public: 1154 ProcessModID () : 1155 m_stop_id (0), 1156 m_last_natural_stop_id(0), 1157 m_resume_id (0), 1158 m_memory_id (0), 1159 m_last_user_expression_resume (0), 1160 m_running_user_expression (false) 1161 {} 1162 1163 ProcessModID (const ProcessModID &rhs) : 1164 m_stop_id (rhs.m_stop_id), 1165 m_memory_id (rhs.m_memory_id) 1166 {} 1167 1168 const ProcessModID & operator= (const ProcessModID &rhs) 1169 { 1170 if (this != &rhs) 1171 { 1172 m_stop_id = rhs.m_stop_id; 1173 m_memory_id = rhs.m_memory_id; 1174 } 1175 return *this; 1176 } 1177 1178 ~ProcessModID () {} 1179 1180 void BumpStopID () { 1181 m_stop_id++; 1182 if (!IsLastResumeForUserExpression()) 1183 m_last_natural_stop_id++; 1184 } 1185 1186 void BumpMemoryID () { m_memory_id++; } 1187 1188 void BumpResumeID () { 1189 m_resume_id++; 1190 if (m_running_user_expression > 0) 1191 m_last_user_expression_resume = m_resume_id; 1192 } 1193 1194 uint32_t GetStopID() const { return m_stop_id; } 1195 uint32_t GetLastNaturalStopID() const { return m_last_natural_stop_id; } 1196 uint32_t GetMemoryID () const { return m_memory_id; } 1197 uint32_t GetResumeID () const { return m_resume_id; } 1198 uint32_t GetLastUserExpressionResumeID () const { return m_last_user_expression_resume; } 1199 1200 bool MemoryIDEqual (const ProcessModID &compare) const 1201 { 1202 return m_memory_id == compare.m_memory_id; 1203 } 1204 1205 bool StopIDEqual (const ProcessModID &compare) const 1206 { 1207 return m_stop_id == compare.m_stop_id; 1208 } 1209 1210 void SetInvalid () 1211 { 1212 m_stop_id = UINT32_MAX; 1213 } 1214 1215 bool IsValid () const 1216 { 1217 return m_stop_id != UINT32_MAX; 1218 } 1219 1220 bool 1221 IsLastResumeForUserExpression () const 1222 { 1223 return m_resume_id == m_last_user_expression_resume; 1224 } 1225 1226 void 1227 SetRunningUserExpression (bool on) 1228 { 1229 // REMOVEME printf ("Setting running user expression %s at resume id %d - value: %d.\n", on ? "on" : "off", m_resume_id, m_running_user_expression); 1230 if (on) 1231 m_running_user_expression++; 1232 else 1233 m_running_user_expression--; 1234 } 1235 1236 private: 1237 uint32_t m_stop_id; 1238 uint32_t m_last_natural_stop_id; 1239 uint32_t m_resume_id; 1240 uint32_t m_memory_id; 1241 uint32_t m_last_user_expression_resume; 1242 uint32_t m_running_user_expression; 1243 }; 1244 inline bool operator== (const ProcessModID &lhs, const ProcessModID &rhs) 1245 { 1246 if (lhs.StopIDEqual (rhs) 1247 && lhs.MemoryIDEqual (rhs)) 1248 return true; 1249 else 1250 return false; 1251 } 1252 1253 inline bool operator!= (const ProcessModID &lhs, const ProcessModID &rhs) 1254 { 1255 if (!lhs.StopIDEqual (rhs) 1256 || !lhs.MemoryIDEqual (rhs)) 1257 return true; 1258 else 1259 return false; 1260 } 1261 1262 class MemoryRegionInfo 1263 { 1264 public: 1265 typedef Range<lldb::addr_t, lldb::addr_t> RangeType; 1266 1267 enum OptionalBool { 1268 eDontKnow = -1, 1269 eNo = 0, 1270 eYes = 1 1271 }; 1272 1273 MemoryRegionInfo () : 1274 m_range (), 1275 m_read (eDontKnow), 1276 m_write (eDontKnow), 1277 m_execute (eDontKnow) 1278 { 1279 } 1280 1281 ~MemoryRegionInfo () 1282 { 1283 } 1284 1285 RangeType & 1286 GetRange() 1287 { 1288 return m_range; 1289 } 1290 1291 void 1292 Clear() 1293 { 1294 m_range.Clear(); 1295 m_read = m_write = m_execute = eDontKnow; 1296 } 1297 1298 const RangeType & 1299 GetRange() const 1300 { 1301 return m_range; 1302 } 1303 1304 OptionalBool 1305 GetReadable () const 1306 { 1307 return m_read; 1308 } 1309 1310 OptionalBool 1311 GetWritable () const 1312 { 1313 return m_write; 1314 } 1315 1316 OptionalBool 1317 GetExecutable () const 1318 { 1319 return m_execute; 1320 } 1321 1322 void 1323 SetReadable (OptionalBool val) 1324 { 1325 m_read = val; 1326 } 1327 1328 void 1329 SetWritable (OptionalBool val) 1330 { 1331 m_write = val; 1332 } 1333 1334 void 1335 SetExecutable (OptionalBool val) 1336 { 1337 m_execute = val; 1338 } 1339 1340 protected: 1341 RangeType m_range; 1342 OptionalBool m_read; 1343 OptionalBool m_write; 1344 OptionalBool m_execute; 1345 }; 1346 1347 //---------------------------------------------------------------------- 1348 /// @class Process Process.h "lldb/Target/Process.h" 1349 /// @brief A plug-in interface definition class for debugging a process. 1350 //---------------------------------------------------------------------- 1351 class Process : 1352 public std::enable_shared_from_this<Process>, 1353 public ProcessProperties, 1354 public UserID, 1355 public Broadcaster, 1356 public ExecutionContextScope, 1357 public PluginInterface 1358 { 1359 friend class ThreadList; 1360 friend class ClangFunction; // For WaitForStateChangeEventsPrivate 1361 friend class CommandObjectProcessLaunch; 1362 friend class ProcessEventData; 1363 friend class CommandObjectBreakpointCommand; 1364 friend class StopInfo; 1365 1366 public: 1367 1368 //------------------------------------------------------------------ 1369 /// Broadcaster event bits definitions. 1370 //------------------------------------------------------------------ 1371 enum 1372 { 1373 eBroadcastBitStateChanged = (1 << 0), 1374 eBroadcastBitInterrupt = (1 << 1), 1375 eBroadcastBitSTDOUT = (1 << 2), 1376 eBroadcastBitSTDERR = (1 << 3), 1377 eBroadcastBitProfileData = (1 << 4) 1378 }; 1379 1380 enum 1381 { 1382 eBroadcastInternalStateControlStop = (1<<0), 1383 eBroadcastInternalStateControlPause = (1<<1), 1384 eBroadcastInternalStateControlResume = (1<<2) 1385 }; 1386 1387 typedef Range<lldb::addr_t, lldb::addr_t> LoadRange; 1388 // We use a read/write lock to allow on or more clients to 1389 // access the process state while the process is stopped (reader). 1390 // We lock the write lock to control access to the process 1391 // while it is running (readers, or clients that want the process 1392 // stopped can block waiting for the process to stop, or just 1393 // try to lock it to see if they can immediately access the stopped 1394 // process. If the try read lock fails, then the process is running. 1395 typedef ProcessRunLock::ProcessRunLocker StopLocker; 1396 1397 // These two functions fill out the Broadcaster interface: 1398 1399 static ConstString &GetStaticBroadcasterClass (); 1400 1401 virtual ConstString &GetBroadcasterClass() const 1402 { 1403 return GetStaticBroadcasterClass(); 1404 } 1405 1406 1407 //------------------------------------------------------------------ 1408 /// A notification structure that can be used by clients to listen 1409 /// for changes in a process's lifetime. 1410 /// 1411 /// @see RegisterNotificationCallbacks (const Notifications&) 1412 /// @see UnregisterNotificationCallbacks (const Notifications&) 1413 //------------------------------------------------------------------ 1414 #ifndef SWIG 1415 typedef struct 1416 { 1417 void *baton; 1418 void (*initialize)(void *baton, Process *process); 1419 void (*process_state_changed) (void *baton, Process *process, lldb::StateType state); 1420 } Notifications; 1421 1422 class ProcessEventData : 1423 public EventData 1424 { 1425 friend class Process; 1426 1427 public: 1428 ProcessEventData (); 1429 ProcessEventData (const lldb::ProcessSP &process, lldb::StateType state); 1430 1431 virtual ~ProcessEventData(); 1432 1433 static const ConstString & 1434 GetFlavorString (); 1435 1436 virtual const ConstString & 1437 GetFlavor () const; 1438 1439 const lldb::ProcessSP & 1440 GetProcessSP() const 1441 { 1442 return m_process_sp; 1443 } 1444 lldb::StateType 1445 GetState() const 1446 { 1447 return m_state; 1448 } 1449 bool 1450 GetRestarted () const 1451 { 1452 return m_restarted; 1453 } 1454 1455 size_t 1456 GetNumRestartedReasons () 1457 { 1458 return m_restarted_reasons.size(); 1459 } 1460 1461 const char * 1462 GetRestartedReasonAtIndex(size_t idx) 1463 { 1464 if (idx > m_restarted_reasons.size()) 1465 return NULL; 1466 else 1467 return m_restarted_reasons[idx].c_str(); 1468 } 1469 1470 bool 1471 GetInterrupted () const 1472 { 1473 return m_interrupted; 1474 } 1475 1476 virtual void 1477 Dump (Stream *s) const; 1478 1479 virtual void 1480 DoOnRemoval (Event *event_ptr); 1481 1482 static const Process::ProcessEventData * 1483 GetEventDataFromEvent (const Event *event_ptr); 1484 1485 static lldb::ProcessSP 1486 GetProcessFromEvent (const Event *event_ptr); 1487 1488 static lldb::StateType 1489 GetStateFromEvent (const Event *event_ptr); 1490 1491 static bool 1492 GetRestartedFromEvent (const Event *event_ptr); 1493 1494 static size_t 1495 GetNumRestartedReasons(const Event *event_ptr); 1496 1497 static const char * 1498 GetRestartedReasonAtIndex(const Event *event_ptr, size_t idx); 1499 1500 static void 1501 AddRestartedReason (Event *event_ptr, const char *reason); 1502 1503 static void 1504 SetRestartedInEvent (Event *event_ptr, bool new_value); 1505 1506 static bool 1507 GetInterruptedFromEvent (const Event *event_ptr); 1508 1509 static void 1510 SetInterruptedInEvent (Event *event_ptr, bool new_value); 1511 1512 static bool 1513 SetUpdateStateOnRemoval (Event *event_ptr); 1514 1515 private: 1516 1517 void 1518 SetUpdateStateOnRemoval() 1519 { 1520 m_update_state++; 1521 } 1522 void 1523 SetRestarted (bool new_value) 1524 { 1525 m_restarted = new_value; 1526 } 1527 void 1528 SetInterrupted (bool new_value) 1529 { 1530 m_interrupted = new_value; 1531 } 1532 void 1533 AddRestartedReason (const char *reason) 1534 { 1535 m_restarted_reasons.push_back(reason); 1536 } 1537 1538 lldb::ProcessSP m_process_sp; 1539 lldb::StateType m_state; 1540 std::vector<std::string> m_restarted_reasons; 1541 bool m_restarted; // For "eStateStopped" events, this is true if the target was automatically restarted. 1542 int m_update_state; 1543 bool m_interrupted; 1544 DISALLOW_COPY_AND_ASSIGN (ProcessEventData); 1545 1546 }; 1547 1548 #endif 1549 1550 static void 1551 SettingsInitialize (); 1552 1553 static void 1554 SettingsTerminate (); 1555 1556 static const ProcessPropertiesSP & 1557 GetGlobalProperties(); 1558 1559 //------------------------------------------------------------------ 1560 /// Construct with a shared pointer to a target, and the Process listener. 1561 //------------------------------------------------------------------ 1562 Process(Target &target, Listener &listener); 1563 1564 //------------------------------------------------------------------ 1565 /// Destructor. 1566 /// 1567 /// The destructor is virtual since this class is designed to be 1568 /// inherited from by the plug-in instance. 1569 //------------------------------------------------------------------ 1570 virtual 1571 ~Process(); 1572 1573 //------------------------------------------------------------------ 1574 /// Find a Process plug-in that can debug \a module using the 1575 /// currently selected architecture. 1576 /// 1577 /// Scans all loaded plug-in interfaces that implement versions of 1578 /// the Process plug-in interface and returns the first instance 1579 /// that can debug the file. 1580 /// 1581 /// @param[in] module_sp 1582 /// The module shared pointer that this process will debug. 1583 /// 1584 /// @param[in] plugin_name 1585 /// If NULL, select the best plug-in for the binary. If non-NULL 1586 /// then look for a plugin whose PluginInfo's name matches 1587 /// this string. 1588 /// 1589 /// @see Process::CanDebug () 1590 //------------------------------------------------------------------ 1591 static lldb::ProcessSP 1592 FindPlugin (Target &target, 1593 const char *plugin_name, 1594 Listener &listener, 1595 const FileSpec *crash_file_path); 1596 1597 1598 1599 //------------------------------------------------------------------ 1600 /// Static function that can be used with the \b host function 1601 /// Host::StartMonitoringChildProcess (). 1602 /// 1603 /// This function can be used by lldb_private::Process subclasses 1604 /// when they want to watch for a local process and have its exit 1605 /// status automatically set when the host child process exits. 1606 /// Subclasses should call Host::StartMonitoringChildProcess () 1607 /// with: 1608 /// callback = Process::SetHostProcessExitStatus 1609 /// callback_baton = NULL 1610 /// pid = Process::GetID() 1611 /// monitor_signals = false 1612 //------------------------------------------------------------------ 1613 static bool 1614 SetProcessExitStatus (void *callback_baton, // The callback baton which should be set to NULL 1615 lldb::pid_t pid, // The process ID we want to monitor 1616 bool exited, 1617 int signo, // Zero for no signal 1618 int status); // Exit value of process if signal is zero 1619 1620 lldb::ByteOrder 1621 GetByteOrder () const; 1622 1623 uint32_t 1624 GetAddressByteSize () const; 1625 1626 uint32_t 1627 GetUniqueID() const 1628 { 1629 return m_process_unique_id; 1630 } 1631 //------------------------------------------------------------------ 1632 /// Check if a plug-in instance can debug the file in \a module. 1633 /// 1634 /// Each plug-in is given a chance to say whether it can debug 1635 /// the file in \a module. If the Process plug-in instance can 1636 /// debug a file on the current system, it should return \b true. 1637 /// 1638 /// @return 1639 /// Returns \b true if this Process plug-in instance can 1640 /// debug the executable, \b false otherwise. 1641 //------------------------------------------------------------------ 1642 virtual bool 1643 CanDebug (Target &target, 1644 bool plugin_specified_by_name) = 0; 1645 1646 1647 //------------------------------------------------------------------ 1648 /// This object is about to be destroyed, do any necessary cleanup. 1649 /// 1650 /// Subclasses that override this method should always call this 1651 /// superclass method. 1652 //------------------------------------------------------------------ 1653 virtual void 1654 Finalize(); 1655 1656 1657 //------------------------------------------------------------------ 1658 /// Return whether this object is valid (i.e. has not been finalized.) 1659 /// 1660 /// @return 1661 /// Returns \b true if this Process has not been finalized 1662 /// and \b false otherwise. 1663 //------------------------------------------------------------------ 1664 bool 1665 IsValid() const 1666 { 1667 return !m_finalize_called; 1668 } 1669 1670 //------------------------------------------------------------------ 1671 /// Return a multi-word command object that can be used to expose 1672 /// plug-in specific commands. 1673 /// 1674 /// This object will be used to resolve plug-in commands and can be 1675 /// triggered by a call to: 1676 /// 1677 /// (lldb) process commmand <args> 1678 /// 1679 /// @return 1680 /// A CommandObject which can be one of the concrete subclasses 1681 /// of CommandObject like CommandObjectRaw, CommandObjectParsed, 1682 /// or CommandObjectMultiword. 1683 //------------------------------------------------------------------ 1684 virtual CommandObject * 1685 GetPluginCommandObject() 1686 { 1687 return NULL; 1688 } 1689 1690 //------------------------------------------------------------------ 1691 /// Launch a new process. 1692 /// 1693 /// Launch a new process by spawning a new process using the 1694 /// target object's executable module's file as the file to launch. 1695 /// Arguments are given in \a argv, and the environment variables 1696 /// are in \a envp. Standard input and output files can be 1697 /// optionally re-directed to \a stdin_path, \a stdout_path, and 1698 /// \a stderr_path. 1699 /// 1700 /// This function is not meant to be overridden by Process 1701 /// subclasses. It will first call Process::WillLaunch (Module *) 1702 /// and if that returns \b true, Process::DoLaunch (Module*, 1703 /// char const *[],char const *[],const char *,const char *, 1704 /// const char *) will be called to actually do the launching. If 1705 /// DoLaunch returns \b true, then Process::DidLaunch() will be 1706 /// called. 1707 /// 1708 /// @param[in] argv 1709 /// The argument array. 1710 /// 1711 /// @param[in] envp 1712 /// The environment array. 1713 /// 1714 /// @param[in] launch_flags 1715 /// Flags to modify the launch (@see lldb::LaunchFlags) 1716 /// 1717 /// @param[in] stdin_path 1718 /// The path to use when re-directing the STDIN of the new 1719 /// process. If all stdXX_path arguments are NULL, a pseudo 1720 /// terminal will be used. 1721 /// 1722 /// @param[in] stdout_path 1723 /// The path to use when re-directing the STDOUT of the new 1724 /// process. If all stdXX_path arguments are NULL, a pseudo 1725 /// terminal will be used. 1726 /// 1727 /// @param[in] stderr_path 1728 /// The path to use when re-directing the STDERR of the new 1729 /// process. If all stdXX_path arguments are NULL, a pseudo 1730 /// terminal will be used. 1731 /// 1732 /// @param[in] working_directory 1733 /// The working directory to have the child process run in 1734 /// 1735 /// @return 1736 /// An error object. Call GetID() to get the process ID if 1737 /// the error object is success. 1738 //------------------------------------------------------------------ 1739 virtual Error 1740 Launch (const ProcessLaunchInfo &launch_info); 1741 1742 virtual Error 1743 LoadCore (); 1744 1745 virtual Error 1746 DoLoadCore () 1747 { 1748 Error error; 1749 error.SetErrorStringWithFormat("error: %s does not support loading core files.", GetPluginName().GetCString()); 1750 return error; 1751 } 1752 1753 //------------------------------------------------------------------ 1754 /// Get the dynamic loader plug-in for this process. 1755 /// 1756 /// The default action is to let the DynamicLoader plug-ins check 1757 /// the main executable and the DynamicLoader will select itself 1758 /// automatically. Subclasses can override this if inspecting the 1759 /// executable is not desired, or if Process subclasses can only 1760 /// use a specific DynamicLoader plug-in. 1761 //------------------------------------------------------------------ 1762 virtual DynamicLoader * 1763 GetDynamicLoader (); 1764 1765 //------------------------------------------------------------------ 1766 /// Attach to an existing process using the process attach info. 1767 /// 1768 /// This function is not meant to be overridden by Process 1769 /// subclasses. It will first call WillAttach (lldb::pid_t) 1770 /// or WillAttach (const char *), and if that returns \b 1771 /// true, DoAttach (lldb::pid_t) or DoAttach (const char *) will 1772 /// be called to actually do the attach. If DoAttach returns \b 1773 /// true, then Process::DidAttach() will be called. 1774 /// 1775 /// @param[in] pid 1776 /// The process ID that we should attempt to attach to. 1777 /// 1778 /// @return 1779 /// Returns \a pid if attaching was successful, or 1780 /// LLDB_INVALID_PROCESS_ID if attaching fails. 1781 //------------------------------------------------------------------ 1782 virtual Error 1783 Attach (ProcessAttachInfo &attach_info); 1784 1785 //------------------------------------------------------------------ 1786 /// Attach to a remote system via a URL 1787 /// 1788 /// @param[in] strm 1789 /// A stream where output intended for the user 1790 /// (if the driver has a way to display that) generated during 1791 /// the connection. This may be NULL if no output is needed.A 1792 /// 1793 /// @param[in] remote_url 1794 /// The URL format that we are connecting to. 1795 /// 1796 /// @return 1797 /// Returns an error object. 1798 //------------------------------------------------------------------ 1799 virtual Error 1800 ConnectRemote (Stream *strm, const char *remote_url); 1801 1802 bool 1803 GetShouldDetach () const 1804 { 1805 return m_should_detach; 1806 } 1807 1808 void 1809 SetShouldDetach (bool b) 1810 { 1811 m_should_detach = b; 1812 } 1813 1814 //------------------------------------------------------------------ 1815 /// Get the image information address for the current process. 1816 /// 1817 /// Some runtimes have system functions that can help dynamic 1818 /// loaders locate the dynamic loader information needed to observe 1819 /// shared libraries being loaded or unloaded. This function is 1820 /// in the Process interface (as opposed to the DynamicLoader 1821 /// interface) to ensure that remote debugging can take advantage of 1822 /// this functionality. 1823 /// 1824 /// @return 1825 /// The address of the dynamic loader information, or 1826 /// LLDB_INVALID_ADDRESS if this is not supported by this 1827 /// interface. 1828 //------------------------------------------------------------------ 1829 virtual lldb::addr_t 1830 GetImageInfoAddress (); 1831 1832 //------------------------------------------------------------------ 1833 /// Load a shared library into this process. 1834 /// 1835 /// Try and load a shared library into the current process. This 1836 /// call might fail in the dynamic loader plug-in says it isn't safe 1837 /// to try and load shared libraries at the moment. 1838 /// 1839 /// @param[in] image_spec 1840 /// The image file spec that points to the shared library that 1841 /// you want to load. 1842 /// 1843 /// @param[out] error 1844 /// An error object that gets filled in with any errors that 1845 /// might occur when trying to load the shared library. 1846 /// 1847 /// @return 1848 /// A token that represents the shared library that can be 1849 /// later used to unload the shared library. A value of 1850 /// LLDB_INVALID_IMAGE_TOKEN will be returned if the shared 1851 /// library can't be opened. 1852 //------------------------------------------------------------------ 1853 virtual uint32_t 1854 LoadImage (const FileSpec &image_spec, Error &error); 1855 1856 virtual Error 1857 UnloadImage (uint32_t image_token); 1858 1859 //------------------------------------------------------------------ 1860 /// Register for process and thread notifications. 1861 /// 1862 /// Clients can register nofication callbacks by filling out a 1863 /// Process::Notifications structure and calling this function. 1864 /// 1865 /// @param[in] callbacks 1866 /// A structure that contains the notification baton and 1867 /// callback functions. 1868 /// 1869 /// @see Process::Notifications 1870 //------------------------------------------------------------------ 1871 #ifndef SWIG 1872 void 1873 RegisterNotificationCallbacks (const Process::Notifications& callbacks); 1874 #endif 1875 //------------------------------------------------------------------ 1876 /// Unregister for process and thread notifications. 1877 /// 1878 /// Clients can unregister nofication callbacks by passing a copy of 1879 /// the original baton and callbacks in \a callbacks. 1880 /// 1881 /// @param[in] callbacks 1882 /// A structure that contains the notification baton and 1883 /// callback functions. 1884 /// 1885 /// @return 1886 /// Returns \b true if the notification callbacks were 1887 /// successfully removed from the process, \b false otherwise. 1888 /// 1889 /// @see Process::Notifications 1890 //------------------------------------------------------------------ 1891 #ifndef SWIG 1892 bool 1893 UnregisterNotificationCallbacks (const Process::Notifications& callbacks); 1894 #endif 1895 //================================================================== 1896 // Built in Process Control functions 1897 //================================================================== 1898 //------------------------------------------------------------------ 1899 /// Resumes all of a process's threads as configured using the 1900 /// Thread run control functions. 1901 /// 1902 /// Threads for a process should be updated with one of the run 1903 /// control actions (resume, step, or suspend) that they should take 1904 /// when the process is resumed. If no run control action is given 1905 /// to a thread it will be resumed by default. 1906 /// 1907 /// This function is not meant to be overridden by Process 1908 /// subclasses. This function will take care of disabling any 1909 /// breakpoints that threads may be stopped at, single stepping, and 1910 /// re-enabling breakpoints, and enabling the basic flow control 1911 /// that the plug-in instances need not worry about. 1912 /// 1913 /// N.B. This function also sets the Write side of the Run Lock, 1914 /// which is unset when the corresponding stop event is pulled off 1915 /// the Public Event Queue. If you need to resume the process without 1916 /// setting the Run Lock, use PrivateResume (though you should only do 1917 /// that from inside the Process class. 1918 /// 1919 /// @return 1920 /// Returns an error object. 1921 /// 1922 /// @see Thread:Resume() 1923 /// @see Thread:Step() 1924 /// @see Thread:Suspend() 1925 //------------------------------------------------------------------ 1926 Error 1927 Resume(); 1928 1929 //------------------------------------------------------------------ 1930 /// Halts a running process. 1931 /// 1932 /// This function is not meant to be overridden by Process 1933 /// subclasses. 1934 /// If the process is successfully halted, a eStateStopped 1935 /// process event with GetInterrupted will be broadcast. If false, we will 1936 /// halt the process with no events generated by the halt. 1937 /// 1938 /// @param[in] clear_thread_plans 1939 /// If true, when the process stops, clear all thread plans. 1940 /// 1941 /// @return 1942 /// Returns an error object. If the error is empty, the process is halted. 1943 /// otherwise the halt has failed. 1944 //------------------------------------------------------------------ 1945 Error 1946 Halt (bool clear_thread_plans = false); 1947 1948 //------------------------------------------------------------------ 1949 /// Detaches from a running or stopped process. 1950 /// 1951 /// This function is not meant to be overridden by Process 1952 /// subclasses. 1953 /// 1954 /// @param[in] keep_stopped 1955 /// If true, don't resume the process on detach. 1956 /// 1957 /// @return 1958 /// Returns an error object. 1959 //------------------------------------------------------------------ 1960 Error 1961 Detach (bool keep_stopped); 1962 1963 //------------------------------------------------------------------ 1964 /// Kills the process and shuts down all threads that were spawned 1965 /// to track and monitor the process. 1966 /// 1967 /// This function is not meant to be overridden by Process 1968 /// subclasses. 1969 /// 1970 /// @return 1971 /// Returns an error object. 1972 //------------------------------------------------------------------ 1973 Error 1974 Destroy(); 1975 1976 //------------------------------------------------------------------ 1977 /// Sends a process a UNIX signal \a signal. 1978 /// 1979 /// This function is not meant to be overridden by Process 1980 /// subclasses. 1981 /// 1982 /// @return 1983 /// Returns an error object. 1984 //------------------------------------------------------------------ 1985 Error 1986 Signal (int signal); 1987 1988 virtual UnixSignals & 1989 GetUnixSignals () 1990 { 1991 return m_unix_signals; 1992 } 1993 1994 //================================================================== 1995 // Plug-in Process Control Overrides 1996 //================================================================== 1997 1998 //------------------------------------------------------------------ 1999 /// Called before attaching to a process. 2000 /// 2001 /// Allow Process plug-ins to execute some code before attaching a 2002 /// process. 2003 /// 2004 /// @return 2005 /// Returns an error object. 2006 //------------------------------------------------------------------ 2007 virtual Error 2008 WillAttachToProcessWithID (lldb::pid_t pid) 2009 { 2010 return Error(); 2011 } 2012 2013 //------------------------------------------------------------------ 2014 /// Called before attaching to a process. 2015 /// 2016 /// Allow Process plug-ins to execute some code before attaching a 2017 /// process. 2018 /// 2019 /// @return 2020 /// Returns an error object. 2021 //------------------------------------------------------------------ 2022 virtual Error 2023 WillAttachToProcessWithName (const char *process_name, bool wait_for_launch) 2024 { 2025 return Error(); 2026 } 2027 2028 //------------------------------------------------------------------ 2029 /// Attach to a remote system via a URL 2030 /// 2031 /// @param[in] strm 2032 /// A stream where output intended for the user 2033 /// (if the driver has a way to display that) generated during 2034 /// the connection. This may be NULL if no output is needed.A 2035 /// 2036 /// @param[in] remote_url 2037 /// The URL format that we are connecting to. 2038 /// 2039 /// @return 2040 /// Returns an error object. 2041 //------------------------------------------------------------------ 2042 virtual Error 2043 DoConnectRemote (Stream *strm, const char *remote_url) 2044 { 2045 Error error; 2046 error.SetErrorString ("remote connections are not supported"); 2047 return error; 2048 } 2049 2050 //------------------------------------------------------------------ 2051 /// Attach to an existing process using a process ID. 2052 /// 2053 /// @param[in] pid 2054 /// The process ID that we should attempt to attach to. 2055 /// 2056 /// @return 2057 /// Returns \a pid if attaching was successful, or 2058 /// LLDB_INVALID_PROCESS_ID if attaching fails. 2059 //------------------------------------------------------------------ 2060 virtual Error 2061 DoAttachToProcessWithID (lldb::pid_t pid) 2062 { 2063 Error error; 2064 error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString()); 2065 return error; 2066 } 2067 2068 //------------------------------------------------------------------ 2069 /// Attach to an existing process using a process ID. 2070 /// 2071 /// @param[in] pid 2072 /// The process ID that we should attempt to attach to. 2073 /// 2074 /// @param[in] attach_info 2075 /// Information on how to do the attach. For example, GetUserID() 2076 /// will return the uid to attach as. 2077 /// 2078 /// @return 2079 /// Returns \a pid if attaching was successful, or 2080 /// LLDB_INVALID_PROCESS_ID if attaching fails. 2081 /// hanming : need flag 2082 //------------------------------------------------------------------ 2083 virtual Error 2084 DoAttachToProcessWithID (lldb::pid_t pid, const ProcessAttachInfo &attach_info) 2085 { 2086 Error error; 2087 error.SetErrorStringWithFormat("error: %s does not support attaching to a process by pid", GetPluginName().GetCString()); 2088 return error; 2089 } 2090 2091 //------------------------------------------------------------------ 2092 /// Attach to an existing process using a partial process name. 2093 /// 2094 /// @param[in] process_name 2095 /// The name of the process to attach to. 2096 /// 2097 /// @param[in] wait_for_launch 2098 /// If \b true, wait for the process to be launched and attach 2099 /// as soon as possible after it does launch. If \b false, then 2100 /// search for a matching process the currently exists. 2101 /// 2102 /// @param[in] attach_info 2103 /// Information on how to do the attach. For example, GetUserID() 2104 /// will return the uid to attach as. 2105 /// 2106 /// @return 2107 /// Returns \a pid if attaching was successful, or 2108 /// LLDB_INVALID_PROCESS_ID if attaching fails. 2109 //------------------------------------------------------------------ 2110 virtual Error 2111 DoAttachToProcessWithName (const char *process_name, bool wait_for_launch, const ProcessAttachInfo &attach_info) 2112 { 2113 Error error; 2114 error.SetErrorString("attach by name is not supported"); 2115 return error; 2116 } 2117 2118 //------------------------------------------------------------------ 2119 /// Called after attaching a process. 2120 /// 2121 /// Allow Process plug-ins to execute some code after attaching to 2122 /// a process. 2123 //------------------------------------------------------------------ 2124 virtual void 2125 DidAttach () {} 2126 2127 2128 //------------------------------------------------------------------ 2129 /// Called after a process re-execs itself. 2130 /// 2131 /// Allow Process plug-ins to execute some code after a process has 2132 /// exec'ed itself. Subclasses typically should override DoDidExec() 2133 /// as the lldb_private::Process class needs to remove its dynamic 2134 /// loader, runtime, ABI and other plug-ins, as well as unload all 2135 /// shared libraries. 2136 //------------------------------------------------------------------ 2137 virtual void 2138 DidExec (); 2139 2140 //------------------------------------------------------------------ 2141 /// Subclasses of Process should implement this function if they 2142 /// need to do anything after a process exec's itself. 2143 //------------------------------------------------------------------ 2144 virtual void 2145 DoDidExec () 2146 { 2147 } 2148 2149 //------------------------------------------------------------------ 2150 /// Called before launching to a process. 2151 /// 2152 /// Allow Process plug-ins to execute some code before launching a 2153 /// process. 2154 /// 2155 /// @return 2156 /// Returns an error object. 2157 //------------------------------------------------------------------ 2158 virtual Error 2159 WillLaunch (Module* module) 2160 { 2161 return Error(); 2162 } 2163 2164 //------------------------------------------------------------------ 2165 /// Launch a new process. 2166 /// 2167 /// Launch a new process by spawning a new process using \a module's 2168 /// file as the file to launch. Arguments are given in \a argv, 2169 /// and the environment variables are in \a envp. Standard input 2170 /// and output files can be optionally re-directed to \a stdin_path, 2171 /// \a stdout_path, and \a stderr_path. 2172 /// 2173 /// @param[in] module 2174 /// The module from which to extract the file specification and 2175 /// launch. 2176 /// 2177 /// @param[in] argv 2178 /// The argument array. 2179 /// 2180 /// @param[in] envp 2181 /// The environment array. 2182 /// 2183 /// @param[in] launch_flags 2184 /// Flags to modify the launch (@see lldb::LaunchFlags) 2185 /// 2186 /// @param[in] stdin_path 2187 /// The path to use when re-directing the STDIN of the new 2188 /// process. If all stdXX_path arguments are NULL, a pseudo 2189 /// terminal will be used. 2190 /// 2191 /// @param[in] stdout_path 2192 /// The path to use when re-directing the STDOUT of the new 2193 /// process. If all stdXX_path arguments are NULL, a pseudo 2194 /// terminal will be used. 2195 /// 2196 /// @param[in] stderr_path 2197 /// The path to use when re-directing the STDERR of the new 2198 /// process. If all stdXX_path arguments are NULL, a pseudo 2199 /// terminal will be used. 2200 /// 2201 /// @param[in] working_directory 2202 /// The working directory to have the child process run in 2203 /// 2204 /// @return 2205 /// A new valid process ID, or LLDB_INVALID_PROCESS_ID if 2206 /// launching fails. 2207 //------------------------------------------------------------------ 2208 virtual Error 2209 DoLaunch (Module *exe_module, 2210 const ProcessLaunchInfo &launch_info) 2211 { 2212 Error error; 2213 error.SetErrorStringWithFormat("error: %s does not support launching processes", GetPluginName().GetCString()); 2214 return error; 2215 } 2216 2217 2218 //------------------------------------------------------------------ 2219 /// Called after launching a process. 2220 /// 2221 /// Allow Process plug-ins to execute some code after launching 2222 /// a process. 2223 //------------------------------------------------------------------ 2224 virtual void 2225 DidLaunch () {} 2226 2227 2228 2229 //------------------------------------------------------------------ 2230 /// Called before resuming to a process. 2231 /// 2232 /// Allow Process plug-ins to execute some code before resuming a 2233 /// process. 2234 /// 2235 /// @return 2236 /// Returns an error object. 2237 //------------------------------------------------------------------ 2238 virtual Error 2239 WillResume () { return Error(); } 2240 2241 //------------------------------------------------------------------ 2242 /// Resumes all of a process's threads as configured using the 2243 /// Thread run control functions. 2244 /// 2245 /// Threads for a process should be updated with one of the run 2246 /// control actions (resume, step, or suspend) that they should take 2247 /// when the process is resumed. If no run control action is given 2248 /// to a thread it will be resumed by default. 2249 /// 2250 /// @return 2251 /// Returns \b true if the process successfully resumes using 2252 /// the thread run control actions, \b false otherwise. 2253 /// 2254 /// @see Thread:Resume() 2255 /// @see Thread:Step() 2256 /// @see Thread:Suspend() 2257 //------------------------------------------------------------------ 2258 virtual Error 2259 DoResume () 2260 { 2261 Error error; 2262 error.SetErrorStringWithFormat("error: %s does not support resuming processes", GetPluginName().GetCString()); 2263 return error; 2264 } 2265 2266 2267 //------------------------------------------------------------------ 2268 /// Called after resuming a process. 2269 /// 2270 /// Allow Process plug-ins to execute some code after resuming 2271 /// a process. 2272 //------------------------------------------------------------------ 2273 virtual void 2274 DidResume () {} 2275 2276 2277 //------------------------------------------------------------------ 2278 /// Called before halting to a process. 2279 /// 2280 /// Allow Process plug-ins to execute some code before halting a 2281 /// process. 2282 /// 2283 /// @return 2284 /// Returns an error object. 2285 //------------------------------------------------------------------ 2286 virtual Error 2287 WillHalt () { return Error(); } 2288 2289 //------------------------------------------------------------------ 2290 /// Halts a running process. 2291 /// 2292 /// DoHalt must produce one and only one stop StateChanged event if it actually 2293 /// stops the process. If the stop happens through some natural event (for 2294 /// instance a SIGSTOP), then forwarding that event will do. Otherwise, you must 2295 /// generate the event manually. Note also, the private event thread is stopped when 2296 /// DoHalt is run to prevent the events generated while halting to trigger 2297 /// other state changes before the halt is complete. 2298 /// 2299 /// @param[out] caused_stop 2300 /// If true, then this Halt caused the stop, otherwise, the 2301 /// process was already stopped. 2302 /// 2303 /// @return 2304 /// Returns \b true if the process successfully halts, \b false 2305 /// otherwise. 2306 //------------------------------------------------------------------ 2307 virtual Error 2308 DoHalt (bool &caused_stop) 2309 { 2310 Error error; 2311 error.SetErrorStringWithFormat("error: %s does not support halting processes", GetPluginName().GetCString()); 2312 return error; 2313 } 2314 2315 2316 //------------------------------------------------------------------ 2317 /// Called after halting a process. 2318 /// 2319 /// Allow Process plug-ins to execute some code after halting 2320 /// a process. 2321 //------------------------------------------------------------------ 2322 virtual void 2323 DidHalt () {} 2324 2325 //------------------------------------------------------------------ 2326 /// Called before detaching from a process. 2327 /// 2328 /// Allow Process plug-ins to execute some code before detaching 2329 /// from a process. 2330 /// 2331 /// @return 2332 /// Returns an error object. 2333 //------------------------------------------------------------------ 2334 virtual Error 2335 WillDetach () 2336 { 2337 return Error(); 2338 } 2339 2340 //------------------------------------------------------------------ 2341 /// Detaches from a running or stopped process. 2342 /// 2343 /// @return 2344 /// Returns \b true if the process successfully detaches, \b 2345 /// false otherwise. 2346 //------------------------------------------------------------------ 2347 virtual Error 2348 DoDetach (bool keep_stopped) 2349 { 2350 Error error; 2351 error.SetErrorStringWithFormat("error: %s does not support detaching from processes", GetPluginName().GetCString()); 2352 return error; 2353 } 2354 2355 2356 //------------------------------------------------------------------ 2357 /// Called after detaching from a process. 2358 /// 2359 /// Allow Process plug-ins to execute some code after detaching 2360 /// from a process. 2361 //------------------------------------------------------------------ 2362 virtual void 2363 DidDetach () {} 2364 2365 virtual bool 2366 DetachRequiresHalt() { return false; } 2367 2368 //------------------------------------------------------------------ 2369 /// Called before sending a signal to a process. 2370 /// 2371 /// Allow Process plug-ins to execute some code before sending a 2372 /// signal to a process. 2373 /// 2374 /// @return 2375 /// Returns no error if it is safe to proceed with a call to 2376 /// Process::DoSignal(int), otherwise an error describing what 2377 /// prevents the signal from being sent. 2378 //------------------------------------------------------------------ 2379 virtual Error 2380 WillSignal () { return Error(); } 2381 2382 //------------------------------------------------------------------ 2383 /// Sends a process a UNIX signal \a signal. 2384 /// 2385 /// @return 2386 /// Returns an error object. 2387 //------------------------------------------------------------------ 2388 virtual Error 2389 DoSignal (int signal) 2390 { 2391 Error error; 2392 error.SetErrorStringWithFormat("error: %s does not support senging signals to processes", GetPluginName().GetCString()); 2393 return error; 2394 } 2395 2396 virtual Error 2397 WillDestroy () { return Error(); } 2398 2399 virtual Error 2400 DoDestroy () = 0; 2401 2402 virtual void 2403 DidDestroy () { } 2404 2405 virtual bool 2406 DestroyRequiresHalt() { return true; } 2407 2408 2409 //------------------------------------------------------------------ 2410 /// Called after sending a signal to a process. 2411 /// 2412 /// Allow Process plug-ins to execute some code after sending a 2413 /// signal to a process. 2414 //------------------------------------------------------------------ 2415 virtual void 2416 DidSignal () {} 2417 2418 //------------------------------------------------------------------ 2419 /// Currently called as part of ShouldStop. 2420 /// FIXME: Should really happen when the target stops before the 2421 /// event is taken from the queue... 2422 /// 2423 /// This callback is called as the event 2424 /// is about to be queued up to allow Process plug-ins to execute 2425 /// some code prior to clients being notified that a process was 2426 /// stopped. Common operations include updating the thread list, 2427 /// invalidating any thread state (registers, stack, etc) prior to 2428 /// letting the notification go out. 2429 /// 2430 //------------------------------------------------------------------ 2431 virtual void 2432 RefreshStateAfterStop () = 0; 2433 2434 //------------------------------------------------------------------ 2435 /// Get the target object pointer for this module. 2436 /// 2437 /// @return 2438 /// A Target object pointer to the target that owns this 2439 /// module. 2440 //------------------------------------------------------------------ 2441 Target & 2442 GetTarget () 2443 { 2444 return m_target; 2445 } 2446 2447 //------------------------------------------------------------------ 2448 /// Get the const target object pointer for this module. 2449 /// 2450 /// @return 2451 /// A const Target object pointer to the target that owns this 2452 /// module. 2453 //------------------------------------------------------------------ 2454 const Target & 2455 GetTarget () const 2456 { 2457 return m_target; 2458 } 2459 2460 //------------------------------------------------------------------ 2461 /// Flush all data in the process. 2462 /// 2463 /// Flush the memory caches, all threads, and any other cached data 2464 /// in the process. 2465 /// 2466 /// This function can be called after a world changing event like 2467 /// adding a new symbol file, or after the process makes a large 2468 /// context switch (from boot ROM to booted into an OS). 2469 //------------------------------------------------------------------ 2470 void 2471 Flush (); 2472 2473 //------------------------------------------------------------------ 2474 /// Get accessor for the current process state. 2475 /// 2476 /// @return 2477 /// The current state of the process. 2478 /// 2479 /// @see lldb::StateType 2480 //------------------------------------------------------------------ 2481 lldb::StateType 2482 GetState (); 2483 2484 ExecutionResults 2485 RunThreadPlan (ExecutionContext &exe_ctx, 2486 lldb::ThreadPlanSP &thread_plan_sp, 2487 bool stop_others, 2488 bool run_others, 2489 bool unwind_on_error, 2490 bool ignore_breakpoints, 2491 uint32_t timeout_usec, 2492 Stream &errors); 2493 2494 static const char * 2495 ExecutionResultAsCString (ExecutionResults result); 2496 2497 void 2498 GetStatus (Stream &ostrm); 2499 2500 size_t 2501 GetThreadStatus (Stream &ostrm, 2502 bool only_threads_with_stop_reason, 2503 uint32_t start_frame, 2504 uint32_t num_frames, 2505 uint32_t num_frames_with_source); 2506 2507 void 2508 SendAsyncInterrupt (); 2509 2510 protected: 2511 2512 void 2513 SetState (lldb::EventSP &event_sp); 2514 2515 lldb::StateType 2516 GetPrivateState (); 2517 2518 //------------------------------------------------------------------ 2519 /// The "private" side of resuming a process. This doesn't alter the 2520 /// state of m_run_lock, but just causes the process to resume. 2521 /// 2522 /// @return 2523 /// An Error object describing the success or failure of the resume. 2524 //------------------------------------------------------------------ 2525 Error 2526 PrivateResume (); 2527 2528 //------------------------------------------------------------------ 2529 // Called internally 2530 //------------------------------------------------------------------ 2531 void 2532 CompleteAttach (); 2533 2534 public: 2535 //------------------------------------------------------------------ 2536 /// Get the exit status for a process. 2537 /// 2538 /// @return 2539 /// The process's return code, or -1 if the current process 2540 /// state is not eStateExited. 2541 //------------------------------------------------------------------ 2542 int 2543 GetExitStatus (); 2544 2545 //------------------------------------------------------------------ 2546 /// Get a textual description of what the process exited. 2547 /// 2548 /// @return 2549 /// The textual description of why the process exited, or NULL 2550 /// if there is no description available. 2551 //------------------------------------------------------------------ 2552 const char * 2553 GetExitDescription (); 2554 2555 2556 virtual void 2557 DidExit () 2558 { 2559 } 2560 2561 //------------------------------------------------------------------ 2562 /// Get the Modification ID of the process. 2563 /// 2564 /// @return 2565 /// The modification ID of the process. 2566 //------------------------------------------------------------------ 2567 ProcessModID 2568 GetModID () const 2569 { 2570 return m_mod_id; 2571 } 2572 2573 const ProcessModID & 2574 GetModIDRef () const 2575 { 2576 return m_mod_id; 2577 } 2578 2579 uint32_t 2580 GetStopID () const 2581 { 2582 return m_mod_id.GetStopID(); 2583 } 2584 2585 uint32_t 2586 GetResumeID () const 2587 { 2588 return m_mod_id.GetResumeID(); 2589 } 2590 2591 uint32_t 2592 GetLastUserExpressionResumeID () const 2593 { 2594 return m_mod_id.GetLastUserExpressionResumeID(); 2595 } 2596 2597 uint32_t 2598 GetLastNaturalStopID() 2599 { 2600 return m_mod_id.GetLastNaturalStopID(); 2601 } 2602 2603 //------------------------------------------------------------------ 2604 /// Set accessor for the process exit status (return code). 2605 /// 2606 /// Sometimes a child exits and the exit can be detected by global 2607 /// functions (signal handler for SIGCHLD for example). This 2608 /// accessor allows the exit status to be set from an external 2609 /// source. 2610 /// 2611 /// Setting this will cause a eStateExited event to be posted to 2612 /// the process event queue. 2613 /// 2614 /// @param[in] exit_status 2615 /// The value for the process's return code. 2616 /// 2617 /// @see lldb::StateType 2618 //------------------------------------------------------------------ 2619 virtual bool 2620 SetExitStatus (int exit_status, const char *cstr); 2621 2622 //------------------------------------------------------------------ 2623 /// Check if a process is still alive. 2624 /// 2625 /// @return 2626 /// Returns \b true if the process is still valid, \b false 2627 /// otherwise. 2628 //------------------------------------------------------------------ 2629 virtual bool 2630 IsAlive () = 0; 2631 2632 //------------------------------------------------------------------ 2633 /// Before lldb detaches from a process, it warns the user that they are about to lose their debug session. 2634 /// In some cases, this warning doesn't need to be emitted -- for instance, with core file debugging where 2635 /// the user can reconstruct the "state" by simply re-running the debugger on the core file. 2636 /// 2637 /// @return 2638 // true if the user should be warned about detaching from this process. 2639 //------------------------------------------------------------------ 2640 virtual bool 2641 WarnBeforeDetach () const 2642 { 2643 return true; 2644 } 2645 2646 //------------------------------------------------------------------ 2647 /// Actually do the reading of memory from a process. 2648 /// 2649 /// Subclasses must override this function and can return fewer 2650 /// bytes than requested when memory requests are too large. This 2651 /// class will break up the memory requests and keep advancing the 2652 /// arguments along as needed. 2653 /// 2654 /// @param[in] vm_addr 2655 /// A virtual load address that indicates where to start reading 2656 /// memory from. 2657 /// 2658 /// @param[in] size 2659 /// The number of bytes to read. 2660 /// 2661 /// @param[out] buf 2662 /// A byte buffer that is at least \a size bytes long that 2663 /// will receive the memory bytes. 2664 /// 2665 /// @return 2666 /// The number of bytes that were actually read into \a buf. 2667 //------------------------------------------------------------------ 2668 virtual size_t 2669 DoReadMemory (lldb::addr_t vm_addr, 2670 void *buf, 2671 size_t size, 2672 Error &error) = 0; 2673 2674 //------------------------------------------------------------------ 2675 /// Read of memory from a process. 2676 /// 2677 /// This function will read memory from the current process's 2678 /// address space and remove any traps that may have been inserted 2679 /// into the memory. 2680 /// 2681 /// This function is not meant to be overridden by Process 2682 /// subclasses, the subclasses should implement 2683 /// Process::DoReadMemory (lldb::addr_t, size_t, void *). 2684 /// 2685 /// @param[in] vm_addr 2686 /// A virtual load address that indicates where to start reading 2687 /// memory from. 2688 /// 2689 /// @param[out] buf 2690 /// A byte buffer that is at least \a size bytes long that 2691 /// will receive the memory bytes. 2692 /// 2693 /// @param[in] size 2694 /// The number of bytes to read. 2695 /// 2696 /// @return 2697 /// The number of bytes that were actually read into \a buf. If 2698 /// the returned number is greater than zero, yet less than \a 2699 /// size, then this function will get called again with \a 2700 /// vm_addr, \a buf, and \a size updated appropriately. Zero is 2701 /// returned to indicate an error. 2702 //------------------------------------------------------------------ 2703 virtual size_t 2704 ReadMemory (lldb::addr_t vm_addr, 2705 void *buf, 2706 size_t size, 2707 Error &error); 2708 2709 //------------------------------------------------------------------ 2710 /// Read a NULL terminated string from memory 2711 /// 2712 /// This function will read a cache page at a time until a NULL 2713 /// string terminator is found. It will stop reading if an aligned 2714 /// sequence of NULL termination \a type_width bytes is not found 2715 /// before reading \a cstr_max_len bytes. The results are always 2716 /// guaranteed to be NULL terminated, and that no more than 2717 /// (max_bytes - type_width) bytes will be read. 2718 /// 2719 /// @param[in] vm_addr 2720 /// The virtual load address to start the memory read. 2721 /// 2722 /// @param[in] str 2723 /// A character buffer containing at least max_bytes. 2724 /// 2725 /// @param[in] max_bytes 2726 /// The maximum number of bytes to read. 2727 /// 2728 /// @param[in] error 2729 /// The error status of the read operation. 2730 /// 2731 /// @param[in] type_width 2732 /// The size of the null terminator (1 to 4 bytes per 2733 /// character). Defaults to 1. 2734 /// 2735 /// @return 2736 /// The error status or the number of bytes prior to the null terminator. 2737 //------------------------------------------------------------------ 2738 size_t 2739 ReadStringFromMemory (lldb::addr_t vm_addr, 2740 char *str, 2741 size_t max_bytes, 2742 Error &error, 2743 size_t type_width = 1); 2744 2745 //------------------------------------------------------------------ 2746 /// Read a NULL terminated C string from memory 2747 /// 2748 /// This function will read a cache page at a time until the NULL 2749 /// C string terminator is found. It will stop reading if the NULL 2750 /// termination byte isn't found before reading \a cstr_max_len 2751 /// bytes, and the results are always guaranteed to be NULL 2752 /// terminated (at most cstr_max_len - 1 bytes will be read). 2753 //------------------------------------------------------------------ 2754 size_t 2755 ReadCStringFromMemory (lldb::addr_t vm_addr, 2756 char *cstr, 2757 size_t cstr_max_len, 2758 Error &error); 2759 2760 size_t 2761 ReadCStringFromMemory (lldb::addr_t vm_addr, 2762 std::string &out_str, 2763 Error &error); 2764 2765 size_t 2766 ReadMemoryFromInferior (lldb::addr_t vm_addr, 2767 void *buf, 2768 size_t size, 2769 Error &error); 2770 2771 //------------------------------------------------------------------ 2772 /// Reads an unsigned integer of the specified byte size from 2773 /// process memory. 2774 /// 2775 /// @param[in] load_addr 2776 /// A load address of the integer to read. 2777 /// 2778 /// @param[in] byte_size 2779 /// The size in byte of the integer to read. 2780 /// 2781 /// @param[in] fail_value 2782 /// The value to return if we fail to read an integer. 2783 /// 2784 /// @param[out] error 2785 /// An error that indicates the success or failure of this 2786 /// operation. If error indicates success (error.Success()), 2787 /// then the value returned can be trusted, otherwise zero 2788 /// will be returned. 2789 /// 2790 /// @return 2791 /// The unsigned integer that was read from the process memory 2792 /// space. If the integer was smaller than a uint64_t, any 2793 /// unused upper bytes will be zero filled. If the process 2794 /// byte order differs from the host byte order, the integer 2795 /// value will be appropriately byte swapped into host byte 2796 /// order. 2797 //------------------------------------------------------------------ 2798 uint64_t 2799 ReadUnsignedIntegerFromMemory (lldb::addr_t load_addr, 2800 size_t byte_size, 2801 uint64_t fail_value, 2802 Error &error); 2803 2804 lldb::addr_t 2805 ReadPointerFromMemory (lldb::addr_t vm_addr, 2806 Error &error); 2807 2808 bool 2809 WritePointerToMemory (lldb::addr_t vm_addr, 2810 lldb::addr_t ptr_value, 2811 Error &error); 2812 2813 //------------------------------------------------------------------ 2814 /// Actually do the writing of memory to a process. 2815 /// 2816 /// @param[in] vm_addr 2817 /// A virtual load address that indicates where to start writing 2818 /// memory to. 2819 /// 2820 /// @param[in] buf 2821 /// A byte buffer that is at least \a size bytes long that 2822 /// contains the data to write. 2823 /// 2824 /// @param[in] size 2825 /// The number of bytes to write. 2826 /// 2827 /// @param[out] error 2828 /// An error value in case the memory write fails. 2829 /// 2830 /// @return 2831 /// The number of bytes that were actually written. 2832 //------------------------------------------------------------------ 2833 virtual size_t 2834 DoWriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error) 2835 { 2836 error.SetErrorStringWithFormat("error: %s does not support writing to processes", GetPluginName().GetCString()); 2837 return 0; 2838 } 2839 2840 2841 //------------------------------------------------------------------ 2842 /// Write all or part of a scalar value to memory. 2843 /// 2844 /// The value contained in \a scalar will be swapped to match the 2845 /// byte order of the process that is being debugged. If \a size is 2846 /// less than the size of scalar, the least significate \a size bytes 2847 /// from scalar will be written. If \a size is larger than the byte 2848 /// size of scalar, then the extra space will be padded with zeros 2849 /// and the scalar value will be placed in the least significant 2850 /// bytes in memory. 2851 /// 2852 /// @param[in] vm_addr 2853 /// A virtual load address that indicates where to start writing 2854 /// memory to. 2855 /// 2856 /// @param[in] scalar 2857 /// The scalar to write to the debugged process. 2858 /// 2859 /// @param[in] size 2860 /// This value can be smaller or larger than the scalar value 2861 /// itself. If \a size is smaller than the size of \a scalar, 2862 /// the least significant bytes in \a scalar will be used. If 2863 /// \a size is larger than the byte size of \a scalar, then 2864 /// the extra space will be padded with zeros. If \a size is 2865 /// set to UINT32_MAX, then the size of \a scalar will be used. 2866 /// 2867 /// @param[out] error 2868 /// An error value in case the memory write fails. 2869 /// 2870 /// @return 2871 /// The number of bytes that were actually written. 2872 //------------------------------------------------------------------ 2873 size_t 2874 WriteScalarToMemory (lldb::addr_t vm_addr, 2875 const Scalar &scalar, 2876 size_t size, 2877 Error &error); 2878 2879 size_t 2880 ReadScalarIntegerFromMemory (lldb::addr_t addr, 2881 uint32_t byte_size, 2882 bool is_signed, 2883 Scalar &scalar, 2884 Error &error); 2885 2886 //------------------------------------------------------------------ 2887 /// Write memory to a process. 2888 /// 2889 /// This function will write memory to the current process's 2890 /// address space and maintain any traps that might be present due 2891 /// to software breakpoints. 2892 /// 2893 /// This function is not meant to be overridden by Process 2894 /// subclasses, the subclasses should implement 2895 /// Process::DoWriteMemory (lldb::addr_t, size_t, void *). 2896 /// 2897 /// @param[in] vm_addr 2898 /// A virtual load address that indicates where to start writing 2899 /// memory to. 2900 /// 2901 /// @param[in] buf 2902 /// A byte buffer that is at least \a size bytes long that 2903 /// contains the data to write. 2904 /// 2905 /// @param[in] size 2906 /// The number of bytes to write. 2907 /// 2908 /// @return 2909 /// The number of bytes that were actually written. 2910 //------------------------------------------------------------------ 2911 size_t 2912 WriteMemory (lldb::addr_t vm_addr, const void *buf, size_t size, Error &error); 2913 2914 2915 //------------------------------------------------------------------ 2916 /// Actually allocate memory in the process. 2917 /// 2918 /// This function will allocate memory in the process's address 2919 /// space. This can't rely on the generic function calling mechanism, 2920 /// since that requires this function. 2921 /// 2922 /// @param[in] size 2923 /// The size of the allocation requested. 2924 /// 2925 /// @return 2926 /// The address of the allocated buffer in the process, or 2927 /// LLDB_INVALID_ADDRESS if the allocation failed. 2928 //------------------------------------------------------------------ 2929 2930 virtual lldb::addr_t 2931 DoAllocateMemory (size_t size, uint32_t permissions, Error &error) 2932 { 2933 error.SetErrorStringWithFormat("error: %s does not support allocating in the debug process", GetPluginName().GetCString()); 2934 return LLDB_INVALID_ADDRESS; 2935 } 2936 2937 2938 //------------------------------------------------------------------ 2939 /// The public interface to allocating memory in the process. 2940 /// 2941 /// This function will allocate memory in the process's address 2942 /// space. This can't rely on the generic function calling mechanism, 2943 /// since that requires this function. 2944 /// 2945 /// @param[in] size 2946 /// The size of the allocation requested. 2947 /// 2948 /// @param[in] permissions 2949 /// Or together any of the lldb::Permissions bits. The permissions on 2950 /// a given memory allocation can't be changed after allocation. Note 2951 /// that a block that isn't set writable can still be written on from lldb, 2952 /// just not by the process itself. 2953 /// 2954 /// @param[in/out] error 2955 /// An error object to fill in if things go wrong. 2956 /// @return 2957 /// The address of the allocated buffer in the process, or 2958 /// LLDB_INVALID_ADDRESS if the allocation failed. 2959 //------------------------------------------------------------------ 2960 2961 lldb::addr_t 2962 AllocateMemory (size_t size, uint32_t permissions, Error &error); 2963 2964 2965 //------------------------------------------------------------------ 2966 /// Resolve dynamically loaded indirect functions. 2967 /// 2968 /// @param[in] address 2969 /// The load address of the indirect function to resolve. 2970 /// 2971 /// @param[out] error 2972 /// An error value in case the resolve fails. 2973 /// 2974 /// @return 2975 /// The address of the resolved function. 2976 /// LLDB_INVALID_ADDRESS if the resolution failed. 2977 //------------------------------------------------------------------ 2978 2979 virtual lldb::addr_t 2980 ResolveIndirectFunction(const Address *address, Error &error) 2981 { 2982 error.SetErrorStringWithFormat("error: %s does not support indirect functions in the debug process", GetPluginName().GetCString()); 2983 return LLDB_INVALID_ADDRESS; 2984 } 2985 2986 virtual Error 2987 GetMemoryRegionInfo (lldb::addr_t load_addr, 2988 MemoryRegionInfo &range_info) 2989 { 2990 Error error; 2991 error.SetErrorString ("Process::GetMemoryRegionInfo() not supported"); 2992 return error; 2993 } 2994 2995 virtual Error 2996 GetWatchpointSupportInfo (uint32_t &num) 2997 { 2998 Error error; 2999 num = 0; 3000 error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported"); 3001 return error; 3002 } 3003 3004 virtual Error 3005 GetWatchpointSupportInfo (uint32_t &num, bool& after) 3006 { 3007 Error error; 3008 num = 0; 3009 after = true; 3010 error.SetErrorString ("Process::GetWatchpointSupportInfo() not supported"); 3011 return error; 3012 } 3013 3014 lldb::ModuleSP 3015 ReadModuleFromMemory (const FileSpec& file_spec, 3016 lldb::addr_t header_addr); 3017 3018 //------------------------------------------------------------------ 3019 /// Attempt to get the attributes for a region of memory in the process. 3020 /// 3021 /// It may be possible for the remote debug server to inspect attributes 3022 /// for a region of memory in the process, such as whether there is a 3023 /// valid page of memory at a given address or whether that page is 3024 /// readable/writable/executable by the process. 3025 /// 3026 /// @param[in] load_addr 3027 /// The address of interest in the process. 3028 /// 3029 /// @param[out] permissions 3030 /// If this call returns successfully, this bitmask will have 3031 /// its Permissions bits set to indicate whether the region is 3032 /// readable/writable/executable. If this call fails, the 3033 /// bitmask values are undefined. 3034 /// 3035 /// @return 3036 /// Returns true if it was able to determine the attributes of the 3037 /// memory region. False if not. 3038 //------------------------------------------------------------------ 3039 3040 virtual bool 3041 GetLoadAddressPermissions (lldb::addr_t load_addr, uint32_t &permissions) 3042 { 3043 MemoryRegionInfo range_info; 3044 permissions = 0; 3045 Error error (GetMemoryRegionInfo (load_addr, range_info)); 3046 if (!error.Success()) 3047 return false; 3048 if (range_info.GetReadable() == MemoryRegionInfo::eDontKnow 3049 || range_info.GetWritable() == MemoryRegionInfo::eDontKnow 3050 || range_info.GetExecutable() == MemoryRegionInfo::eDontKnow) 3051 { 3052 return false; 3053 } 3054 3055 if (range_info.GetReadable() == MemoryRegionInfo::eYes) 3056 permissions |= lldb::ePermissionsReadable; 3057 3058 if (range_info.GetWritable() == MemoryRegionInfo::eYes) 3059 permissions |= lldb::ePermissionsWritable; 3060 3061 if (range_info.GetExecutable() == MemoryRegionInfo::eYes) 3062 permissions |= lldb::ePermissionsExecutable; 3063 3064 return true; 3065 } 3066 3067 //------------------------------------------------------------------ 3068 /// Determines whether executing JIT-compiled code in this process 3069 /// is possible. 3070 /// 3071 /// @return 3072 /// True if execution of JIT code is possible; false otherwise. 3073 //------------------------------------------------------------------ 3074 bool CanJIT (); 3075 3076 //------------------------------------------------------------------ 3077 /// Sets whether executing JIT-compiled code in this process 3078 /// is possible. 3079 /// 3080 /// @param[in] can_jit 3081 /// True if execution of JIT code is possible; false otherwise. 3082 //------------------------------------------------------------------ 3083 void SetCanJIT (bool can_jit); 3084 3085 //------------------------------------------------------------------ 3086 /// Actually deallocate memory in the process. 3087 /// 3088 /// This function will deallocate memory in the process's address 3089 /// space that was allocated with AllocateMemory. 3090 /// 3091 /// @param[in] ptr 3092 /// A return value from AllocateMemory, pointing to the memory you 3093 /// want to deallocate. 3094 /// 3095 /// @return 3096 /// \btrue if the memory was deallocated, \bfalse otherwise. 3097 //------------------------------------------------------------------ 3098 3099 virtual Error 3100 DoDeallocateMemory (lldb::addr_t ptr) 3101 { 3102 Error error; 3103 error.SetErrorStringWithFormat("error: %s does not support deallocating in the debug process", GetPluginName().GetCString()); 3104 return error; 3105 } 3106 3107 3108 //------------------------------------------------------------------ 3109 /// The public interface to deallocating memory in the process. 3110 /// 3111 /// This function will deallocate memory in the process's address 3112 /// space that was allocated with AllocateMemory. 3113 /// 3114 /// @param[in] ptr 3115 /// A return value from AllocateMemory, pointing to the memory you 3116 /// want to deallocate. 3117 /// 3118 /// @return 3119 /// \btrue if the memory was deallocated, \bfalse otherwise. 3120 //------------------------------------------------------------------ 3121 3122 Error 3123 DeallocateMemory (lldb::addr_t ptr); 3124 3125 //------------------------------------------------------------------ 3126 /// Get any available STDOUT. 3127 /// 3128 /// If the process was launched without supplying valid file paths 3129 /// for stdin, stdout, and stderr, then the Process class might 3130 /// try to cache the STDOUT for the process if it is able. Events 3131 /// will be queued indicating that there is STDOUT available that 3132 /// can be retrieved using this function. 3133 /// 3134 /// @param[out] buf 3135 /// A buffer that will receive any STDOUT bytes that are 3136 /// currently available. 3137 /// 3138 /// @param[out] buf_size 3139 /// The size in bytes for the buffer \a buf. 3140 /// 3141 /// @return 3142 /// The number of bytes written into \a buf. If this value is 3143 /// equal to \a buf_size, another call to this function should 3144 /// be made to retrieve more STDOUT data. 3145 //------------------------------------------------------------------ 3146 virtual size_t 3147 GetSTDOUT (char *buf, size_t buf_size, Error &error); 3148 3149 //------------------------------------------------------------------ 3150 /// Get any available STDERR. 3151 /// 3152 /// If the process was launched without supplying valid file paths 3153 /// for stdin, stdout, and stderr, then the Process class might 3154 /// try to cache the STDERR for the process if it is able. Events 3155 /// will be queued indicating that there is STDERR available that 3156 /// can be retrieved using this function. 3157 /// 3158 /// @param[out] buf 3159 /// A buffer that will receive any STDERR bytes that are 3160 /// currently available. 3161 /// 3162 /// @param[out] buf_size 3163 /// The size in bytes for the buffer \a buf. 3164 /// 3165 /// @return 3166 /// The number of bytes written into \a buf. If this value is 3167 /// equal to \a buf_size, another call to this function should 3168 /// be made to retrieve more STDERR data. 3169 //------------------------------------------------------------------ 3170 virtual size_t 3171 GetSTDERR (char *buf, size_t buf_size, Error &error); 3172 3173 virtual size_t 3174 PutSTDIN (const char *buf, size_t buf_size, Error &error) 3175 { 3176 error.SetErrorString("stdin unsupported"); 3177 return 0; 3178 } 3179 3180 //------------------------------------------------------------------ 3181 /// Get any available profile data. 3182 /// 3183 /// @param[out] buf 3184 /// A buffer that will receive any profile data bytes that are 3185 /// currently available. 3186 /// 3187 /// @param[out] buf_size 3188 /// The size in bytes for the buffer \a buf. 3189 /// 3190 /// @return 3191 /// The number of bytes written into \a buf. If this value is 3192 /// equal to \a buf_size, another call to this function should 3193 /// be made to retrieve more profile data. 3194 //------------------------------------------------------------------ 3195 virtual size_t 3196 GetAsyncProfileData (char *buf, size_t buf_size, Error &error); 3197 3198 //---------------------------------------------------------------------- 3199 // Process Breakpoints 3200 //---------------------------------------------------------------------- 3201 size_t 3202 GetSoftwareBreakpointTrapOpcode (BreakpointSite* bp_site); 3203 3204 virtual Error 3205 EnableBreakpointSite (BreakpointSite *bp_site) 3206 { 3207 Error error; 3208 error.SetErrorStringWithFormat("error: %s does not support enabling breakpoints", GetPluginName().GetCString()); 3209 return error; 3210 } 3211 3212 3213 virtual Error 3214 DisableBreakpointSite (BreakpointSite *bp_site) 3215 { 3216 Error error; 3217 error.SetErrorStringWithFormat("error: %s does not support disabling breakpoints", GetPluginName().GetCString()); 3218 return error; 3219 } 3220 3221 3222 // This is implemented completely using the lldb::Process API. Subclasses 3223 // don't need to implement this function unless the standard flow of 3224 // read existing opcode, write breakpoint opcode, verify breakpoint opcode 3225 // doesn't work for a specific process plug-in. 3226 virtual Error 3227 EnableSoftwareBreakpoint (BreakpointSite *bp_site); 3228 3229 // This is implemented completely using the lldb::Process API. Subclasses 3230 // don't need to implement this function unless the standard flow of 3231 // restoring original opcode in memory and verifying the restored opcode 3232 // doesn't work for a specific process plug-in. 3233 virtual Error 3234 DisableSoftwareBreakpoint (BreakpointSite *bp_site); 3235 3236 BreakpointSiteList & 3237 GetBreakpointSiteList(); 3238 3239 const BreakpointSiteList & 3240 GetBreakpointSiteList() const; 3241 3242 void 3243 DisableAllBreakpointSites (); 3244 3245 Error 3246 ClearBreakpointSiteByID (lldb::user_id_t break_id); 3247 3248 lldb::break_id_t 3249 CreateBreakpointSite (const lldb::BreakpointLocationSP &owner, 3250 bool use_hardware); 3251 3252 Error 3253 DisableBreakpointSiteByID (lldb::user_id_t break_id); 3254 3255 Error 3256 EnableBreakpointSiteByID (lldb::user_id_t break_id); 3257 3258 3259 // BreakpointLocations use RemoveOwnerFromBreakpointSite to remove 3260 // themselves from the owner's list of this breakpoint sites. 3261 void 3262 RemoveOwnerFromBreakpointSite (lldb::user_id_t owner_id, 3263 lldb::user_id_t owner_loc_id, 3264 lldb::BreakpointSiteSP &bp_site_sp); 3265 3266 //---------------------------------------------------------------------- 3267 // Process Watchpoints (optional) 3268 //---------------------------------------------------------------------- 3269 virtual Error 3270 EnableWatchpoint (Watchpoint *wp, bool notify = true); 3271 3272 virtual Error 3273 DisableWatchpoint (Watchpoint *wp, bool notify = true); 3274 3275 //------------------------------------------------------------------ 3276 // Thread Queries 3277 //------------------------------------------------------------------ 3278 virtual bool 3279 UpdateThreadList (ThreadList &old_thread_list, ThreadList &new_thread_list) = 0; 3280 3281 void 3282 UpdateThreadListIfNeeded (); 3283 3284 ThreadList & 3285 GetThreadList () 3286 { 3287 return m_thread_list; 3288 } 3289 3290 uint32_t 3291 GetNextThreadIndexID (uint64_t thread_id); 3292 3293 lldb::ThreadSP 3294 CreateOSPluginThread (lldb::tid_t tid, lldb::addr_t context); 3295 3296 // Returns true if an index id has been assigned to a thread. 3297 bool 3298 HasAssignedIndexIDToThread(uint64_t sb_thread_id); 3299 3300 // Given a thread_id, it will assign a more reasonable index id for display to the user. 3301 // If the thread_id has previously been assigned, the same index id will be used. 3302 uint32_t 3303 AssignIndexIDToThread(uint64_t thread_id); 3304 3305 //------------------------------------------------------------------ 3306 // Event Handling 3307 //------------------------------------------------------------------ 3308 lldb::StateType 3309 GetNextEvent (lldb::EventSP &event_sp); 3310 3311 lldb::StateType 3312 WaitForProcessToStop (const TimeValue *timeout, lldb::EventSP *event_sp_ptr = NULL); 3313 3314 lldb::StateType 3315 WaitForStateChangedEvents (const TimeValue *timeout, lldb::EventSP &event_sp); 3316 3317 Event * 3318 PeekAtStateChangedEvents (); 3319 3320 3321 class 3322 ProcessEventHijacker 3323 { 3324 public: 3325 ProcessEventHijacker (Process &process, Listener *listener) : 3326 m_process (process) 3327 { 3328 m_process.HijackProcessEvents (listener); 3329 } 3330 ~ProcessEventHijacker () 3331 { 3332 m_process.RestoreProcessEvents(); 3333 } 3334 3335 private: 3336 Process &m_process; 3337 }; 3338 friend class ProcessEventHijacker; 3339 //------------------------------------------------------------------ 3340 /// If you need to ensure that you and only you will hear about some public 3341 /// event, then make a new listener, set to listen to process events, and 3342 /// then call this with that listener. Then you will have to wait on that 3343 /// listener explicitly for events (rather than using the GetNextEvent & WaitFor* 3344 /// calls above. Be sure to call RestoreProcessEvents when you are done. 3345 /// 3346 /// @param[in] listener 3347 /// This is the new listener to whom all process events will be delivered. 3348 /// 3349 /// @return 3350 /// Returns \b true if the new listener could be installed, 3351 /// \b false otherwise. 3352 //------------------------------------------------------------------ 3353 bool 3354 HijackProcessEvents (Listener *listener); 3355 3356 //------------------------------------------------------------------ 3357 /// Restores the process event broadcasting to its normal state. 3358 /// 3359 //------------------------------------------------------------------ 3360 void 3361 RestoreProcessEvents (); 3362 3363 private: 3364 //------------------------------------------------------------------ 3365 /// This is the part of the event handling that for a process event. 3366 /// It decides what to do with the event and returns true if the 3367 /// event needs to be propagated to the user, and false otherwise. 3368 /// If the event is not propagated, this call will most likely set 3369 /// the target to executing again. 3370 /// There is only one place where this call should be called, HandlePrivateEvent. 3371 /// Don't call it from anywhere else... 3372 /// 3373 /// @param[in] event_ptr 3374 /// This is the event we are handling. 3375 /// 3376 /// @return 3377 /// Returns \b true if the event should be reported to the 3378 /// user, \b false otherwise. 3379 //------------------------------------------------------------------ 3380 bool 3381 ShouldBroadcastEvent (Event *event_ptr); 3382 3383 public: 3384 const lldb::ABISP & 3385 GetABI (); 3386 3387 OperatingSystem * 3388 GetOperatingSystem () 3389 { 3390 return m_os_ap.get(); 3391 } 3392 3393 3394 virtual LanguageRuntime * 3395 GetLanguageRuntime (lldb::LanguageType language, bool retry_if_null = true); 3396 3397 virtual CPPLanguageRuntime * 3398 GetCPPLanguageRuntime (bool retry_if_null = true); 3399 3400 virtual ObjCLanguageRuntime * 3401 GetObjCLanguageRuntime (bool retry_if_null = true); 3402 3403 bool 3404 IsPossibleDynamicValue (ValueObject& in_value); 3405 3406 bool 3407 IsRunning () const; 3408 3409 DynamicCheckerFunctions *GetDynamicCheckers() 3410 { 3411 return m_dynamic_checkers_ap.get(); 3412 } 3413 3414 void SetDynamicCheckers(DynamicCheckerFunctions *dynamic_checkers) 3415 { 3416 m_dynamic_checkers_ap.reset(dynamic_checkers); 3417 } 3418 3419 //------------------------------------------------------------------ 3420 /// Call this to set the lldb in the mode where it breaks on new thread 3421 /// creations, and then auto-restarts. This is useful when you are trying 3422 /// to run only one thread, but either that thread or the kernel is creating 3423 /// new threads in the process. If you stop when the thread is created, you 3424 /// can immediately suspend it, and keep executing only the one thread you intend. 3425 /// 3426 /// @return 3427 /// Returns \b true if we were able to start up the notification 3428 /// \b false otherwise. 3429 //------------------------------------------------------------------ 3430 virtual bool 3431 StartNoticingNewThreads() 3432 { 3433 return true; 3434 } 3435 3436 //------------------------------------------------------------------ 3437 /// Call this to turn off the stop & notice new threads mode. 3438 /// 3439 /// @return 3440 /// Returns \b true if we were able to start up the notification 3441 /// \b false otherwise. 3442 //------------------------------------------------------------------ 3443 virtual bool 3444 StopNoticingNewThreads() 3445 { 3446 return true; 3447 } 3448 3449 void 3450 SetRunningUserExpression (bool on); 3451 3452 //------------------------------------------------------------------ 3453 // lldb::ExecutionContextScope pure virtual functions 3454 //------------------------------------------------------------------ 3455 virtual lldb::TargetSP 3456 CalculateTarget (); 3457 3458 virtual lldb::ProcessSP 3459 CalculateProcess () 3460 { 3461 return shared_from_this(); 3462 } 3463 3464 virtual lldb::ThreadSP 3465 CalculateThread () 3466 { 3467 return lldb::ThreadSP(); 3468 } 3469 3470 virtual lldb::StackFrameSP 3471 CalculateStackFrame () 3472 { 3473 return lldb::StackFrameSP(); 3474 } 3475 3476 virtual void 3477 CalculateExecutionContext (ExecutionContext &exe_ctx); 3478 3479 void 3480 SetSTDIOFileDescriptor (int file_descriptor); 3481 3482 //------------------------------------------------------------------ 3483 // Add a permanent region of memory that should never be read or 3484 // written to. This can be used to ensure that memory reads or writes 3485 // to certain areas of memory never end up being sent to the 3486 // DoReadMemory or DoWriteMemory functions which can improve 3487 // performance. 3488 //------------------------------------------------------------------ 3489 void 3490 AddInvalidMemoryRegion (const LoadRange ®ion); 3491 3492 //------------------------------------------------------------------ 3493 // Remove a permanent region of memory that should never be read or 3494 // written to that was previously added with AddInvalidMemoryRegion. 3495 //------------------------------------------------------------------ 3496 bool 3497 RemoveInvalidMemoryRange (const LoadRange ®ion); 3498 3499 //------------------------------------------------------------------ 3500 // If the setup code of a thread plan needs to do work that might involve 3501 // calling a function in the target, it should not do that work directly 3502 // in one of the thread plan functions (DidPush/WillResume) because 3503 // such work needs to be handled carefully. Instead, put that work in 3504 // a PreResumeAction callback, and register it with the process. It will 3505 // get done before the actual "DoResume" gets called. 3506 //------------------------------------------------------------------ 3507 3508 typedef bool (PreResumeActionCallback)(void *); 3509 3510 void 3511 AddPreResumeAction (PreResumeActionCallback callback, void *baton); 3512 3513 bool 3514 RunPreResumeActions (); 3515 3516 void 3517 ClearPreResumeActions (); 3518 3519 ProcessRunLock & 3520 GetRunLock () 3521 { 3522 if (Host::GetCurrentThread() == m_private_state_thread) 3523 return m_private_run_lock; 3524 else 3525 return m_public_run_lock; 3526 } 3527 3528 protected: 3529 //------------------------------------------------------------------ 3530 // NextEventAction provides a way to register an action on the next 3531 // event that is delivered to this process. There is currently only 3532 // one next event action allowed in the process at one time. If a 3533 // new "NextEventAction" is added while one is already present, the 3534 // old action will be discarded (with HandleBeingUnshipped called 3535 // after it is discarded.) 3536 // 3537 // If you want to resume the process as a result of a resume action, 3538 // call RequestResume, don't call Resume directly. 3539 //------------------------------------------------------------------ 3540 class NextEventAction 3541 { 3542 public: 3543 typedef enum EventActionResult 3544 { 3545 eEventActionSuccess, 3546 eEventActionRetry, 3547 eEventActionExit 3548 } EventActionResult; 3549 3550 NextEventAction (Process *process) : 3551 m_process(process) 3552 { 3553 } 3554 3555 virtual 3556 ~NextEventAction() 3557 { 3558 } 3559 3560 virtual EventActionResult PerformAction (lldb::EventSP &event_sp) = 0; 3561 virtual void HandleBeingUnshipped () {} 3562 virtual EventActionResult HandleBeingInterrupted () = 0; 3563 virtual const char *GetExitString() = 0; 3564 void RequestResume() 3565 { 3566 m_process->m_resume_requested = true; 3567 } 3568 protected: 3569 Process *m_process; 3570 }; 3571 3572 void SetNextEventAction (Process::NextEventAction *next_event_action) 3573 { 3574 if (m_next_event_action_ap.get()) 3575 m_next_event_action_ap->HandleBeingUnshipped(); 3576 3577 m_next_event_action_ap.reset(next_event_action); 3578 } 3579 3580 // This is the completer for Attaching: 3581 class AttachCompletionHandler : public NextEventAction 3582 { 3583 public: 3584 AttachCompletionHandler (Process *process, uint32_t exec_count) : 3585 NextEventAction (process), 3586 m_exec_count (exec_count) 3587 { 3588 } 3589 3590 virtual 3591 ~AttachCompletionHandler() 3592 { 3593 } 3594 3595 virtual EventActionResult PerformAction (lldb::EventSP &event_sp); 3596 virtual EventActionResult HandleBeingInterrupted (); 3597 virtual const char *GetExitString(); 3598 private: 3599 uint32_t m_exec_count; 3600 std::string m_exit_string; 3601 }; 3602 3603 bool 3604 HijackPrivateProcessEvents (Listener *listener); 3605 3606 void 3607 RestorePrivateProcessEvents (); 3608 3609 bool 3610 PrivateStateThreadIsValid () const 3611 { 3612 return IS_VALID_LLDB_HOST_THREAD(m_private_state_thread); 3613 } 3614 3615 //------------------------------------------------------------------ 3616 // Type definitions 3617 //------------------------------------------------------------------ 3618 typedef std::map<lldb::LanguageType, lldb::LanguageRuntimeSP> LanguageRuntimeCollection; 3619 3620 struct PreResumeCallbackAndBaton 3621 { 3622 bool (*callback) (void *); 3623 void *baton; 3624 PreResumeCallbackAndBaton (PreResumeActionCallback in_callback, void *in_baton) : 3625 callback (in_callback), 3626 baton (in_baton) 3627 { 3628 } 3629 }; 3630 3631 //------------------------------------------------------------------ 3632 // Member variables 3633 //------------------------------------------------------------------ 3634 Target & m_target; ///< The target that owns this process. 3635 ThreadSafeValue<lldb::StateType> m_public_state; 3636 ThreadSafeValue<lldb::StateType> m_private_state; // The actual state of our process 3637 Broadcaster m_private_state_broadcaster; // This broadcaster feeds state changed events into the private state thread's listener. 3638 Broadcaster m_private_state_control_broadcaster; // This is the control broadcaster, used to pause, resume & stop the private state thread. 3639 Listener m_private_state_listener; // This is the listener for the private state thread. 3640 Predicate<bool> m_private_state_control_wait; /// This Predicate is used to signal that a control operation is complete. 3641 lldb::thread_t m_private_state_thread; // Thread ID for the thread that watches interal state events 3642 ProcessModID m_mod_id; ///< Tracks the state of the process over stops and other alterations. 3643 uint32_t m_process_unique_id; ///< Each lldb_private::Process class that is created gets a unique integer ID that increments with each new instance 3644 uint32_t m_thread_index_id; ///< Each thread is created with a 1 based index that won't get re-used. 3645 std::map<uint64_t, uint32_t> m_thread_id_to_index_id_map; 3646 int m_exit_status; ///< The exit status of the process, or -1 if not set. 3647 std::string m_exit_string; ///< A textual description of why a process exited. 3648 Mutex m_thread_mutex; 3649 ThreadList m_thread_list_real; ///< The threads for this process as are known to the protocol we are debugging with 3650 ThreadList m_thread_list; ///< The threads for this process as the user will see them. This is usually the same as 3651 ///< m_thread_list_real, but might be different if there is an OS plug-in creating memory threads 3652 std::vector<Notifications> m_notifications; ///< The list of notifications that this process can deliver. 3653 std::vector<lldb::addr_t> m_image_tokens; 3654 Listener &m_listener; 3655 BreakpointSiteList m_breakpoint_site_list; ///< This is the list of breakpoint locations we intend to insert in the target. 3656 std::unique_ptr<DynamicLoader> m_dyld_ap; 3657 std::unique_ptr<DynamicCheckerFunctions> m_dynamic_checkers_ap; ///< The functions used by the expression parser to validate data that expressions use. 3658 std::unique_ptr<OperatingSystem> m_os_ap; 3659 UnixSignals m_unix_signals; /// This is the current signal set for this process. 3660 lldb::ABISP m_abi_sp; 3661 lldb::InputReaderSP m_process_input_reader; 3662 Communication m_stdio_communication; 3663 Mutex m_stdio_communication_mutex; 3664 std::string m_stdout_data; 3665 std::string m_stderr_data; 3666 Mutex m_profile_data_comm_mutex; 3667 std::vector<std::string> m_profile_data; 3668 MemoryCache m_memory_cache; 3669 AllocatedMemoryCache m_allocated_memory_cache; 3670 bool m_should_detach; /// Should we detach if the process object goes away with an explicit call to Kill or Detach? 3671 LanguageRuntimeCollection m_language_runtimes; 3672 std::unique_ptr<NextEventAction> m_next_event_action_ap; 3673 std::vector<PreResumeCallbackAndBaton> m_pre_resume_actions; 3674 ProcessRunLock m_public_run_lock; 3675 ProcessRunLock m_private_run_lock; 3676 Predicate<bool> m_currently_handling_event; // This predicate is set in HandlePrivateEvent while all its business is being done. 3677 bool m_currently_handling_do_on_removals; 3678 bool m_resume_requested; // If m_currently_handling_event or m_currently_handling_do_on_removals are true, Resume will only request a resume, using this flag to check. 3679 bool m_finalize_called; 3680 bool m_clear_thread_plans_on_stop; 3681 lldb::StateType m_last_broadcast_state; /// This helps with the Public event coalescing in ShouldBroadcastEvent. 3682 bool m_destroy_in_process; 3683 3684 enum { 3685 eCanJITDontKnow= 0, 3686 eCanJITYes, 3687 eCanJITNo 3688 } m_can_jit; 3689 3690 size_t 3691 RemoveBreakpointOpcodesFromBuffer (lldb::addr_t addr, size_t size, uint8_t *buf) const; 3692 3693 void 3694 SynchronouslyNotifyStateChanged (lldb::StateType state); 3695 3696 void 3697 SetPublicState (lldb::StateType new_state, bool restarted); 3698 3699 void 3700 SetPrivateState (lldb::StateType state); 3701 3702 bool 3703 StartPrivateStateThread (bool force = false); 3704 3705 void 3706 StopPrivateStateThread (); 3707 3708 void 3709 PausePrivateStateThread (); 3710 3711 void 3712 ResumePrivateStateThread (); 3713 3714 static void * 3715 PrivateStateThread (void *arg); 3716 3717 void * 3718 RunPrivateStateThread (); 3719 3720 void 3721 HandlePrivateEvent (lldb::EventSP &event_sp); 3722 3723 lldb::StateType 3724 WaitForProcessStopPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 3725 3726 // This waits for both the state change broadcaster, and the control broadcaster. 3727 // If control_only, it only waits for the control broadcaster. 3728 3729 bool 3730 WaitForEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp, bool control_only); 3731 3732 lldb::StateType 3733 WaitForStateChangedEventsPrivate (const TimeValue *timeout, lldb::EventSP &event_sp); 3734 3735 lldb::StateType 3736 WaitForState (const TimeValue *timeout, 3737 const lldb::StateType *match_states, 3738 const uint32_t num_match_states); 3739 3740 size_t 3741 WriteMemoryPrivate (lldb::addr_t addr, const void *buf, size_t size, Error &error); 3742 3743 void 3744 AppendSTDOUT (const char *s, size_t len); 3745 3746 void 3747 AppendSTDERR (const char *s, size_t len); 3748 3749 void 3750 BroadcastAsyncProfileData(const std::string &one_profile_data); 3751 3752 static void 3753 STDIOReadThreadBytesReceived (void *baton, const void *src, size_t src_len); 3754 3755 void 3756 PushProcessInputReader (); 3757 3758 void 3759 PopProcessInputReader (); 3760 3761 void 3762 ResetProcessInputReader (); 3763 3764 static size_t 3765 ProcessInputReaderCallback (void *baton, 3766 InputReader &reader, 3767 lldb::InputReaderAction notification, 3768 const char *bytes, 3769 size_t bytes_len); 3770 3771 Error 3772 HaltForDestroyOrDetach(lldb::EventSP &exit_event_sp); 3773 3774 private: 3775 //------------------------------------------------------------------ 3776 // For Process only 3777 //------------------------------------------------------------------ 3778 void ControlPrivateStateThread (uint32_t signal); 3779 3780 DISALLOW_COPY_AND_ASSIGN (Process); 3781 3782 }; 3783 3784 } // namespace lldb_private 3785 3786 #endif // liblldb_Process_h_ 3787