Skip to content
This repository was archived by the owner on Oct 12, 2022. It is now read-only.

Commit b4e8754

Browse files
authored
Merge pull request #2100 from rracariu/master
Add rest of core.*, rt.* and gc.os of uClibc definitions. merged-on-behalf-of: Iain Buclaw <ibuclaw@gdcproject.org>
2 parents 756f0e9 + 9ad0a4a commit b4e8754

File tree

7 files changed

+41
-4
lines changed

7 files changed

+41
-4
lines changed

src/core/runtime.d

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -594,6 +594,8 @@ extern (C) UnitTestResult runModuleUnitTests()
594594
import core.sys.windows.stacktrace;
595595
else version( Solaris )
596596
import core.sys.solaris.execinfo;
597+
else version( CRuntime_UClibc )
598+
import core.sys.linux.execinfo;
597599

598600
static if( __traits( compiles, backtrace ) )
599601
{
@@ -713,6 +715,8 @@ Throwable.TraceInfo defaultTraceHandler( void* ptr = null )
713715
import core.sys.windows.stacktrace;
714716
else version( Solaris )
715717
import core.sys.solaris.execinfo;
718+
else version( CRuntime_UClibc )
719+
import core.sys.linux.execinfo;
716720

717721
// avoid recursive GC calls in finalizer, trace handlers should be made @nogc instead
718722
import core.memory : gc_inFinalizer;

src/core/thread.d

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3205,6 +3205,7 @@ extern (C) @nogc nothrow
32053205
version (Solaris) int thr_stksegment(stack_t* stk);
32063206
version (CRuntime_Bionic) int pthread_getattr_np(pthread_t thid, pthread_attr_t* attr);
32073207
version (CRuntime_Musl) int pthread_getattr_np(pthread_t, pthread_attr_t*);
3208+
version (CRuntime_UClibc) int pthread_getattr_np(pthread_t thread, pthread_attr_t* attr);
32083209
}
32093210

32103211

@@ -3312,6 +3313,16 @@ private void* getStackBottom() nothrow @nogc
33123313
pthread_attr_destroy(&attr);
33133314
return addr + size;
33143315
}
3316+
else version (CRuntime_UClibc)
3317+
{
3318+
pthread_attr_t attr;
3319+
void* addr; size_t size;
3320+
3321+
pthread_getattr_np(pthread_self(), &attr);
3322+
pthread_attr_getstack(&attr, &addr, &size);
3323+
pthread_attr_destroy(&attr);
3324+
return addr + size;
3325+
}
33153326
else
33163327
static assert(false, "Platform not supported.");
33173328
}
@@ -4531,6 +4542,7 @@ private:
45314542
version (DragonFlyBSD) import core.sys.dragonflybsd.sys.mman : MAP_ANON;
45324543
version (CRuntime_Glibc) import core.sys.linux.sys.mman : MAP_ANON;
45334544
version (Darwin) import core.sys.darwin.sys.mman : MAP_ANON;
4545+
version (CRuntime_UClibc) import core.sys.linux.sys.mman : MAP_ANON;
45344546

45354547
static if( __traits( compiles, mmap ) )
45364548
{

src/gc/os.d

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ else version (Posix)
4444
version (NetBSD) import core.sys.netbsd.sys.mman : MAP_ANON;
4545
version (CRuntime_Glibc) import core.sys.linux.sys.mman : MAP_ANON;
4646
version (Darwin) import core.sys.darwin.sys.mman : MAP_ANON;
47+
version (CRuntime_UClibc) import core.sys.linux.sys.mman : MAP_ANON;
4748
import core.stdc.stdlib;
4849

4950
//version = GC_Use_Alloc_MMap;

src/rt/backtrace/dwarf.d

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@
1212

1313
module rt.backtrace.dwarf;
1414

15-
version(CRuntime_Glibc) version = glibc_or_bsdlibc;
16-
else version(FreeBSD) version = glibc_or_bsdlibc;
17-
else version(DragonFlyBSD) version = glibc_or_bsdlibc;
15+
version(CRuntime_Glibc) version = has_backtrace;
16+
else version(FreeBSD) version = has_backtrace;
17+
else version(DragonFlyBSD) version = has_backtrace;
18+
else version(CRuntime_UClibc) version = has_backtrace;
1819

19-
version(glibc_or_bsdlibc):
20+
version(has_backtrace):
2021

2122
import rt.util.container.array;
2223
import rt.backtrace.elf;

src/rt/qsort.d

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,21 @@ else version (Darwin)
8787
return a;
8888
}
8989
}
90+
else version (CRuntime_UClibc)
91+
{
92+
alias extern (C) int function(scope const void *, scope const void *, scope void *) __compar_d_fn_t;
93+
extern (C) void qsort_r(scope void *base, size_t nmemb, size_t size, __compar_d_fn_t cmp, scope void *arg);
94+
95+
extern (C) void[] _adSort(return scope void[] a, TypeInfo ti)
96+
{
97+
extern (C) int cmp(scope const void* p1, scope const void* p2, scope void* ti)
98+
{
99+
return (cast(TypeInfo)ti).compare(p1, p2);
100+
}
101+
qsort_r(a.ptr, a.length, ti.tsize, &cmp, cast(void*)ti);
102+
return a;
103+
}
104+
}
90105
else
91106
{
92107
private TypeInfo tiglobal;

src/rt/sections.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ else version (CRuntime_Microsoft)
4646
public import rt.sections_win64;
4747
else version (CRuntime_Bionic)
4848
public import rt.sections_android;
49+
else version (CRuntime_UClibc)
50+
public import rt.sections_elf_shared;
4951
else
5052
static assert(0, "unimplemented");
5153

src/rt/sections_elf_shared.d

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ else version (CRuntime_Musl) enum SharedELF = true;
1515
else version (FreeBSD) enum SharedELF = true;
1616
else version (NetBSD) enum SharedELF = true;
1717
else version (DragonFlyBSD) enum SharedELF = true;
18+
else version (CRuntime_UClibc) enum SharedELF = true;
1819
else enum SharedELF = false;
1920
static if (SharedELF):
2021

@@ -106,6 +107,7 @@ private:
106107
invariant()
107108
{
108109
assert(_moduleGroup.modules.length);
110+
version (CRuntime_UClibc) {} else
109111
assert(_tlsMod || !_tlsSize);
110112
}
111113

0 commit comments

Comments
 (0)