OLD | NEW |
---|---|
1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 /* Copyright (c) 2013 The Chromium Authors. All rights reserved. |
2 * Use of this source code is governed by a BSD-style license that can be | 2 * Use of this source code is governed by a BSD-style license that can be |
3 * found in the LICENSE file. | 3 * found in the LICENSE file. |
4 */ | 4 */ |
5 | 5 |
6 /* XRay symbol table */ | 6 /* XRay symbol table */ |
7 | 7 |
8 #define _GNU_SOURCE | 8 #define _GNU_SOURCE |
9 #include <stdint.h> | 9 #include <stdint.h> |
10 #include <stdio.h> | 10 #include <stdio.h> |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
138 printf("adding symbol %s\n", recorded_name); | 138 printf("adding symbol %s\n", recorded_name); |
139 /* construct a symbol and put it in the symbol table */ | 139 /* construct a symbol and put it in the symbol table */ |
140 symbol = XRaySymbolCreate(symtab->symbol_pool, recorded_name); | 140 symbol = XRaySymbolCreate(symtab->symbol_pool, recorded_name); |
141 return XRaySymbolTableAdd(symtab, symbol, addr); | 141 return XRaySymbolTableAdd(symtab, symbol, addr); |
142 } | 142 } |
143 | 143 |
144 struct XRaySymbol* XRaySymbolTableLookup(struct XRaySymbolTable* symtab, | 144 struct XRaySymbol* XRaySymbolTableLookup(struct XRaySymbolTable* symtab, |
145 uint32_t addr) { | 145 uint32_t addr) { |
146 void *x = XRayHashTableLookup(symtab->hash_table, addr); | 146 void *x = XRayHashTableLookup(symtab->hash_table, addr); |
147 struct XRaySymbol* r = (struct XRaySymbol*)x; | 147 struct XRaySymbol* r = (struct XRaySymbol*)x; |
148 | |
149 #if defined(__pnacl__) | |
150 if (r == NULL){ | |
151 addr |= 0x10000000; | |
nfullagar1
2013/07/18 00:47:22
(you may have missed this one from before)
above:
grosse
2013/07/18 17:37:05
Done.
| |
152 const char* name = (const char*)addr; | |
153 struct XRaySymbol* symbol = XRaySymbolCreate(symtab->symbol_pool, name); | |
154 r = XRaySymbolTableAdd(symtab, symbol, addr); | |
155 } | |
156 #endif | |
157 | |
148 #if defined(__GLIBC__) | 158 #if defined(__GLIBC__) |
149 if (r == NULL) { | 159 if (r == NULL) { |
150 Dl_info info; | 160 Dl_info info; |
151 if (dladdr((const void*)addr, &info) != 0) | 161 if (dladdr((const void*)addr, &info) != 0) |
152 if (info.dli_sname) | 162 if (info.dli_sname) |
153 r = XRaySymbolTableAddByName(symtab, info.dli_sname, addr); | 163 r = XRaySymbolTableAddByName(symtab, info.dli_sname, addr); |
154 } | 164 } |
155 #endif | 165 #endif |
156 return r; | 166 return r; |
157 } | 167 } |
(...skipping 20 matching lines...) Expand all Loading... | |
178 /* Frees a symbol table. */ | 188 /* Frees a symbol table. */ |
179 void XRaySymbolTableFree(struct XRaySymbolTable* symtab) { | 189 void XRaySymbolTableFree(struct XRaySymbolTable* symtab) { |
180 XRayStringPoolFree(symtab->string_pool); | 190 XRayStringPoolFree(symtab->string_pool); |
181 XRaySymbolPoolFree(symtab->symbol_pool); | 191 XRaySymbolPoolFree(symtab->symbol_pool); |
182 XRayHashTableFree(symtab->hash_table); | 192 XRayHashTableFree(symtab->hash_table); |
183 symtab->num_symbols = 0; | 193 symtab->num_symbols = 0; |
184 XRayFree(symtab); | 194 XRayFree(symtab); |
185 } | 195 } |
186 | 196 |
187 #endif /* XRAY */ | 197 #endif /* XRAY */ |
OLD | NEW |