Chromium Code Reviews| 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/17 00:53:19
macro helper for addr fixup, with a descriptive na
| |
| 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 |