Changeset 17341d4 in mainline for uspace/lib/c/include
- Timestamp:
- 2016-04-20T17:25:48Z (10 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- dc0d8b52
- Parents:
- 13dfa3f9
- Location:
- uspace/lib/c/include
- Files:
-
- 3 added
- 5 edited
-
elf/elf_load.h (modified) (3 diffs)
-
elf/elf_mod.h (added)
-
loader/pcb.h (modified) (1 diff)
-
rtld/module.h (modified) (1 diff)
-
rtld/rtld.h (modified) (1 diff)
-
rtld/rtld_debug.h (modified) (1 diff)
-
types/rtld/module.h (added)
-
types/rtld/rtld.h (added)
Legend:
- Unmodified
- Added
- Removed
-
uspace/lib/c/include/elf/elf_load.h
r13dfa3f9 r17341d4 1 1 /* 2 * Copyright (c) 2006 Sergey Bondari 3 * Copyright (c) 2008 Jiri Svoboda 2 * Copyright (c) 2016 Jiri Svoboda 4 3 * All rights reserved. 5 4 * … … 32 31 */ 33 32 /** @file 34 * @brief ELF loader structures and public functions.33 * @brief 35 34 */ 36 35 … … 38 37 #define ELF_LOAD_H_ 39 38 40 #include <elf/elf.h> 41 #include <sys/types.h> 42 #include <loader/pcb.h> 39 #include <elf/elf_mod.h> 40 #include <rtld/rtld.h> 43 41 44 /** 45 * ELF error return codes 46 */ 47 #define EE_OK 0 /* No error */ 48 #define EE_INVALID 1 /* Invalid ELF image */ 49 #define EE_MEMORY 2 /* Cannot allocate address space */ 50 #define EE_INCOMPATIBLE 3 /* ELF image is not compatible with current architecture */ 51 #define EE_UNSUPPORTED 4 /* Non-supported ELF (e.g. dynamic ELFs) */ 52 #define EE_LOADER 5 /* The image is actually a program loader. */ 53 #define EE_IRRECOVERABLE 6 54 55 typedef enum { 56 /** Leave all segments in RW access mode. */ 57 ELDF_RW = 1 58 } eld_flags_t; 59 60 /** 61 * Some data extracted from the headers are stored here 62 */ 42 /** Information on loaded ELF program */ 63 43 typedef struct { 64 /** Entry point */ 65 entry_point_t entry; 66 67 /** ELF interpreter name or NULL if statically-linked */ 68 const char *interp; 69 70 /** Pointer to the dynamic section */ 71 void *dynamic; 44 elf_finfo_t finfo; 45 rtld_t *env; 72 46 } elf_info_t; 73 47 74 /** 75 * Holds information about an ELF binary being loaded. 76 */ 77 typedef struct { 78 /** Filedescriptor of the file from which we are loading */ 79 int fd; 80 81 /** Difference between run-time addresses and link-time addresses */ 82 uintptr_t bias; 83 84 /** Flags passed to the ELF loader. */ 85 eld_flags_t flags; 86 87 /** A copy of the ELF file header */ 88 elf_header_t *header; 89 90 /** Store extracted info here */ 91 elf_info_t *info; 92 } elf_ld_t; 93 94 extern const char *elf_error(unsigned int); 95 extern int elf_load_file(const char *, size_t, eld_flags_t, elf_info_t *); 96 extern void elf_create_pcb(elf_info_t *, pcb_t *); 48 extern int elf_load(const char *, elf_info_t *); 49 extern void elf_set_pcb(elf_info_t *, pcb_t *); 97 50 98 51 #endif -
uspace/lib/c/include/loader/pcb.h
r13dfa3f9 r17341d4 69 69 /** Pointer to ELF dynamic section of the program. */ 70 70 void *dynamic; 71 /** Pointer to dynamic linker state structure (r untime_env_t). */71 /** Pointer to dynamic linker state structure (rtld_t). */ 72 72 void *rtld_runtime; 73 73 } pcb_t; -
uspace/lib/c/include/rtld/module.h
r13dfa3f9 r17341d4 39 39 #include <rtld/dynamic.h> 40 40 #include <adt/list.h> 41 #include <types/rtld/module.h> 42 #include <types/rtld/rtld.h> 41 43 42 typedef struct module { 43 dyn_info_t dyn; 44 size_t bias; 44 extern void module_process_relocs(module_t *); 45 extern module_t *module_find(rtld_t *, const char *); 46 extern module_t *module_load(rtld_t *, const char *); 47 extern void module_load_deps(module_t *); 45 48 46 /** Array of pointers to directly dependent modules */ 47 struct module **deps; 48 /** Number of fields in deps */ 49 size_t n_deps; 50 51 /** True iff relocations have already been processed in this module. */ 52 bool relocated; 53 54 /** Link to list of all modules in runtime environment */ 55 link_t modules_link; 56 57 /** Link to BFS queue. Only used when doing a BFS of the module graph */ 58 link_t queue_link; 59 /** Tag for modules already processed during a BFS */ 60 bool bfs_tag; 61 } module_t; 62 63 void module_process_relocs(module_t *m); 64 module_t *module_find(const char *name); 65 module_t *module_load(const char *name); 66 void module_load_deps(module_t *m); 67 68 void modules_process_relocs(module_t *start); 69 void modules_untag(void); 49 extern void modules_process_relocs(rtld_t *, module_t *); 50 extern void modules_untag(rtld_t *); 70 51 71 52 #endif -
uspace/lib/c/include/rtld/rtld.h
r13dfa3f9 r17341d4 36 36 #define LIBC_RTLD_H_ 37 37 38 #include <adt/list.h> 39 #include <elf/elf_mod.h> 38 40 #include <sys/types.h> 39 #include <adt/list.h>40 41 41 42 #include <rtld/dynamic.h> 42 #include < rtld/module.h>43 #include <types/rtld/rtld.h> 43 44 44 typedef struct { 45 elf_dyn_t *rtld_dynamic; 46 module_t rtld; 47 48 module_t *program; 49 50 /** List of all loaded modules including rtld and the program */ 51 list_t modules; 52 53 /** Temporary hack to place each module at different address. */ 54 uintptr_t next_bias; 55 } runtime_env_t; 56 57 extern runtime_env_t *runtime_env; 45 extern rtld_t *runtime_env; 58 46 59 47 extern void rtld_init_static(void); 48 extern int rtld_prog_process(elf_finfo_t *, rtld_t **); 60 49 61 50 #endif -
uspace/lib/c/include/rtld/rtld_debug.h
r13dfa3f9 r17341d4 36 36 #define LIBC_RTLD_RTLD_DEBUG_H_ 37 37 38 #include <stdio.h> 39 38 40 /* Define to enable debugging mode. */ 39 41 #undef RTLD_DEBUG
Note:
See TracChangeset
for help on using the changeset viewer.
