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

Unified Diff: third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c

Issue 2730473002: Build addr2line-pdb from tcmalloc for use in memory-infra symbolization (Closed)
Patch Set: Move target correctly Created 3 years, 9 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 | « third_party/tcmalloc/README.chromium ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c
diff --git a/third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c b/third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c
index 97b614b41ea2bd874a10de0bf8392fa3190892e2..7a2bf3e6f45f52d5b8533eb0ea5660d17b18be20 100644
--- a/third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c
+++ b/third_party/tcmalloc/chromium/src/windows/addr2line-pdb.c
@@ -35,9 +35,17 @@
* c:\websymbols without asking.
*/
+#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
+#endif
+
+#ifndef _CRT_SECURE_NO_WARNINGS
#define _CRT_SECURE_NO_WARNINGS
+#endif
+
+#ifndef _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_DEPRECATE
+#endif
#include <stdio.h>
#include <stdlib.h>
@@ -67,7 +75,8 @@ int main(int argc, char *argv[]) {
} else if (strcmp(argv[i], "--demangle") == 0 ||
strcmp(argv[i], "-C") == 0) {
symopts |= SYMOPT_UNDNAME;
- } else if (strcmp(argv[i], "-e") == 0) {
+ } else if (strcmp(argv[i], "--exe") == 0 ||
+ strcmp(argv[i], "-e") == 0) {
if (i + 1 >= argc) {
fprintf(stderr, "FATAL ERROR: -e must be followed by a filename\n");
return 1;
@@ -86,7 +95,7 @@ int main(int argc, char *argv[]) {
if (!SymInitialize(process, NULL, FALSE)) {
error = GetLastError();
- fprintf(stderr, "SymInitialize returned error : %d\n", error);
+ fprintf(stderr, "SymInitialize returned error : %lu\n", error);
return 1;
}
@@ -100,13 +109,13 @@ int main(int argc, char *argv[]) {
strcat(search, ";" WEBSYM);
} else {
error = GetLastError();
- fprintf(stderr, "SymGetSearchPath returned error : %d\n", error);
+ fprintf(stderr, "SymGetSearchPath returned error : %lu\n", error);
rv = 1; /* An error, but not a fatal one */
strcpy(search, WEBSYM); /* Use a default value */
}
if (!SymSetSearchPath(process, search)) {
error = GetLastError();
- fprintf(stderr, "SymSetSearchPath returned error : %d\n", error);
+ fprintf(stderr, "SymSetSearchPath returned error : %lu\n", error);
rv = 1; /* An error, but not a fatal one */
}
@@ -115,7 +124,7 @@ int main(int argc, char *argv[]) {
if (!module_base) {
/* SymLoadModuleEx failed */
error = GetLastError();
- fprintf(stderr, "SymLoadModuleEx returned error : %d for %s\n",
+ fprintf(stderr, "SymLoadModuleEx returned error : %lu for %s\n",
error, filename);
SymCleanup(process);
return 1;
@@ -126,7 +135,7 @@ int main(int argc, char *argv[]) {
/* GNU addr2line seems to just do a strtol and ignore any
* weird characters it gets, so we will too.
*/
- unsigned __int64 addr = _strtoui64(buf, NULL, 16);
+ unsigned __int64 reladdr = _strtoui64(buf, NULL, 16);
ULONG64 buffer[(sizeof(SYMBOL_INFO) +
MAX_SYM_NAME*sizeof(TCHAR) +
sizeof(ULONG64) - 1)
@@ -134,17 +143,25 @@ int main(int argc, char *argv[]) {
PSYMBOL_INFO pSymbol = (PSYMBOL_INFO)buffer;
IMAGEHLP_LINE64 line;
DWORD dummy;
+
+ // Just ignore overflow. In an overflow scenario, the resulting address
+ // will be lower than module_base which hasn't been mapped by any prior
+ // SymLoadModuleEx() command. This will cause SymFromAddr() and
+ // SymGetLineFromAddr64() both to return failures and print the correct
+ // ?? and ??:0 message variant.
+ ULONG64 absaddr = reladdr + module_base;
+
pSymbol->SizeOfStruct = sizeof(SYMBOL_INFO);
pSymbol->MaxNameLen = MAX_SYM_NAME;
if (print_function_name) {
- if (SymFromAddr(process, (DWORD64)addr, NULL, pSymbol)) {
+ if (SymFromAddr(process, (DWORD64)absaddr, NULL, pSymbol)) {
printf("%s\n", pSymbol->Name);
} else {
printf("??\n");
}
}
line.SizeOfStruct = sizeof(IMAGEHLP_LINE64);
- if (SymGetLineFromAddr64(process, (DWORD64)addr, &dummy, &line)) {
+ if (SymGetLineFromAddr64(process, (DWORD64)absaddr, &dummy, &line)) {
printf("%s:%d\n", line.FileName, (int)line.LineNumber);
} else {
printf("??:0\n");
« no previous file with comments | « third_party/tcmalloc/README.chromium ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698