summaryrefslogtreecommitdiff
path: root/usr/src/lib/libdwarf/common/dw_elfstructs.h
diff options
context:
space:
mode:
authorRobert Mustacchi <rm@fingolfin.org>2020-06-25 17:58:31 -0700
committerRobert Mustacchi <rm@fingolfin.org>2020-07-10 12:35:15 -0700
commit4d9fdb46b215739778ebc12079842c9905586999 (patch)
tree3771cce63ac88d62941f4174ee3fa58336a95775 /usr/src/lib/libdwarf/common/dw_elfstructs.h
parent4c60ecf710115cd5ae61f6b97dafc7ff963259f4 (diff)
downloadillumos-gate-4d9fdb46b215739778ebc12079842c9905586999.tar.gz
12223 Update libdwarf to libdwarf-20200612
Reviewed by: Richard Lowe <richlowe@richlowe.net> Approved by: Dan McDonald <danmcd@joyent.com>
Diffstat (limited to 'usr/src/lib/libdwarf/common/dw_elfstructs.h')
-rw-r--r--usr/src/lib/libdwarf/common/dw_elfstructs.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/usr/src/lib/libdwarf/common/dw_elfstructs.h b/usr/src/lib/libdwarf/common/dw_elfstructs.h
new file mode 100644
index 0000000000..a032f238bd
--- /dev/null
+++ b/usr/src/lib/libdwarf/common/dw_elfstructs.h
@@ -0,0 +1,203 @@
+/*
+Copyright (c) 2018, David Anderson
+All rights reserved.
+
+Redistribution and use in source and binary forms, with
+or without modification, are permitted provided that the
+following conditions are met:
+
+ Redistributions of source code must retain the above
+ copyright notice, this list of conditions and the following
+ disclaimer.
+
+ Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
+
+/* Typed in from the SystemV Application Binary Interface
+ but using char arrays instead of variables as
+ for reading we don't need the struct members to be
+ variables. This simplifies configure.
+
+ https://www.uclibc.org/docs/elf-64-gen.pdf used as source
+ of Elf64 fields.
+
+ It is expected code including this will have included
+ an official <elf.h> (for various definitions needed)
+ before including this.
+
+ The structs were all officially defined so files
+ could be mapped in. Fields are arranged so
+ there will not be gaps and we need not deal with
+ alignment-gaps.
+*/
+
+#ifndef EI_NIDENT
+#define EI_NIDENT 16
+#endif
+
+#ifndef TYP
+#define TYP(n,l) char n[l]
+#endif
+
+typedef struct
+{
+ unsigned char e_ident[EI_NIDENT];
+ TYP(e_type,2);
+ TYP(e_machine,2);
+ TYP(e_version,4);
+ TYP(e_entry,4);
+ TYP(e_phoff,4);
+ TYP(e_shoff,4);
+ TYP(e_flags,4);
+ TYP(e_ehsize,2);
+ TYP(e_phentsize,2);
+ TYP(e_phnum,2);
+ TYP(e_shentsize,2);
+ TYP(e_shnum,2);
+ TYP(e_shstrndx,2);
+} dw_elf32_ehdr;
+
+typedef struct
+{
+ unsigned char e_ident[EI_NIDENT];
+ TYP(e_type,2);
+ TYP(e_machine,2);
+ TYP(e_version,4);
+ TYP(e_entry,8);
+ TYP(e_phoff,8);
+ TYP(e_shoff,8);
+ TYP(e_flags,4);
+ TYP(e_ehsize,2);
+ TYP(e_phentsize,2);
+ TYP(e_phnum,2);
+ TYP(e_shentsize,2);
+ TYP(e_shnum,2);
+ TYP(e_shstrndx,2);
+} dw_elf64_ehdr;
+
+typedef struct
+{
+ TYP(p_type,4);
+ TYP(p_offset,4);
+ TYP(p_vaddr,4);
+ TYP(p_paddr,4);
+ TYP(p_filesz,4);
+ TYP(p_memsz,4);
+ TYP(p_flags,4);
+ TYP(p_align,4);
+} dw_elf32_phdr;
+
+typedef struct
+{
+ TYP(p_type,4);
+ TYP(p_flags,4);
+ TYP(p_offset,8);
+ TYP(p_vaddr,8);
+ TYP(p_paddr,8);
+ TYP(p_filesz,8);
+ TYP(p_memsz,8);
+ TYP(p_align,8);
+} dw_elf64_phdr;
+
+typedef struct
+{
+ TYP(sh_name,4);
+ TYP(sh_type,4);
+ TYP(sh_flags,4);
+ TYP(sh_addr,4);
+ TYP(sh_offset,4);
+ TYP(sh_size,4);
+ TYP(sh_link,4);
+ TYP(sh_info,4);
+ TYP(sh_addralign,4);
+ TYP(sh_entsize,4);
+}dw_elf32_shdr;
+
+typedef struct
+{
+ TYP(sh_name,4);
+ TYP(sh_type,4);
+ TYP(sh_flags,8);
+ TYP(sh_addr,8);
+ TYP(sh_offset,8);
+ TYP(sh_size,8);
+ TYP(sh_link,4);
+ TYP(sh_info,4);
+ TYP(sh_addralign,8);
+ TYP(sh_entsize,8);
+}dw_elf64_shdr;
+
+typedef struct
+{
+ TYP(r_offset,4);
+ TYP(r_info,4);
+} dw_elf32_rel;
+
+typedef struct
+{
+ TYP(r_offset,8);
+ TYP(r_info,8);
+} dw_elf64_rel;
+
+typedef struct
+{
+ TYP(r_offset,4);
+ TYP(r_info,4);
+ TYP(r_addend,4); /* signed */
+} dw_elf32_rela;
+
+typedef struct
+{
+ TYP(r_offset,8);
+ TYP(r_info,8);
+ TYP(r_addend,8); /* signed */
+} dw_elf64_rela;
+
+
+typedef struct {
+ TYP(st_name,4);
+ TYP(st_value,4);
+ TYP(st_size,4);
+ unsigned char st_info[1];
+ unsigned char st_other[1];
+ TYP(st_shndx,2);
+} dw_elf32_sym;
+
+typedef struct {
+ TYP(st_name,4);
+ unsigned char st_info[1];
+ unsigned char st_other[1];
+ TYP(st_shndx,2);
+ TYP(st_value,8);
+ TYP(st_size,8);
+} dw_elf64_sym;
+
+
+typedef struct
+{
+ TYP(d_tag,4); /* signed */
+ TYP(d_val,4); /* Union in original */
+} dw_elf32_dyn;
+
+typedef struct
+{
+ TYP(d_tag,8); /* signed */
+ TYP(d_val,8); /* Union in original */
+} dw_elf64_dyn;