[haiku-commits] haiku: hrev49754 - headers/private/system headers/os/kernel src/system/kernel/arch src/system/runtime_loader/arch

  • From: jessica.l.hamilton@xxxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Fri, 6 Nov 2015 23:51:05 +0100 (CET)

hrev49754 adds 2 changesets to branch 'master'
old head: e2f83cbd6b2a52abb62fef4407c2a97023055648
new head: 75c31ae28dda6ee80b0c3b96becda8f6d1eb28ac
overview:
http://cgit.haiku-os.org/haiku/log/?qt=range&q=75c31ae28dda+%5Ee2f83cbd6b2a

----------------------------------------------------------------------------

e3616ca108fe: system: Provide elf.h to applications

Make a version of elf.h (assembled from the private header files
elf_common.h, elf32.h and elf64.h, and including Haiku's extensions for
C++) available to applications ported from UNIX.

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>

75c31ae28dda: system: Build using public elf.h header

Reduce duplication of code by

* Removing from elf_common.h definitions available in os/kernel/elf.h
* Deleting elf32.h and elf64.h
* Renaming elf_common.h to elf_private.h
* Updating source to build using public and private ELF header files
together

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>

[ Simon South <ssouth@xxxxxxxxxxxxxx> ]

----------------------------------------------------------------------------

24 files changed, 828 insertions(+), 876 deletions(-)
headers/os/kernel/elf.h | 707 +++++++++++++++++++
headers/private/kernel/arch/elf.h | 2 +-
headers/private/kernel/boot/arch.h | 8 +-
headers/private/kernel/boot/elf.h | 4 +-
headers/private/kernel/elf.h | 2 +-
headers/private/kernel/elf_priv.h | 4 +-
headers/private/runtime_loader/runtime_loader.h | 4 +-
headers/private/system/elf32.h | 243 -------
headers/private/system/elf64.h | 247 -------
headers/private/system/elf_common.h | 317 ---------
headers/private/system/elf_private.h | 53 ++
headers/private/system/syscalls.h | 2 +-
src/apps/debugger/elf/ElfFile.cpp | 8 +-
src/apps/debugger/elf/ElfFile.h | 3 +-
src/kits/debug/Image.h | 2 +-
src/system/boot/loader/elf.cpp | 6 +-
src/system/kernel/arch/arm/arch_elf.cpp | 18 +-
src/system/kernel/arch/m68k/arch_elf.cpp | 14 +-
src/system/kernel/arch/ppc/arch_elf.cpp | 14 +-
src/system/kernel/arch/x86/arch_elf.cpp | 14 +-
.../runtime_loader/arch/m68k/arch_relocate.cpp | 10 +-
.../runtime_loader/arch/ppc/arch_relocate.cpp | 6 +-
.../runtime_loader/arch/x86/arch_relocate.cpp | 8 +-
src/tests/system/boot/loader/platform_misc.cpp | 8 +-

############################################################################

Commit: e3616ca108fee51c674cd315e2aacd2102f75a9e
URL: http://cgit.haiku-os.org/haiku/commit/?id=e3616ca108fe
Author: Simon South <ssouth@xxxxxxxxxxxxxx>
Date: Mon Oct 26 16:42:30 2015 UTC
Committer: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>
Commit-Date: Fri Nov 6 22:49:53 2015 UTC

system: Provide elf.h to applications

Make a version of elf.h (assembled from the private header files
elf_common.h, elf32.h and elf64.h, and including Haiku's extensions for
C++) available to applications ported from UNIX.

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>

----------------------------------------------------------------------------

