Proyectos de Subversion Iphone Microlearning

Rev

| Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1 efrain 1
// Copyright 2019 Google
2
//
3
// Licensed under the Apache License, Version 2.0 (the "License");
4
// you may not use this file except in compliance with the License.
5
// You may obtain a copy of the License at
6
//
7
//      http://www.apache.org/licenses/LICENSE-2.0
8
//
9
// Unless required by applicable law or agreed to in writing, software
10
// distributed under the License is distributed on an "AS IS" BASIS,
11
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
// See the License for the specific language governing permissions and
13
// limitations under the License.
14
 
15
#pragma once
16
 
17
#include "Crashlytics/Crashlytics/Helpers/FIRCLSThreadState.h"
18
#include "Crashlytics/Crashlytics/Helpers/FIRCLSUtility.h"
19
#if CLS_COMPACT_UNWINDING_SUPPORTED
20
#include "Crashlytics/Crashlytics/Unwind/Compact/FIRCLSCompactUnwind.h"
21
#endif
22
#include <mach/vm_types.h>
23
#include <stdbool.h>
24
 
25
#include "Crashlytics/Crashlytics/Unwind/FIRCLSUnwind_arch.h"
26
 
27
extern const uint32_t FIRCLSUnwindMaxFrames;
28
 
29
extern const uint32_t FIRCLSUnwindInfiniteRecursionCountThreshold;
30
 
31
typedef struct {
32
  FIRCLSThreadContext registers;
33
  uint32_t frameCount;
34
#if CLS_COMPACT_UNWINDING_SUPPORTED
35
  FIRCLSCompactUnwindContext compactUnwindState;
36
#endif
37
  uintptr_t lastFramePC;
38
  uint32_t repeatCount;
39
} FIRCLSUnwindContext;
40
 
41
// API
42
bool FIRCLSUnwindInit(FIRCLSUnwindContext* context, FIRCLSThreadContext threadContext);
43
 
44
bool FIRCLSUnwindNextFrame(FIRCLSUnwindContext* context);
45
uintptr_t FIRCLSUnwindGetPC(FIRCLSUnwindContext* context);
46
uintptr_t FIRCLSUnwindGetStackPointer(FIRCLSUnwindContext* context);
47
uint32_t FIRCLSUnwindGetFrameRepeatCount(FIRCLSUnwindContext* context);
48
 
49
// utility functions
50
bool FIRCLSUnwindIsAddressExecutable(vm_address_t address);
51
bool FIRCLSUnwindFirstExecutableAddress(vm_address_t start,
52
                                        vm_address_t end,
53
                                        vm_address_t* foundAddress);