blob: 7879756a2f078810dbb018573673aa88609139f4 [file] [log] [blame]
// Copyright 2018 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.
#ifndef GARNET_THIRD_PARTY_LIBUNWINDSTACK_FUCHSIA_REGS_FUCHSIA_H_
#define GARNET_THIRD_PARTY_LIBUNWINDSTACK_FUCHSIA_REGS_FUCHSIA_H_
#include <zircon/types.h>
#include "unwindstack/Regs.h"
namespace unwindstack {
class RegsFuchsia final : public RegsImpl<uint64_t> {
public:
RegsFuchsia();
virtual ~RegsFuchsia();
// Populates this class with the registers from the given thread.
zx_status_t Read(zx_handle_t thread);
// RegsImpl overrides.
ArchEnum Arch() final;
uint64_t GetPcAdjustment(uint64_t rel_pc, Elf* elf) final;
bool SetPcFromReturnAddress(Memory* process_memory) final;
bool StepIfSignalHandler(uint64_t rel_pc, Elf* elf,
Memory* process_memory) final;
void IterateRegisters(std::function<void(const char*, uint64_t)>) final;
uint64_t pc() final;
uint64_t sp() final;
void set_pc(uint64_t pc) final;
void set_sp(uint64_t sp) final;
Regs* Clone() final;
};
} // namespace unwindstack
#endif // GARNET_THIRD_PARTY_LIBUNWINDSTACK_FUCHSIA_REGS_FUCHSIA_H_