summaryrefslogtreecommitdiff
path: root/utils/ld
diff options
context:
space:
mode:
authorforsyth <forsyth@lavoro.terzarima.net>2013-06-03 21:13:27 +0000
committerforsyth <forsyth@lavoro.terzarima.net>2013-06-03 21:13:27 +0000
commit0c407e1dbf0a89cf3ec26814327abea54b532d03 (patch)
tree4f427371acfdce151d0e45c31ed6ef8c1cf6e082 /utils/ld
parent45a20ab721a513710138340faff3d59a31c3e01e (diff)
add ld/elf.h and have ?l/l.h include it
Diffstat (limited to 'utils/ld')
-rw-r--r--utils/ld/elf.h96
1 files changed, 96 insertions, 0 deletions
diff --git a/utils/ld/elf.h b/utils/ld/elf.h
new file mode 100644
index 00000000..b4cc5a64
--- /dev/null
+++ b/utils/ld/elf.h
@@ -0,0 +1,96 @@
+enum {
+ Ehdr32sz = 52,
+ Phdr32sz = 32,
+ Shdr32sz = 40,
+
+ Ehdr64sz = 64,
+ Phdr64sz = 56,
+ Shdr64sz = 64,
+};
+
+/* from /sys/src/libmach/elf.h */
+enum {
+ /* Ehdr codes */
+ MAG0 = 0, /* ident[] indexes */
+ MAG1 = 1,
+ MAG2 = 2,
+ MAG3 = 3,
+ CLASS = 4,
+ DATA = 5,
+ VERSION = 6,
+
+ ELFCLASSNONE = 0, /* ident[CLASS] */
+ ELFCLASS32 = 1,
+ ELFCLASS64 = 2,
+ ELFCLASSNUM = 3,
+
+ ELFDATANONE = 0, /* ident[DATA] */
+ ELFDATA2LSB = 1,
+ ELFDATA2MSB = 2,
+ ELFDATANUM = 3,
+
+ NOETYPE = 0, /* type */
+ REL = 1,
+ EXEC = 2,
+ DYN = 3,
+ CORE = 4,
+
+ NONE = 0, /* machine */
+ M32 = 1, /* AT&T WE 32100 */
+ SPARC = 2, /* Sun SPARC */
+ I386 = 3, /* Intel 80386 */
+ M68K = 4, /* Motorola 68000 */
+ M88K = 5, /* Motorola 88000 */
+ I486 = 6, /* Intel 80486 */
+ I860 = 7, /* Intel i860 */
+ MIPS = 8, /* Mips R2000 */
+ S370 = 9, /* Amdhal */
+ SPARC64 = 18, /* Sun SPARC v9 */
+ POWER = 20, /* PowerPC */
+ POWER64 = 21, /* PowerPC64 */
+ ARM = 40, /* ARM */
+ AMD64 = 62, /* Amd64 */
+ ARM64 = 183, /* ARM64 */
+
+ NO_VERSION = 0, /* version, ident[VERSION] */
+ CURRENT = 1,
+
+ /* Phdr Codes */
+ NOPTYPE = 0, /* type */
+ PT_LOAD = 1,
+ DYNAMIC = 2,
+ INTERP = 3,
+ NOTE = 4,
+ SHLIB = 5,
+ PHDR = 6,
+
+ R = 0x4, /* flags */
+ W = 0x2,
+ X = 0x1,
+
+ /* Shdr Codes */
+ Progbits = 1, /* section types */
+ Strtab = 3,
+ Nobits = 8,
+
+ Swrite = 1, /* section attributes (flags) */
+ Salloc = 2,
+ Sexec = 4,
+};
+
+typedef void (*Putl)(long);
+
+void elf32(int mach, int bo, int addpsects, void (*putpsects)(Putl));
+void elf32phdr(void (*putl)(long), ulong type, ulong off, ulong vaddr,
+ ulong paddr, ulong filesz, ulong memsz, ulong prots, ulong align);
+void elf32shdr(void (*putl)(long), ulong name, ulong type, ulong flags,
+ ulong vaddr, ulong off, ulong sectsz, ulong link, ulong addnl,
+ ulong align, ulong entsz);
+
+void elf64(int mach, int bo, int addpsects, void (*putpsects)(Putl));
+void elf64phdr(void (*putl)(long), void (*putll)(vlong), ulong type,
+ uvlong off, uvlong vaddr, uvlong paddr, uvlong filesz, uvlong memsz,
+ ulong prots, uvlong align);
+void elf64shdr(void (*putl)(long), void (*putll)(vlong), ulong name,
+ ulong type, uvlong flags, uvlong vaddr, uvlong off, uvlong sectsz,
+ ulong link, ulong addnl, uvlong align, uvlong entsz);