Home | History | Annotate | Download | only in libbacktrace
      1 /*
      2  * Copyright (C) 2014 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 #ifndef _LIBBACKTRACE_UNWIND_MAP_H
     18 #define _LIBBACKTRACE_UNWIND_MAP_H
     19 
     20 #include <stdint.h>
     21 #include <sys/types.h>
     22 
     23 #include <backtrace/BacktraceMap.h>
     24 
     25 // The unw_map_cursor_t structure is different depending on whether it is
     26 // the local or remote version. In order to get the correct version, include
     27 // libunwind.h first then this header.
     28 
     29 class UnwindMap : public BacktraceMap {
     30 public:
     31   UnwindMap(pid_t pid);
     32 
     33   unw_map_cursor_t* GetMapCursor() { return &map_cursor_; }
     34 
     35 protected:
     36   unw_map_cursor_t map_cursor_;
     37 };
     38 
     39 class UnwindMapRemote : public UnwindMap {
     40 public:
     41   UnwindMapRemote(pid_t pid);
     42   virtual ~UnwindMapRemote();
     43 
     44   bool Build() override;
     45 
     46 private:
     47   bool GenerateMap();
     48 };
     49 
     50 class UnwindMapLocal : public UnwindMap {
     51 public:
     52   UnwindMapLocal();
     53   virtual ~UnwindMapLocal();
     54 
     55   bool Build() override;
     56 
     57   void FillIn(uintptr_t addr, backtrace_map_t* map) override;
     58 
     59 private:
     60   bool GenerateMap();
     61 
     62   bool map_created_;
     63 };
     64 
     65 #endif // _LIBBACKTRACE_UNWIND_MAP_H
     66