161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung/* 261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * Copyright (C) 2017 The Android Open Source Project 361b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * 461b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * Licensed under the Apache License, Version 2.0 (the "License"); 561b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * you may not use this file except in compliance with the License. 661b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * You may obtain a copy of the License at 761b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * 861b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * http://www.apache.org/licenses/LICENSE-2.0 961b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * 1061b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * Unless required by applicable law or agreed to in writing, software 1161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * distributed under the License is distributed on an "AS IS" BASIS, 1261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1361b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * See the License for the specific language governing permissions and 1461b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung * limitations under the License. 1561b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung */ 1661b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 1761b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#ifndef _LIBUNWINDSTACK_REGS_MIPS64_H 1861b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#define _LIBUNWINDSTACK_REGS_MIPS64_H 1961b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 2061b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#include <stdint.h> 2161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 2261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#include <functional> 2361b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 2461b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#include <unwindstack/Elf.h> 2561b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#include <unwindstack/Regs.h> 2661b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 2761b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leungnamespace unwindstack { 2861b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 2961b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung// Forward declarations. 3061b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leungclass Memory; 3161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 3261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leungclass RegsMips64 : public RegsImpl<uint64_t> { 3361b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung public: 3461b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung RegsMips64(); 3561b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung virtual ~RegsMips64() = default; 3661b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 37414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui ArchEnum Arch() override final; 3861b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 39a2ec50bf57c9dba78459ef011cd13f8525ea57b4Christopher Ferris uint64_t GetPcAdjustment(uint64_t rel_pc, Elf* elf) override; 4061b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 4161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung bool SetPcFromReturnAddress(Memory* process_memory) override; 4261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 4361b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung bool StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) override; 4461b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 45414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui void IterateRegisters(std::function<void(const char*, uint64_t)>) override final; 46414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui 47414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui uint64_t pc() override; 48414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui uint64_t sp() override; 49414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui 50414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui void set_pc(uint64_t pc) override; 51414df3e583c21023a22a11b64e703cd4ab38b29aYabin Cui void set_sp(uint64_t sp) override; 5261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 53fe3963143f16833b14b505cf41a2e19a9e304efbJosh Gao Regs* Clone() override final; 54fe3963143f16833b14b505cf41a2e19a9e304efbJosh Gao 5561b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung static Regs* Read(void* data); 5661b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 5761b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung static Regs* CreateFromUcontext(void* ucontext); 5861b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung}; 5961b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 6061b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung} // namespace unwindstack 6161b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung 6261b1a1ae7797e0d3177400cdb3cda028ea14669dDouglas Leung#endif // _LIBUNWINDSTACK_REGS_MIPS64_H 63