172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris/* 272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * Copyright (C) 2016 The Android Open Source Project 372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * 472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * Licensed under the Apache License, Version 2.0 (the "License"); 572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * you may not use this file except in compliance with the License. 672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * You may obtain a copy of the License at 772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * 872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * http://www.apache.org/licenses/LICENSE-2.0 972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * 1072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * Unless required by applicable law or agreed to in writing, software 1172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * distributed under the License is distributed on an "AS IS" BASIS, 1272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * See the License for the specific language governing permissions and 1472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris * limitations under the License. 1572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris */ 1672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 1772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris#ifndef _LIBUNWINDSTACK_DWARF_MEMORY_H 1872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris#define _LIBUNWINDSTACK_DWARF_MEMORY_H 1972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 2072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris#include <stdint.h> 2172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 22d226a5140989f509a0ed3e2723f05d5fc93ce8dfChristopher Ferrisnamespace unwindstack { 23d226a5140989f509a0ed3e2723f05d5fc93ce8dfChristopher Ferris 2472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris// Forward declarations. 2572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferrisclass Memory; 2672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 2772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferrisclass DwarfMemory { 2872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris public: 2972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris DwarfMemory(Memory* memory) : memory_(memory) {} 3072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris virtual ~DwarfMemory() = default; 3172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 3272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool ReadBytes(void* dst, size_t num_bytes); 3372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 3472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris template <typename SignedType> 3572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool ReadSigned(uint64_t* value); 3672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 3772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool ReadULEB128(uint64_t* value); 3872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 3972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool ReadSLEB128(int64_t* value); 4072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 4172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris template <typename AddressType> 4272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris size_t GetEncodedSize(uint8_t encoding); 4372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 4472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool AdjustEncodedValue(uint8_t encoding, uint64_t* value); 4572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 4672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris template <typename AddressType> 4772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris bool ReadEncodedValue(uint8_t encoding, uint64_t* value); 4872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 4972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t cur_offset() { return cur_offset_; } 5072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void set_cur_offset(uint64_t cur_offset) { cur_offset_ = cur_offset; } 5172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 5272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void set_pc_offset(uint64_t offset) { pc_offset_ = offset; } 5372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void clear_pc_offset() { pc_offset_ = static_cast<uint64_t>(-1); } 5472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 5572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void set_data_offset(uint64_t offset) { data_offset_ = offset; } 5672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void clear_data_offset() { data_offset_ = static_cast<uint64_t>(-1); } 5772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 5872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void set_func_offset(uint64_t offset) { func_offset_ = offset; } 5972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void clear_func_offset() { func_offset_ = static_cast<uint64_t>(-1); } 6072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 6172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void set_text_offset(uint64_t offset) { text_offset_ = offset; } 6272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris void clear_text_offset() { text_offset_ = static_cast<uint64_t>(-1); } 6372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 6472a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris private: 6572a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris Memory* memory_; 6672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t cur_offset_ = 0; 6772a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 6872a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t pc_offset_ = static_cast<uint64_t>(-1); 6972a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t data_offset_ = static_cast<uint64_t>(-1); 7072a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t func_offset_ = static_cast<uint64_t>(-1); 7172a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris uint64_t text_offset_ = static_cast<uint64_t>(-1); 7272a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris}; 7372a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris 74d226a5140989f509a0ed3e2723f05d5fc93ce8dfChristopher Ferris} // namespace unwindstack 75d226a5140989f509a0ed3e2723f05d5fc93ce8dfChristopher Ferris 7672a6fa693b1d5d0fa2a83264776d73eeeae6478dChristopher Ferris#endif // _LIBUNWINDSTACK_DWARF_MEMORY_H 77