diff --git a/headers/os/kernel/elf.h b/headers/os/kernel/elf.h
new file mode 100644
index 0000000..6f486f6
--- /dev/null
+++ b/headers/os/kernel/elf.h
@@ -0,0 +1,707 @@
+/*
+ * Copyright 2002-2015 Haiku, Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ */
+#ifndef _ELF_H
+#define _ELF_H
+
+
+#include <SupportDefs.h>
+#include <ByteOrder.h>
+
+
+typedef uint32 Elf32_Addr;
+typedef uint16 Elf32_Half;
+typedef uint32 Elf32_Off;
+typedef int32 Elf32_Sword;
+typedef uint32 Elf32_Word;
+
+typedef Elf32_Half Elf32_Versym;
+
+typedef uint64 Elf64_Addr;
+typedef uint64 Elf64_Off;
+typedef uint16 Elf64_Half;
+typedef uint32 Elf64_Word;
+typedef int32 Elf64_Sword;
+typedef uint64 Elf64_Xword;
+typedef int64 Elf64_Sxword;
+
+typedef Elf64_Half Elf64_Versym;
+
+
+/*** ELF header ***/
+
+#define EI_NIDENT 16
+
+typedef struct {
+ uint8 e_ident[EI_NIDENT];
+ Elf32_Half e_type;
+ Elf32_Half e_machine;
+ Elf32_Word e_version;
+ Elf32_Addr e_entry;
+ Elf32_Off e_phoff;
+ Elf32_Off e_shoff;
+ Elf32_Word e_flags;
+ Elf32_Half e_ehsize;
+ Elf32_Half e_phentsize;
+ Elf32_Half e_phnum;
+ Elf32_Half e_shentsize;
+ Elf32_Half e_shnum;
+ Elf32_Half e_shstrndx;
+
+#ifdef __cplusplus
+ bool IsHostEndian() const;
+#endif
+} Elf32_Ehdr;
+
+typedef struct {
+ uint8 e_ident[EI_NIDENT];
+ Elf64_Half e_type;
+ Elf64_Half e_machine;
+ Elf64_Word e_version;
+ Elf64_Addr e_entry;
+ Elf64_Off e_phoff;
+ Elf64_Off e_shoff;
+ Elf64_Word e_flags;
+ Elf64_Half e_ehsize;
+ Elf64_Half e_phentsize;
+ Elf64_Half e_phnum;
+ Elf64_Half e_shentsize;
+ Elf64_Half e_shnum;
+ Elf64_Half e_shstrndx;
+
+#ifdef __cplusplus
+ bool IsHostEndian() const;
+#endif
+} Elf64_Ehdr;
+
+#define ELF_MAGIC "\x7f""ELF"
+
+/* e_ident[] indices */
+#define EI_MAG0 0
+#define EI_MAG1 1
+#define EI_MAG2 2
+#define EI_MAG3 3
+#define EI_CLASS 4
+#define EI_DATA 5
+#define EI_VERSION 6
+#define EI_PAD 7
+
+/* e_type (Object file type) */
+#define ET_NONE 0 /* No file type */
+#define ET_REL 1 /* Relocatable file */
+#define ET_EXEC 2 /* Executable file */
+#define ET_DYN 3 /* Shared-object file */
+#define ET_CORE 4 /* Core file */
+#define ET_LOOS 0xfe00 /* OS-specific range start */
+#define ET_HIOS 0xfeff /* OS-specific range end */
+#define ET_LOPROC 0xff00 /* Processor-specific range start */
+#define ET_HIPROC 0xffff /* Processor-specific range end */
+
+/* e_machine (Architecture) */
+#define EM_NONE 0 /* No machine */
+#define EM_M32 1 /* AT&T WE 32100 */
+#define EM_SPARC 2 /* Sparc */
+#define EM_386 3 /* Intel 80386 */
+#define EM_68K 4 /* Motorola m68k family */
+#define EM_88K 5 /* Motorola m88k family */
+#define EM_486 6 /* Intel 80486, Reserved for future use */
+#define EM_860 7 /* Intel 80860 */
+#define EM_MIPS 8 /* MIPS R3000 (officially, big-endian
only) */
+#define EM_S370 9 /* IBM System/370 */
+#define EM_MIPS_RS3_LE 10 /* MIPS R3000 little-endian, Deprecated */
+#define EM_PARISC 15 /* HPPA */
+#define EM_VPP550 17 /* Fujitsu VPP500 */
+#define EM_SPARC32PLUS 18 /* Sun "v8plus" */
+#define EM_960 19 /* Intel 80960 */
+#define EM_PPC 20 /* PowerPC */
+#define EM_PPC64 21 /* 64-bit PowerPC */
+#define EM_S390 22 /* IBM S/390 */
+#define EM_V800 36 /* NEC V800 series */
+#define EM_FR20 37 /* Fujitsu FR20 */
+#define EM_RH32 38 /* TRW RH32 */
+#define EM_MCORE 39 /* Motorola M*Core */
+#define EM_RCE 39 /* Old name for MCore */
+#define EM_ARM 40 /* ARM */
+#define EM_OLD_ALPHA 41 /* Digital Alpha */
+#define EM_SH 42 /* Renesas / SuperH SH */
+#define EM_SPARCV9 43 /* SPARC v9 64-bit */
+#define EM_TRICORE 44 /* Siemens Tricore embedded processor */
+#define EM_ARC 45 /* ARC Cores */
+#define EM_H8_300 46 /* Renesas H8/300 */
+#define EM_H8_300H 47 /* Renesas H8/300H */
+#define EM_H8S 48 /* Renesas H8S */
+#define EM_H8_500 49 /* Renesas H8/500 */
+#define EM_IA_64 50 /* Intel IA-64 Processor */
+#define EM_MIPS_X 51 /* Stanford MIPS-X */
+#define EM_COLDFIRE 52 /* Motorola Coldfire */
+#define EM_68HC12 53 /* Motorola M68HC12 */
+#define EM_MMA 54 /* Fujitsu Multimedia Accelerator */
+#define EM_PCP 55 /* Siemens PCP */
+#define EM_NCPU 56 /* Sony nCPU embedded RISC processor
*/
+#define EM_NDR1 57 /* Denso NDR1 microprocesspr */
+#define EM_STARCORE 58 /* Motorola Star*Core processor */
+#define EM_ME16 59 /* Toyota ME16 processor */
+#define EM_ST100 60 /* STMicroelectronics ST100 processor */
+#define EM_TINYJ 61 /* Advanced Logic Corp. TinyJ embedded
processor */
+#define EM_X86_64 62 /* Advanced Micro Devices X86-64 processor */
+
+/* architecture class (EI_CLASS) */
+#define ELFCLASS32 1
+#define ELFCLASS64 2
+/* endian (EI_DATA) */
+#define ELFDATA2LSB 1 /* little endian */
+#define ELFDATA2MSB 2 /* big endian */
+
+
+/*** section header ***/
+
+typedef struct {
+ Elf32_Word sh_name;
+ Elf32_Word sh_type;
+ Elf32_Word sh_flags;
+ Elf32_Addr sh_addr;
+ Elf32_Off sh_offset;
+ Elf32_Word sh_size;
+ Elf32_Word sh_link;
+ Elf32_Word sh_info;
+ Elf32_Word sh_addralign;
+ Elf32_Word sh_entsize;
+} Elf32_Shdr;
+
+typedef struct {
+ Elf64_Word sh_name;
+ Elf64_Word sh_type;
+ Elf64_Xword sh_flags;
+ Elf64_Addr sh_addr;
+ Elf64_Off sh_offset;
+ Elf64_Xword sh_size;
+ Elf64_Word sh_link;
+ Elf64_Word sh_info;
+ Elf64_Xword sh_addralign;
+ Elf64_Xword sh_entsize;
+} Elf64_Shdr;
+
+/* special section indices */
+#define SHN_UNDEF 0
+#define SHN_LORESERVE 0xff00
+#define SHN_LOPROC 0xff00
+#define SHN_HIPROC 0xff1f
+#define SHN_ABS 0xfff1
+#define SHN_COMMON 0xfff2
+#define SHN_HIRESERVE 0xffff
+
+/* section header type */
+#define SHT_NULL 0
+#define SHT_PROGBITS 1
+#define SHT_SYMTAB 2
+#define SHT_STRTAB 3
+#define SHT_RELA 4
+#define SHT_HASH 5
+#define SHT_DYNAMIC 6
+#define SHT_NOTE 7
+#define SHT_NOBITS 8
+#define SHT_REL 9
+#define SHT_SHLIB 10
+#define SHT_DYNSYM 11
+
+#define SHT_GNU_verdef 0x6ffffffd /* version definition section */
+#define SHT_GNU_verneed 0x6ffffffe /* version needs section */
+#define SHT_GNU_versym 0x6fffffff /* version symbol table */
+
+#define SHT_LOPROC 0x70000000
+#define SHT_HIPROC 0x7fffffff
+#define SHT_LOUSER 0x80000000
+#define SHT_HIUSER 0xffffffff
+
+/* section header flags */
+#define SHF_WRITE 1
+#define SHF_ALLOC 2
+#define SHF_EXECINSTR 4
+
+#define SHF_MASKPROC 0xf0000000
+
+
+/*** program header ***/
+
+typedef struct {
+ Elf32_Word p_type;
+ Elf32_Off p_offset; /* offset from the beginning of the
file of the segment */
+ Elf32_Addr p_vaddr; /* virtual address for the segment in
memory */
+ Elf32_Addr p_paddr;
+ Elf32_Word p_filesz; /* the size of the segment in the file
*/
+ Elf32_Word p_memsz; /* the size of the segment in memory */
+ Elf32_Word p_flags;
+ Elf32_Word p_align;
+
+#ifdef __cplusplus
+ bool IsReadWrite() const;
+ bool IsExecutable() const;
+#endif
+} Elf32_Phdr;
+
+typedef struct {
+ Elf64_Word p_type;
+ Elf64_Word p_flags;
+ Elf64_Off p_offset; /* offset from the beginning of the
file of the segment */
+ Elf64_Addr p_vaddr; /* virtual address for the segment in
memory */
+ Elf64_Addr p_paddr;
+ Elf64_Xword p_filesz; /* the size of the segment in the file
*/
+ Elf64_Xword p_memsz; /* the size of the segment in memory */
+ Elf64_Xword p_align;
+
+#ifdef __cplusplus
+ bool IsReadWrite() const;
+ bool IsExecutable() const;
+#endif
+} Elf64_Phdr;
+
+/* program header segment types */
+#define PT_NULL 0
+#define PT_LOAD 1
+#define PT_DYNAMIC 2
+#define PT_INTERP 3
+#define PT_NOTE 4
+#define PT_SHLIB 5
+#define PT_PHDR 6
+#define PT_TLS 7
+#define PT_STACK 0x6474e551
+#define PT_RELRO 0x6474e552
+
+#define PT_LOPROC 0x70000000
+#define PT_ARM_UNWIND 0x70000001
+#define PT_HIPROC 0x7fffffff
+
+/* program header segment flags */
+#define PF_EXECUTE 0x1
+#define PF_WRITE 0x2
+#define PF_READ 0x4
+#define PF_PROTECTION_MASK (PF_EXECUTE | PF_WRITE | PF_READ)
+
+#define PF_MASKPROC 0xf0000000
+
+
+/* symbol table entry */
+
+typedef struct {
+ Elf32_Word st_name;
+ Elf32_Addr st_value;
+ Elf32_Word st_size;
+ uint8 st_info;
+ uint8 st_other;
+ Elf32_Half st_shndx;
+
+#ifdef __cplusplus
+ uint8 Bind() const;
+ uint8 Type() const;
+ void SetInfo(uint8 bind, uint8 type);
+#endif
+} Elf32_Sym;
+
+typedef struct {
+ Elf64_Word st_name;
+ uint8 st_info;
+ uint8 st_other;
+ Elf64_Half st_shndx;
+ Elf64_Addr st_value;
+ Elf64_Xword st_size;
+
+#ifdef __cplusplus
+ uint8 Bind() const;
+ uint8 Type() const;
+ void SetInfo(uint8 bind, uint8 type);
+#endif
+} Elf64_Sym;
+
+#define ELF32_ST_BIND(i) ((i) >> 4)
+#define ELF32_ST_TYPE(i) ((i) & 0xf)
+#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
+
+#define ELF64_ST_BIND(i) ((i) >> 4)
+#define ELF64_ST_TYPE(i) ((i) & 0xf)
+#define ELF64_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
+
+/* symbol types */
+#define STT_NOTYPE 0
+#define STT_OBJECT 1
+#define STT_FUNC 2
+#define STT_SECTION 3
+#define STT_FILE 4
+#define STT_TLS 6
+#define STT_LOPROC 13
+#define STT_HIPROC 15
+
+/* symbol binding */
+#define STB_LOCAL 0
+#define STB_GLOBAL 1
+#define STB_WEAK 2
+#define STB_LOPROC 13
+#define STB_HIPROC 15
+
+/* special symbol indices */
+#define STN_UNDEF 0
+
+
+/* relocation table entry */
+
+typedef struct {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+
+#ifdef __cplusplus
+ uint8 SymbolIndex() const;
+ uint8 Type() const;
+#endif
+} Elf32_Rel;
+
+typedef struct {
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info;
+
+#ifdef __cplusplus
+ uint8 SymbolIndex() const;
+ uint8 Type() const;
+#endif
+} Elf64_Rel;
+
+#ifdef __cplusplus
+typedef struct Elf32_Rela : public Elf32_Rel {
+#else
+typedef struct {
+ Elf32_Addr r_offset;
+ Elf32_Word r_info;
+#endif
+ Elf32_Sword r_addend;
+} Elf32_Rela;
+
+#ifdef __cplusplus
+typedef struct Elf64_Rela : public Elf64_Rel {
+#else
+typedef struct {
+ Elf64_Addr r_offset;
+ Elf64_Xword r_info;
+#endif
+ Elf64_Sxword r_addend;
+} Elf64_Rela;
+
+#define ELF32_R_SYM(i) ((i) >> 8)
+#define ELF32_R_TYPE(i) ((unsigned char)(i))
+#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t))
+
+#define ELF64_R_SYM(i) ((i) >> 32)
+#define ELF64_R_TYPE(i) ((i) & 0xffffffffL)
+#define ELF64_R_INFO(s, t) ((((Elf64_Xword)(s)) << 32) + ((t) & 0xffffffffL))
+
+
+/* dynamic section entry */
+
+typedef struct {
+ Elf32_Sword d_tag;
+ union {
+ Elf32_Word d_val;
+ Elf32_Addr d_ptr;
+ } d_un;
+} Elf32_Dyn;
+
+typedef struct {
+ Elf64_Sxword d_tag;
+ union {
+ Elf64_Xword d_val;
+ Elf64_Addr d_ptr;
+ } d_un;
+} Elf64_Dyn;
+
+/* dynamic entry type */
+#define DT_NULL 0
+#define DT_NEEDED 1
+#define DT_PLTRELSZ 2
+#define DT_PLTGOT 3
+#define DT_HASH 4
+#define DT_STRTAB 5
+#define DT_SYMTAB 6
+#define DT_RELA 7
+#define DT_RELASZ 8
+#define DT_RELAENT 9
+#define DT_STRSZ 10
+#define DT_SYMENT 11
+#define DT_INIT 12
+#define DT_FINI 13
+#define DT_SONAME 14
+#define DT_RPATH 15
+#define DT_SYMBOLIC 16
+#define DT_REL 17
+#define DT_RELSZ 18
+#define DT_RELENT 19
+#define DT_PLTREL 20
+#define DT_DEBUG 21
+#define DT_TEXTREL 22
+#define DT_JMPREL 23
+#define DT_BIND_NOW 24 /* no lazy binding */
+#define DT_INIT_ARRAY 25 /* init function array */
+#define DT_FINI_ARRAY 26 /* termination function array */
+#define DT_INIT_ARRAYSZ 27 /* init function array size */
+#define DT_FINI_ARRAYSZ 28 /* termination function array
size */
+#define DT_RUNPATH 29 /* library search path
(supersedes DT_RPATH) */
+#define DT_FLAGS 30 /* flags (see below) */
+#define DT_ENCODING 32
+#define DT_PREINIT_ARRAY 32 /* preinitialization array */
+#define DT_PREINIT_ARRAYSZ 33 /* preinitialization array size */
+
+#define DT_VERSYM 0x6ffffff0 /* symbol version table */
+#define DT_VERDEF 0x6ffffffc /* version definition table */
+#define DT_VERDEFNUM 0x6ffffffd /* number of version definitions */
+#define DT_VERNEED 0x6ffffffe /* table with needed versions */
+#define DT_VERNEEDNUM 0x6fffffff /* number of needed versions */
+
+#define DT_LOPROC 0x70000000
+#define DT_HIPROC 0x7fffffff
+
+/* DT_FLAGS values */
+#define DF_ORIGIN 0x01
+#define DF_SYMBOLIC 0x02
+#define DF_TEXTREL 0x04
+#define DF_BIND_NOW 0x08
+#define DF_STATIC_TLS 0x10
+
+
+/* version definition section */
+
+typedef struct {
+ Elf32_Half vd_version; /* version revision */
+ Elf32_Half vd_flags; /* version information flags */
+ Elf32_Half vd_ndx; /* version index as specified
in the
+ symbol
version table */
+ Elf32_Half vd_cnt; /* number of associated verdaux
entries */
+ Elf32_Word vd_hash; /* version name hash value */
+ Elf32_Word vd_aux; /* byte offset to verdaux array
*/
+ Elf32_Word vd_next; /* byte offset to next verdef
entry */
+} Elf32_Verdef;
+
+typedef struct {
+ Elf64_Half vd_version; /* version revision */
+ Elf64_Half vd_flags; /* version information flags */
+ Elf64_Half vd_ndx; /* version index as specified
in the
+ symbol
version table */
+ Elf64_Half vd_cnt; /* number of associated verdaux
entries */
+ Elf64_Word vd_hash; /* version name hash value */
+ Elf64_Word vd_aux; /* byte offset to verdaux array
*/
+ Elf64_Word vd_next; /* byte offset to next verdef
entry */
+} Elf64_Verdef;
+
+/* values for vd_version (version revision) */
+#define VER_DEF_NONE 0 /* no version */
+#define VER_DEF_CURRENT 1 /* current version */
+#define VER_DEF_NUM 2 /* given version number
*/
+
+/* values for vd_flags (version information flags) */
+#define VER_FLG_BASE 0x1 /* version definition of file
itself */
+#define VER_FLG_WEAK 0x2 /* weak version identifier */
+
+/* values for versym symbol index */
+#define VER_NDX_LOCAL 0 /* symbol is local */
+#define VER_NDX_GLOBAL 1 /* symbol is global/unversioned
*/
+#define VER_NDX_INITIAL 2 /* initial version --
that's the one given
+ to
symbols when a library becomes
+
versioned; handled by the linker (and
+
runtime loader) similar to
+
VER_NDX_GLOBAL */
+#define VER_NDX_LORESERVE 0xff00 /* beginning of reserved entries */
+#define VER_NDX_ELIMINATE 0xff01 /* symbol is to be eliminated */
+
+#define VER_NDX_FLAG_HIDDEN 0x8000 /* flag: version is hidden */
+#define VER_NDX_MASK 0x7fff /* mask to get the actual version index
*/
+#define VER_NDX(x) ((x) & VER_NDX_MASK)
+
+
+/* auxiliary version information */
+
+typedef struct {
+ Elf32_Word vda_name; /* string table offset to
version or dependency
+ name */
+ Elf32_Word vda_next; /* byte offset to next verdaux
entry */
+} Elf32_Verdaux;
+
+typedef struct {
+ Elf64_Word vda_name; /* string table offset to
version or dependency
+ name */
+ Elf64_Word vda_next; /* byte offset to next verdaux
entry */
+} Elf64_Verdaux;
+
+
+/* version dependency section */
+
+typedef struct {
+ Elf32_Half vn_version; /* version of structure */
+ Elf32_Half vn_cnt; /* number of associated vernaux
entries */
+ Elf32_Word vn_file; /* byte offset to file name for
this
+ dependency */
+ Elf32_Word vn_aux; /* byte offset to vernaux array
*/
+ Elf32_Word vn_next; /* byte offset to next verneed
entry */
+} Elf32_Verneed;
+
+typedef struct {
+ Elf64_Half vn_version; /* version of structure */
+ Elf64_Half vn_cnt; /* number of associated vernaux
entries */
+ Elf64_Word vn_file; /* byte offset to file name for
this
+ dependency */
+ Elf64_Word vn_aux; /* byte offset to vernaux array
*/
+ Elf64_Word vn_next; /* byte offset to next verneed
entry */
+} Elf64_Verneed;
+
+/* values for vn_version (version revision) */
+#define VER_NEED_NONE 0 /* no version */
+#define VER_NEED_CURRENT 1 /* current version */
+#define VER_NEED_NUM 2 /* given version number */
+
+
+/* auxiliary needed version information */
+
+typedef struct {
+ Elf32_Word vna_hash; /* dependency name hash value */
+ Elf32_Half vna_flags; /* dependency specific
information flags */
+ Elf32_Half vna_other; /* version index as specified
in the symbol
+ version
table */
+ Elf32_Word vna_name; /* string table offset to
dependency name */
+ Elf32_Word vna_next; /* byte offset to next vernaux
entry */
+} Elf32_Vernaux;
+
+typedef struct {
+ Elf64_Word vna_hash; /* dependency name hash value */
+ Elf64_Half vna_flags; /* dependency specific
information flags */
+ Elf64_Half vna_other; /* version index as specified
in the symbol
+ version
table */
+ Elf64_Word vna_name; /* string table offset to
dependency name */
+ Elf64_Word vna_next; /* byte offset to next vernaux
entry */
+} Elf64_Vernaux;
+
+/* values for vna_flags */
+#define VER_FLG_WEAK 0x2 /* weak version identifier */
+
+
+/*** inline functions ***/
+
+#ifdef __cplusplus
+
+inline bool
+Elf32_Ehdr::IsHostEndian() const
+{
+#if B_HOST_IS_LENDIAN
+ return e_ident[EI_DATA] == ELFDATA2LSB;
+#elif B_HOST_IS_BENDIAN
+ return e_ident[EI_DATA] == ELFDATA2MSB;
+#endif
+}
+
+
+inline bool
+Elf64_Ehdr::IsHostEndian() const
+{
+#if B_HOST_IS_LENDIAN
+ return e_ident[EI_DATA] == ELFDATA2LSB;
+#elif B_HOST_IS_BENDIAN
+ return e_ident[EI_DATA] == ELFDATA2MSB;
+#endif
+}
+
+
+inline bool
+Elf32_Phdr::IsReadWrite() const
+{
+ return !(~p_flags & (PF_READ | PF_WRITE));
+}
+
+
+inline bool
+Elf32_Phdr::IsExecutable() const
+{
+ return (p_flags & PF_EXECUTE) != 0;
+}
+
+
+inline bool
+Elf64_Phdr::IsReadWrite() const
+{
+ return !(~p_flags & (PF_READ | PF_WRITE));
+}
+
+
+inline bool
+Elf64_Phdr::IsExecutable() const
+{
+ return (p_flags & PF_EXECUTE) != 0;
+}
+
+
+inline uint8
+Elf32_Sym::Bind() const
+{
+ return ELF32_ST_BIND(st_info);
+}
+
+
+inline uint8
+Elf32_Sym::Type() const
+{
+ return ELF32_ST_TYPE(st_info);
+}
+
+
+inline void
+Elf32_Sym::SetInfo(uint8 bind, uint8 type)
+{
+ st_info = ELF32_ST_INFO(bind, type);
+}
+
+
+inline uint8
+Elf64_Sym::Bind() const
+{
+ return ELF64_ST_BIND(st_info);
+}
+
+
+inline uint8
+Elf64_Sym::Type() const
+{
+ return ELF64_ST_TYPE(st_info);
+}
+
+
+inline void
+Elf64_Sym::SetInfo(uint8 bind, uint8 type)
+{
+ st_info = ELF64_ST_INFO(bind, type);
+}
+
+
+inline uint8
+Elf32_Rel::SymbolIndex() const
+{
+ return ELF32_R_SYM(r_info);
+}
+
+
+inline uint8
+Elf32_Rel::Type() const
+{
+ return ELF32_R_TYPE(r_info);
+}
+
+
+inline uint8
+Elf64_Rel::SymbolIndex() const
+{
+ return ELF64_R_SYM(r_info);
+}
+
+
+inline uint8
+Elf64_Rel::Type() const
+{
+ return ELF64_R_TYPE(r_info);
+}
+
+#endif /* __cplusplus */
+
+
+#endif /* _ELF_H */

############################################################################

Revision: hrev49754
Commit: 75c31ae28dda6ee80b0c3b96becda8f6d1eb28ac
URL: http://cgit.haiku-os.org/haiku/commit/?id=75c31ae28dda
Author: Simon South <ssouth@xxxxxxxxxxxxxx>
Date: Mon Oct 26 17:43:44 2015 UTC
Committer: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>
Commit-Date: Fri Nov 6 22:49:56 2015 UTC

system: Build using public elf.h header

Reduce duplication of code by

* Removing from elf_common.h definitions available in os/kernel/elf.h
* Deleting elf32.h and elf64.h
* Renaming elf_common.h to elf_private.h
* Updating source to build using public and private ELF header files
together

Signed-off-by: Jessica Hamilton <jessica.l.hamilton@xxxxxxxxx>

----------------------------------------------------------------------------

diff --git a/headers/private/kernel/arch/elf.h
b/headers/private/kernel/arch/elf.h
index d2dc5d8..d2b10f4 100644
--- a/headers/private/kernel/arch/elf.h
+++ b/headers/private/kernel/arch/elf.h
@@ -6,7 +6,7 @@
#define _KERNEL_ARCH_ELF_H


-#include <elf_common.h>
+#include <elf_private.h>


struct elf_image_info;
diff --git a/headers/private/kernel/boot/arch.h
b/headers/private/kernel/boot/arch.h
index 2f4be42..41a8502 100644
--- a/headers/private/kernel/boot/arch.h
+++ b/headers/private/kernel/boot/arch.h
@@ -13,13 +13,13 @@
/* ELF support */

extern status_t boot_arch_elf_relocate_rel(preloaded_elf32_image* image,
- struct Elf32_Rel* rel, int rel_len);
+ Elf32_Rel* rel, int rel_len);
extern status_t boot_arch_elf_relocate_rel(preloaded_elf64_image* image,
- struct Elf64_Rel* rel, int rel_len);
+ Elf64_Rel* rel, int rel_len);
extern status_t boot_arch_elf_relocate_rela(preloaded_elf32_image* image,
- struct Elf32_Rela* rel, int rel_len);
+ Elf32_Rela* rel, int rel_len);
extern status_t boot_arch_elf_relocate_rela(preloaded_elf64_image* image,
- struct Elf64_Rela* rel, int rel_len);
+ Elf64_Rela* rel, int rel_len);


