Chromium Code Reviews| Index: common/linux/dump_symbols.cc |
| diff --git a/common/linux/dump_symbols.cc b/common/linux/dump_symbols.cc |
| index 0bcc18ab108ea15315b46b71dd6f595e1a734166..eb4d70166280e1dd02998893610f525ea2ce7d42 100644 |
| --- a/common/linux/dump_symbols.cc |
| +++ b/common/linux/dump_symbols.cc |
| @@ -95,6 +95,15 @@ using google_breakpad::scoped_ptr; |
| #define EM_AARCH64 183 |
| #endif |
| +// Define SHT_ANDROID_REL and SHT_ANDROID_RELA if not defined by the host. |
| +// Sections with this type contain Android packed relocations. |
| +#ifndef SHT_ANDROID_REL |
| +#define SHT_ANDROID_REL (SHT_LOOS + 1) |
| +#endif |
| +#ifndef SHT_ANDROID_RELA |
| +#define SHT_ANDROID_RELA (SHT_LOOS + 2) |
| +#endif |
| + |
| // |
| // FDWrapper |
| // |
| @@ -611,6 +620,30 @@ bool LoadSymbols(const string& obj_file, |
| bool found_debug_info_section = false; |
| bool found_usable_info = false; |
| + // Reject files that contain Android packed relocations. The pre-packed |
| + // version of the file should be symbolized; the packed version is only |
| + // intended for use on the target system. |
| + bool has_android_packed_relocations = false; |
| + if (FindElfSectionByName<ElfClass>(".rel.dyn", SHT_ANDROID_REL, |
| + sections, names, |
| + names_end, elf_header->e_shnum)) { |
| + fprintf(stderr, "%s: file contains a \".rel.dyn\" section " |
| + "with type SHT_ANDROID_REL\n", obj_file.c_str()); |
| + has_android_packed_relocations = true; |
| + } |
| + if (FindElfSectionByName<ElfClass>(".rela.dyn", SHT_ANDROID_RELA, |
| + sections, names, |
| + names_end, elf_header->e_shnum)) { |
| + fprintf(stderr, "%s: file contains a \".rela.dyn\" section " |
| + "with type SHT_ANDROID_RELA\n", obj_file.c_str()); |
| + has_android_packed_relocations = true; |
| + } |
| + if (has_android_packed_relocations) { |
| + fprintf(stderr, "%s: files containing Android packed relocations " |
| + "may not be symbolized.\n", obj_file.c_str()); |
|
rmcilroy
2015/06/18 09:42:11
nit - could we just include the error about not be
simonb (inactive)
2015/06/18 10:46:39
Done.
|
| + return false; |
| + } |
|
rmcilroy
2015/06/18 09:42:11
Should this be #ifdef (__ANDROID__) ? Maybe SHT_LO
simonb (inactive)
2015/06/18 10:46:39
__ANDROID__ is not defined/relevant for host tools
|
| + |
| if (options.symbol_data != ONLY_CFI) { |
| #ifndef NO_STABS_SUPPORT |
| // Look for STABS debugging information, and load it if present. |