This change allows compiling the google-breakpad code using a global ::string class instead of std::string.

For more details take a look at common/using_std_string.h

BUG=

Change-Id: I11f1ce697be23e13f12ea8f0468bbe02fa63c967
Reviewed-on: https://chromium-review.googlesource.com/378159
Reviewed-by: Mark Mentovai <mark@chromium.org>
This commit is contained in:
Ivan Penkov 2016-08-30 14:00:56 -07:00
parent 3fef603b65
commit 704f41ec90
7 changed files with 34 additions and 31 deletions

View File

@ -47,7 +47,8 @@
#include "third_party/musl/include/elf.h" #include "third_party/musl/include/elf.h"
#include "elf_reader.h" #include "elf_reader.h"
//#include "using_std_string.h" #include "common/using_std_string.h"
// EM_AARCH64 is not defined by elf.h of GRTE v3 on x86. // EM_AARCH64 is not defined by elf.h of GRTE v3 on x86.
// TODO(dougkwan): Remove this when v17 is retired. // TODO(dougkwan): Remove this when v17 is retired.
#if !defined(EM_AARCH64) #if !defined(EM_AARCH64)
@ -74,7 +75,6 @@
//DEFINE_bool(elfreader_process_dynsyms, true, //DEFINE_bool(elfreader_process_dynsyms, true,
// "Activate PLT function processing"); // "Activate PLT function processing");
using std::string;
using std::vector; using std::vector;
namespace { namespace {

View File

@ -45,10 +45,9 @@
#include "common/linux/elfutils.h" #include "common/linux/elfutils.h"
#include "common/linux/linux_libc_support.h" #include "common/linux/linux_libc_support.h"
#include "common/linux/memory_mapped_file.h" #include "common/linux/memory_mapped_file.h"
#include "common/using_std_string.h"
#include "third_party/lss/linux_syscall_support.h" #include "third_party/lss/linux_syscall_support.h"
using std::string;
namespace google_breakpad { namespace google_breakpad {
// Used in a few places for backwards-compatibility. // Used in a few places for backwards-compatibility.

View File

@ -12,6 +12,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <stdio.h> #include <stdio.h>
#include "common/using_std_string.h"
#include "processor/logging.h" #include "processor/logging.h"
#if defined(OS_ANDROID) && !defined(__LP64__) #if defined(OS_ANDROID) && !defined(__LP64__)
@ -25,7 +26,7 @@
namespace google_breakpad { namespace google_breakpad {
bool ParseProcMaps(const std::string& input, bool ParseProcMaps(const string& input,
std::vector<MappedMemoryRegion>* regions_out) { std::vector<MappedMemoryRegion>* regions_out) {
std::vector<MappedMemoryRegion> regions; std::vector<MappedMemoryRegion> regions;
@ -33,8 +34,8 @@ bool ParseProcMaps(const std::string& input,
// this point in time. // this point in time.
// Split the string by newlines. // Split the string by newlines.
std::vector<std::string> lines; std::vector<string> lines;
std::string l = ""; string l = "";
for (size_t i = 0; i < input.size(); i++) { for (size_t i = 0; i < input.size(); i++) {
if (input[i] != '\n' && input[i] != '\r') { if (input[i] != '\n' && input[i] != '\r') {
l.push_back(input[i]); l.push_back(input[i]);

View File

@ -3,6 +3,7 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "breakpad_googletest_includes.h" #include "breakpad_googletest_includes.h"
#include "common/using_std_string.h"
#include "google_breakpad/processor/proc_maps_linux.h" #include "google_breakpad/processor/proc_maps_linux.h"
namespace { namespace {
@ -227,7 +228,7 @@ TEST(ProcMapsTest, ParseProcMapsEmptyString) {
// - File name has whitespaces. // - File name has whitespaces.
TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput) { TEST(ProcMapsTest, ParseProcMapsWeirdCorrectInput) {
std::vector<google_breakpad::MappedMemoryRegion> regions; std::vector<google_breakpad::MappedMemoryRegion> regions;
const std::string kContents = const string kContents =
"00400000-0040b000 r-xp 00000000 fc:00 2106562 " "00400000-0040b000 r-xp 00000000 fc:00 2106562 "
" /bin/cat\r\n" " /bin/cat\r\n"
"7f53b7dad000-7f53b7f62000 r-xp 00000000 fc:00 263011 " "7f53b7dad000-7f53b7f62000 r-xp 00000000 fc:00 263011 "

View File

@ -112,10 +112,10 @@ static string StripSeparator(const string &original) {
} }
// PrintStackContents prints the stack contents of the current frame to stdout. // PrintStackContents prints the stack contents of the current frame to stdout.
static void PrintStackContents(const std::string &indent, static void PrintStackContents(const string &indent,
const StackFrame *frame, const StackFrame *frame,
const StackFrame *prev_frame, const StackFrame *prev_frame,
const std::string &cpu, const string &cpu,
const MemoryRegion *memory, const MemoryRegion *memory,
const CodeModules* modules, const CodeModules* modules,
SourceLineResolverInterface *resolver) { SourceLineResolverInterface *resolver) {
@ -181,7 +181,7 @@ static void PrintStackContents(const std::string &indent,
// Print data in hex. // Print data in hex.
const int kBytesPerRow = 16; const int kBytesPerRow = 16;
std::string data_as_string; string data_as_string;
for (int i = 0; i < kBytesPerRow; ++i, ++address) { for (int i = 0; i < kBytesPerRow; ++i, ++address) {
uint8_t value = 0; uint8_t value = 0;
if (address < stack_end && if (address < stack_end &&
@ -607,7 +607,7 @@ static void PrintStack(const CallStack *stack,
// Print stack contents. // Print stack contents.
if (output_stack_contents && frame_index + 1 < frame_count) { if (output_stack_contents && frame_index + 1 < frame_count) {
const std::string indent(" "); const string indent(" ");
PrintStackContents(indent, frame, stack->frames()->at(frame_index + 1), PrintStackContents(indent, frame, stack->frames()->at(frame_index + 1),
cpu, memory, modules, resolver); cpu, memory, modules, resolver);
} }

View File

@ -36,14 +36,15 @@
#include <string> #include <string>
#include "common/stdio_wrapper.h" #include "common/stdio_wrapper.h"
#include "common/using_std_string.h"
#include "google_breakpad/common/breakpad_types.h" #include "google_breakpad/common/breakpad_types.h"
#include "google_breakpad/common/minidump_exception_win32.h" #include "google_breakpad/common/minidump_exception_win32.h"
#include "processor/symbolic_constants_win.h" #include "processor/symbolic_constants_win.h"
namespace google_breakpad { namespace google_breakpad {
std::string NTStatusToString(uint32_t ntstatus) { string NTStatusToString(uint32_t ntstatus) {
std::string reason; string reason;
// The content of this switch was created from ntstatus.h in the 8.1 SDK with // The content of this switch was created from ntstatus.h in the 8.1 SDK with
// //
// egrep '#define [A-Z_0-9]+\s+\(\(NTSTATUS\)0xC[0-9A-F]+L\)' ntstatus.h // egrep '#define [A-Z_0-9]+\s+\(\(NTSTATUS\)0xC[0-9A-F]+L\)' ntstatus.h

View File

@ -49,6 +49,7 @@
#include "common/linux/memory_mapped_file.h" #include "common/linux/memory_mapped_file.h"
#include "common/minidump_type_helper.h" #include "common/minidump_type_helper.h"
#include "common/scoped_ptr.h" #include "common/scoped_ptr.h"
#include "common/using_std_string.h"
#include "google_breakpad/common/breakpad_types.h" #include "google_breakpad/common/breakpad_types.h"
#include "google_breakpad/common/minidump_format.h" #include "google_breakpad/common/minidump_format.h"
#include "third_party/lss/linux_syscall_support.h" #include "third_party/lss/linux_syscall_support.h"
@ -97,7 +98,7 @@ typedef MDTypeHelper<sizeof(ElfW(Addr))>::MDRawLinkMap MDRawLinkMap;
static const MDRVA kInvalidMDRVA = static_cast<MDRVA>(-1); static const MDRVA kInvalidMDRVA = static_cast<MDRVA>(-1);
static bool verbose; static bool verbose;
static std::string g_custom_so_basedir; static string g_custom_so_basedir;
static int usage(const char* argv0) { static int usage(const char* argv0) {
fprintf(stderr, "Usage: %s [-v] <minidump file>\n", argv0); fprintf(stderr, "Usage: %s [-v] <minidump file>\n", argv0);
@ -203,8 +204,8 @@ struct CrashedProcess {
uint32_t permissions; uint32_t permissions;
uint64_t start_address, end_address, offset; uint64_t start_address, end_address, offset;
std::string filename; string filename;
std::string data; string data;
}; };
std::map<uint64_t, Mapping> mappings; std::map<uint64_t, Mapping> mappings;
@ -238,9 +239,9 @@ struct CrashedProcess {
prpsinfo prps; prpsinfo prps;
std::map<uintptr_t, std::string> signatures; std::map<uintptr_t, string> signatures;
std::string dynamic_data; string dynamic_data;
MDRawDebug debug; MDRawDebug debug;
std::vector<MDRawLinkMap> link_map; std::vector<MDRawLinkMap> link_map;
}; };
@ -597,8 +598,8 @@ ParseMaps(CrashedProcess* crashinfo, const MinidumpMemoryRange& range) {
ptr < range.data() + range.length();) { ptr < range.data() + range.length();) {
const uint8_t* eol = (uint8_t*)memchr(ptr, '\n', const uint8_t* eol = (uint8_t*)memchr(ptr, '\n',
range.data() + range.length() - ptr); range.data() + range.length() - ptr);
std::string line((const char*)ptr, string line((const char*)ptr,
eol ? eol - ptr : range.data() + range.length() - ptr); eol ? eol - ptr : range.data() + range.length() - ptr);
ptr = eol ? eol + 1 : range.data() + range.length(); ptr = eol ? eol + 1 : range.data() + range.length();
unsigned long long start, stop, offset; unsigned long long start, stop, offset;
char* permissions = NULL; char* permissions = NULL;
@ -875,17 +876,17 @@ ParseModuleStream(CrashedProcess* crashinfo, const MinidumpMemoryRange& range,
record->signature.data4[2], record->signature.data4[3], record->signature.data4[2], record->signature.data4[3],
record->signature.data4[4], record->signature.data4[5], record->signature.data4[4], record->signature.data4[5],
record->signature.data4[6], record->signature.data4[7]); record->signature.data4[6], record->signature.data4[7]);
std::string filename = string filename =
full_file.GetAsciiMDString(rawmodule->module_name_rva); full_file.GetAsciiMDString(rawmodule->module_name_rva);
size_t slash = filename.find_last_of('/'); size_t slash = filename.find_last_of('/');
std::string basename = slash == std::string::npos ? string basename = slash == string::npos ?
filename : filename.substr(slash + 1); filename : filename.substr(slash + 1);
if (strcmp(guid, "00000000-0000-0000-0000-000000000000")) { if (strcmp(guid, "00000000-0000-0000-0000-000000000000")) {
std::string prefix; string prefix;
if (!g_custom_so_basedir.empty()) if (!g_custom_so_basedir.empty())
prefix = g_custom_so_basedir; prefix = g_custom_so_basedir;
else else
prefix = std::string("/var/lib/breakpad/") + guid + "-" + basename; prefix = string("/var/lib/breakpad/") + guid + "-" + basename;
crashinfo->signatures[rawmodule->base_of_image] = prefix + basename; crashinfo->signatures[rawmodule->base_of_image] = prefix + basename;
} }
@ -904,7 +905,7 @@ ParseModuleStream(CrashedProcess* crashinfo, const MinidumpMemoryRange& range,
} }
static void static void
AddDataToMapping(CrashedProcess* crashinfo, const std::string& data, AddDataToMapping(CrashedProcess* crashinfo, const string& data,
uintptr_t addr) { uintptr_t addr) {
for (std::map<uint64_t, CrashedProcess::Mapping>::iterator for (std::map<uint64_t, CrashedProcess::Mapping>::iterator
iter = crashinfo->mappings.begin(); iter = crashinfo->mappings.begin();
@ -960,7 +961,7 @@ AugmentMappings(CrashedProcess* crashinfo,
for (unsigned i = 0; i < crashinfo->threads.size(); ++i) { for (unsigned i = 0; i < crashinfo->threads.size(); ++i) {
const CrashedProcess::Thread& thread = crashinfo->threads[i]; const CrashedProcess::Thread& thread = crashinfo->threads[i];
AddDataToMapping(crashinfo, AddDataToMapping(crashinfo,
std::string((char *)thread.stack, thread.stack_length), string((char *)thread.stack, thread.stack_length),
thread.stack_addr); thread.stack_addr);
} }
@ -968,7 +969,7 @@ AugmentMappings(CrashedProcess* crashinfo,
// the beginning of the address space, as this area should always be // the beginning of the address space, as this area should always be
// available. // available.
static const uintptr_t start_addr = 4096; static const uintptr_t start_addr = 4096;
std::string data; string data;
struct r_debug debug = { 0 }; struct r_debug debug = { 0 };
debug.r_version = crashinfo->debug.version; debug.r_version = crashinfo->debug.version;
debug.r_brk = (ElfW(Addr))crashinfo->debug.brk; debug.r_brk = (ElfW(Addr))crashinfo->debug.brk;
@ -988,11 +989,11 @@ AugmentMappings(CrashedProcess* crashinfo,
link_map.l_ld = (ElfW(Dyn)*)iter->ld; link_map.l_ld = (ElfW(Dyn)*)iter->ld;
link_map.l_prev = prev; link_map.l_prev = prev;
prev = (struct link_map*)(start_addr + data.size()); prev = (struct link_map*)(start_addr + data.size());
std::string filename = full_file.GetAsciiMDString(iter->name); string filename = full_file.GetAsciiMDString(iter->name);
// Look up signature for this filename. If available, change filename // Look up signature for this filename. If available, change filename
// to point to GUID, instead. // to point to GUID, instead.
std::map<uintptr_t, std::string>::const_iterator guid = std::map<uintptr_t, string>::const_iterator guid =
crashinfo->signatures.find((uintptr_t)iter->addr); crashinfo->signatures.find((uintptr_t)iter->addr);
if (guid != crashinfo->signatures.end()) { if (guid != crashinfo->signatures.end()) {
filename = guid->second; filename = guid->second;