#endif /* KERNEL_BOOT_ARCH_H */
diff --git a/headers/private/kernel/boot/elf.h
b/headers/private/kernel/boot/elf.h
index 2f38836..97d15d5 100644
--- a/headers/private/kernel/boot/elf.h
+++ b/headers/private/kernel/boot/elf.h
@@ -87,9 +87,9 @@ typedef preloaded_elf32_image preloaded_elf_image;

#ifdef _BOOT_MODE
extern status_t boot_elf_resolve_symbol(preloaded_elf32_image* image,
- struct Elf32_Sym* symbol, Elf32_Addr* symbolAddress);
+ Elf32_Sym* symbol, Elf32_Addr* symbolAddress);
extern status_t boot_elf_resolve_symbol(preloaded_elf64_image* image,
- struct Elf64_Sym* symbol, Elf64_Addr* symbolAddress);
+ Elf64_Sym* symbol, Elf64_Addr* symbolAddress);
extern void boot_elf64_set_relocation(Elf64_Addr resolveAddress,
Elf64_Addr finalAddress);
#endif
diff --git a/headers/private/kernel/elf.h b/headers/private/kernel/elf.h
index 3851504..8922336 100644
--- a/headers/private/kernel/elf.h
+++ b/headers/private/kernel/elf.h
@@ -9,7 +9,7 @@
#define _KERNEL_ELF_H


