OpenCore  1.0.4
OpenCore Bootloader
Loading...
Searching...
No Matches
Symbols.c
Go to the documentation of this file.
1
15#include <Uefi.h>
16
18
19#include <Library/BaseLib.h>
20#include <Library/BaseMemoryLib.h>
21#include <Library/BaseOverflowLib.h>
22#include <Library/DebugLib.h>
23#include <Library/OcMachoLib.h>
24
25#include "OcMachoLibInternal.h"
26
27BOOLEAN
29 IN OUT OC_MACHO_CONTEXT *Context,
30 IN CONST MACH_NLIST_ANY *Symbol
31 )
32{
33 ASSERT (Context != NULL);
34
35 return Context->Is32Bit ?
36 MachoSymbolIsDefined32 (&Symbol->Symbol32) :
37 MachoSymbolIsDefined64 (&Symbol->Symbol64);
38}
39
40BOOLEAN
42 IN OUT OC_MACHO_CONTEXT *Context,
43 IN CONST MACH_NLIST_ANY *Symbol
44 )
45{
46 ASSERT (Context != NULL);
47
48 return Context->Is32Bit ?
49 MachoSymbolIsLocalDefined32 (Context, &Symbol->Symbol32) :
50 MachoSymbolIsLocalDefined64 (Context, &Symbol->Symbol64);
51}
52
55 IN OUT OC_MACHO_CONTEXT *Context,
56 IN CONST CHAR8 *Name
57 )
58{
59 ASSERT (Context != NULL);
60
61 return Context->Is32Bit ?
64}
65
68 IN OUT OC_MACHO_CONTEXT *Context,
69 IN UINT32 Index
70 )
71{
72 ASSERT (Context != NULL);
73
74 return Context->Is32Bit ?
75 (MACH_NLIST_ANY *)MachoGetSymbolByIndex32 (Context, Index) :
76 (MACH_NLIST_ANY *)MachoGetSymbolByIndex64 (Context, Index);
77}
78
79CONST CHAR8 *
81 IN OUT OC_MACHO_CONTEXT *Context,
82 IN CONST MACH_NLIST_ANY *Symbol
83 )
84{
85 ASSERT (Context != NULL);
86
87 return Context->Is32Bit ?
88 MachoGetSymbolName32 (Context, &Symbol->Symbol32) :
89 MachoGetSymbolName64 (Context, &Symbol->Symbol64);
90}
91
92CONST CHAR8 *
94 IN OUT OC_MACHO_CONTEXT *Context,
95 IN CONST MACH_NLIST_ANY *Symbol
96 )
97{
98 ASSERT (Context != NULL);
99
100 return Context->Is32Bit ?
101 MachoGetIndirectSymbolName32 (Context, &Symbol->Symbol32) :
102 MachoGetIndirectSymbolName64 (Context, &Symbol->Symbol64);
103}
104
105BOOLEAN
107 IN OUT OC_MACHO_CONTEXT *Context,
108 IN CONST MACH_NLIST_ANY *Symbol
109 )
110{
111 ASSERT (Context != NULL);
112
113 return Context->Is32Bit ?
114 MachoIsSymbolValueInRange32 (Context, &Symbol->Symbol32) :
115 MachoIsSymbolValueInRange64 (Context, &Symbol->Symbol64);
116}
117
118BOOLEAN
120 IN OUT OC_MACHO_CONTEXT *Context,
121 IN UINT64 Address,
122 OUT MACH_NLIST_ANY **Symbol
123 )
124{
125 ASSERT (Context != NULL);
126 if (Context->Is32Bit) {
127 ASSERT (Address < MAX_UINT32);
128 }
129
130 return Context->Is32Bit ?
131 MachoGetSymbolByExternRelocationOffset32 (Context, (UINT32)Address, (MACH_NLIST **)Symbol) :
132 MachoGetSymbolByExternRelocationOffset64 (Context, Address, (MACH_NLIST_64 **)Symbol);
133}
134
135BOOLEAN
137 IN OUT OC_MACHO_CONTEXT *Context,
138 IN UINT64 LinkAddress,
139 IN OUT MACH_NLIST_ANY *Symbol
140 )
141{
142 ASSERT (Context != NULL);
143 if (Context->Is32Bit) {
144 ASSERT (LinkAddress < MAX_UINT32);
145 }
146
147 return Context->Is32Bit ?
148 MachoRelocateSymbol32 (Context, (UINT32)LinkAddress, &Symbol->Symbol32) :
149 MachoRelocateSymbol64 (Context, LinkAddress, &Symbol->Symbol64);
150}
151
152BOOLEAN
154 IN OUT OC_MACHO_CONTEXT *Context,
155 IN CONST MACH_NLIST_ANY *Symbol,
156 OUT UINT32 *FileOffset,
157 OUT UINT32 *MaxSize OPTIONAL
158 )
159{
160 ASSERT (Context != NULL);
161
162 return Context->Is32Bit ?
163 MachoSymbolGetFileOffset32 (Context, &Symbol->Symbol32, FileOffset, MaxSize) :
164 MachoSymbolGetFileOffset64 (Context, &Symbol->Symbol64, FileOffset, MaxSize);
165}
166
167BOOLEAN
169 IN OUT OC_MACHO_CONTEXT *Context,
170 IN UINT64 Address,
171 OUT UINT32 *FileOffset,
172 OUT UINT32 *MaxSize OPTIONAL
173 )
174{
175 ASSERT (Context != NULL);
176 if (Context->Is32Bit) {
177 ASSERT (Address < MAX_UINT32);
178 }
179
180 return Context->Is32Bit ?
181 InternalMachoSymbolGetDirectFileOffset32 (Context, (UINT32)Address, FileOffset, MaxSize) :
182 InternalMachoSymbolGetDirectFileOffset64 (Context, Address, FileOffset, MaxSize);
183}
BOOLEAN MachoRelocateSymbol64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 LinkAddress, IN OUT MACH_NLIST_64 *Symbol)
BOOLEAN MachoRelocateSymbol32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 LinkAddress, IN OUT MACH_NLIST *Symbol)
MACH_NLIST_64 * MachoGetSymbolByIndex64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
BOOLEAN MachoSymbolIsLocalDefined32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
CONST CHAR8 * MachoGetSymbolName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoSymbolIsLocalDefined64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
MACH_NLIST_64 * MachoGetLocalDefinedSymbolByName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
CONST CHAR8 * MachoGetIndirectSymbolName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
MACH_NLIST * MachoGetSymbolByIndex32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
BOOLEAN MachoSymbolGetFileOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
CONST CHAR8 * MachoGetSymbolName64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
CONST CHAR8 * MachoGetIndirectSymbolName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoGetSymbolByExternRelocationOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Address, OUT MACH_NLIST **Symbol)
BOOLEAN MachoIsSymbolValueInRange64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol)
MACH_NLIST * MachoGetLocalDefinedSymbolByName32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
BOOLEAN MachoSymbolIsDefined64(IN CONST MACH_NLIST_64 *Symbol)
BOOLEAN MachoSymbolIsDefined32(IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoIsSymbolValueInRange32(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST *Symbol)
BOOLEAN MachoSymbolGetFileOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_64 *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
BOOLEAN MachoGetSymbolByExternRelocationOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT MACH_NLIST_64 **Symbol)
BOOLEAN InternalMachoSymbolGetDirectFileOffset32(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Address, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
BOOLEAN InternalMachoSymbolGetDirectFileOffset64(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
MACH_NLIST_ANY * MachoGetLocalDefinedSymbolByName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST CHAR8 *Name)
Definition Symbols.c:54
BOOLEAN MachoRelocateSymbol(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 LinkAddress, IN OUT MACH_NLIST_ANY *Symbol)
Definition Symbols.c:136
BOOLEAN MachoSymbolIsLocalDefined(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
Definition Symbols.c:41
CONST CHAR8 * MachoGetIndirectSymbolName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
Definition Symbols.c:93
BOOLEAN MachoGetSymbolByExternRelocationOffset(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT MACH_NLIST_ANY **Symbol)
Definition Symbols.c:119
MACH_NLIST_ANY * MachoGetSymbolByIndex(IN OUT OC_MACHO_CONTEXT *Context, IN UINT32 Index)
Definition Symbols.c:67
BOOLEAN MachoIsSymbolValueInRange(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
Definition Symbols.c:106
CONST CHAR8 * MachoGetSymbolName(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
Definition Symbols.c:80
BOOLEAN MachoSymbolGetDirectFileOffset(IN OUT OC_MACHO_CONTEXT *Context, IN UINT64 Address, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
Definition Symbols.c:168
BOOLEAN MachoSymbolIsDefined(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol)
Definition Symbols.c:28
BOOLEAN MachoSymbolGetFileOffset(IN OUT OC_MACHO_CONTEXT *Context, IN CONST MACH_NLIST_ANY *Symbol, OUT UINT32 *FileOffset, OUT UINT32 *MaxSize OPTIONAL)
Definition Symbols.c:153
#define ASSERT(x)
Definition coder.h:55