1
- From 190cae31fc322a34ec97738854148baaaf4f4934 Mon Sep 17 00:00:00 2001
1
+ From c3b39e03d05479e743517e390a56820e32ba4af4 Mon Sep 17 00:00:00 2001
2
2
3
3
Date: Sun, 6 Jun 2021 16:37:54 +1000
4
4
Subject: [PATCH] targets: add aero target port
15
15
sysdeps/aero/generic/entry.cc | 32 +++
16
16
sysdeps/aero/generic/filesystem.cc | 180 ++++++++++++++++
17
17
sysdeps/aero/generic/sockets.cc | 0
18
- sysdeps/aero/generic/thread.cc | 42 ++++
18
+ sysdeps/aero/generic/thread.cc | 45 ++++
19
19
sysdeps/aero/generic/thread_entry.S | 8 +
20
20
sysdeps/aero/include/abi-bits/abi.h | 1 +
21
21
sysdeps/aero/include/abi-bits/auxv.h | 1 +
46
46
sysdeps/aero/include/mlibc/thread-entry.hpp | 10 +
47
47
sysdeps/aero/meson.build | 60 ++++++
48
48
sysdeps/dripos/generic/generic.cpp | 3 +
49
- 41 files changed, 767 insertions(+), 7 deletions(-)
49
+ 41 files changed, 770 insertions(+), 7 deletions(-)
50
50
create mode 100644 abis/aero/auxv.h
51
51
create mode 100644 sysdeps/aero/crt-x86_64/crt0.S
52
52
create mode 100644 sysdeps/aero/generic/aero.cc
@@ -114,10 +114,10 @@ index 0000000..59d4d4d
114
114
+
115
115
+ #endif // _ABIBITS_AUXV_H
116
116
diff --git a/meson.build b/meson.build
117
- index 55e9070..8b3f4ba 100644
117
+ index 4027c99..b363aa3 100644
118
118
--- a/meson.build
119
119
+++ b/meson.build
120
- @@ -94 ,6 +94 ,10 @@ if host_machine.system() == 'linux'
120
+ @@ -98 ,6 +98 ,10 @@ if host_machine.system() == 'linux'
121
121
rtdl_include_dirs += include_directories('sysdeps/linux/include')
122
122
libc_include_dirs += include_directories('sysdeps/linux/include')
123
123
subdir('sysdeps/linux')
@@ -143,10 +143,10 @@ index 347c659..8e97b26 100644
143
143
sigemptyset(&set);
144
144
sigaddset(&set, SIGABRT);
145
145
diff --git a/options/rtdl/generic/main.cpp b/options/rtdl/generic/main.cpp
146
- index 1521779..5d145bf 100644
146
+ index bed8e11..5f5d22d 100644
147
147
--- a/options/rtdl/generic/main.cpp
148
148
+++ b/options/rtdl/generic/main.cpp
149
- @@ -118 ,9 +118 ,10 @@ extern "C" [[gnu::alias("dl_debug_state"), gnu::visibility("default")]] void _dl
149
+ @@ -119 ,9 +119 ,10 @@ extern "C" [[gnu::alias("dl_debug_state"), gnu::visibility("default")]] void _dl
150
150
[[ gnu::visibility("default") ]] DebugInterface *_dl_debug_addr = &globalDebugInterface;
151
151
152
152
extern "C" void *interpreterMain(uintptr_t *entry_stack) {
@@ -159,7 +159,7 @@ index 1521779..5d145bf 100644
159
159
runtimeTlsMap.initialize();
160
160
161
161
void *phdr_pointer = 0;
162
- @@ -134 ,11 +135 ,9 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
162
+ @@ -135 ,11 +136 ,9 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
163
163
#ifndef MLIBC_STATIC_BUILD
164
164
auto ldso_base = reinterpret_cast<uintptr_t>(_DYNAMIC)
165
165
- reinterpret_cast<uintptr_t>(_GLOBAL_OFFSET_TABLE_[0]);
@@ -171,15 +171,15 @@ index 1521779..5d145bf 100644
171
171
172
172
// on aarch64 these lines corrupt unrelated GOT entries (entries for ld.so functions)
173
173
#ifdef __x86_64__
174
- @@ -211 ,7 +210 ,6 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
174
+ @@ -212 ,7 +211 ,6 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
175
175
__ensure(phdr_pointer);
176
176
__ensure(entry_pointer);
177
177
178
178
- if(logStartup)
179
179
mlibc::infoLogger() << "ldso: Executable PHDRs are at " << phdr_pointer
180
180
<< frg::endlog;
181
181
182
- @@ -267 ,8 +265 ,7 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
182
+ @@ -268 ,8 +266 ,7 @@ extern "C" void *interpreterMain(uintptr_t *entry_stack) {
183
183
globalDebugInterface.state = 0;
184
184
dl_debug_state();
185
185
@@ -205,7 +205,7 @@ index 0000000..190b5a0
205
205
+ .size _start, . - _start
206
206
diff --git a/sysdeps/aero/generic/aero.cc b/sysdeps/aero/generic/aero.cc
207
207
new file mode 100644
208
- index 0000000..4a0d95e
208
+ index 0000000..7980cbe
209
209
--- /dev/null
210
210
+++ b/sysdeps/aero/generic/aero.cc
211
211
@@ -0,0 +1,222 @@
@@ -227,7 +227,7 @@ index 0000000..4a0d95e
227
227
+ #define ARCH_GET_GS 0x1004
228
228
+
229
229
+ struct Slice {
230
- + void* ptr;
230
+ + void * ptr;
231
231
+ uint64_t len;
232
232
+ };
233
233
+
@@ -236,7 +236,7 @@ index 0000000..4a0d95e
236
236
+ return frg::vector<Slice, MemoryAllocator> { getAllocator() };
237
237
+ }
238
238
+
239
- + auto len = 0;
239
+ + size_t len = 0;
240
240
+
241
241
+ while (arg[len] != nullptr) {
242
242
+ len += 1;
@@ -259,7 +259,7 @@ index 0000000..4a0d95e
259
259
+ return syscall(SYS_GETTID);
260
260
+ }
261
261
+
262
- + int sys_futex_wait(int *pointer, int expected) UNIMPLEMENTED("sys_futex_wait")
262
+ + int sys_futex_wait(int *pointer, int expected, const struct timespec *time ) UNIMPLEMENTED("sys_futex_wait")
263
263
+ int sys_futex_wake(int *pointer) UNIMPLEMENTED("sys_futex_wake")
264
264
+
265
265
+ int sys_tcb_set(void* pointer) {
@@ -414,10 +414,10 @@ index 0000000..4a0d95e
414
414
+ path_ptr,
415
415
+ path_len,
416
416
+
417
- + argv_slice.data(),
418
- + argv_slice.size(),
419
- +
420
- + envv_slice.data(),
417
+ + argv_slice.data(),
418
+ + argv_slice.size(),
419
+ +
420
+ + envv_slice.data(),
421
421
+ envv_slice.size()
422
422
+ );
423
423
+
@@ -660,22 +660,25 @@ new file mode 100644
660
660
index 0000000..e69de29
661
661
diff --git a/sysdeps/aero/generic/thread.cc b/sysdeps/aero/generic/thread.cc
662
662
new file mode 100644
663
- index 0000000..eeedeb7
663
+ index 0000000..41a47b2
664
664
--- /dev/null
665
665
+++ b/sysdeps/aero/generic/thread.cc
666
- @@ -0,0 +1,42 @@
666
+ @@ -0,0 +1,45 @@
667
667
+ #include <mlibc/thread-entry.hpp>
668
668
+ #include <mlibc/all-sysdeps.hpp>
669
+ +
669
670
+ #include <mlibc/tcb.hpp>
670
671
+ #include <bits/ensure.h>
672
+ +
671
673
+ #include <sys/mman.h>
674
+ +
672
675
+ #include <stdint.h>
673
676
+ #include <stddef.h>
674
677
+
675
678
+ extern "C" void __mlibc_enter_thread(void *entry, void *user_arg, Tcb *tcb) {
676
679
+ // Wait until our parent sets up the TID.
677
680
+ while(!__atomic_load_n(&tcb->tid, __ATOMIC_RELAXED))
678
- + mlibc::sys_futex_wait(&tcb->tid, 0);
681
+ + mlibc::sys_futex_wait(&tcb->tid, 0, nullptr );
679
682
+
680
683
+ if(mlibc::sys_tcb_set(tcb))
681
684
+ __ensure(!"sys_tcb_set() failed");
@@ -1161,7 +1164,7 @@ index 0000000..d3dbb22
1161
1164
+ )
1162
1165
+ endif
1163
1166
diff --git a/sysdeps/dripos/generic/generic.cpp b/sysdeps/dripos/generic/generic.cpp
1164
- index 124b860..7520c15 100644
1167
+ index 0a85169..48bfc57 100644
1165
1168
--- a/sysdeps/dripos/generic/generic.cpp
1166
1169
+++ b/sysdeps/dripos/generic/generic.cpp
1167
1170
@@ -7,6 +7,9 @@
0 commit comments