Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(185)

Unified Diff: native_client_sdk/src/libraries/xray/symtable.c

Issue 18120003: Update XRay to support x86-64 (RDTSC), use dladdr() as an optional way to (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « native_client_sdk/src/libraries/xray/library.dsc ('k') | native_client_sdk/src/libraries/xray/xray.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: native_client_sdk/src/libraries/xray/symtable.c
===================================================================
--- native_client_sdk/src/libraries/xray/symtable.c (revision 208986)
+++ native_client_sdk/src/libraries/xray/symtable.c (working copy)
@@ -5,10 +5,16 @@
/* XRay symbol table */
+#define _GNU_SOURCE
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
+
+#if defined(__GLIBC__)
+#include <dlfcn.h>
+#endif
+
#include "xray/xray_priv.h"
#if defined(XRAY)
@@ -111,23 +117,41 @@
return (struct XRaySymbol*)XRayHashTableAtIndex(symtab->hash_table, i);
}
+struct XRaySymbol* XRaySymbolTableAdd(struct XRaySymbolTable* symtab,
+ struct XRaySymbol* symbol,
+ uint32_t addr) {
+ return (struct XRaySymbol*)
+ XRayHashTableInsert(symtab->hash_table, symbol, addr);
+}
+struct XRaySymbol* XRaySymbolTableAddByName(struct XRaySymbolTable* symtab,
+ const char* name, uint32_t addr) {
+ char* recorded_symbol;
+ struct XRaySymbol* symbol;
+ /* copy the symbol name into the string pool */
+ recorded_symbol = XRayStringPoolAppend(symtab->string_pool, name);
+ if (g_symtable_debug)
+ printf("adding symbol %s\n", recorded_symbol);
+ /* construct a symbol and put it in the symbol table */
+ symbol = XRaySymbolCreate(symtab->symbol_pool, recorded_symbol);
+ return XRaySymbolTableAdd(symtab, symbol, addr);
+}
+
struct XRaySymbol* XRaySymbolTableLookup(struct XRaySymbolTable* symtab,
uint32_t addr) {
void *x = XRayHashTableLookup(symtab->hash_table, addr);
struct XRaySymbol* r = (struct XRaySymbol*)x;
+#if defined(__GLIBC__)
+ if (r == NULL) {
+ Dl_info info;
+ if (dladdr((const void*)addr, &info) != 0)
+ if (info.dli_sname)
+ r = XRaySymbolTableAddByName(symtab, info.dli_sname, addr);
+ }
+#endif
return r;
}
-
-struct XRaySymbol* XRaySymbolTableAdd(struct XRaySymbolTable* symtab,
- struct XRaySymbol* symbol,
- uint32_t addr) {
- return (struct XRaySymbol*)
- XRayHashTableInsert(symtab->hash_table, symbol, addr);
-}
-
-
struct XRaySymbol* XRaySymbolTableCreateEntry(struct XRaySymbolTable* symtab,
const char* line) {
uint32_t addr;
@@ -135,8 +159,6 @@
char symbol_text[XRAY_LINE_SIZE];
char* parsed_symbol;
char* newln;
- struct XRaySymbol* symbol;
- char* recorded_symbol;
sscanf(line,"%x %s", &uiaddr, symbol_text);
if (uiaddr > 0x07FFFFFF) {
printf("While parsing the mapfile, XRay encountered:\n");
@@ -151,13 +173,7 @@
if (NULL != newln) {
*newln = 0;
}
- /* copy the parsed symbol name into the string pool */
- recorded_symbol = XRayStringPoolAppend(symtab->string_pool, parsed_symbol);
- if (g_symtable_debug)
- printf("adding symbol %s\n", recorded_symbol);
- /* construct a symbol and put it in the symbol table */
- symbol = XRaySymbolCreate(symtab->symbol_pool, recorded_symbol);
- return XRaySymbolTableAdd(symtab, symbol, addr);
+ return XRaySymbolTableAddByName(symtab, parsed_symbol, addr);
}
« no previous file with comments | « native_client_sdk/src/libraries/xray/library.dsc ('k') | native_client_sdk/src/libraries/xray/xray.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698