home *** CD-ROM | disk | FTP | other *** search
- /* $VER: pasm elf.h V0.2 (23.03.97)
- *
- * This file is part of pasm, a portable PowerPC assembler.
- * Copyright (c) 1997-98 Frank Wille
- *
- * pasm is freeware and part of the portable and retargetable ANSI C
- * compiler vbcc, copyright (c) 1995-98 by Volker Barthelmann.
- * pasm may be freely redistributed as long as no modifications are
- * made and nothing is charged for it. Non-commercial usage is allowed
- * without any restrictions.
- * EVERY PRODUCT OR PROGRAM DERIVED DIRECTLY FROM MY SOURCE MAY NOT BE
- * SOLD COMMERCIALLY WITHOUT PERMISSION FROM THE AUTHOR.
- *
- *
- * v0.2 (25.03.97) phx
- * Writes ELF object for 32-bit PowerPC big-endian. Either absolute
- * or ELF output format may be selected. ELF is default for all
- * currently supported platforms. PPCasm supports nine different
- * relocation types (there are much more...).
- * Compiles and works also under NetBSD/amiga (68k).
- * Changed function declaration to 'new style' in all sources
- * (to avoid problems with '...' for example).
- * File created.
- */
-
-
- #define EI_NIDENT 16
-
- struct Elf32_Ehdr {
- unsigned char e_ident[EI_NIDENT];
- uint16 e_type;
- uint16 e_machine;
- uint32 e_version;
- uint32 e_entry;
- uint32 e_phoff;
- uint32 e_shoff;
- uint32 e_flags;
- uint16 e_ehsize;
- uint16 e_phentsize;
- uint16 e_phnum;
- uint16 e_shentsize;
- uint16 e_shnum;
- uint16 e_shstrndx;
- };
-
- /* e_indent indexes */
- #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
-
- /* EI_CLASS */
- #define ELFCLASSNONE 0
- #define ELFCLASS32 1
- #define ELFCLASS64 2
-
- /* EI_DATA */
- #define ELFDATANONE 0
- #define ELFDATA2LSB 1
- #define ELFDATA2MSB 2
-
- /* e_type */
- #define ET_NONE 0
- #define ET_REL 1
- #define ET_EXEC 2
- #define ET_DYN 3
- #define ET_CORE 4
-
- /* e_version */
- #define EV_NONE 0
- #define EV_CURRENT 1
-
- /* e_machine */
- #define EM_NONE 0
- #define EM_M32 1
- #define EM_SPARC 2
- #define EM_386 3
- #define EM_68K 4
- #define EM_88K 5
- #define EM_860 7
- #define EM_MIPS 8
- #define EM_POWERPC 20
-
-
- struct Elf32_Shdr {
- uint32 sh_name;
- uint32 sh_type;
- uint32 sh_flags;
- uint32 sh_addr;
- uint32 sh_offset;
- uint32 sh_size;
- uint32 sh_link;
- uint32 sh_info;
- uint32 sh_addralign;
- uint32 sh_entsize;
- };
-
- /* special sections indexes */
- #define SHN_UNDEF 0
- #define SHN_ABS 0xfff1
- #define SHN_COMMON 0xfff2
-
- /* sh_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
-
- /* sh_flags */
- #define SHF_WRITE 0x1
- #define SHF_ALLOC 0x2
- #define SHF_EXECINSTR 0x4
-
-
- struct Elf32_Sym {
- uint32 st_name;
- uint32 st_value;
- uint32 st_size;
- uint8 st_info;
- uint8 st_other;
- uint16 st_shndx;
- };
-
- /* st_info */
- #define ELF32_ST_BIND(i) ((i)>>4)
- #define ELF32_ST_TYPE(i) ((i)&0xf)
- #define ELF32_ST_INFO(b,t) (((b)<<4)+((t)&0xf))
-
- /* ST_BIND */
- #define STB_LOCAL 0
- #define STB_GLOBAL 1
- #define STB_WEAK 2
-
- /* ST_TYPE */
- #define STT_NOTYPE 0
- #define STT_OBJECT 1
- #define STT_FUNC 2
- #define STT_SECTION 3
- #define STT_FILE 4
-
-
- struct Elf32_Rel {
- uint32 r_offset;
- uint32 r_info;
- };
-
- struct Elf32_Rela {
- uint32 r_offset;
- uint32 r_info;
- uint32 r_addend;
- };
-
- /* r_info */
- #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))
-