From 8d54c7509234e9a4918046c12dcb138489f06990 Mon Sep 17 00:00:00 2001 From: "thestig@chromium.org" Date: Wed, 14 Sep 2011 01:02:55 +0000 Subject: 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 --- src/common/linux/dump_symbols.cc | 8 +++++--- src/common/linux/dump_symbols.h | 4 +++- src/common/linux/dump_symbols_unittest.cc | 26 +++++++++++++++----------- 3 files changed, 23 insertions(+), 15 deletions(-) (limited to 'src/common/linux') 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(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(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(&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", -- cgit v1.2.1