aboutsummaryrefslogtreecommitdiff
path: root/src/common/linux/elfutils.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/common/linux/elfutils.h')
-rw-r--r--src/common/linux/elfutils.h48
1 files changed, 41 insertions, 7 deletions
diff --git a/src/common/linux/elfutils.h b/src/common/linux/elfutils.h
index aefb6cf5..130a8ac1 100644
--- a/src/common/linux/elfutils.h
+++ b/src/common/linux/elfutils.h
@@ -1,5 +1,4 @@
-// Copyright (c) 2012, Google Inc.
-// All rights reserved.
+// Copyright 2012 Google LLC
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
@@ -11,7 +10,7 @@
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
-// * Neither the name of Google Inc. nor the names of its
+// * Neither the name of Google LLC nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
@@ -41,6 +40,39 @@
namespace google_breakpad {
+typedef struct Elf32_Chdr {
+ typedef Elf32_Word Type;
+ typedef Elf32_Word Size;
+ typedef Elf32_Addr Addr;
+
+ static_assert(sizeof (Type) == 4);
+ static_assert(sizeof (Size) == 4);
+ static_assert(sizeof (Addr) == 4);
+
+ Type ch_type; // Compression type
+ Size ch_size; // Uncompressed data size in bytes
+ Addr ch_addralign; // Uncompressed data alignment
+} Elf32_Chdr;
+
+static_assert(sizeof (Elf32_Chdr) == 12);
+
+typedef struct Elf64_Chdr {
+ typedef Elf64_Word Type;
+ typedef Elf64_Xword Size;
+ typedef Elf64_Addr Addr;
+
+ static_assert(sizeof (Type) == 4);
+ static_assert(sizeof (Size) == 8);
+ static_assert(sizeof (Addr) == 8);
+
+ Type ch_type; // Compression type
+ Type ch_reserved; // Padding
+ Size ch_size; // Uncompressed data size in bytes
+ Addr ch_addralign; // Uncompressed data alignment
+} Elf64_Chdr;
+
+static_assert(sizeof (Elf64_Chdr) == 24);
+
// Traits classes so consumers can write templatized code to deal
// with specific ELF bits.
struct ElfClass32 {
@@ -50,6 +82,7 @@ struct ElfClass32 {
typedef Elf32_Nhdr Nhdr;
typedef Elf32_Phdr Phdr;
typedef Elf32_Shdr Shdr;
+ typedef Elf32_Chdr Chdr;
typedef Elf32_Half Half;
typedef Elf32_Off Off;
typedef Elf32_Sym Sym;
@@ -68,6 +101,7 @@ struct ElfClass64 {
typedef Elf64_Nhdr Nhdr;
typedef Elf64_Phdr Phdr;
typedef Elf64_Shdr Shdr;
+ typedef Elf64_Chdr Chdr;
typedef Elf64_Half Half;
typedef Elf64_Off Off;
typedef Elf64_Sym Sym;
@@ -86,11 +120,11 @@ int ElfClass(const void* elf_base);
// in the ELF binary data at |elf_mapped_base|. On success, returns true
// and sets |*section_start| to point to the start of the section data,
// and |*section_size| to the size of the section's data.
-bool FindElfSection(const void *elf_mapped_base,
- const char *section_name,
+bool FindElfSection(const void* elf_mapped_base,
+ const char* section_name,
uint32_t section_type,
- const void **section_start,
- size_t *section_size);
+ const void** section_start,
+ size_t* section_size);
// Internal helper method, exposed for convenience for callers
// that already have more info.