blob: 02b66d119f5769ec49ad5f397e0f5102e55926d0 [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/debug_agent/zircon_system_interface.h"
#include "src/developer/debug/debug_agent/component_launcher.h"
#include "src/developer/debug/debug_agent/zircon_binary_launcher.h"
#include "src/developer/debug/debug_agent/zircon_job_handle.h"
#include "src/developer/debug/debug_agent/zircon_process_handle.h"
#include "src/developer/debug/debug_agent/zircon_utils.h"
namespace debug_agent {
ZirconSystemInterface::ZirconSystemInterface()
: root_job_(zircon::GetRootJob()),
services_(sys::ServiceDirectory::CreateFromNamespace()),
limbo_provider_(services_) {}
uint32_t ZirconSystemInterface::GetNumCpus() const { return zx_system_get_num_cpus(); }
uint64_t ZirconSystemInterface::GetPhysicalMemory() const { return zx_system_get_physmem(); }
std::unique_ptr<JobHandle> ZirconSystemInterface::GetRootJob() const {
return std::make_unique<ZirconJobHandle>(root_job_);
}
std::unique_ptr<JobHandle> ZirconSystemInterface::GetComponentRootJob() const {
if (!root_job_.GetNativeHandle().is_valid())
return nullptr;
zx_koid_t component_root_koid = zircon::GetComponentRootJobKoid();
if (component_root_koid == ZX_KOID_INVALID)
return nullptr;
return root_job_.FindJob(component_root_koid);
}
std::unique_ptr<BinaryLauncher> ZirconSystemInterface::GetLauncher() const {
return std::make_unique<ZirconBinaryLauncher>(services_);
}
std::unique_ptr<ComponentLauncher> ZirconSystemInterface::GetComponentLauncher() const {
return std::make_unique<ComponentLauncher>(services_);
}
} // namespace debug_agent