-#include <elf_common.h>
+#include <elf_private.h>
#include <thread.h>
#include <image.h>

diff --git a/headers/private/kernel/elf_priv.h
b/headers/private/kernel/elf_priv.h
index 0b6341f..69e675f 100644
--- a/headers/private/kernel/elf_priv.h
+++ b/headers/private/kernel/elf_priv.h
@@ -9,8 +9,8 @@
#define _KERNEL_ELF_PRIV_H


-#include <elf32.h>
-#include <elf64.h>
+#include <elf_private.h>
+
#include <image.h>


diff --git a/headers/private/runtime_loader/runtime_loader.h
b/headers/private/runtime_loader/runtime_loader.h
index ab4c3b2..6a754f2 100644
--- a/headers/private/runtime_loader/runtime_loader.h
+++ b/headers/private/runtime_loader/runtime_loader.h
@@ -11,11 +11,11 @@
#ifndef _RUNTIME_LOADER_H
#define _RUNTIME_LOADER_H

+
#include <image.h>
#include <OS.h>

-#include <elf32.h>
-#include <elf64.h>
+#include <elf_private.h>


// #pragma mark - runtime loader libroot interface
diff --git a/headers/private/system/elf32.h b/headers/private/system/elf32.h
deleted file mode 100644
index c1bf7e2..0000000
--- a/headers/private/system/elf32.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright 2001, Travis Geiselbrecht. All rights reserved.
- * Distributed under the terms of the NewOS License.
- *
- * Copyright 2002-2011, Haiku Inc. All Rights Reserved.
- * Distributed under the terms of the MIT license.
- */
-#ifndef _ELF32_H
-#define _ELF32_H
-
-
-#include <elf_common.h>
-
-
-typedef uint32 Elf32_Addr;
-typedef uint16 Elf32_Half;
-typedef uint32 Elf32_Off;
-typedef int32 Elf32_Sword;
-typedef uint32 Elf32_Word;
-
-typedef Elf32_Half Elf32_Versym;
-
-/*** ELF header ***/
-
-struct Elf32_Ehdr {
- uint8 e_ident[EI_NIDENT];
- Elf32_Half e_type;
- Elf32_Half e_machine;
- Elf32_Word e_version;
- Elf32_Addr e_entry;
- Elf32_Off e_phoff;
- Elf32_Off e_shoff;
- Elf32_Word e_flags;
- Elf32_Half e_ehsize;
- Elf32_Half e_phentsize;
- Elf32_Half e_phnum;
- Elf32_Half e_shentsize;
- Elf32_Half e_shnum;
- Elf32_Half e_shstrndx;
-
-#ifdef __cplusplus
- bool IsHostEndian() const;
-#endif
-};
-
-
-/*** section header ***/
-
-struct Elf32_Shdr {
- Elf32_Word sh_name;
- Elf32_Word sh_type;
- Elf32_Word sh_flags;
- Elf32_Addr sh_addr;
- Elf32_Off sh_offset;
- Elf32_Word sh_size;
- Elf32_Word sh_link;
- Elf32_Word sh_info;
- Elf32_Word sh_addralign;
- Elf32_Word sh_entsize;
-};
-
-
-/*** program header ***/
-
-struct Elf32_Phdr {
- Elf32_Word p_type;
- Elf32_Off p_offset; /* offset from the beginning of the
file of the segment */
- Elf32_Addr p_vaddr; /* virtual address for the segment in
memory */
- Elf32_Addr p_paddr;
- Elf32_Word p_filesz; /* the size of the segment in the file
*/
- Elf32_Word p_memsz; /* the size of the segment in memory */
- Elf32_Word p_flags;
- Elf32_Word p_align;
-
-#ifdef __cplusplus
- bool IsReadWrite() const;
- bool IsExecutable() const;
-#endif
-};
-
-struct Elf32_Sym {
- Elf32_Word st_name;
- Elf32_Addr st_value;
- Elf32_Word st_size;
- uint8 st_info;
- uint8 st_other;
- Elf32_Half st_shndx;
-
-#ifdef __cplusplus
- uint8 Bind() const;
- uint8 Type() const;
- void SetInfo(uint8 bind, uint8 type);
-#endif
-};
-
-#define ELF32_ST_BIND(i) ((i) >> 4)
-#define ELF32_ST_TYPE(i) ((i) & 0xf)
-#define ELF32_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
-
-struct Elf32_Rel {
- Elf32_Addr r_offset;
- Elf32_Word r_info;
-
-#ifdef __cplusplus
- uint8 SymbolIndex() const;
- uint8 Type() const;
-#endif
-};
-
-#ifdef __cplusplus
-struct Elf32_Rela : public Elf32_Rel {
-#else
-struct Elf32_Rela {
- Elf32_Addr r_offset;
- Elf32_Word r_info;
-#endif
- Elf32_Sword r_addend;
-};
-
-#define ELF32_R_SYM(i) ((i) >> 8)
-#define ELF32_R_TYPE(i) ((unsigned char)(i))
-#define ELF32_R_INFO(s, t) (((s) << 8) + (unsigned char)(t))
-
-struct Elf32_Dyn {
- Elf32_Sword d_tag;
- union {
- Elf32_Word d_val;
- Elf32_Addr d_ptr;
- } d_un;
-};
-
-
-/* version definition section */
-
-struct Elf32_Verdef {
- Elf32_Half vd_version; /* version revision */
- Elf32_Half vd_flags; /* version information flags */
- Elf32_Half vd_ndx; /* version index as specified
in the
- symbol
version table */
- Elf32_Half vd_cnt; /* number of associated verdaux
entries */
- Elf32_Word vd_hash; /* version name hash value */
- Elf32_Word vd_aux; /* byte offset to verdaux array
*/
- Elf32_Word vd_next; /* byte offset to next verdef
entry */
-};
-
-
-/* auxiliary version information */
-
-struct Elf32_Verdaux {
- Elf32_Word vda_name; /* string table offset to
version or dependency
- name */
- Elf32_Word vda_next; /* byte offset to next verdaux
entry */
-};
-
-
-/* version dependency section */
-
-struct Elf32_Verneed {
- Elf32_Half vn_version; /* version of structure */
- Elf32_Half vn_cnt; /* number of associated vernaux
entries */
- Elf32_Word vn_file; /* byte offset to file name for
this
- dependency */
- Elf32_Word vn_aux; /* byte offset to vernaux array
*/
- Elf32_Word vn_next; /* byte offset to next verneed
entry */
-};
-
-
-/* auxiliary needed version information */
-
-struct Elf32_Vernaux {
- Elf32_Word vna_hash; /* dependency name hash value */
- Elf32_Half vna_flags; /* dependency specific
information flags */
- Elf32_Half vna_other; /* version index as specified
in the symbol
- version
table */
- Elf32_Word vna_name; /* string table offset to
dependency name */
- Elf32_Word vna_next; /* byte offset to next vernaux
entry */
-};
-
-
-/*** inline functions ***/
-
-#ifdef __cplusplus
-
-inline bool
-Elf32_Ehdr::IsHostEndian() const
-{
-#if B_HOST_IS_LENDIAN
- return e_ident[EI_DATA] == ELFDATA2LSB;
-#elif B_HOST_IS_BENDIAN
- return e_ident[EI_DATA] == ELFDATA2MSB;
-#endif
-}
-
-
-inline bool
-Elf32_Phdr::IsReadWrite() const
-{
- return !(~p_flags & (PF_READ | PF_WRITE));
-}
-
-
-inline bool
-Elf32_Phdr::IsExecutable() const
-{
- return (p_flags & PF_EXECUTE) != 0;
-}
-
-
-inline uint8
-Elf32_Sym::Bind() const
-{
- return ELF32_ST_BIND(st_info);
-}
-
-
-inline uint8
-Elf32_Sym::Type() const
-{
- return ELF32_ST_TYPE(st_info);
-}
-
-inline void
-Elf32_Sym::SetInfo(uint8 bind, uint8 type)
-{
- st_info = ELF32_ST_INFO(bind, type);
-}
-
-inline uint8
-Elf32_Rel::SymbolIndex() const
-{
- return ELF32_R_SYM(r_info);
-}
-
-
-inline uint8
-Elf32_Rel::Type() const
-{
- return ELF32_R_TYPE(r_info);
-}
-
-#endif /* __cplusplus */
-
-#endif /* _ELF32_H_ */
diff --git a/headers/private/system/elf64.h b/headers/private/system/elf64.h
deleted file mode 100644
index 3efd48b..0000000
--- a/headers/private/system/elf64.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- * Copyright 2001, Travis Geiselbrecht. All rights reserved.
- * Distributed under the terms of the NewOS License.
- *
- * Copyright 2002-2011, Haiku Inc. All Rights Reserved.
- * Distributed under the terms of the MIT license.
- */
-#ifndef _ELF64_H
-#define _ELF64_H
-
-
-#include <elf_common.h>
-
-
-typedef uint64 Elf64_Addr;
-typedef uint64 Elf64_Off;
-typedef uint16 Elf64_Half;
-typedef uint32 Elf64_Word;
-typedef int32 Elf64_Sword;
-typedef uint64 Elf64_Xword;
-typedef int64 Elf64_Sxword;
-
-typedef Elf64_Half Elf64_Versym;
-
-/*** ELF header ***/
-
-struct Elf64_Ehdr {
- uint8 e_ident[EI_NIDENT];
- Elf64_Half e_type;
- Elf64_Half e_machine;
- Elf64_Word e_version;
- Elf64_Addr e_entry;
- Elf64_Off e_phoff;
- Elf64_Off e_shoff;
- Elf64_Word e_flags;
- Elf64_Half e_ehsize;
- Elf64_Half e_phentsize;
- Elf64_Half e_phnum;
- Elf64_Half e_shentsize;
- Elf64_Half e_shnum;
- Elf64_Half e_shstrndx;
-
-#ifdef __cplusplus
- bool IsHostEndian() const;
-#endif
-};
-
-
-/*** section header ***/
-
-struct Elf64_Shdr {
- Elf64_Word sh_name;
- Elf64_Word sh_type;
- Elf64_Xword sh_flags;
- Elf64_Addr sh_addr;
- Elf64_Off sh_offset;
- Elf64_Xword sh_size;
- Elf64_Word sh_link;
- Elf64_Word sh_info;
- Elf64_Xword sh_addralign;
- Elf64_Xword sh_entsize;
-};
-
-
-/*** program header ***/
-
-struct Elf64_Phdr {
- Elf64_Word p_type;
- Elf64_Word p_flags;
- Elf64_Off p_offset; /* offset from the beginning of the
file of the segment */
- Elf64_Addr p_vaddr; /* virtual address for the segment in
memory */
- Elf64_Addr p_paddr;
- Elf64_Xword p_filesz; /* the size of the segment in the file
*/
- Elf64_Xword p_memsz; /* the size of the segment in memory */
- Elf64_Xword p_align;
-
-#ifdef __cplusplus
- bool IsReadWrite() const;
- bool IsExecutable() const;
-#endif
-};
-
-struct Elf64_Sym {
- Elf64_Word st_name;
- uint8 st_info;
- uint8 st_other;
- Elf64_Half st_shndx;
- Elf64_Addr st_value;
- Elf64_Xword st_size;
-
-#ifdef __cplusplus
- uint8 Bind() const;
- uint8 Type() const;
- void SetInfo(uint8 bind, uint8 type);
-#endif
-};
-
-#define ELF64_ST_BIND(i) ((i) >> 4)
-#define ELF64_ST_TYPE(i) ((i) & 0xf)
-#define ELF64_ST_INFO(b, t) (((b) << 4) + ((t) & 0xf))
-
-struct Elf64_Rel {
- Elf64_Addr r_offset;
- Elf64_Xword r_info;
-
-#ifdef __cplusplus
- uint8 SymbolIndex() const;
- uint8 Type() const;
-#endif
-};
-
-#ifdef __cplusplus
-struct Elf64_Rela : public Elf64_Rel {
-#else
-struct Elf64_Rela {
- Elf64_Addr r_offset;
- Elf64_Xword r_info;
-#endif
- Elf64_Sxword r_addend;
-};
-
-#define ELF64_R_SYM(i) ((i) >> 32)
-#define ELF64_R_TYPE(i) ((i) & 0xffffffffL)
-#define ELF64_R_INFO(s, t) ((((Elf64_Xword)(s)) << 32) + ((t) & 0xffffffffL))
-
-struct Elf64_Dyn {
- Elf64_Sxword d_tag;
- union {
- Elf64_Xword d_val;
- Elf64_Addr d_ptr;
- } d_un;
-};
-
-
-/* version definition section */
-
-struct Elf64_Verdef {
- Elf64_Half vd_version; /* version revision */
- Elf64_Half vd_flags; /* version information flags */
- Elf64_Half vd_ndx; /* version index as specified
in the
- symbol
version table */
- Elf64_Half vd_cnt; /* number of associated verdaux
entries */
- Elf64_Word vd_hash; /* version name hash value */
- Elf64_Word vd_aux; /* byte offset to verdaux array
*/
- Elf64_Word vd_next; /* byte offset to next verdef
entry */
-};
-
-
-/* auxiliary version information */
-
-struct Elf64_Verdaux {
- Elf64_Word vda_name; /* string table offset to
version or dependency
- name */
- Elf64_Word vda_next; /* byte offset to next verdaux
entry */
-};
-
-
-/* version dependency section */
-
-struct Elf64_Verneed {
- Elf64_Half vn_version; /* version of structure */
- Elf64_Half vn_cnt; /* number of associated vernaux
entries */
- Elf64_Word vn_file; /* byte offset to file name for
this
- dependency */
- Elf64_Word vn_aux; /* byte offset to vernaux array
*/
- Elf64_Word vn_next; /* byte offset to next verneed
entry */
-};
-
-
-/* auxiliary needed version information */
-
-struct Elf64_Vernaux {
- Elf64_Word vna_hash; /* dependency name hash value */
- Elf64_Half vna_flags; /* dependency specific
information flags */
- Elf64_Half vna_other; /* version index as specified
in the symbol
- version
table */
- Elf64_Word vna_name; /* string table offset to
dependency name */
- Elf64_Word vna_next; /* byte offset to next vernaux
entry */
-};
-
-
-/*** inline functions ***/
-
-#ifdef __cplusplus
-
-inline bool
-Elf64_Ehdr::IsHostEndian() const
-{
-#if B_HOST_IS_LENDIAN
- return e_ident[EI_DATA] == ELFDATA2LSB;
-#elif B_HOST_IS_BENDIAN
- return e_ident[EI_DATA] == ELFDATA2MSB;
-#endif
-}
-
-
-inline bool
-Elf64_Phdr::IsReadWrite() const
-{
- return !(~p_flags & (PF_READ | PF_WRITE));
-}
-
-
-inline bool
-Elf64_Phdr::IsExecutable() const
-{
- return (p_flags & PF_EXECUTE) != 0;
-}
-
-
-inline uint8
-Elf64_Sym::Bind() const
-{
- return ELF64_ST_BIND(st_info);
-}
-
-
-inline uint8
-Elf64_Sym::Type() const
-{
- return ELF64_ST_TYPE(st_info);
-}
-
-
-inline void
-Elf64_Sym::SetInfo(uint8 bind, uint8 type)
-{
- st_info = ELF64_ST_INFO(bind, type);
-}
-
-
-inline uint8
-Elf64_Rel::SymbolIndex() const
-{
- return ELF64_R_SYM(r_info);
-}
-
-
-inline uint8
-Elf64_Rel::Type() const
-{
- return ELF64_R_TYPE(r_info);
-}
-
-#endif /* __cplusplus */
-
-#endif /* _ELF64_H_ */
diff --git a/headers/private/system/elf_common.h
b/headers/private/system/elf_common.h
deleted file mode 100644
index 23ab555..0000000
--- a/headers/private/system/elf_common.h
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright 2001, Travis Geiselbrecht. All rights reserved.
- * Distributed under the terms of the NewOS License.
- *
- * Copyright 2002-2011, Haiku Inc. All Rights Reserved.
- * Distributed under the terms of the MIT license.
- */
-#ifndef _ELF_COMMON_H
-#define _ELF_COMMON_H
-
-
-#include <SupportDefs.h>
-#include <ByteOrder.h>
-
-#include <arch_elf.h>
-
-
-/*** ELF header ***/
-
-#define EI_NIDENT 16
-
-#define ELF_MAGIC "\x7f""ELF"
-
-// e_ident[] indices
-#define EI_MAG0 0
-#define EI_MAG1 1
-#define EI_MAG2 2
-#define EI_MAG3 3
-#define EI_CLASS 4
-#define EI_DATA 5
-#define EI_VERSION 6
-#define EI_PAD 7
-
-// e_type (Object file type)
-#define ET_NONE 0 // No file type
-#define ET_REL 1 // Relocatable file
-#define ET_EXEC 2 // Executable file
-#define ET_DYN 3 // Shared object file
-#define ET_CORE 4 // Core file
-#define ET_LOOS 0xfe00 // OS-specific range start
-#define ET_HIOS 0xfeff // OS-specific range end
-#define ET_LOPROC 0xff00 // Processor-specific range start
-#define ET_HIPROC 0xffff // Processor-specific range end
-
-// e_machine (Architecture)
-#define EM_NONE 0 // No machine
-#define EM_M32 1 // AT&T WE 32100
-#define EM_SPARC 2 // Sparc
-#define EM_386 3 // Intel 80386
-#define EM_68K 4 // Motorola m68k family
-#define EM_88K 5 // Motorola m88k family
-#define EM_486 6 // Intel 80486, Reserved for future use
-#define EM_860 7 // Intel 80860
-#define EM_MIPS 8 // MIPS R3000 (officially, big-endian
only)
-#define EM_S370 9 // IBM System/370
-#define EM_MIPS_RS3_LE 10 // MIPS R3000 little-endian, Deprecated
-#define EM_PARISC 15 // HPPA
-#define EM_VPP550 17 // Fujitsu VPP500
-#define EM_SPARC32PLUS 18 // Sun "v8plus"
-#define EM_960 19 // Intel 80960
-#define EM_PPC 20 // PowerPC
-#define EM_PPC64 21 // 64-bit PowerPC
-#define EM_S390 22 // IBM S/390
-#define EM_V800 36 // NEC V800 series
-#define EM_FR20 37 // Fujitsu FR20
-#define EM_RH32 38 // TRW RH32
-#define EM_MCORE 39 // Motorola M*Core
-#define EM_RCE 39 // Old name for MCore
-#define EM_ARM 40 // ARM
-#define EM_OLD_ALPHA 41 // Digital Alpha
-#define EM_SH 42 // Renesas / SuperH SH
-#define EM_SPARCV9 43 // SPARC v9 64-bit
-#define EM_TRICORE 44 // Siemens Tricore embedded processor
-#define EM_ARC 45 // ARC Cores
-#define EM_H8_300 46 // Renesas H8/300
-#define EM_H8_300H 47 // Renesas H8/300H
-#define EM_H8S 48 // Renesas H8S
-#define EM_H8_500 49 // Renesas H8/500
-#define EM_IA_64 50 // Intel IA-64 Processor
-#define EM_MIPS_X 51 // Stanford MIPS-X
-#define EM_COLDFIRE 52 // Motorola Coldfire
-#define EM_68HC12 53 // Motorola M68HC12
-#define EM_MMA 54 // Fujitsu Multimedia Accelerator
-#define EM_PCP 55 // Siemens PCP
-#define EM_NCPU 56 // Sony nCPU embedded RISC processor
-#define EM_NDR1 57 // Denso NDR1 microprocesspr
-#define EM_STARCORE 58 // Motorola Star*Core processor
-#define EM_ME16 59 // Toyota ME16 processor
-#define EM_ST100 60 // STMicroelectronics ST100 processor
-#define EM_TINYJ 61 // Advanced Logic Corp. TinyJ embedded
processor
-#define EM_X86_64 62 // Advanced Micro Devices X86-64 processor
-
-// architecture class (EI_CLASS)
-#define ELFCLASS32 1
-#define ELFCLASS64 2
-// endian (EI_DATA)
-#define ELFDATA2LSB 1 /* little endian */
-#define ELFDATA2MSB 2 /* big endian */
-
-
-/*** section header ***/
-
-// special section indices
-#define SHN_UNDEF 0
-#define SHN_LORESERVE 0xff00
-#define SHN_LOPROC 0xff00
-#define SHN_HIPROC 0xff1f
-#define SHN_ABS 0xfff1
-#define SHN_COMMON 0xfff2
-#define SHN_HIRESERVE 0xffff
-
-// section header type
-#define SHT_NULL 0
-#define SHT_PROGBITS 1
-#define SHT_SYMTAB 2
-#define SHT_STRTAB 3
-#define SHT_RELA 4
-#define SHT_HASH 5
-#define SHT_DYNAMIC 6
-#define SHT_NOTE 7
-#define SHT_NOBITS 8
-#define SHT_REL 9
-#define SHT_SHLIB 10
-#define SHT_DYNSYM 11
-
-#define SHT_GNU_verdef 0x6ffffffd /* version definition section */
-#define SHT_GNU_verneed 0x6ffffffe /* version needs section */
-#define SHT_GNU_versym 0x6fffffff /* version symbol table */
-
-#define SHT_LOPROC 0x70000000
-#define SHT_HIPROC 0x7fffffff
-#define SHT_LOUSER 0x80000000
-#define SHT_HIUSER 0xffffffff
-
-// section header flags
-#define SHF_WRITE 1
-#define SHF_ALLOC 2
-#define SHF_EXECINSTR 4
-
-#define SHF_MASKPROC 0xf0000000
-
-
-/*** program header ***/
-
-// program header segment types
-#define PT_NULL 0
-#define PT_LOAD 1
-#define PT_DYNAMIC 2
-#define PT_INTERP 3
-#define PT_NOTE 4
-#define PT_SHLIB 5
-#define PT_PHDR 6
-#define PT_TLS 7
-#define PT_STACK 0x6474e551
-#define PT_RELRO 0x6474e552
-
-#define PT_LOPROC 0x70000000
-#define PT_ARM_UNWIND 0x70000001
-#define PT_HIPROC 0x7fffffff
-
-
-// program header segment flags
-#define PF_EXECUTE 0x1
-#define PF_WRITE 0x2
-#define PF_READ 0x4
-#define PF_PROTECTION_MASK (PF_EXECUTE | PF_WRITE | PF_READ)
-
-#define PF_MASKPROC 0xf0000000
-
-#define STT_NOTYPE 0
-#define STT_OBJECT 1
-#define STT_FUNC 2
-#define STT_SECTION 3
-#define STT_FILE 4
-#define STT_TLS 6
-#define STT_LOPROC 13
-#define STT_HIPROC 15
-
-#define STB_LOCAL 0
-#define STB_GLOBAL 1
-#define STB_WEAK 2
-#define STB_LOPROC 13
-#define STB_HIPROC 15
-
-#define STN_UNDEF 0
-
-
-#define DT_NULL 0
-#define DT_NEEDED 1
-#define DT_PLTRELSZ 2
-#define DT_PLTGOT 3
-#define DT_HASH 4
-#define DT_STRTAB 5
-#define DT_SYMTAB 6
-#define DT_RELA 7
-#define DT_RELASZ 8
-#define DT_RELAENT 9
-#define DT_STRSZ 10
-#define DT_SYMENT 11
-#define DT_INIT 12
-#define DT_FINI 13
-#define DT_SONAME 14
-#define DT_RPATH 15
-#define DT_SYMBOLIC 16
-#define DT_REL 17
-#define DT_RELSZ 18
-#define DT_RELENT 19
-#define DT_PLTREL 20
-#define DT_DEBUG 21
-#define DT_TEXTREL 22
-#define DT_JMPREL 23
-#define DT_BIND_NOW 24 /* no lazy binding */
-#define DT_INIT_ARRAY 25 /* init function array */
-#define DT_FINI_ARRAY 26 /* termination function array */
-#define DT_INIT_ARRAYSZ 27 /* init function array size */
-#define DT_FINI_ARRAYSZ 28 /* termination function array
size */
-#define DT_RUNPATH 29 /* library search path
(supersedes DT_RPATH) */
-#define DT_FLAGS 30 /* flags (see below) */
-#define DT_ENCODING 32
-#define DT_PREINIT_ARRAY 32 /* preinitialization array */
-#define DT_PREINIT_ARRAYSZ 33 /* preinitialization array size */
-
-#define DT_VERSYM 0x6ffffff0 /* symbol version table */
-#define DT_VERDEF 0x6ffffffc /* version definition table */
-#define DT_VERDEFNUM 0x6ffffffd /* number of version definitions */
-#define DT_VERNEED 0x6ffffffe /* table with needed versions */
-#define DT_VERNEEDNUM 0x6fffffff /* number of needed versions */
-
-#define DT_LOPROC 0x70000000
-#define DT_HIPROC 0x7fffffff
-
-
-/* DT_FLAGS values */
-#define DF_ORIGIN 0x01
-#define DF_SYMBOLIC 0x02
-#define DF_TEXTREL 0x04
-#define DF_BIND_NOW 0x08
-#define DF_STATIC_TLS 0x10
-
-
-/* version definition section */
-
-/* values for vd_version (version revision) */
-#define VER_DEF_NONE 0 /* no version */
-#define VER_DEF_CURRENT 1 /* current version */
-#define VER_DEF_NUM 2 /* given version number
*/
-
-/* values for vd_flags (version information flags) */
-#define VER_FLG_BASE 0x1 /* version definition of file
itself */
-#define VER_FLG_WEAK 0x2 /* weak version identifier */
-
-/* values for versym symbol index */
-#define VER_NDX_LOCAL 0 /* symbol is local */
-#define VER_NDX_GLOBAL 1 /* symbol is global/unversioned
*/
-#define VER_NDX_INITIAL 2 /* initial version --
that's the one given
- to
symbols when a library becomes
-
versioned; handled by the linker (and
-
runtime loader) similar to
-
VER_NDX_GLOBAL */
-#define VER_NDX_LORESERVE 0xff00 /* beginning of reserved entries */
-#define VER_NDX_ELIMINATE 0xff01 /* symbol is to be eliminated */
-
-#define VER_NDX_FLAG_HIDDEN 0x8000 /* flag: version is hidden */
-#define VER_NDX_MASK 0x7fff /* mask to get the actual version index
*/
-#define VER_NDX(x) ((x) & VER_NDX_MASK)
-
-
-/* version dependency section */
-
-/* values for vn_version (version revision) */
-#define VER_NEED_NONE 0 /* no version */
-#define VER_NEED_CURRENT 1 /* current version */
-#define VER_NEED_NUM 2 /* given version number */
-
-
-/* auxiliary needed version information */
-
-/* values for vna_flags */
-#define VER_FLG_WEAK 0x2 /* weak version identifier */
-
-
-// Determine the correct ELF types to use for the architecture
-
-#if B_HAIKU_64_BIT
-# define _ELF_TYPE(type) Elf64_##type
-#else
-# define _ELF_TYPE(type) Elf32_##type
-#endif
-#define DEFINE_ELF_TYPE(type, name) \
- struct _ELF_TYPE(type); \
- typedef struct _ELF_TYPE(type) name
-
-DEFINE_ELF_TYPE(Ehdr, elf_ehdr);
-DEFINE_ELF_TYPE(Phdr, elf_phdr);
-DEFINE_ELF_TYPE(Shdr, elf_shdr);
-DEFINE_ELF_TYPE(Sym, elf_sym);
-DEFINE_ELF_TYPE(Dyn, elf_dyn);
-DEFINE_ELF_TYPE(Rel, elf_rel);
-DEFINE_ELF_TYPE(Rela, elf_rela);
-DEFINE_ELF_TYPE(Verdef, elf_verdef);
-DEFINE_ELF_TYPE(Verdaux, elf_verdaux);
-DEFINE_ELF_TYPE(Verneed, elf_verneed);
-DEFINE_ELF_TYPE(Vernaux, elf_vernaux);
-
-#undef DEFINE_ELF_TYPE
-#undef _ELF_TYPE
-
-typedef uint16 elf_versym;
-
-#if B_HAIKU_64_BIT
-# define ELF_CLASS ELFCLASS64
-#else
-# define ELF_CLASS ELFCLASS32
-#endif
-
-
-#endif /* _ELF_COMMON_H_ */
diff --git a/headers/private/system/elf_private.h
b/headers/private/system/elf_private.h
new file mode 100644
index 0000000..ce2f6e2
--- /dev/null
+++ b/headers/private/system/elf_private.h
@@ -0,0 +1,53 @@
+/*
+ * Copyright 2002-2015 Haiku, Inc. All rights reserved.
+ * Distributed under the terms of the MIT License.
+ *
+ * Copyright 2001 Travis Geiselbrecht. All rights reserved.
+ * Distributed under the terms of the NewOS License.
+ */
+#ifndef _ELF_PRIVATE_H
+#define _ELF_PRIVATE_H
+
+
+#include <os/kernel/elf.h>
+
+#include <SupportDefs.h>
+
+#include <arch_elf.h>
+
+
+// Determine the correct ELF types to use for the architecture
+
+#if B_HAIKU_64_BIT
+# define _ELF_TYPE(type) Elf64_##type
+#else
+# define _ELF_TYPE(type) Elf32_##type
+#endif
+#define DEFINE_ELF_TYPE(type, name) \
+ typedef _ELF_TYPE(type) name
+
+DEFINE_ELF_TYPE(Ehdr, elf_ehdr);
+DEFINE_ELF_TYPE(Phdr, elf_phdr);
+DEFINE_ELF_TYPE(Shdr, elf_shdr);
+DEFINE_ELF_TYPE(Sym, elf_sym);
+DEFINE_ELF_TYPE(Dyn, elf_dyn);
+DEFINE_ELF_TYPE(Rel, elf_rel);
+DEFINE_ELF_TYPE(Rela, elf_rela);
+DEFINE_ELF_TYPE(Verdef, elf_verdef);
+DEFINE_ELF_TYPE(Verdaux, elf_verdaux);
+DEFINE_ELF_TYPE(Verneed, elf_verneed);
+DEFINE_ELF_TYPE(Vernaux, elf_vernaux);
+
+#undef DEFINE_ELF_TYPE
+#undef _ELF_TYPE
+
+typedef uint16 elf_versym;
+
+#if B_HAIKU_64_BIT
+# define ELF_CLASS ELFCLASS64
+#else
+# define ELF_CLASS ELFCLASS32
+#endif
+
+
+#endif /* _ELF_PRIVATE_H_ */
diff --git a/headers/private/system/syscalls.h
b/headers/private/system/syscalls.h
index d89dff7..f71fb3d 100644
--- a/headers/private/system/syscalls.h
+++ b/headers/private/system/syscalls.h
@@ -8,7 +8,7 @@

#include <arch_config.h>
#include <DiskDeviceDefs.h>
-#include <elf_common.h>
+#include <elf_private.h>
#include <image.h>
#include <OS.h>

diff --git a/src/apps/debugger/elf/ElfFile.cpp
b/src/apps/debugger/elf/ElfFile.cpp
index bbe6d1c..d950f45 100644
--- a/src/apps/debugger/elf/ElfFile.cpp
+++ b/src/apps/debugger/elf/ElfFile.cpp
@@ -356,12 +356,12 @@ ElfFile::_CheckElfHeader(Elf32_Ehdr& elfHeader)
&& elfHeader.e_ident[4] == ELFCLASS32
&& elfHeader.e_shoff > 0
&& elfHeader.e_shnum > 0
- && elfHeader.e_shentsize >= sizeof(struct Elf32_Shdr)
+ && elfHeader.e_shentsize >= sizeof(Elf32_Shdr)
&& elfHeader.e_shstrndx != SHN_UNDEF
&& elfHeader.e_shstrndx < elfHeader.e_shnum
&& elfHeader.e_phoff > 0
&& elfHeader.e_phnum > 0
- && elfHeader.e_phentsize >= sizeof(struct Elf32_Phdr);
+ && elfHeader.e_phentsize >= sizeof(Elf32_Phdr);
}


