Chameleon

Chameleon Svn Source Tree

Root/branches/cparm/i386/libsaio/modules.h

1/*
2 * Module Loading functionality
3 * Copyright 2009 Evan Lojewski. All rights reserved.
4 *
5 */
6
7/*
8 * Copyright 2012 Cadet-petit Armel <armelcadetpetit@gmail.com>. All rights reserved.
9 *
10 * Cleaned, Added bundles support.
11 *
12 */
13
14// There is a bug with the module system / rebasing / binding
15// that causes static variables to be incorrectly rebased or bound
16// Disable static variables for the moment
17// #define static
18
19#ifndef __BOOT_MODULES_H
20#define __BOOT_MODULES_H
21
22#include <mach-o/loader.h>
23#include <mach-o/nlist.h>
24#include "efi.h"
25
26#define DEFAULT_BUNDLE_SPEC_SIZE 4096
27
28
29extern unsigned long long textAddress;
30extern unsigned long long textSection;
31
32typedef struct symbolList_t
33{
34 char* module;
35char* symbol;
36unsigned int addr;
37struct symbolList_t* next;
38} symbolList_t;
39
40typedef struct callbackList_t
41{
42void(*callback)(void*, void*, void*, void*, void*, void*);
43struct callbackList_t* next;
44} callbackList_t;
45
46typedef struct moduleHook_t
47{
48const char* name;
49callbackList_t* callbacks;
50struct moduleHook_t* next;
51} moduleHook_t;
52
53#define SYMBOLS_BUNDLE "Symbols"
54
55#define SYMBOL_DYLD_STUB_BINDER"dyld_stub_binder"
56#define SYMBOL_LOOKUP_SYMBOL"_lookup_symbol"
57#define STUB_ENTRY_SIZE6
58
59#define SECT_NON_LAZY_SYMBOL_PTR"__nl_symbol_ptr"
60#define SECT_SYMBOL_STUBS"__symbol_stub"
61
62#define SYS_CLASS "SYMS"
63#define SYSLIB_CLASS "SYS_LIB"
64
65/*
66 * Modules Interface
67 * execute_hook
68 *Exexutes a registered hook. All callbaks are
69 *called in the same order that they were added
70 *
71 * register_hook_callback
72 *registers a void function to be executed when a
73 *hook is executed.
74 */
75EFI_STATUS execute_hook(const char* name, void*, void*, void*, void*, void*, void*);
76VOID register_hook_callback(const char* name, void(*callback)(void*, void*, void*, void*, void*, void*));
77
78void rebase_location(UInt32* location, char* base, int type);
79void bind_location(UInt32* location, char* value, UInt32 addend, int type);
80void rebase_macho(void* base, char* rebase_stream, UInt32 size);
81EFI_STATUS bind_macho(char* module, void* base, char* bind_stream, UInt32 size);
82
83long long add_symbol(char* module,char* symbol, long long addr, char is64);
84
85unsigned int parse_mach(char *module, void* binary, long long(*symbol_handler)(char*, char*, long long, char));
86
87unsigned int handle_symtable(char *module, UInt32 base,
88 struct symtab_command* symtabCommand,
89 long long(*symbol_handler)(char*, char*, long long, char),
90 char is64);
91
92unsigned int lookup_all_symbols(const char* module, const char* name);
93
94EFI_STATUS replace_function(const char* module, const char* symbol, void* newAddress);
95EFI_STATUS replace_system_function(const char* symbol, void* newAddress);
96EFI_STATUS replace_function_any(const char* symbol, void* newAddress);
97
98extern unsigned int (*lookup_symbol)(const char*, int(*strcmp_callback)(const char*, const char*));
99
100
101long InitBundleSupport(void);
102long FileLoadBundles(char *dirSpec, long plugin);
103long LoadBundlePList(char *dirSpec, char *name, long bundleType);
104long LoadMatchedBundles(void);
105long MatchBundlesLibraries(void);
106long LoadBundles( char * dirSpec );
107void * GetBundleDict( char * bundle_id );
108void * GetBundlePersonality( char * bundle_id );
109char * GetBundlePath( char * bundle_id );
110
111#endif /* __BOOT_MODULES_H */

Archive Download this file

Revision: 2057