summaryrefslogtreecommitdiff
path: root/libc/include/elf.h
diff options
context:
space:
mode:
Diffstat (limited to 'libc/include/elf.h')
-rw-r--r--libc/include/elf.h109
1 files changed, 100 insertions, 9 deletions
diff --git a/libc/include/elf.h b/libc/include/elf.h
index 7de464e0f..df768ba52 100644
--- a/libc/include/elf.h
+++ b/libc/include/elf.h
@@ -48,35 +48,100 @@ typedef struct {
} a_un;
} Elf64_auxv_t;
+typedef Elf32_Half Elf32_Versym;
+typedef Elf64_Half Elf64_Versym;
+
+typedef struct {
+ Elf32_Half vd_version;
+ Elf32_Half vd_flags;
+ Elf32_Half vd_ndx;
+ Elf32_Half vd_cnt;
+ Elf32_Word vd_hash;
+ Elf32_Word vd_aux;
+ Elf32_Word vd_next;
+} Elf32_Verdef;
+
+typedef struct {
+ Elf32_Word vda_name;
+ Elf32_Word vda_next;
+} Elf32_Verdaux;
+
+typedef struct {
+ Elf64_Half vd_version;
+ Elf64_Half vd_flags;
+ Elf64_Half vd_ndx;
+ Elf64_Half vd_cnt;
+ Elf64_Word vd_hash;
+ Elf64_Word vd_aux;
+ Elf64_Word vd_next;
+} Elf64_Verdef;
+
+typedef struct {
+ Elf64_Word vda_name;
+ Elf64_Word vda_next;
+} Elf64_Verdaux;
+
+typedef struct {
+ Elf32_Half vn_version;
+ Elf32_Half vn_cnt;
+ Elf32_Word vn_file;
+ Elf32_Word vn_aux;
+ Elf32_Word vn_next;
+} Elf32_Verneed;
+
+typedef struct {
+ Elf32_Word vna_hash;
+ Elf32_Half vna_flags;
+ Elf32_Half vna_other;
+ Elf32_Word vna_name;
+ Elf32_Word vna_next;
+} Elf32_Vernaux;
+
+typedef struct {
+ Elf64_Half vn_version;
+ Elf64_Half vn_cnt;
+ Elf64_Word vn_file;
+ Elf64_Word vn_aux;
+ Elf64_Word vn_next;
+} Elf64_Verneed;
+
+typedef struct {
+ Elf64_Word vna_hash;
+ Elf64_Half vna_flags;
+ Elf64_Half vna_other;
+ Elf64_Word vna_name;
+ Elf64_Word vna_next;
+} Elf64_Vernaux;
+
#define DF_ORIGIN 0x00000001
#define DF_SYMBOLIC 0x00000002
#define DF_TEXTREL 0x00000004
#define DF_BIND_NOW 0x00000008
#define DF_STATIC_TLS 0x00000010
-#define DF_1_NOW 0x00000001 // Perform complete relocation processing.
-#define DF_1_GLOBAL 0x00000002 // implies RTLD_GLOBAL
+#define DF_1_NOW 0x00000001 /* Perform complete relocation processing. */
+#define DF_1_GLOBAL 0x00000002 /* implies RTLD_GLOBAL */
#define DF_1_GROUP 0x00000004
-#define DF_1_NODELETE 0x00000008 // implies RTLD_NODELETE
+#define DF_1_NODELETE 0x00000008 /* implies RTLD_NODELETE */
#define DF_1_LOADFLTR 0x00000010
#define DF_1_INITFIRST 0x00000020
-#define DF_1_NOOPEN 0x00000040 // Object can not be used with dlopen(3)
+#define DF_1_NOOPEN 0x00000040 /* Object can not be used with dlopen(3) */
#define DF_1_ORIGIN 0x00000080
#define DF_1_DIRECT 0x00000100
#define DF_1_TRANS 0x00000200
#define DF_1_INTERPOSE 0x00000400
#define DF_1_NODEFLIB 0x00000800
-#define DF_1_NODUMP 0x00001000 // Object cannot be dumped with dldump(3)
+#define DF_1_NODUMP 0x00001000 /* Object cannot be dumped with dldump(3) */
#define DF_1_CONFALT 0x00002000
#define DF_1_ENDFILTEE 0x00004000
#define DF_1_DISPRELDNE 0x00008000
#define DF_1_DISPRELPND 0x00010000
#define DF_1_NODIRECT 0x00020000
-#define DF_1_IGNMULDEF 0x00040000 // Internal use
-#define DF_1_NOKSYMS 0x00080000 // Internal use
-#define DF_1_NOHDR 0x00100000 // Internal use
+#define DF_1_IGNMULDEF 0x00040000 /* Internal use */
+#define DF_1_NOKSYMS 0x00080000 /* Internal use */
+#define DF_1_NOHDR 0x00100000 /* Internal use */
#define DF_1_EDITED 0x00200000
-#define DF_1_NORELOC 0x00400000 // Internal use
+#define DF_1_NORELOC 0x00400000 /* Internal use */
#define DF_1_SYMINTPOSE 0x00800000
#define DF_1_GLOBAUDIT 0x01000000
#define DF_1_SINGLETON 0x02000000
@@ -94,6 +159,16 @@ typedef struct {
#define DT_PREINIT_ARRAY 32
#define DT_PREINIT_ARRAYSZ 33
+/* Android compressed rel/rela sections */
+#define DT_ANDROID_REL (DT_LOOS + 2)
+#define DT_ANDROID_RELSZ (DT_LOOS + 3)
+
+#define DT_ANDROID_RELA (DT_LOOS + 4)
+#define DT_ANDROID_RELASZ (DT_LOOS + 5)
+
+/* gnu hash entry */
+#define DT_GNU_HASH 0x6ffffef5
+
#define ELFOSABI_SYSV 0 /* Synonym for ELFOSABI_NONE used by valgrind. */
#define PT_GNU_RELRO 0x6474e552
@@ -103,10 +178,26 @@ typedef struct {
#define STB_LOPROC 13
#define STB_HIPROC 15
+#define SHT_LOOS 0x60000000
+#define SHT_HIOS 0x6fffffff
+
#define STT_GNU_IFUNC 10
#define STT_LOOS 10
#define STT_HIOS 12
#define STT_LOPROC 13
#define STT_HIPROC 15
+/* The kernel uses NT_PRFPREG but glibc also offers NT_FPREGSET */
+#define NT_FPREGSET NT_PRFPREG
+
+#define ELF_NOTE_GNU "GNU"
+
+#define NT_GNU_BUILD_ID 3
+
+#define VER_FLG_BASE 0x1
+#define VER_FLG_WEAK 0x2
+
+#define VER_NDX_LOCAL 0
+#define VER_NDX_GLOBAL 1
+
#endif /* _ELF_H */