@@ -372,10 +372,10 @@ ElfFile::_CheckElfHeader(Elf64_Ehdr& elfHeader)
&& elfHeader.e_ident[4] == ELFCLASS64
&& elfHeader.e_shoff > 0
&& elfHeader.e_shnum > 0
- && elfHeader.e_shentsize >= sizeof(struct Elf64_Shdr)
+ && elfHeader.e_shentsize >= sizeof(Elf64_Shdr)
&& elfHeader.e_shstrndx != SHN_UNDEF
&& elfHeader.e_shstrndx < elfHeader.e_shnum
&& elfHeader.e_phoff > 0
&& elfHeader.e_phnum > 0
- && elfHeader.e_phentsize >= sizeof(struct Elf64_Phdr);
+ && elfHeader.e_phentsize >= sizeof(Elf64_Phdr);
}
diff --git a/src/apps/debugger/elf/ElfFile.h b/src/apps/debugger/elf/ElfFile.h
index b506943..e4c6ab0 100644
--- a/src/apps/debugger/elf/ElfFile.h
+++ b/src/apps/debugger/elf/ElfFile.h
@@ -9,8 +9,7 @@

#include <SupportDefs.h>

-#include <elf32.h>
-#include <elf64.h>
+#include <elf_private.h>
#include <util/DoublyLinkedList.h>

