mirror of
https://github.com/decompals/wibo.git
synced 2025-12-17 00:47:18 +00:00
Initial macOS support (x86_64 with Rosetta 2)
This commit is contained in:
295
src/setup.S
295
src/setup.S
@@ -1,18 +1,25 @@
|
||||
#include "macros.S"
|
||||
#ifndef __APPLE__
|
||||
.section .note.GNU-stack, "", @progbits
|
||||
#endif
|
||||
.text
|
||||
|
||||
#ifdef __x86_64__
|
||||
#ifdef __APPLE__
|
||||
.zerofill RESV32,RESV32,_wibo_reserve,0x7E000000-0x1000
|
||||
.no_dead_strip _wibo_reserve
|
||||
#endif
|
||||
|
||||
# int x86_64_thread_setup(int entry_number, void *teb)
|
||||
.globl x86_64_thread_setup
|
||||
.type x86_64_thread_setup, @function
|
||||
x86_64_thread_setup:
|
||||
#if defined(__x86_64__) && !defined(__APPLE__)
|
||||
|
||||
# int tebThreadSetup(int entryNumber, TEB *teb)
|
||||
.globl tebThreadSetup
|
||||
.type tebThreadSetup, @function
|
||||
tebThreadSetup:
|
||||
push rbx # save rbx
|
||||
mov r8, rsp # save host stack
|
||||
rdfsbase r9 # read host FS base
|
||||
mov rdx, qword ptr [rsi+TEB_SP] # fetch guest stack
|
||||
LJMP32 # far jump into 32-bit code
|
||||
LJMP32 rsi # far jump into 32-bit code
|
||||
mov ax, 0x2b # user data segment (Linux)
|
||||
mov ds, ax # setup data segment
|
||||
mov es, ax # setup extra segment
|
||||
@@ -38,21 +45,23 @@ x86_64_thread_setup:
|
||||
mov eax, -1 # return -1
|
||||
2:
|
||||
add esp, 0x10 # cleanup stack
|
||||
LJMP64 # far jump into 64-bit code
|
||||
LJMP64 esi # far jump into 64-bit code
|
||||
cdqe # sign-extend eax to rax
|
||||
mov rsp, r8 # switch to host stack
|
||||
wrfsbase r9 # restore host FS base
|
||||
pop rbx # restore rbx
|
||||
ret
|
||||
.size x86_64_thread_setup, .-x86_64_thread_setup
|
||||
.size tebThreadSetup, .-tebThreadSetup
|
||||
|
||||
#endif // __x86_64__
|
||||
|
||||
.altmacro
|
||||
.code32
|
||||
|
||||
.macro stubThunkX number
|
||||
#ifdef __x86_64__
|
||||
#if defined(__APPLE__)
|
||||
.globl __Z9stubThunkILm\()\number\()EEvv
|
||||
__Z9stubThunkILm\()\number\()EEvv:
|
||||
#elif defined(__x86_64__)
|
||||
.globl _Z9stubThunkILm\()\number\()EEvv
|
||||
.type _Z9stubThunkILm\()\number\()EEvv, @function
|
||||
_Z9stubThunkILm\()\number\()EEvv:
|
||||
@@ -64,11 +73,267 @@ _Z9stubThunkILj\()\number\()EEvv:
|
||||
pop eax
|
||||
push \number
|
||||
push eax
|
||||
#ifdef __APPLE__
|
||||
jmp _thunk_entry_stubBase
|
||||
#else
|
||||
jmp thunk_entry_stubBase
|
||||
#endif
|
||||
.endm
|
||||
|
||||
.set i, 0
|
||||
.rept 256
|
||||
stubThunkX %i
|
||||
.set i, i+1
|
||||
.endr
|
||||
stubThunkX 0
|
||||
stubThunkX 1
|
||||
stubThunkX 2
|
||||
stubThunkX 3
|
||||
stubThunkX 4
|
||||
stubThunkX 5
|
||||
stubThunkX 6
|
||||
stubThunkX 7
|
||||
stubThunkX 8
|
||||
stubThunkX 9
|
||||
stubThunkX 10
|
||||
stubThunkX 11
|
||||
stubThunkX 12
|
||||
stubThunkX 13
|
||||
stubThunkX 14
|
||||
stubThunkX 15
|
||||
stubThunkX 16
|
||||
stubThunkX 17
|
||||
stubThunkX 18
|
||||
stubThunkX 19
|
||||
stubThunkX 20
|
||||
stubThunkX 21
|
||||
stubThunkX 22
|
||||
stubThunkX 23
|
||||
stubThunkX 24
|
||||
stubThunkX 25
|
||||
stubThunkX 26
|
||||
stubThunkX 27
|
||||
stubThunkX 28
|
||||
stubThunkX 29
|
||||
stubThunkX 30
|
||||
stubThunkX 31
|
||||
stubThunkX 32
|
||||
stubThunkX 33
|
||||
stubThunkX 34
|
||||
stubThunkX 35
|
||||
stubThunkX 36
|
||||
stubThunkX 37
|
||||
stubThunkX 38
|
||||
stubThunkX 39
|
||||
stubThunkX 40
|
||||
stubThunkX 41
|
||||
stubThunkX 42
|
||||
stubThunkX 43
|
||||
stubThunkX 44
|
||||
stubThunkX 45
|
||||
stubThunkX 46
|
||||
stubThunkX 47
|
||||
stubThunkX 48
|
||||
stubThunkX 49
|
||||
stubThunkX 50
|
||||
stubThunkX 51
|
||||
stubThunkX 52
|
||||
stubThunkX 53
|
||||
stubThunkX 54
|
||||
stubThunkX 55
|
||||
stubThunkX 56
|
||||
stubThunkX 57
|
||||
stubThunkX 58
|
||||
stubThunkX 59
|
||||
stubThunkX 60
|
||||
stubThunkX 61
|
||||
stubThunkX 62
|
||||
stubThunkX 63
|
||||
stubThunkX 64
|
||||
stubThunkX 65
|
||||
stubThunkX 66
|
||||
stubThunkX 67
|
||||
stubThunkX 68
|
||||
stubThunkX 69
|
||||
stubThunkX 70
|
||||
stubThunkX 71
|
||||
stubThunkX 72
|
||||
stubThunkX 73
|
||||
stubThunkX 74
|
||||
stubThunkX 75
|
||||
stubThunkX 76
|
||||
stubThunkX 77
|
||||
stubThunkX 78
|
||||
stubThunkX 79
|
||||
stubThunkX 80
|
||||
stubThunkX 81
|
||||
stubThunkX 82
|
||||
stubThunkX 83
|
||||
stubThunkX 84
|
||||
stubThunkX 85
|
||||
stubThunkX 86
|
||||
stubThunkX 87
|
||||
stubThunkX 88
|
||||
stubThunkX 89
|
||||
stubThunkX 90
|
||||
stubThunkX 91
|
||||
stubThunkX 92
|
||||
stubThunkX 93
|
||||
stubThunkX 94
|
||||
stubThunkX 95
|
||||
stubThunkX 96
|
||||
stubThunkX 97
|
||||
stubThunkX 98
|
||||
stubThunkX 99
|
||||
stubThunkX 100
|
||||
stubThunkX 101
|
||||
stubThunkX 102
|
||||
stubThunkX 103
|
||||
stubThunkX 104
|
||||
stubThunkX 105
|
||||
stubThunkX 106
|
||||
stubThunkX 107
|
||||
stubThunkX 108
|
||||
stubThunkX 109
|
||||
stubThunkX 110
|
||||
stubThunkX 111
|
||||
stubThunkX 112
|
||||
stubThunkX 113
|
||||
stubThunkX 114
|
||||
stubThunkX 115
|
||||
stubThunkX 116
|
||||
stubThunkX 117
|
||||
stubThunkX 118
|
||||
stubThunkX 119
|
||||
stubThunkX 120
|
||||
stubThunkX 121
|
||||
stubThunkX 122
|
||||
stubThunkX 123
|
||||
stubThunkX 124
|
||||
stubThunkX 125
|
||||
stubThunkX 126
|
||||
stubThunkX 127
|
||||
stubThunkX 128
|
||||
stubThunkX 129
|
||||
stubThunkX 130
|
||||
stubThunkX 131
|
||||
stubThunkX 132
|
||||
stubThunkX 133
|
||||
stubThunkX 134
|
||||
stubThunkX 135
|
||||
stubThunkX 136
|
||||
stubThunkX 137
|
||||
stubThunkX 138
|
||||
stubThunkX 139
|
||||
stubThunkX 140
|
||||
stubThunkX 141
|
||||
stubThunkX 142
|
||||
stubThunkX 143
|
||||
stubThunkX 144
|
||||
stubThunkX 145
|
||||
stubThunkX 146
|
||||
stubThunkX 147
|
||||
stubThunkX 148
|
||||
stubThunkX 149
|
||||
stubThunkX 150
|
||||
stubThunkX 151
|
||||
stubThunkX 152
|
||||
stubThunkX 153
|
||||
stubThunkX 154
|
||||
stubThunkX 155
|
||||
stubThunkX 156
|
||||
stubThunkX 157
|
||||
stubThunkX 158
|
||||
stubThunkX 159
|
||||
stubThunkX 160
|
||||
stubThunkX 161
|
||||
stubThunkX 162
|
||||
stubThunkX 163
|
||||
stubThunkX 164
|
||||
stubThunkX 165
|
||||
stubThunkX 166
|
||||
stubThunkX 167
|
||||
stubThunkX 168
|
||||
stubThunkX 169
|
||||
stubThunkX 170
|
||||
stubThunkX 171
|
||||
stubThunkX 172
|
||||
stubThunkX 173
|
||||
stubThunkX 174
|
||||
stubThunkX 175
|
||||
stubThunkX 176
|
||||
stubThunkX 177
|
||||
stubThunkX 178
|
||||
stubThunkX 179
|
||||
stubThunkX 180
|
||||
stubThunkX 181
|
||||
stubThunkX 182
|
||||
stubThunkX 183
|
||||
stubThunkX 184
|
||||
stubThunkX 185
|
||||
stubThunkX 186
|
||||
stubThunkX 187
|
||||
stubThunkX 188
|
||||
stubThunkX 189
|
||||
stubThunkX 190
|
||||
stubThunkX 191
|
||||
stubThunkX 192
|
||||
stubThunkX 193
|
||||
stubThunkX 194
|
||||
stubThunkX 195
|
||||
stubThunkX 196
|
||||
stubThunkX 197
|
||||
stubThunkX 198
|
||||
stubThunkX 199
|
||||
stubThunkX 200
|
||||
stubThunkX 201
|
||||
stubThunkX 202
|
||||
stubThunkX 203
|
||||
stubThunkX 204
|
||||
stubThunkX 205
|
||||
stubThunkX 206
|
||||
stubThunkX 207
|
||||
stubThunkX 208
|
||||
stubThunkX 209
|
||||
stubThunkX 210
|
||||
stubThunkX 211
|
||||
stubThunkX 212
|
||||
stubThunkX 213
|
||||
stubThunkX 214
|
||||
stubThunkX 215
|
||||
stubThunkX 216
|
||||
stubThunkX 217
|
||||
stubThunkX 218
|
||||
stubThunkX 219
|
||||
stubThunkX 220
|
||||
stubThunkX 221
|
||||
stubThunkX 222
|
||||
stubThunkX 223
|
||||
stubThunkX 224
|
||||
stubThunkX 225
|
||||
stubThunkX 226
|
||||
stubThunkX 227
|
||||
stubThunkX 228
|
||||
stubThunkX 229
|
||||
stubThunkX 230
|
||||
stubThunkX 231
|
||||
stubThunkX 232
|
||||
stubThunkX 233
|
||||
stubThunkX 234
|
||||
stubThunkX 235
|
||||
stubThunkX 236
|
||||
stubThunkX 237
|
||||
stubThunkX 238
|
||||
stubThunkX 239
|
||||
stubThunkX 240
|
||||
stubThunkX 241
|
||||
stubThunkX 242
|
||||
stubThunkX 243
|
||||
stubThunkX 244
|
||||
stubThunkX 245
|
||||
stubThunkX 246
|
||||
stubThunkX 247
|
||||
stubThunkX 248
|
||||
stubThunkX 249
|
||||
stubThunkX 250
|
||||
stubThunkX 251
|
||||
stubThunkX 252
|
||||
stubThunkX 253
|
||||
stubThunkX 254
|
||||
stubThunkX 255
|
||||
stubThunkX 256
|
||||
|
||||
Reference in New Issue
Block a user