ndk-sysroot: Bump after header patch fix
[termux-packages] / disabled-packages / ldc / ldc-druntime.patch.beforehostbuild
CommitLineData
89304c98 1diff --git a/src/core/memory.d b/src/core/memory.d
2index 0a427055..28408cb7 100644
3--- a/src/core/memory.d
4+++ b/runtime/druntime/src/core/memory.d
5@@ -38,7 +38,7 @@
6 *
7 * Notes_to_implementors:
8 * $(UL
9- * $(LI On POSIX systems, the signals SIGUSR1 and SIGUSR2 are reserved
10+ * $(LI On POSIX systems, the signals `SIGRTMIN` and `SIGRTMIN + 1` are reserved
11 * by this module for use in the garbage collector implementation.
12 * Typically, they will be used to stop and resume other threads
13 * when performing a collection, but an implementation may choose
14diff --git a/src/core/thread.d b/src/core/thread.d
15index 64e6dc18..2c08e6db 100644
16--- a/src/core/thread.d
17+++ b/runtime/druntime/src/core/thread.d
18@@ -1922,7 +1922,7 @@ version( CoreDdoc )
19 {
20 /**
21 * Instruct the thread module, when initialized, to use a different set of
22- * signals besides SIGUSR1 and SIGUSR2 for suspension and resumption of threads.
23+ * signals besides `SIGRTMIN` and `SIGRTMIN + 1` for suspension and resumption of threads.
24 * This function should be called at most once, prior to thread_init().
25 * This function is Posix-only.
26 */
27@@ -1980,12 +1980,13 @@ extern (C) void thread_init()
28 {
29 if( suspendSignalNumber == 0 )
30 {
31- suspendSignalNumber = SIGUSR1;
32+ suspendSignalNumber = SIGRTMIN;
33 }
34
35 if( resumeSignalNumber == 0 )
36 {
37- resumeSignalNumber = SIGUSR2;
38+ resumeSignalNumber = SIGRTMIN + 1;
39+ assert(resumeSignalNumber <= SIGRTMAX);
40 }
41
42 int status;
43@@ -3975,6 +3976,10 @@ version( LDC )
44 version( X86 ) version = CheckFiberMigration;
45 version( X86_64 ) version = CheckFiberMigration;
46 }
47+ version( Android )
48+ {
49+ version( ARM ) version = CheckFiberMigration;
50+ }
51 }
52
53 // Fiber support for SjLj style exceptions
54diff --git a/src/rt/sections_android.d b/src/rt/sections_android.d
55index 60ca9a9a..a662887d 100644
56--- a/src/rt/sections_android.d
57+++ b/runtime/druntime/src/rt/sections_android.d
58@@ -62,12 +62,9 @@ private:
59 void initSections()
60 {
61 pthread_key_create(&_tlsKey, null);
62+ _sections.moduleGroup = ModuleGroup(getModuleInfos());
63
64- auto mbeg = cast(immutable ModuleInfo**)&__start_minfo;
65- auto mend = cast(immutable ModuleInfo**)&__stop_minfo;
66- _sections.moduleGroup = ModuleGroup(mbeg[0 .. mend - mbeg]);
67-
68- auto pbeg = cast(void*)&_tls_end;
69+ auto pbeg = cast(void*)&_tlsend;
70 auto pend = cast(void*)&__bss_end__;
71 _sections._gcRanges[0] = pbeg[0 .. pend - pbeg];
72 }
73@@ -167,6 +164,38 @@ ref void[] getTLSBlockAlloc()
74
75 __gshared SectionGroup _sections;
76
77+// This linked list is created by a compiler generated function inserted
78+// into the .ctor list by the compiler.
79+struct ModuleReference
80+{
81+ ModuleReference* next;
82+ ModuleInfo* mod;
83+}
84+
85+extern (C) __gshared immutable(ModuleReference*) _Dmodule_ref; // start of linked list
86+
87+immutable(ModuleInfo*)[] getModuleInfos()
88+out (result)
89+{
90+ foreach(m; result)
91+ assert(m !is null);
92+}
93+body
94+{
95+ size_t len;
96+ immutable(ModuleReference)* mr;
97+
98+ for (mr = _Dmodule_ref; mr; mr = mr.next)
99+ len++;
100+ auto result = (cast(immutable(ModuleInfo)**).malloc(len * size_t.sizeof))[0 .. len];
101+ len = 0;
102+ for (mr = _Dmodule_ref; mr; mr = mr.next)
103+ { result[len] = mr.mod;
104+ len++;
105+ }
106+ return cast(immutable)result;
107+}
108+
109 extern(C)
110 {
111 /* Symbols created by the compiler/linker and inserted into the
112@@ -174,10 +203,8 @@ extern(C)
113 */
114 extern __gshared
115 {
116- void* __start_deh;
117- void* __stop_deh;
118- void* __start_minfo;
119- void* __stop_minfo;
120+ void* _deh_beg;
121+ void* _deh_end;
122
123 size_t __bss_end__;
124