#include "Types.h"
diff --git a/src/kits/debug/Image.h b/src/kits/debug/Image.h
index 2d5cbbe..1472bcb 100644
--- a/src/kits/debug/Image.h
+++ b/src/kits/debug/Image.h
@@ -8,7 +8,7 @@

#include <stdio.h>

-#include <elf_common.h>
+#include <elf_private.h>
#include <image.h>
#include <OS.h>

diff --git a/src/system/boot/loader/elf.cpp b/src/system/boot/loader/elf.cpp
index 266fec8..f77ebe2 100644
--- a/src/system/boot/loader/elf.cpp
+++ b/src/system/boot/loader/elf.cpp
@@ -11,7 +11,7 @@
#include <boot/platform.h>
#include <boot/stage2.h>
#include <driver_settings.h>
-#include <elf32.h>
+#include <elf_private.h>
#include <kernel.h>
#include <SupportDefs.h>

@@ -710,7 +710,7 @@ elf_relocate_image(preloaded_image* image)


status_t
-boot_elf_resolve_symbol(preloaded_elf32_image* image, struct Elf32_Sym* symbol,
+boot_elf_resolve_symbol(preloaded_elf32_image* image, Elf32_Sym* symbol,
Elf32_Addr* symbolAddress)
{
return ELF32Loader::Resolve(image, symbol, symbolAddress);
@@ -719,7 +719,7 @@ boot_elf_resolve_symbol(preloaded_elf32_image* image,
struct Elf32_Sym* symbol,

#ifdef BOOT_SUPPORT_ELF64
status_t
-boot_elf_resolve_symbol(preloaded_elf64_image* image, struct Elf64_Sym* symbol,
+boot_elf_resolve_symbol(preloaded_elf64_image* image, Elf64_Sym* symbol,
Elf64_Addr* symbolAddress)
{
return ELF64Loader::Resolve(image, symbol, symbolAddress);
diff --git a/src/system/kernel/arch/arm/arch_elf.cpp
b/src/system/kernel/arch/arm/arch_elf.cpp
index 62fc17e..f19ab0e 100644
--- a/src/system/kernel/arch/arm/arch_elf.cpp
+++ b/src/system/kernel/arch/arm/arch_elf.cpp
@@ -164,12 +164,12 @@ is_in_image(struct elf_image_info *image, addr_t address)

#ifdef _BOOT_MODE
status_t
-boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image,
- struct Elf32_Rel *rel, int relLength)
+boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image, Elf32_Rel *rel,
+ int relLength)
#else
int
arch_elf_relocate_rel(struct elf_image_info *image,
- struct elf_image_info *resolveImage, struct Elf32_Rel *rel, int
relLength)
+ struct elf_image_info *resolveImage, Elf32_Rel *rel, int relLength)
#endif
{
addr_t S;
@@ -181,7 +181,7 @@ arch_elf_relocate_rel(struct elf_image_info *image,

S = A = P = 0;

- for (i = 0; i * (int)sizeof(struct Elf32_Rel) < relLength; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rel) < relLength; i++) {
TRACE(("looking at rel type %s, offset 0x%lx\n",
kRelocations[ELF32_R_TYPE(rel[i].r_info)],
rel[i].r_offset));

@@ -191,7 +191,7 @@ arch_elf_relocate_rel(struct elf_image_info *image,
case R_ARM_GLOB_DAT:
case R_ARM_ABS32:
{
- struct Elf32_Sym *symbol;
+ Elf32_Sym *symbol;
status_t status;

symbol = SYMBOL(image,
ELF32_R_SYM(rel[i].r_info));
@@ -309,15 +309,15 @@ write_8_check(addr_t P, Elf32_Word value)
#ifdef _BOOT_MODE
status_t
boot_arch_elf_relocate_rela(struct preloaded_elf32_image *image,
- struct Elf32_Rela *rel, int rel_len)
+ Elf32_Rela *rel, int rel_len)
#else
int
arch_elf_relocate_rela(struct elf_image_info *image,
- struct elf_image_info *resolve_image, struct Elf32_Rela *rel, int
rel_len)
+ struct elf_image_info *resolve_image, Elf32_Rela *rel, int rel_len)
#endif
{
int i;
- struct Elf32_Sym *sym;
+ Elf32_Sym *sym;
int vlErr;
addr_t S = 0; // symbol address
addr_t R = 0; // section relative symbol address
@@ -345,7 +345,7 @@ arch_elf_relocate_rela(struct elf_image_info *image,
return B_ERROR; \
}

- for (i = 0; i * (int)sizeof(struct Elf32_Rela) < rel_len; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rela) < rel_len; i++) {
#if CHATTY
dprintf("looking at rel type %d, offset 0x%lx, "
"sym 0x%lx, addend 0x%lx\n", ELF32_R_TYPE(rel[i].r_info),
diff --git a/src/system/kernel/arch/m68k/arch_elf.cpp
b/src/system/kernel/arch/m68k/arch_elf.cpp
index 2251f03..2a53554 100644
--- a/src/system/kernel/arch/m68k/arch_elf.cpp
+++ b/src/system/kernel/arch/m68k/arch_elf.cpp
@@ -76,12 +76,12 @@ static const char *kRelocations[] = {

#ifdef _BOOT_MODE
status_t
-boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image,
- struct Elf32_Rel *rel, int rel_len)
+boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image, Elf32_Rel *rel,
+ int rel_len)
#else
int
arch_elf_relocate_rel(struct elf_image_info *image,
- struct elf_image_info *resolve_image, struct Elf32_Rel *rel, int
rel_len)
+ struct elf_image_info *resolve_image, Elf32_Rel *rel, int rel_len)
#endif
{
// there are no rel entries in M68K elf
@@ -138,15 +138,15 @@ write_8_check(addr_t P, Elf32_Word value)
#ifdef _BOOT_MODE
status_t
boot_arch_elf_relocate_rela(struct preloaded_elf32_image *image,
- struct Elf32_Rela *rel, int rel_len)
+ Elf32_Rela *rel, int rel_len)
#else
int
arch_elf_relocate_rela(struct elf_image_info *image,
- struct elf_image_info *resolve_image, struct Elf32_Rela *rel, int
rel_len)
+ struct elf_image_info *resolve_image, Elf32_Rela *rel, int rel_len)
#endif
{
int i;
- struct Elf32_Sym *sym;
+ Elf32_Sym *sym;
int vlErr;
addr_t S = 0; // symbol address
addr_t R = 0; // section relative symbol address
@@ -172,7 +172,7 @@ arch_elf_relocate_rela(struct elf_image_info *image,
return B_ERROR; \
}

- for (i = 0; i * (int)sizeof(struct Elf32_Rela) < rel_len; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rela) < rel_len; i++) {
#if CHATTY
dprintf("looking at rel type %d, offset 0x%lx, sym 0x%lx,
addend 0x%lx\n",
ELF32_R_TYPE(rel[i].r_info), rel[i].r_offset,
ELF32_R_SYM(rel[i].r_info), rel[i].r_addend);
diff --git a/src/system/kernel/arch/ppc/arch_elf.cpp
b/src/system/kernel/arch/ppc/arch_elf.cpp
index 75f6728..47c25a2 100644
--- a/src/system/kernel/arch/ppc/arch_elf.cpp
+++ b/src/system/kernel/arch/ppc/arch_elf.cpp
@@ -21,12 +21,12 @@

#ifdef _BOOT_MODE
status_t
-boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image,
- struct Elf32_Rel *rel, int rel_len)
+boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image, Elf32_Rel *rel,
+ int rel_len)
#else
int
arch_elf_relocate_rel(struct elf_image_info *image,
- struct elf_image_info *resolve_image, struct Elf32_Rel *rel, int
rel_len)
+ struct elf_image_info *resolve_image, Elf32_Rel *rel, int rel_len)
#endif
{
// there are no rel entries in PPC elf
@@ -116,15 +116,15 @@ ha(Elf32_Word value)
#ifdef _BOOT_MODE
status_t
boot_arch_elf_relocate_rela(struct preloaded_elf32_image *image,
- struct Elf32_Rela *rel, int rel_len)
+ Elf32_Rela *rel, int rel_len)
#else
int
arch_elf_relocate_rela(struct elf_image_info *image,
- struct elf_image_info *resolve_image, struct Elf32_Rela *rel, int
rel_len)
+ struct elf_image_info *resolve_image, Elf32_Rela *rel, int rel_len)
#endif
{
int i;
- struct Elf32_Sym *sym;
+ Elf32_Sym *sym;
int vlErr;
addr_t S = 0; // symbol address
addr_t R = 0; // section relative symbol address
@@ -150,7 +150,7 @@ arch_elf_relocate_rela(struct elf_image_info *image,
return B_ERROR; \
}

- for (i = 0; i * (int)sizeof(struct Elf32_Rela) < rel_len; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rela) < rel_len; i++) {
#if CHATTY
dprintf("looking at rel type %d, offset 0x%lx, sym 0x%lx,
addend 0x%lx\n",
ELF32_R_TYPE(rel[i].r_info), rel[i].r_offset,
ELF32_R_SYM(rel[i].r_info), rel[i].r_addend);
diff --git a/src/system/kernel/arch/x86/arch_elf.cpp
b/src/system/kernel/arch/x86/arch_elf.cpp
index 111329a..eef0c8c 100644
--- a/src/system/kernel/arch/x86/arch_elf.cpp
+++ b/src/system/kernel/arch/x86/arch_elf.cpp
@@ -59,12 +59,12 @@ static const char *kRelocations[] = {

#ifdef _BOOT_MODE
status_t
-boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image,
- struct Elf32_Rel *rel, int relLength)
+boot_arch_elf_relocate_rel(struct preloaded_elf32_image *image, Elf32_Rel *rel,
+ int relLength)
#else
int
arch_elf_relocate_rel(struct elf_image_info *image,
- struct elf_image_info *resolveImage, struct Elf32_Rel *rel, int
relLength)
+ struct elf_image_info *resolveImage, Elf32_Rel *rel, int relLength)
#endif
{
addr_t S;
@@ -76,7 +76,7 @@ arch_elf_relocate_rel(struct elf_image_info *image,

S = A = P = 0;

- for (i = 0; i * (int)sizeof(struct Elf32_Rel) < relLength; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rel) < relLength; i++) {
TRACE(("looking at rel type %s, offset 0x%lx\n",
kRelocations[ELF32_R_TYPE(rel[i].r_info)],
rel[i].r_offset));

@@ -88,7 +88,7 @@ arch_elf_relocate_rel(struct elf_image_info *image,
case R_386_JMP_SLOT:
case R_386_GOTOFF:
{
- struct Elf32_Sym *symbol;
+ Elf32_Sym *symbol;
status_t status;

symbol = SYMBOL(image,
ELF32_R_SYM(rel[i].r_info));
@@ -171,11 +171,11 @@ arch_elf_relocate_rel(struct elf_image_info *image,
#ifdef _BOOT_MODE
status_t
boot_arch_elf_relocate_rela(struct preloaded_elf32_image *image,
- struct Elf32_Rela *rel, int relLength)
+ Elf32_Rela *rel, int relLength)
#else
int
arch_elf_relocate_rela(struct elf_image_info *image,
- struct elf_image_info *resolveImage, struct Elf32_Rela *rel, int
relLength)
+ struct elf_image_info *resolveImage, Elf32_Rela *rel, int relLength)
#endif
{
dprintf("arch_elf_relocate_rela: not supported on x86\n");
diff --git a/src/system/runtime_loader/arch/m68k/arch_relocate.cpp
b/src/system/runtime_loader/arch/m68k/arch_relocate.cpp
index 7b24c6d..ae8510e 100644
--- a/src/system/runtime_loader/arch/m68k/arch_relocate.cpp
+++ b/src/system/runtime_loader/arch/m68k/arch_relocate.cpp
@@ -72,8 +72,8 @@ write_8_check(addr_t *P, Elf32_Word value)


static int
-relocate_rela(image_t *rootImage, image_t *image, struct Elf32_Rela *rel,
- int rel_len, SymbolLookupCache* cache)
+relocate_rela(image_t *rootImage, image_t *image, Elf32_Rela *rel, int rel_len,
+ SymbolLookupCache* cache)
{
int i;
addr_t S;
@@ -84,7 +84,7 @@ relocate_rela(image_t *rootImage, image_t *image, struct
Elf32_Rela *rel,
#define A ((addr_t)rel[i].r_addend)
# define B (image->regions[0].delta)

- for (i = 0; i * (int)sizeof(struct Elf32_Rel) < rel_len; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rel) < rel_len; i++) {
unsigned type = ELF32_R_TYPE(rel[i].r_info);

switch (type) {
@@ -97,7 +97,7 @@ relocate_rela(image_t *rootImage, image_t *image, struct
Elf32_Rela *rel,
case R_68K_GLOB_DAT:
case R_68K_JMP_SLOT:
{
- struct Elf32_Sym *sym;
+ Elf32_Sym *sym;
status_t status;
sym = SYMBOL(image, ELF32_R_SYM(rel[i].r_info));

@@ -303,7 +303,7 @@ arch_relocate_image(image_t *rootImage, image_t *image,
//TRACE(("RELA relocations not supported\n"));
//return EOPNOTSUPP;

- //for (i = 1; i * (int)sizeof(struct Elf32_Rela) <
image->rela_len; i++) {
+ //for (i = 1; i * (int)sizeof(Elf32_Rela) < image->rela_len;
i++) {
// printf("rela: type %d\n",
ELF32_R_TYPE(image->rela[i].r_info));
//}
}
diff --git a/src/system/runtime_loader/arch/ppc/arch_relocate.cpp
b/src/system/runtime_loader/arch/ppc/arch_relocate.cpp
index 6803697..c6cf798 100644
--- a/src/system/runtime_loader/arch/ppc/arch_relocate.cpp
+++ b/src/system/runtime_loader/arch/ppc/arch_relocate.cpp
@@ -21,8 +21,8 @@


static int
-relocate_rel(image_t *rootImage, image_t *image, struct Elf32_Rel *rel,
- int rel_len, SymbolLookupCache* cache)
+relocate_rel(image_t *rootImage, image_t *image, Elf32_Rel *rel, int rel_len,
+ SymbolLookupCache* cache)
{
// ToDo: implement me!

@@ -56,7 +56,7 @@ arch_relocate_image(image_t *rootImage, image_t *image,
printf("RELA relocations not supported\n");
return EOPNOTSUPP;

- //for (i = 1; i * (int)sizeof(struct Elf32_Rela) <
image->rela_len; i++) {
+ //for (i = 1; i * (int)sizeof(Elf32_Rela) < image->rela_len;
i++) {
// printf("rela: type %d\n",
ELF32_R_TYPE(image->rela[i].r_info));
//}
}
diff --git a/src/system/runtime_loader/arch/x86/arch_relocate.cpp
b/src/system/runtime_loader/arch/x86/arch_relocate.cpp
index d47f3af..1e6ac1f 100644
--- a/src/system/runtime_loader/arch/x86/arch_relocate.cpp
+++ b/src/system/runtime_loader/arch/x86/arch_relocate.cpp
@@ -18,8 +18,8 @@


static int
-relocate_rel(image_t *rootImage, image_t *image, struct Elf32_Rel *rel,
- int rel_len, SymbolLookupCache* cache)
+relocate_rel(image_t *rootImage, image_t *image, Elf32_Rel *rel, int rel_len,
+ SymbolLookupCache* cache)
{
int i;
addr_t S;
@@ -29,7 +29,7 @@ relocate_rel(image_t *rootImage, image_t *image, struct
Elf32_Rel *rel,
# define A (*(P))
# define B (image->regions[0].delta)

- for (i = 0; i * (int)sizeof(struct Elf32_Rel) < rel_len; i++) {
+ for (i = 0; i * (int)sizeof(Elf32_Rel) < rel_len; i++) {
unsigned type = ELF32_R_TYPE(rel[i].r_info);
unsigned symbolIndex = ELF32_R_SYM(rel[i].r_info);

@@ -133,7 +133,7 @@ arch_relocate_image(image_t* rootImage, image_t* image,
TRACE(("RELA relocations not supported\n"));
return EOPNOTSUPP;

- //for (i = 1; i * (int)sizeof(struct Elf32_Rela) <
image->rela_len; i++) {
+ //for (i = 1; i * (int)sizeof(Elf32_Rela) < image->rela_len;
i++) {
// printf("rela: type %d\n",
ELF32_R_TYPE(image->rela[i].r_info));
//}
}
diff --git a/src/tests/system/boot/loader/platform_misc.cpp
b/src/tests/system/boot/loader/platform_misc.cpp
index d4b6699..7a48116 100644
--- a/src/tests/system/boot/loader/platform_misc.cpp
+++ b/src/tests/system/boot/loader/platform_misc.cpp
@@ -40,16 +40,16 @@ platform_switch_to_text_mode(void)


extern "C" status_t
-boot_arch_elf_relocate_rel(struct preloaded_image *image,
- struct Elf32_Rel *rel, int rel_len)
+boot_arch_elf_relocate_rel(struct preloaded_image *image, Elf32_Rel *rel,
+ int rel_len)
{
return B_ERROR;
}


extern "C" status_t
-boot_arch_elf_relocate_rela(struct preloaded_image *image,
- struct Elf32_Rela *rel, int rel_len)
+boot_arch_elf_relocate_rela(struct preloaded_image *image, Elf32_Rela *rel,
+ int rel_len)
{
return B_ERROR;
}


Other related posts:

  • » [haiku-commits] haiku: hrev49754 - headers/private/system headers/os/kernel src/system/kernel/arch src/system/runtime_loader/arch - jessica . l . hamilton