aboutsummaryrefslogtreecommitdiff
path: root/src/google_breakpad/processor/basic_source_line_resolver.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/google_breakpad/processor/basic_source_line_resolver.h')
-rw-r--r--src/google_breakpad/processor/basic_source_line_resolver.h81
1 files changed, 58 insertions, 23 deletions
diff --git a/src/google_breakpad/processor/basic_source_line_resolver.h b/src/google_breakpad/processor/basic_source_line_resolver.h
index 91fb7841..e86b28d2 100644
--- a/src/google_breakpad/processor/basic_source_line_resolver.h
+++ b/src/google_breakpad/processor/basic_source_line_resolver.h
@@ -1,5 +1,4 @@
-// Copyright (c) 2010 Google Inc.
-// All rights reserved.
+// Copyright 2010 Google LLC
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
@@ -11,7 +10,7 @@
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
-// * Neither the name of Google Inc. nor the names of its
+// * Neither the name of Google LLC nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
@@ -40,6 +39,7 @@
#include <map>
#include <string>
+#include <vector>
#include "common/using_std_string.h"
#include "google_breakpad/processor/source_line_resolver_base.h"
@@ -84,15 +84,50 @@ class BasicSourceLineResolver : public SourceLineResolverBase {
// Helper class, containing useful methods for parsing of Breakpad symbol files.
class SymbolParseHelper {
public:
+ using MemAddr = SourceLineResolverInterface::MemAddr;
+
// Parses a |file_line| declaration. Returns true on success.
// Format: FILE <id> <filename>.
// Notice, that this method modifies the input |file_line| which is why it
// can't be const. On success, <id>, and <filename> are stored in |*index|,
// and |*filename|. No allocation is done, |*filename| simply points inside
// |file_line|.
- static bool ParseFile(char *file_line, // in
- long *index, // out
- char **filename); // out
+ static bool ParseFile(char* file_line, // in
+ long* index, // out
+ char** filename); // out
+
+ // Parses a |inline_origin_line| declaration. Returns true on success.
+ // Old Format: INLINE_ORIGIN <origin_id> <file_id> <name>.
+ // New Format: INLINE_ORIGIN <origin_id> <name>.
+ // Notice, that this method modifies the input |inline_origin_line| which is
+ // why it can't be const. On success, <has_file_id>, <origin_id>, <file_id>
+ // and <name> are stored in |*has_file_id*|, |*origin_id|, |*file_id|, and
+ // |*name|. No allocation is done, |*name| simply points inside
+ // |inline_origin_line|.
+ static bool ParseInlineOrigin(char* inline_origin_line, // in
+ bool* has_file_id, // out
+ long* origin_id, // out
+ long* file_id, // out
+ char** name); // out
+
+ // Parses a |inline| declaration. Returns true on success.
+ // Old Format: INLINE <inline_nest_level> <call_site_line> <origin_id>
+ // [<address> <size>]+
+ // New Format: INLINE <inline_nest_level> <call_site_line> <call_site_file_id>
+ // <origin_id> [<address> <size>]+
+ // Notice, that this method modifies the input |inline|
+ // which is why it can't be const. On success, <has_call_site_file_id>,
+ // <inline_nest_level>, <call_site_line> and <origin_id> are stored in
+ // |*has_call_site_file_id*|, |*inline_nest_level|, |*call_site_line|, and
+ // |*origin_id|, and all pairs of (<address>, <size>) are added into ranges.
+ static bool ParseInline(
+ char* inline_line, // in
+ bool* has_call_site_file_id, // out
+ long* inline_nest_level, // out
+ long* call_site_line, // out
+ long* call_site_file_id, // out
+ long* origin_id, // out
+ std::vector<std::pair<MemAddr, MemAddr>>* ranges); // out
// Parses a |function_line| declaration. Returns true on success.
// Format: FUNC [<multiple>] <address> <size> <stack_param_size> <name>.
@@ -101,12 +136,12 @@ class SymbolParseHelper {
// <stack_param_size>, and <name> 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
- char **name); // out
+ static bool ParseFunction(char* function_line, // in
+ bool* is_multiple, // out
+ uint64_t* address, // out
+ uint64_t* size, // out
+ long* stack_param_size, // out
+ char** name); // out
// Parses a |line| declaration. Returns true on success.
// Format: <address> <size> <line number> <source file id>
@@ -114,11 +149,11 @@ class SymbolParseHelper {
// it can't be const. On success, <address>, <size>, <line number>, and
// <source file id> are stored in |*address|, |*size|, |*line_number|, and
// |*source_file|.
- static bool ParseLine(char *line_line, // in
- uint64_t *address, // out
- uint64_t *size, // out
- long *line_number, // out
- long *source_file); // out
+ static bool ParseLine(char* line_line, // in
+ uint64_t* address, // out
+ uint64_t* size, // out
+ long* line_number, // out
+ long* source_file); // out
// Parses a |public_line| declaration. Returns true on success.
// Format: PUBLIC [<multiple>] <address> <stack_param_size> <name>
@@ -127,15 +162,15 @@ class SymbolParseHelper {
// <stack_param_size>, <name> 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
+ static bool ParsePublicSymbol(char* public_line, // in
+ bool* is_multiple, // out
+ uint64_t* address, // out
+ long* stack_param_size, // out
+ char** name); // out
private:
// Used for success checks after strtoull and strtol.
- static bool IsValidAfterNumber(char *after_number);
+ static bool IsValidAfterNumber(char* after_number);
// Only allow static methods.
SymbolParseHelper();