Changeset e16e2ba4 in mainline
- Timestamp:
- 2011-07-23T16:01:35Z (14 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- 65b4aac1, 8fd04ba9
- Parents:
- 1facf8e
- Files:
-
- 2 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/include/lib/elf.h
r1facf8e re16e2ba4 42 42 * current ELF version 43 43 */ 44 #define EV_CURRENT 44 #define EV_CURRENT 1 45 45 46 46 /** 47 47 * ELF types 48 48 */ 49 #define ET_NONE 0/* No type */50 #define ET_REL 1/* Relocatable file */51 #define ET_EXEC 2/* Executable */52 #define ET_DYN 3/* Shared object */53 #define ET_CORE 4/* Core */54 #define ET_LOPROC 0xff00/* Processor specific */55 #define ET_HIPROC 0xffff/* Processor specific */49 #define ET_NONE 0 /* No type */ 50 #define ET_REL 1 /* Relocatable file */ 51 #define ET_EXEC 2 /* Executable */ 52 #define ET_DYN 3 /* Shared object */ 53 #define ET_CORE 4 /* Core */ 54 #define ET_LOPROC 0xff00 /* Processor specific */ 55 #define ET_HIPROC 0xffff /* Processor specific */ 56 56 57 57 /** 58 58 * ELF machine types 59 59 */ 60 #define EM_NO 0/* No machine */61 #define EM_SPARC 2/* SPARC */62 #define EM_386 3/* i386 */63 #define EM_MIPS 8/* MIPS RS3000 */64 #define EM_MIPS_RS3_LE 10/* MIPS RS3000 LE */65 #define EM_PPC 20/* PPC32 */66 #define EM_PPC64 21/* PPC64 */67 #define EM_ARM 40/* ARM */68 #define EM_SPARCV9 43/* SPARC64 */69 #define EM_IA_64 50/* IA-64 */70 #define EM_X86_64 62/* AMD64/EMT64 */60 #define EM_NO 0 /* No machine */ 61 #define EM_SPARC 2 /* SPARC */ 62 #define EM_386 3 /* i386 */ 63 #define EM_MIPS 8 /* MIPS RS3000 */ 64 #define EM_MIPS_RS3_LE 10 /* MIPS RS3000 LE */ 65 #define EM_PPC 20 /* PPC32 */ 66 #define EM_PPC64 21 /* PPC64 */ 67 #define EM_ARM 40 /* ARM */ 68 #define EM_SPARCV9 43 /* SPARC64 */ 69 #define EM_IA_64 50 /* IA-64 */ 70 #define EM_X86_64 62 /* AMD64/EMT64 */ 71 71 72 72 /** 73 73 * ELF identification indexes 74 74 */ 75 #define EI_MAG0 76 #define EI_MAG1 77 #define EI_MAG2 78 #define EI_MAG3 79 #define EI_CLASS 4/* File class */80 #define EI_DATA 5/* Data encoding */81 #define EI_VERSION 6/* File version */82 #define EI_OSABI 83 #define EI_ABIVERSION 84 #define EI_PAD 9/* Start of padding bytes */85 #define EI_NIDENT 16/* ELF identification table size */75 #define EI_MAG0 0 76 #define EI_MAG1 1 77 #define EI_MAG2 2 78 #define EI_MAG3 3 79 #define EI_CLASS 4 /* File class */ 80 #define EI_DATA 5 /* Data encoding */ 81 #define EI_VERSION 6 /* File version */ 82 #define EI_OSABI 7 83 #define EI_ABIVERSION 8 84 #define EI_PAD 9 /* Start of padding bytes */ 85 #define EI_NIDENT 16 /* ELF identification table size */ 86 86 87 87 /** 88 88 * ELF magic number 89 89 */ 90 #define ELFMAG0 91 #define ELFMAG1 92 #define ELFMAG2 93 #define ELFMAG3 90 #define ELFMAG0 0x7f 91 #define ELFMAG1 'E' 92 #define ELFMAG2 'L' 93 #define ELFMAG3 'F' 94 94 95 95 /** 96 96 * ELF file classes 97 97 */ 98 #define ELFCLASSNONE 99 #define ELFCLASS32 100 #define ELFCLASS64 98 #define ELFCLASSNONE 0 99 #define ELFCLASS32 1 100 #define ELFCLASS64 2 101 101 102 102 /** 103 103 * ELF data encoding types 104 104 */ 105 #define ELFDATANONE 0 106 #define ELFDATA2LSB 1 /* Least significant byte first (little endian) */ 107 #define ELFDATA2MSB 2 /* Most signigicant byte first (big endian) */ 108 109 /** 110 * ELF error return codes 111 */ 112 #define EE_OK 0 /* No error */ 113 #define EE_INVALID 1 /* Invalid ELF image */ 114 #define EE_MEMORY 2 /* Cannot allocate address space */ 115 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 116 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 117 #define EE_LOADER 5 /* The image is actually a program loader */ 118 #define EE_IRRECOVERABLE 6 105 #define ELFDATANONE 0 106 #define ELFDATA2LSB 1 /* Least significant byte first (little endian) */ 107 #define ELFDATA2MSB 2 /* Most signigicant byte first (big endian) */ 119 108 120 109 /** 121 110 * ELF section types 122 111 */ 123 #define SHT_NULL 124 #define SHT_PROGBITS 125 #define SHT_SYMTAB 126 #define SHT_STRTAB 127 #define SHT_RELA 128 #define SHT_HASH 129 #define SHT_DYNAMIC 130 #define SHT_NOTE 131 #define SHT_NOBITS 132 #define SHT_REL 133 #define SHT_SHLIB 134 #define SHT_DYNSYM 135 #define SHT_LOOS 136 #define SHT_HIOS 137 #define SHT_LOPROC 138 #define SHT_HIPROC 139 #define SHT_LOUSER 140 #define SHT_HIUSER 112 #define SHT_NULL 0 113 #define SHT_PROGBITS 1 114 #define SHT_SYMTAB 2 115 #define SHT_STRTAB 3 116 #define SHT_RELA 4 117 #define SHT_HASH 5 118 #define SHT_DYNAMIC 6 119 #define SHT_NOTE 7 120 #define SHT_NOBITS 8 121 #define SHT_REL 9 122 #define SHT_SHLIB 10 123 #define SHT_DYNSYM 11 124 #define SHT_LOOS 0x60000000 125 #define SHT_HIOS 0x6fffffff 126 #define SHT_LOPROC 0x70000000 127 #define SHT_HIPROC 0x7fffffff 128 #define SHT_LOUSER 0x80000000 129 #define SHT_HIUSER 0xffffffff 141 130 142 131 /** 143 132 * ELF section flags 144 133 */ 145 #define SHF_WRITE 0x1 146 #define SHF_ALLOC 0x2 147 #define SHF_EXECINSTR 0x4 148 #define SHF_TLS 0x400 149 #define SHF_MASKPROC 0xf0000000 134 #define SHF_WRITE 0x1 135 #define SHF_ALLOC 0x2 136 #define SHF_EXECINSTR 0x4 137 #define SHF_TLS 0x400 138 #define SHF_MASKPROC 0xf0000000 139 140 /** Macros for decomposing elf_symbol.st_info into binging and type */ 141 #define ELF_ST_BIND(i) ((i) >> 4) 142 #define ELF_ST_TYPE(i) ((i) & 0x0f) 143 #define ELF_ST_INFO(b, t) (((b) << 4) + ((t) & 0x0f)) 150 144 151 145 /** 152 146 * Symbol binding 153 147 */ 154 #define STB_LOCAL 155 #define STB_GLOBAL 156 #define STB_WEAK 157 #define STB_LOPROC 158 #define STB_HIPROC 148 #define STB_LOCAL 0 149 #define STB_GLOBAL 1 150 #define STB_WEAK 2 151 #define STB_LOPROC 13 152 #define STB_HIPROC 15 159 153 160 154 /** 161 155 * Symbol types 162 156 */ 163 #define STT_NOTYPE 164 #define STT_OBJECT 165 #define STT_FUNC 166 #define STT_SECTION 167 #define STT_FILE 168 #define STT_LOPROC 169 #define STT_HIPROC 157 #define STT_NOTYPE 0 158 #define STT_OBJECT 1 159 #define STT_FUNC 2 160 #define STT_SECTION 3 161 #define STT_FILE 4 162 #define STT_LOPROC 13 163 #define STT_HIPROC 15 170 164 171 165 /** 172 166 * Program segment types 173 167 */ 174 #define PT_NULL 175 #define PT_LOAD 176 #define PT_DYNAMIC 177 #define PT_INTERP 178 #define PT_NOTE 179 #define PT_SHLIB 180 #define PT_PHDR 181 #define PT_LOPROC 182 #define PT_HIPROC 168 #define PT_NULL 0 169 #define PT_LOAD 1 170 #define PT_DYNAMIC 2 171 #define PT_INTERP 3 172 #define PT_NOTE 4 173 #define PT_SHLIB 5 174 #define PT_PHDR 6 175 #define PT_LOPROC 0x70000000 176 #define PT_HIPROC 0x7fffffff 183 177 184 178 /** 185 179 * Program segment attributes. 186 180 */ 187 #define PF_X 188 #define PF_W 189 #define PF_R 181 #define PF_X 1 182 #define PF_W 2 183 #define PF_R 4 190 184 191 185 /** … … 195 189 * ELF object file specifications. They are the only types used 196 190 * in ELF header. 197 *198 191 */ 199 192 typedef uint64_t elf_xword; … … 207 200 * 208 201 * These types are specific for 32-bit format. 209 *210 202 */ 211 203 typedef uint32_t elf32_addr; … … 216 208 * 217 209 * These types are specific for 64-bit format. 218 *219 210 */ 220 211 typedef uint64_t elf64_addr; … … 238 229 elf_half e_shstrndx; 239 230 }; 240 241 231 struct elf64_header { 242 232 uint8_t e_ident[EI_NIDENT]; … … 256 246 }; 257 247 258 /* *248 /* 259 249 * ELF segment header. 260 250 * Segments headers are also known as program headers. … … 270 260 elf_word p_align; 271 261 }; 272 273 262 struct elf64_segment_header { 274 263 elf_word p_type; … … 282 271 }; 283 272 284 /* *273 /* 285 274 * ELF section header 286 275 */ … … 297 286 elf_word sh_entsize; 298 287 }; 299 300 288 struct elf64_section_header { 301 289 elf_word sh_name; … … 311 299 }; 312 300 313 /* *301 /* 314 302 * ELF symbol table entry 315 303 */ … … 322 310 elf_half st_shndx; 323 311 }; 324 325 312 struct elf64_symbol { 326 313 elf_word st_name; … … 332 319 }; 333 320 321 /* 322 * ELF note segment entry 323 */ 324 struct elf32_note { 325 elf_word namesz; 326 elf_word descsz; 327 elf_word type; 328 }; 329 struct elf64_note { 330 elf_xword namesz; 331 elf_xword descsz; 332 elf_xword type; 333 }; 334 334 335 #ifdef __32_BITS__ 335 336 typedef struct elf32_header elf_header_t; … … 337 338 typedef struct elf32_section_header elf_section_header_t; 338 339 typedef struct elf32_symbol elf_symbol_t; 340 typedef struct elf32_note elf_note_t; 339 341 #endif 340 341 342 #ifdef __64_BITS__ 342 343 typedef struct elf64_header elf_header_t; … … 344 345 typedef struct elf64_section_header elf_section_header_t; 345 346 typedef struct elf64_symbol elf_symbol_t; 347 typedef struct elf64_note elf_note_t; 346 348 #endif 347 348 extern const char *elf_error(unsigned int rc);349 349 350 350 /** Interpreter string used to recognize the program loader */ -
kernel/generic/include/mm/as.h
r1facf8e re16e2ba4 307 307 extern mem_backend_t phys_backend; 308 308 309 /**310 * This flags is passed when running the loader, otherwise elf_load()311 * would return with a EE_LOADER error code.312 *313 */314 #define ELD_F_NONE 0315 #define ELD_F_LOADER 1316 317 extern unsigned int elf_load(elf_header_t *, as_t *, unsigned int);318 319 309 /* Address space area related syscalls. */ 320 310 extern sysarg_t sys_as_area_create(uintptr_t, size_t, unsigned int); -
kernel/generic/src/lib/elf.c
r1facf8e re16e2ba4 47 47 #include <macros.h> 48 48 #include <arch.h> 49 50 #include <lib/elf_load.h> 49 51 50 52 static const char *error_codes[] = { -
kernel/generic/src/proc/program.c
r1facf8e re16e2ba4 48 48 #include <ipc/ipcrsc.h> 49 49 #include <security/cap.h> 50 #include <lib/elf .h>50 #include <lib/elf_load.h> 51 51 #include <errno.h> 52 52 #include <print.h> -
uspace/lib/c/include/elf/elf.h
r1facf8e re16e2ba4 1 1 /* 2 * Copyright (c) 20 06 Sergey Bondari2 * Copyright (c) 2011 Jiri Svoboda 3 3 * All rights reserved. 4 4 * … … 36 36 #define LIBC_ELF_H_ 37 37 38 #include <arch/elf.h> 39 #include <sys/types.h> 40 41 /** 42 * current ELF version 43 */ 44 #define EV_CURRENT 1 45 46 /** 47 * ELF types 48 */ 49 #define ET_NONE 0 /* No type */ 50 #define ET_REL 1 /* Relocatable file */ 51 #define ET_EXEC 2 /* Executable */ 52 #define ET_DYN 3 /* Shared object */ 53 #define ET_CORE 4 /* Core */ 54 #define ET_LOPROC 0xff00 /* Processor specific */ 55 #define ET_HIPROC 0xffff /* Processor specific */ 56 57 /** 58 * ELF machine types 59 */ 60 #define EM_NO 0 /* No machine */ 61 #define EM_SPARC 2 /* SPARC */ 62 #define EM_386 3 /* i386 */ 63 #define EM_MIPS 8 /* MIPS RS3000 */ 64 #define EM_MIPS_RS3_LE 10 /* MIPS RS3000 LE */ 65 #define EM_PPC 20 /* PPC32 */ 66 #define EM_PPC64 21 /* PPC64 */ 67 #define EM_ARM 40 /* ARM */ 68 #define EM_SPARCV9 43 /* SPARC64 */ 69 #define EM_IA_64 50 /* IA-64 */ 70 #define EM_X86_64 62 /* AMD64/EMT64 */ 71 72 /** 73 * ELF identification indexes 74 */ 75 #define EI_MAG0 0 76 #define EI_MAG1 1 77 #define EI_MAG2 2 78 #define EI_MAG3 3 79 #define EI_CLASS 4 /* File class */ 80 #define EI_DATA 5 /* Data encoding */ 81 #define EI_VERSION 6 /* File version */ 82 #define EI_OSABI 7 83 #define EI_ABIVERSION 8 84 #define EI_PAD 9 /* Start of padding bytes */ 85 #define EI_NIDENT 16 /* ELF identification table size */ 86 87 /** 88 * ELF magic number 89 */ 90 #define ELFMAG0 0x7f 91 #define ELFMAG1 'E' 92 #define ELFMAG2 'L' 93 #define ELFMAG3 'F' 94 95 /** 96 * ELF file classes 97 */ 98 #define ELFCLASSNONE 0 99 #define ELFCLASS32 1 100 #define ELFCLASS64 2 101 102 /** 103 * ELF data encoding types 104 */ 105 #define ELFDATANONE 0 106 #define ELFDATA2LSB 1 /* Least significant byte first (little endian) */ 107 #define ELFDATA2MSB 2 /* Most signigicant byte first (big endian) */ 108 109 /** 110 * ELF error return codes 111 */ 112 #define EE_OK 0 /* No error */ 113 #define EE_INVALID 1 /* Invalid ELF image */ 114 #define EE_MEMORY 2 /* Cannot allocate address space */ 115 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 116 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 117 #define EE_IRRECOVERABLE 5 118 119 /** 120 * ELF section types 121 */ 122 #define SHT_NULL 0 123 #define SHT_PROGBITS 1 124 #define SHT_SYMTAB 2 125 #define SHT_STRTAB 3 126 #define SHT_RELA 4 127 #define SHT_HASH 5 128 #define SHT_DYNAMIC 6 129 #define SHT_NOTE 7 130 #define SHT_NOBITS 8 131 #define SHT_REL 9 132 #define SHT_SHLIB 10 133 #define SHT_DYNSYM 11 134 #define SHT_LOOS 0x60000000 135 #define SHT_HIOS 0x6fffffff 136 #define SHT_LOPROC 0x70000000 137 #define SHT_HIPROC 0x7fffffff 138 #define SHT_LOUSER 0x80000000 139 #define SHT_HIUSER 0xffffffff 140 141 /** 142 * ELF section flags 143 */ 144 #define SHF_WRITE 0x1 145 #define SHF_ALLOC 0x2 146 #define SHF_EXECINSTR 0x4 147 #define SHF_TLS 0x400 148 #define SHF_MASKPROC 0xf0000000 149 150 /** Macros for decomposing elf_symbol.st_info into binging and type */ 151 #define ELF_ST_BIND(i) ((i) >> 4) 152 #define ELF_ST_TYPE(i) ((i) & 0x0f) 153 #define ELF_ST_INFO(b, t) (((b) << 4) + ((t) & 0x0f)) 154 155 /** 156 * Symbol binding 157 */ 158 #define STB_LOCAL 0 159 #define STB_GLOBAL 1 160 #define STB_WEAK 2 161 #define STB_LOPROC 13 162 #define STB_HIPROC 15 163 164 /** 165 * Symbol types 166 */ 167 #define STT_NOTYPE 0 168 #define STT_OBJECT 1 169 #define STT_FUNC 2 170 #define STT_SECTION 3 171 #define STT_FILE 4 172 #define STT_LOPROC 13 173 #define STT_HIPROC 15 174 175 /** 176 * Program segment types 177 */ 178 #define PT_NULL 0 179 #define PT_LOAD 1 180 #define PT_DYNAMIC 2 181 #define PT_INTERP 3 182 #define PT_NOTE 4 183 #define PT_SHLIB 5 184 #define PT_PHDR 6 185 #define PT_LOPROC 0x70000000 186 #define PT_HIPROC 0x7fffffff 187 188 /** 189 * Program segment attributes. 190 */ 191 #define PF_X 1 192 #define PF_W 2 193 #define PF_R 4 194 195 /** 196 * ELF data types 197 * 198 * These types are found to be identical in both 32-bit and 64-bit 199 * ELF object file specifications. They are the only types used 200 * in ELF header. 201 */ 202 typedef uint64_t elf_xword; 203 typedef int64_t elf_sxword; 204 typedef uint32_t elf_word; 205 typedef int32_t elf_sword; 206 typedef uint16_t elf_half; 207 208 /** 209 * 32-bit ELF data types. 210 * 211 * These types are specific for 32-bit format. 212 */ 213 typedef uint32_t elf32_addr; 214 typedef uint32_t elf32_off; 215 216 /** 217 * 64-bit ELF data types. 218 * 219 * These types are specific for 64-bit format. 220 */ 221 typedef uint64_t elf64_addr; 222 typedef uint64_t elf64_off; 223 224 /** ELF header */ 225 struct elf32_header { 226 uint8_t e_ident[EI_NIDENT]; 227 elf_half e_type; 228 elf_half e_machine; 229 elf_word e_version; 230 elf32_addr e_entry; 231 elf32_off e_phoff; 232 elf32_off e_shoff; 233 elf_word e_flags; 234 elf_half e_ehsize; 235 elf_half e_phentsize; 236 elf_half e_phnum; 237 elf_half e_shentsize; 238 elf_half e_shnum; 239 elf_half e_shstrndx; 240 }; 241 struct elf64_header { 242 uint8_t e_ident[EI_NIDENT]; 243 elf_half e_type; 244 elf_half e_machine; 245 elf_word e_version; 246 elf64_addr e_entry; 247 elf64_off e_phoff; 248 elf64_off e_shoff; 249 elf_word e_flags; 250 elf_half e_ehsize; 251 elf_half e_phentsize; 252 elf_half e_phnum; 253 elf_half e_shentsize; 254 elf_half e_shnum; 255 elf_half e_shstrndx; 256 }; 257 258 /* 259 * ELF segment header. 260 * Segments headers are also known as program headers. 261 */ 262 struct elf32_segment_header { 263 elf_word p_type; 264 elf32_off p_offset; 265 elf32_addr p_vaddr; 266 elf32_addr p_paddr; 267 elf_word p_filesz; 268 elf_word p_memsz; 269 elf_word p_flags; 270 elf_word p_align; 271 }; 272 struct elf64_segment_header { 273 elf_word p_type; 274 elf_word p_flags; 275 elf64_off p_offset; 276 elf64_addr p_vaddr; 277 elf64_addr p_paddr; 278 elf_xword p_filesz; 279 elf_xword p_memsz; 280 elf_xword p_align; 281 }; 282 283 /* 284 * ELF section header 285 */ 286 struct elf32_section_header { 287 elf_word sh_name; 288 elf_word sh_type; 289 elf_word sh_flags; 290 elf32_addr sh_addr; 291 elf32_off sh_offset; 292 elf_word sh_size; 293 elf_word sh_link; 294 elf_word sh_info; 295 elf_word sh_addralign; 296 elf_word sh_entsize; 297 }; 298 struct elf64_section_header { 299 elf_word sh_name; 300 elf_word sh_type; 301 elf_xword sh_flags; 302 elf64_addr sh_addr; 303 elf64_off sh_offset; 304 elf_xword sh_size; 305 elf_word sh_link; 306 elf_word sh_info; 307 elf_xword sh_addralign; 308 elf_xword sh_entsize; 309 }; 310 311 /* 312 * ELF symbol table entry 313 */ 314 struct elf32_symbol { 315 elf_word st_name; 316 elf32_addr st_value; 317 elf_word st_size; 318 uint8_t st_info; 319 uint8_t st_other; 320 elf_half st_shndx; 321 }; 322 struct elf64_symbol { 323 elf_word st_name; 324 uint8_t st_info; 325 uint8_t st_other; 326 elf_half st_shndx; 327 elf64_addr st_value; 328 elf_xword st_size; 329 }; 330 331 /* 332 * ELF note segment entry 333 */ 334 struct elf32_note { 335 elf_word namesz; 336 elf_word descsz; 337 elf_word type; 338 }; 339 struct elf64_note { 340 elf_xword namesz; 341 elf_xword descsz; 342 elf_xword type; 343 }; 344 345 #ifdef __32_BITS__ 346 typedef struct elf32_header elf_header_t; 347 typedef struct elf32_segment_header elf_segment_header_t; 348 typedef struct elf32_section_header elf_section_header_t; 349 typedef struct elf32_symbol elf_symbol_t; 350 typedef struct elf32_note elf_note_t; 351 #endif 352 #ifdef __64_BITS__ 353 typedef struct elf64_header elf_header_t; 354 typedef struct elf64_segment_header elf_segment_header_t; 355 typedef struct elf64_section_header elf_section_header_t; 356 typedef struct elf64_symbol elf_symbol_t; 357 typedef struct elf64_note elf_note_t; 358 #endif 38 #include <kernel/lib/elf.h> 359 39 360 40 #endif -
uspace/lib/c/include/elf/elf_load.h
r1facf8e re16e2ba4 1 1 /* 2 * Copyright (c) 2006 Sergey Bondari 2 3 * Copyright (c) 2008 Jiri Svoboda 3 4 * All rights reserved. … … 42 43 #include <loader/pcb.h> 43 44 45 /** 46 * ELF error return codes 47 */ 48 #define EE_OK 0 /* No error */ 49 #define EE_INVALID 1 /* Invalid ELF image */ 50 #define EE_MEMORY 2 /* Cannot allocate address space */ 51 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 52 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 53 #define EE_LOADER 5 /* The image is actually a program loader. */ 54 #define EE_IRRECOVERABLE 6 44 55 45 56 typedef enum {
Note:
See TracChangeset
for help on using the changeset viewer.