@@ -32,26 +32,12 @@ POSSIBILITY OF SUCH DAMAGE. */
32
32
33
33
#include "config.h"
34
34
35
- #include <unistd.h>
36
35
#include <sys/types.h>
37
36
38
- #if !BACKTRACE_USES_MALLOC
39
- #include <sys/mman.h>
40
- #endif
41
-
42
37
#include "unwind.h"
43
38
#include "backtrace.h"
44
- #include "backtrace-supported.h"
45
39
#include "internal.h"
46
40
47
- #ifndef MAP_ANONYMOUS
48
- #define MAP_ANONYMOUS MAP_ANON
49
- #endif
50
-
51
- #ifndef MAP_FAILED
52
- #define MAP_FAILED ((void *)-1)
53
- #endif
54
-
55
41
/* The main backtrace_full routine. */
56
42
57
43
/* Data passed through _Unwind_Backtrace. */
@@ -118,6 +104,7 @@ backtrace_full (struct backtrace_state *state, int skip,
118
104
backtrace_error_callback error_callback , void * data )
119
105
{
120
106
struct backtrace_data bdata ;
107
+ void * p ;
121
108
122
109
bdata .skip = skip + 1 ;
123
110
bdata .state = state ;
@@ -126,25 +113,16 @@ backtrace_full (struct backtrace_state *state, int skip,
126
113
bdata .data = data ;
127
114
bdata .ret = 0 ;
128
115
129
- #if !BACKTRACE_USES_MALLOC
130
- {
131
- size_t pagesize ;
132
- void * page ;
133
-
134
- /* If we can't allocate any memory at all, don't try to produce
135
- file/line information. */
136
- pagesize = getpagesize ();
137
- page = mmap (NULL , pagesize , PROT_READ | PROT_WRITE ,
138
- MAP_PRIVATE | MAP_ANONYMOUS , -1 , 0 );
139
- if (page == MAP_FAILED )
140
- bdata .can_alloc = 0 ;
141
- else
142
- {
143
- munmap (page , pagesize );
144
- bdata .can_alloc = 1 ;
145
- }
146
- }
147
- #endif
116
+ /* If we can't allocate any memory at all, don't try to produce
117
+ file/line information. */
118
+ p = backtrace_alloc (state , 4096 , NULL , NULL );
119
+ if (p == NULL )
120
+ bdata .can_alloc = 0 ;
121
+ else
122
+ {
123
+ backtrace_free (state , p , 4096 , NULL , NULL );
124
+ bdata .can_alloc = 1 ;
125
+ }
148
126
149
127
_Unwind_Backtrace (unwind , & bdata );
150
128
return bdata .ret ;
0 commit comments