xref: /freebsd-src/contrib/llvm-project/lldb/source/Utility/State.cpp (revision e25152834cdf3b353892835a4f3b157e066a8ed4)
1*5ffd83dbSDimitry Andric //===-- State.cpp ---------------------------------------------------------===//
20b57cec5SDimitry Andric //
30b57cec5SDimitry Andric // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
40b57cec5SDimitry Andric // See https://llvm.org/LICENSE.txt for license information.
50b57cec5SDimitry Andric // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
60b57cec5SDimitry Andric //
70b57cec5SDimitry Andric //===----------------------------------------------------------------------===//
80b57cec5SDimitry Andric 
90b57cec5SDimitry Andric #include "lldb/Utility/State.h"
100b57cec5SDimitry Andric 
110b57cec5SDimitry Andric using namespace lldb;
120b57cec5SDimitry Andric using namespace lldb_private;
130b57cec5SDimitry Andric 
StateAsCString(StateType state)140b57cec5SDimitry Andric const char *lldb_private::StateAsCString(StateType state) {
150b57cec5SDimitry Andric   switch (state) {
160b57cec5SDimitry Andric   case eStateInvalid:
170b57cec5SDimitry Andric     return "invalid";
180b57cec5SDimitry Andric   case eStateUnloaded:
190b57cec5SDimitry Andric     return "unloaded";
200b57cec5SDimitry Andric   case eStateConnected:
210b57cec5SDimitry Andric     return "connected";
220b57cec5SDimitry Andric   case eStateAttaching:
230b57cec5SDimitry Andric     return "attaching";
240b57cec5SDimitry Andric   case eStateLaunching:
250b57cec5SDimitry Andric     return "launching";
260b57cec5SDimitry Andric   case eStateStopped:
270b57cec5SDimitry Andric     return "stopped";
280b57cec5SDimitry Andric   case eStateRunning:
290b57cec5SDimitry Andric     return "running";
300b57cec5SDimitry Andric   case eStateStepping:
310b57cec5SDimitry Andric     return "stepping";
320b57cec5SDimitry Andric   case eStateCrashed:
330b57cec5SDimitry Andric     return "crashed";
340b57cec5SDimitry Andric   case eStateDetached:
350b57cec5SDimitry Andric     return "detached";
360b57cec5SDimitry Andric   case eStateExited:
370b57cec5SDimitry Andric     return "exited";
380b57cec5SDimitry Andric   case eStateSuspended:
390b57cec5SDimitry Andric     return "suspended";
400b57cec5SDimitry Andric   }
410b57cec5SDimitry Andric   return "unknown";
420b57cec5SDimitry Andric }
430b57cec5SDimitry Andric 
GetPermissionsAsCString(uint32_t permissions)440b57cec5SDimitry Andric const char *lldb_private::GetPermissionsAsCString(uint32_t permissions) {
450b57cec5SDimitry Andric   switch (permissions) {
460b57cec5SDimitry Andric   case 0:
470b57cec5SDimitry Andric     return "---";
480b57cec5SDimitry Andric   case ePermissionsWritable:
490b57cec5SDimitry Andric     return "-w-";
500b57cec5SDimitry Andric   case ePermissionsReadable:
510b57cec5SDimitry Andric     return "r--";
520b57cec5SDimitry Andric   case ePermissionsExecutable:
530b57cec5SDimitry Andric     return "--x";
540b57cec5SDimitry Andric   case ePermissionsReadable | ePermissionsWritable:
550b57cec5SDimitry Andric     return "rw-";
560b57cec5SDimitry Andric   case ePermissionsReadable | ePermissionsExecutable:
570b57cec5SDimitry Andric     return "r-x";
580b57cec5SDimitry Andric   case ePermissionsWritable | ePermissionsExecutable:
590b57cec5SDimitry Andric     return "-wx";
600b57cec5SDimitry Andric   case ePermissionsReadable | ePermissionsWritable | ePermissionsExecutable:
610b57cec5SDimitry Andric     return "rwx";
620b57cec5SDimitry Andric   default:
630b57cec5SDimitry Andric     break;
640b57cec5SDimitry Andric   }
650b57cec5SDimitry Andric   return "???";
660b57cec5SDimitry Andric }
670b57cec5SDimitry Andric 
StateIsRunningState(StateType state)680b57cec5SDimitry Andric bool lldb_private::StateIsRunningState(StateType state) {
690b57cec5SDimitry Andric   switch (state) {
700b57cec5SDimitry Andric   case eStateAttaching:
710b57cec5SDimitry Andric   case eStateLaunching:
720b57cec5SDimitry Andric   case eStateRunning:
730b57cec5SDimitry Andric   case eStateStepping:
740b57cec5SDimitry Andric     return true;
750b57cec5SDimitry Andric 
760b57cec5SDimitry Andric   case eStateConnected:
770b57cec5SDimitry Andric   case eStateDetached:
780b57cec5SDimitry Andric   case eStateInvalid:
790b57cec5SDimitry Andric   case eStateUnloaded:
800b57cec5SDimitry Andric   case eStateStopped:
810b57cec5SDimitry Andric   case eStateCrashed:
820b57cec5SDimitry Andric   case eStateExited:
830b57cec5SDimitry Andric   case eStateSuspended:
840b57cec5SDimitry Andric     break;
850b57cec5SDimitry Andric   }
860b57cec5SDimitry Andric   return false;
870b57cec5SDimitry Andric }
880b57cec5SDimitry Andric 
StateIsStoppedState(StateType state,bool must_exist)890b57cec5SDimitry Andric bool lldb_private::StateIsStoppedState(StateType state, bool must_exist) {
900b57cec5SDimitry Andric   switch (state) {
910b57cec5SDimitry Andric   case eStateInvalid:
920b57cec5SDimitry Andric   case eStateConnected:
930b57cec5SDimitry Andric   case eStateAttaching:
940b57cec5SDimitry Andric   case eStateLaunching:
950b57cec5SDimitry Andric   case eStateRunning:
960b57cec5SDimitry Andric   case eStateStepping:
970b57cec5SDimitry Andric   case eStateDetached:
980b57cec5SDimitry Andric     break;
990b57cec5SDimitry Andric 
1000b57cec5SDimitry Andric   case eStateUnloaded:
1010b57cec5SDimitry Andric   case eStateExited:
1020b57cec5SDimitry Andric     return !must_exist;
1030b57cec5SDimitry Andric 
1040b57cec5SDimitry Andric   case eStateStopped:
1050b57cec5SDimitry Andric   case eStateCrashed:
1060b57cec5SDimitry Andric   case eStateSuspended:
1070b57cec5SDimitry Andric     return true;
1080b57cec5SDimitry Andric   }
1090b57cec5SDimitry Andric   return false;
1100b57cec5SDimitry Andric }
111