From b1226959a25b6a5311801d6f204b088c706e7c25 Mon Sep 17 00:00:00 2001 From: Mike Wittman Date: Wed, 29 Nov 2017 13:29:37 -0800 Subject: Add optional field indicating multiple symbols at an address Adds an optional 'm' as the first field in FUNCTION and PUBLIC records to indicate that the address corresponds to more than one symbol. Controls this by a command line flag for now to give symbol file users a chance to update. Also reduces the number of IDiaSymbols retained in memory to one per address. This reduces memory consumption by 8% when processing chrome.dll.pdb. Updates the processor to parse the new optional field. Bug: google-breakpad:751 Change-Id: I6503edaf057312d21a1d63d9c84e5a4fa019dc46 Reviewed-on: https://chromium-review.googlesource.com/773418 Reviewed-by: Mark Mentovai --- .../processor/basic_source_line_resolver.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'src/google_breakpad/processor') diff --git a/src/google_breakpad/processor/basic_source_line_resolver.h b/src/google_breakpad/processor/basic_source_line_resolver.h index 6bb6d863..91fb7841 100644 --- a/src/google_breakpad/processor/basic_source_line_resolver.h +++ b/src/google_breakpad/processor/basic_source_line_resolver.h @@ -95,12 +95,14 @@ class SymbolParseHelper { char **filename); // out // Parses a |function_line| declaration. Returns true on success. - // Format: FUNC
. + // Format: FUNC []
. // Notice, that this method modifies the input |function_line| which is why it - // can't be const. On success,
, , , and - // are stored in |*address|, |*size|, |*stack_param_size|, and |*name|. - // No allocation is done, |*name| simply points inside |function_line|. + // can't be const. On success, the presence of ,
, , + // , and are stored in |*is_multiple|, |*address|, + // |*size|, |*stack_param_size|, and |*name|. No allocation is done, |*name| + // simply points inside |function_line|. static bool ParseFunction(char *function_line, // in + bool *is_multiple, // out uint64_t *address, // out uint64_t *size, // out long *stack_param_size, // out @@ -119,12 +121,14 @@ class SymbolParseHelper { long *source_file); // out // Parses a |public_line| declaration. Returns true on success. - // Format: PUBLIC
+ // Format: PUBLIC []
// Notice, that this method modifies the input |function_line| which is why - // it can't be const. On success,
, , - // are stored in |*address|, |*stack_param_size|, and |*name|. - // No allocation is done, |*name| simply points inside |public_line|. + // it can't be const. On success, the presence of ,
, + // , are stored in |*is_multiple|, |*address|, + // |*stack_param_size|, and |*name|. No allocation is done, |*name| simply + // points inside |public_line|. static bool ParsePublicSymbol(char *public_line, // in + bool *is_multiple, // out uint64_t *address, // out long *stack_param_size, // out char **name); // out -- cgit v1.2.1