aboutsummaryrefslogtreecommitdiff
path: root/src/common/linux
diff options
context:
space:
mode:
authorthestig@chromium.org <thestig@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2011-09-14 01:02:55 +0000
committerthestig@chromium.org <thestig@chromium.org@4c0a9323-5329-0410-9bdc-e9ce6186880e>2011-09-14 01:02:55 +0000
commit8d54c7509234e9a4918046c12dcb138489f06990 (patch)
tree3da356f2f0b5d4b281cb6394a8064fbee5fdd756 /src/common/linux
parentRemove javascript_engine GYP variable. (diff)
downloadbreakpad-8d54c7509234e9a4918046c12dcb138489f06990.tar.xz
Linux/Mac: Add option to omit the CFI section in dump_syms.
Review URL: http://breakpad.appspot.com/304001 git-svn-id: http://google-breakpad.googlecode.com/svn/trunk@835 4c0a9323-5329-0410-9bdc-e9ce6186880e
Diffstat (limited to 'src/common/linux')
-rw-r--r--src/common/linux/dump_symbols.cc8
-rw-r--r--src/common/linux/dump_symbols.h4
-rw-r--r--src/common/linux/dump_symbols_unittest.cc26
3 files changed, 23 insertions, 15 deletions
diff --git a/src/common/linux/dump_symbols.cc b/src/common/linux/dump_symbols.cc
index fc312983..cd059ba8 100644
--- a/src/common/linux/dump_symbols.cc
+++ b/src/common/linux/dump_symbols.cc
@@ -1,4 +1,4 @@
-// Copyright (c) 2010 Google Inc.
+// Copyright (c) 2011 Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -728,6 +728,7 @@ namespace google_breakpad {
bool WriteSymbolFileInternal(uint8_t* obj_file,
const std::string &obj_filename,
const std::string &debug_dir,
+ bool cfi,
std::ostream &sym_stream) {
ElfW(Ehdr) *elf_header = reinterpret_cast<ElfW(Ehdr) *>(obj_file);
@@ -803,7 +804,7 @@ bool WriteSymbolFileInternal(uint8_t* obj_file,
return false;
}
}
- if (!module.Write(sym_stream))
+ if (!module.Write(sym_stream, cfi))
return false;
return true;
@@ -811,6 +812,7 @@ bool WriteSymbolFileInternal(uint8_t* obj_file,
bool WriteSymbolFile(const std::string &obj_file,
const std::string &debug_dir,
+ bool cfi,
std::ostream &sym_stream) {
MmapWrapper map_wrapper;
ElfW(Ehdr) *elf_header = NULL;
@@ -818,7 +820,7 @@ bool WriteSymbolFile(const std::string &obj_file,
return false;
return WriteSymbolFileInternal(reinterpret_cast<uint8_t*>(elf_header),
- obj_file, debug_dir, sym_stream);
+ obj_file, debug_dir, cfi, sym_stream);
}
} // namespace google_breakpad
diff --git a/src/common/linux/dump_symbols.h b/src/common/linux/dump_symbols.h
index 3749d1f6..9bf54d37 100644
--- a/src/common/linux/dump_symbols.h
+++ b/src/common/linux/dump_symbols.h
@@ -1,6 +1,6 @@
// -*- mode: c++ -*-
-// Copyright (c) 2010, Google Inc.
+// Copyright (c) 2011, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
@@ -45,8 +45,10 @@ namespace google_breakpad {
// file format.
// If OBJ_FILE has been stripped but contains a .gnu_debuglink section,
// then look for the debug file in DEBUG_DIR.
+// If CFI is set to false, then omit the CFI section.
bool WriteSymbolFile(const std::string &obj_file,
const std::string &debug_dir,
+ bool cfi,
std::ostream &sym_stream);
} // namespace google_breakpad
diff --git a/src/common/linux/dump_symbols_unittest.cc b/src/common/linux/dump_symbols_unittest.cc
index 06263076..c6d4d2d3 100644
--- a/src/common/linux/dump_symbols_unittest.cc
+++ b/src/common/linux/dump_symbols_unittest.cc
@@ -47,6 +47,7 @@ namespace google_breakpad {
bool WriteSymbolFileInternal(uint8_t* obj_file,
const std::string &obj_filename,
const std::string &debug_dir,
+ bool cfi,
std::ostream &sym_stream);
}
@@ -62,7 +63,7 @@ using std::vector;
using ::testing::Test;
class DumpSymbols : public Test {
-public:
+ public:
void GetElfContents(ELF& elf) {
string contents;
ASSERT_TRUE(elf.GetContents(&contents));
@@ -84,6 +85,7 @@ TEST_F(DumpSymbols, Invalid) {
EXPECT_FALSE(WriteSymbolFileInternal(reinterpret_cast<uint8_t*>(&header),
"foo",
"",
+ true,
s));
}
@@ -105,11 +107,11 @@ TEST_F(DumpSymbols, SimplePublic32) {
SHN_UNDEF + 1);
int index = elf.AddSection(".dynstr", table, SHT_STRTAB);
elf.AddSection(".dynsym", syms,
- SHT_DYNSYM, // type
- SHF_ALLOC, // flags
- 0, // addr
- index, // link
- sizeof(Elf32_Sym)); // entsize
+ SHT_DYNSYM, // type
+ SHF_ALLOC, // flags
+ 0, // addr
+ index, // link
+ sizeof(Elf32_Sym)); // entsize
elf.Finish();
GetElfContents(elf);
@@ -118,6 +120,7 @@ TEST_F(DumpSymbols, SimplePublic32) {
ASSERT_TRUE(WriteSymbolFileInternal(elfdata,
"foo",
"",
+ true,
s));
EXPECT_EQ("MODULE Linux x86 000000000000000000000000000000000 foo\n"
"PUBLIC 1000 0 superfunc\n",
@@ -141,11 +144,11 @@ TEST_F(DumpSymbols, SimplePublic64) {
SHN_UNDEF + 1);
int index = elf.AddSection(".dynstr", table, SHT_STRTAB);
elf.AddSection(".dynsym", syms,
- SHT_DYNSYM, // type
- SHF_ALLOC, // flags
- 0, // addr
- index, // link
- sizeof(Elf64_Sym)); // entsize
+ SHT_DYNSYM, // type
+ SHF_ALLOC, // flags
+ 0, // addr
+ index, // link
+ sizeof(Elf64_Sym)); // entsize
elf.Finish();
GetElfContents(elf);
@@ -154,6 +157,7 @@ TEST_F(DumpSymbols, SimplePublic64) {
ASSERT_TRUE(WriteSymbolFileInternal(elfdata,
"foo",
"",
+ true,
s));
EXPECT_EQ("MODULE Linux x86_64 000000000000000000000000000000000 foo\n"
"PUBLIC 1000 0 superfunc\n",