diff options
author | Douglas Leung <douglas.leung@mips.com> | 2017-11-08 10:53:53 +0100 |
---|---|---|
committer | Dejan Jovicevic <dejan.jovicevic@mips.com> | 2017-12-11 15:44:40 +0100 |
commit | 4cd850c062b05fe4f67a0d9ab2ae0868dfdb905b (patch) | |
tree | e77745881de0d797a46feec448530dac96b3f169 /libunwindstack/include/unwindstack/RegsMips64.h | |
parent | bb2567c1082230a243f4fbdc973fe8a2b91a6031 (diff) | |
download | unwinding-4cd850c062b05fe4f67a0d9ab2ae0868dfdb905b.tar.gz |
Add libunwindstack support for Mips and Mips64
This patch requires v3.18 kernel or above, because v3.10 kernel
has a bug (as of 8/1/2017) in the ptrace(GETREGSET) function for mips
and mips64.
Change-Id: I004c1fa190193eebe1c84440b366289122a6bd8a
Signed-off-by: Douglas Leung <douglas.leung@mips.com>
Signed-off-by: Dejan Jovicevic <dejan.jovicevic@mips.com>
Diffstat (limited to 'libunwindstack/include/unwindstack/RegsMips64.h')
-rw-r--r-- | libunwindstack/include/unwindstack/RegsMips64.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/libunwindstack/include/unwindstack/RegsMips64.h b/libunwindstack/include/unwindstack/RegsMips64.h new file mode 100644 index 0000000..6b4bcdf --- /dev/null +++ b/libunwindstack/include/unwindstack/RegsMips64.h @@ -0,0 +1,56 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef _LIBUNWINDSTACK_REGS_MIPS64_H +#define _LIBUNWINDSTACK_REGS_MIPS64_H + +#include <stdint.h> + +#include <functional> + +#include <unwindstack/Elf.h> +#include <unwindstack/Regs.h> + +namespace unwindstack { + +// Forward declarations. +class Memory; + +class RegsMips64 : public RegsImpl<uint64_t> { + public: + RegsMips64(); + virtual ~RegsMips64() = default; + + virtual ArchEnum Arch() override final; + + uint64_t GetAdjustedPc(uint64_t rel_pc, Elf* elf) override; + + void SetFromRaw() override; + + bool SetPcFromReturnAddress(Memory* process_memory) override; + + bool StepIfSignalHandler(uint64_t rel_pc, Elf* elf, Memory* process_memory) override; + + virtual void IterateRegisters(std::function<void(const char*, uint64_t)>) override final; + + static Regs* Read(void* data); + + static Regs* CreateFromUcontext(void* ucontext); +}; + +} // namespace unwindstack + +#endif // _LIBUNWINDSTACK_REGS_MIPS64_H |