aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e>2007-09-26 18:08:41 +0000
committermmentovai <mmentovai@4c0a9323-5329-0410-9bdc-e9ce6186880e>2007-09-26 18:08:41 +0000
commit0e6f5c95d7b791c2a7d2c4056d9746f3fa1ff166 (patch)
tree1d66250ca2eb2c2591907c0dacded37792740e8e
parentFix license boilerplate on these two files. Apparently these were missed (diff)
downloadbreakpad-0e6f5c95d7b791c2a7d2c4056d9746f3fa1ff166.tar.xz
Allow Breakpad processor library to build on Solaris with the native Sun
toolchain (#142). Patch by Alfred Peng. r=me. git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@213 4c0a9323-5329-0410-9bdc-e9ce6186880e
-rw-r--r--src/google_breakpad/processor/basic_source_line_resolver.h24
-rw-r--r--src/google_breakpad/processor/code_module.h1
-rw-r--r--src/google_breakpad/processor/minidump_processor.h1
-rw-r--r--src/google_breakpad/processor/process_state.h1
-rw-r--r--src/processor/basic_source_line_resolver.cc13
-rw-r--r--src/processor/contained_range_map-inl.h2
-rw-r--r--src/processor/minidump.cc2
-rw-r--r--src/processor/simple_symbol_supplier.cc4
8 files changed, 44 insertions, 4 deletions
diff --git a/src/google_breakpad/processor/basic_source_line_resolver.h b/src/google_breakpad/processor/basic_source_line_resolver.h
index 2052bacb..814b01ae 100644
--- a/src/google_breakpad/processor/basic_source_line_resolver.h
+++ b/src/google_breakpad/processor/basic_source_line_resolver.h
@@ -33,14 +33,28 @@
#ifndef GOOGLE_BREAKPAD_PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_H__
#define GOOGLE_BREAKPAD_PROCESSOR_BASIC_SOURCE_LINE_RESOLVER_H__
+// TODO: Platforms that have no hash_map can use map, at the likely cost of
+// performance.
+#ifdef __SUNPRO_CC
+#define BSLR_NO_HASH_MAP
+#endif // __SUNPRO_CC
+
+#ifdef BSLR_NO_HASH_MAP
+#include <map>
+#else // BSLR_NO_HASH_MAP
#include <ext/hash_map>
+#endif // BSLR_NO_HASH_MAP
#include "google_breakpad/processor/source_line_resolver_interface.h"
namespace google_breakpad {
using std::string;
+#ifdef BSLR_NO_HASH_MAP
+using std::map;
+#else // BSLR_NO_HASH_MAP
using __gnu_cxx::hash_map;
+#endif // BSLR_NO_HASH_MAP
class BasicSourceLineResolver : public SourceLineResolverInterface {
public:
@@ -65,13 +79,23 @@ class BasicSourceLineResolver : public SourceLineResolverInterface {
struct Function;
struct PublicSymbol;
struct File;
+#ifdef BSLR_NO_HASH_MAP
+ struct CompareString {
+ bool operator()(const string &s1, const string &s2) const;
+ };
+#else // BSLR_NO_HASH_MAP
struct HashString {
size_t operator()(const string &s) const;
};
+#endif // BSLR_NO_HASH_MAP
class Module;
// All of the modules we've loaded
+#ifdef BSLR_NO_HASH_MAP
+ typedef map<string, Module*, CompareString> ModuleMap;
+#else // BSLR_NO_HASH_MAP
typedef hash_map<string, Module*, HashString> ModuleMap;
+#endif // BSLR_NO_HASH_MAP
ModuleMap *modules_;
// Disallow unwanted copy ctor and assignment operator
diff --git a/src/google_breakpad/processor/code_module.h b/src/google_breakpad/processor/code_module.h
index 66cda97b..38ee956e 100644
--- a/src/google_breakpad/processor/code_module.h
+++ b/src/google_breakpad/processor/code_module.h
@@ -36,6 +36,7 @@
#define GOOGLE_BREAKPAD_PROCESSOR_CODE_MODULE_H__
#include <string>
+#include "google_breakpad/common/breakpad_types.h"
namespace google_breakpad {
diff --git a/src/google_breakpad/processor/minidump_processor.h b/src/google_breakpad/processor/minidump_processor.h
index fc0024bc..73447f97 100644
--- a/src/google_breakpad/processor/minidump_processor.h
+++ b/src/google_breakpad/processor/minidump_processor.h
@@ -31,6 +31,7 @@
#define GOOGLE_BREAKPAD_PROCESSOR_MINIDUMP_PROCESSOR_H__
#include <string>
+#include "google_breakpad/common/breakpad_types.h"
namespace google_breakpad {
diff --git a/src/google_breakpad/processor/process_state.h b/src/google_breakpad/processor/process_state.h
index af95247e..afbbb193 100644
--- a/src/google_breakpad/processor/process_state.h
+++ b/src/google_breakpad/processor/process_state.h
@@ -37,6 +37,7 @@
#include <string>
#include <vector>
#include "google_breakpad/processor/system_info.h"
+#include "google_breakpad/common/breakpad_types.h"
namespace google_breakpad {
diff --git a/src/processor/basic_source_line_resolver.cc b/src/processor/basic_source_line_resolver.cc
index e5d1bd7f..6baa1a8b 100644
--- a/src/processor/basic_source_line_resolver.cc
+++ b/src/processor/basic_source_line_resolver.cc
@@ -48,7 +48,9 @@
using std::map;
using std::vector;
using std::make_pair;
+#ifndef BSLR_NO_HASH_MAP
using __gnu_cxx::hash;
+#endif // BSLR_NO_HASH_MAP
namespace google_breakpad {
@@ -116,7 +118,11 @@ class BasicSourceLineResolver::Module {
private:
friend class BasicSourceLineResolver;
+#ifdef BSLR_NO_HASH_MAP
+ typedef map<int, string> FileMap;
+#else // BSLR_NO_HASH_MAP
typedef hash_map<int, string> FileMap;
+#endif // BSLR_NO_HASH_MAP
// The types for stack_info_. This is equivalent to MS DIA's
// StackFrameTypeEnum. Each identifies a different type of frame
@@ -594,8 +600,15 @@ bool BasicSourceLineResolver::Module::ParseStackInfo(char *stack_info_line) {
return true;
}
+#ifdef BSLR_NO_HASH_MAP
+bool BasicSourceLineResolver::CompareString::operator()(
+ const string &s1, const string &s2) const {
+ return strcmp(s1.c_str(), s2.c_str()) < 0;
+}
+#else // BSLR_NO_HASH_MAP
size_t BasicSourceLineResolver::HashString::operator()(const string &s) const {
return hash<const char*>()(s.c_str());
}
+#endif // BSLR_NO_HASH_MAP
} // namespace google_breakpad
diff --git a/src/processor/contained_range_map-inl.h b/src/processor/contained_range_map-inl.h
index 97f9fdbe..cf5ff235 100644
--- a/src/processor/contained_range_map-inl.h
+++ b/src/processor/contained_range_map-inl.h
@@ -70,7 +70,7 @@ bool ContainedRangeMap<AddressType, EntryType>::StoreRange(
MapIterator iterator_base = map_->lower_bound(base);
MapIterator iterator_high = map_->lower_bound(high);
- MapConstIterator iterator_end = map_->end();
+ MapIterator iterator_end = map_->end();
if (iterator_base == iterator_high && iterator_base != iterator_end &&
base >= iterator_base->second->base_) {
diff --git a/src/processor/minidump.cc b/src/processor/minidump.cc
index 3548fb95..93d4eb05 100644
--- a/src/processor/minidump.cc
+++ b/src/processor/minidump.cc
@@ -106,7 +106,7 @@ static inline void Swap(u_int32_t* value) {
}
-static void Swap(u_int64_t* value) {
+static inline void Swap(u_int64_t* value) {
u_int32_t* value32 = reinterpret_cast<u_int32_t*>(value);
Swap(&value32[0]);
Swap(&value32[1]);
diff --git a/src/processor/simple_symbol_supplier.cc b/src/processor/simple_symbol_supplier.cc
index ca3805ce..df61e849 100644
--- a/src/processor/simple_symbol_supplier.cc
+++ b/src/processor/simple_symbol_supplier.cc
@@ -113,8 +113,8 @@ SymbolSupplier::SymbolResult SimpleSymbolSupplier::GetSymbolFileAtPath(
string debug_file_extension;
if (debug_file_name.size() > 4)
debug_file_extension = debug_file_name.substr(debug_file_name.size() - 4);
- transform(debug_file_extension.begin(), debug_file_extension.end(),
- debug_file_extension.begin(), tolower);
+ std::transform(debug_file_extension.begin(), debug_file_extension.end(),
+ debug_file_extension.begin(), tolower);
if (debug_file_extension == ".pdb") {
path.append(debug_file_name.substr(0, debug_file_name.size() - 4));
} else {