blob: 2e80bffc92d57333b91ffe37a2c008905dd651e8 [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "src/developer/debug/shared/handle_info.h"
namespace debug_ipc {
std::string HandleTypeToString(uint32_t handle_type) {
// Don't use Zircon headers from here, so need to hardcode the values.
switch (handle_type) {
case 0u:
return "ZX_OBJ_TYPE_NONE";
case 1u:
return "ZX_OBJ_TYPE_PROCESS";
case 2u:
return "ZX_OBJ_TYPE_THREAD";
case 3u:
return "ZX_OBJ_TYPE_VMO";
case 4u:
return "ZX_OBJ_TYPE_CHANNEL";
case 5u:
return "ZX_OBJ_TYPE_EVENT";
case 6u:
return "ZX_OBJ_TYPE_PORT";
case 9u:
return "ZX_OBJ_TYPE_INTERRUPT";
case 11u:
return "ZX_OBJ_TYPE_PCI_DEVICE";
case 12u:
return "ZX_OBJ_TYPE_LOG";
case 14u:
return "ZX_OBJ_TYPE_SOCKET";
case 15u:
return "ZX_OBJ_TYPE_RESOURCE";
case 16u:
return "ZX_OBJ_TYPE_EVENTPAIR";
case 17u:
return "ZX_OBJ_TYPE_JOB";
case 18u:
return "ZX_OBJ_TYPE_VMAR";
case 19u:
return "ZX_OBJ_TYPE_FIFO";
case 20u:
return "ZX_OBJ_TYPE_GUEST";
case 21u:
return "ZX_OBJ_TYPE_VCPU";
case 22u:
return "ZX_OBJ_TYPE_TIMER";
case 23u:
return "ZX_OBJ_TYPE_IOMMU";
case 24u:
return "ZX_OBJ_TYPE_BTI";
case 25u:
return "ZX_OBJ_TYPE_PROFILE";
case 26u:
return "ZX_OBJ_TYPE_PMT";
case 27u:
return "ZX_OBJ_TYPE_SUSPEND_TOKEN";
case 28u:
return "ZX_OBJ_TYPE_PAGER";
case 29u:
return "ZX_OBJ_TYPE_EXCEPTION";
case 30u:
return "ZX_OBJ_TYPE_CLOCK";
case 31u:
return "ZX_OBJ_TYPE_STREAM";
case 32u:
return "ZX_OBJ_TYPE_MSI_ALLOCATION";
case 33u:
return "ZX_OBJ_TYPE_MSI_INTERRUPT";
default:
return "<unknown (" + std::to_string(handle_type) + ")>";
}
}
std::string CachePolicyToString(uint32_t cache_policy) {
switch (cache_policy) {
case 0u:
return "ZX_CACHE_POLICY_CACHED";
case 1u:
return "ZX_CACHE_POLICY_UNCACHED";
case 2u:
return "ZX_CACHE_POLICY_UNCACHED_DEVICE";
case 3u:
return "ZX_CACHE_POLICY_WRITE_COMBINING";
default:
return "<unknown (" + std::to_string(cache_policy) + ")>";
}
}
std::vector<std::string> HandleRightsToStrings(uint32_t handle_rights) {
std::vector<std::string> result;
if (handle_rights == 0) {
result.emplace_back("ZX_RIGHT_NONE");
return result;
}
struct RightMapping {
uint32_t bit_value;
const char* name;
};
static const RightMapping kRightMapping[] = {
{1u << 0, "ZX_RIGHT_DUPLICATE"}, {1u << 1, "ZX_RIGHT_TRANSFER"},
{1u << 2, "ZX_RIGHT_READ"}, {1u << 3, "ZX_RIGHT_WRITE"},
{1u << 4, "ZX_RIGHT_EXECUTE"}, {1u << 5, "ZX_RIGHT_MAP"},
{1u << 6, "ZX_RIGHT_GET_PROPERTY"}, {1u << 7, "ZX_RIGHT_SET_PROPERTY"},
{1u << 8, "ZX_RIGHT_ENUMERATE"}, {1u << 9, "ZX_RIGHT_DESTROY"},
{1u << 10, "ZX_RIGHT_SET_POLICY"}, {1u << 11, "ZX_RIGHT_GET_POLICY"},
{1u << 12, "ZX_RIGHT_SIGNAL"}, {1u << 13, "ZX_RIGHT_SIGNAL_PEER"},
{1u << 14, "ZX_RIGHT_WAIT"}, {1u << 15, "ZX_RIGHT_INSPECT"},
{1u << 16, "ZX_RIGHT_MANAGE_JOB"}, {1u << 17, "ZX_RIGHT_MANAGE_PROCESS"},
{1u << 18, "ZX_RIGHT_MANAGE_THREAD"}, {1u << 19, "<unknown (1 << 19)>"},
{1u << 20, "<unknown (1 << 20)>"}, {1u << 21, "<unknown (1 << 21)>"},
{1u << 22, "<unknown (1 << 22)>"}, {1u << 23, "<unknown (1 << 23)>"},
{1u << 24, "<unknown (1 << 24)>"}, {1u << 25, "<unknown (1 << 25)>"},
{1u << 26, "<unknown (1 << 26)>"}, {1u << 27, "<unknown (1 << 27)>"},
{1u << 28, "<unknown (1 << 28)>"}, {1u << 29, "<unknown (1 << 29)>"},
{1u << 30, "<unknown (1 << 30)>"}, {1u << 31, "ZX_RIGHT_SAME_RIGHTS"},
};
for (const auto& mapping : kRightMapping) {
if (handle_rights & mapping.bit_value)
result.emplace_back(mapping.name);
}
return result;
}
std::vector<std::string> VmoFlagsToStrings(uint32_t flags) {
std::vector<std::string> result;
// The low bit is special and has a flag for both set and unset values.
if (flags & (1u << 0)) {
result.emplace_back("ZX_INFO_VMO_TYPE_PAGED");
} else {
result.emplace_back("ZX_INFO_VMO_TYPE_PHYSICAL");
}
if (flags & (1u << 1))
result.emplace_back("ZX_INFO_VMO_RESIZABLE");
if (flags & (1u << 2))
result.emplace_back("ZX_INFO_VMO_IS_COW_CLONE");
if (flags & (1u << 3))
result.emplace_back("ZX_INFO_VMO_VIA_HANDLE");
if (flags & (1u << 4))
result.emplace_back("ZX_INFO_VMO_VIA_MAPPING");
if (flags & (1u << 5))
result.emplace_back("ZX_INFO_VMO_PAGER_BACKED");
if (flags & (1u << 6))
result.emplace_back("ZX_INFO_VMO_CONTIGUOUS");
return result;
}
} // namespace debug_ipc