1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
|
Upstream: https://github.com/ruby/ruby/pull/2995
From 9ce598b91e6ec8a146eec57c751d18dbebd2db60 Mon Sep 17 00:00:00 2001
From: Paul Jordan <paullj1@gmail.com>
Date: Wed, 1 Apr 2020 02:13:49 +0100
Subject: [PATCH 1/3] ucontext doesn't exist in a musl-libc env; use native
assembly
---
configure.ac | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/configure.ac b/configure.ac
index 5bc93800efd1..a054d163b316 100644
--- a/configure.ac
+++ b/configure.ac
@@ -2353,8 +2353,8 @@ AS_CASE([$rb_cv_coroutine], [yes|''], [
[*86-mingw32], [
rb_cv_coroutine=win32
],
- [armv7*-linux*], [
- rb_cv_coroutine=ucontext
+ [arm*-linux*], [
+ rb_cv_coroutine=arm32
],
[aarch64-linux*], [
rb_cv_coroutine=arm64
From e2f04a9a9684ea3575546cc317dd16dba54ecbaf Mon Sep 17 00:00:00 2001
From: Paul Jordan <paullj1@gmail.com>
Date: Wed, 1 Apr 2020 02:15:20 +0100
Subject: [PATCH 2/3] Patch assembly so that it aligns properly
---
coroutine/arm32/Context.S | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/coroutine/arm32/Context.S b/coroutine/arm32/Context.S
index 195364fb655f..b66db29622a4 100644
--- a/coroutine/arm32/Context.S
+++ b/coroutine/arm32/Context.S
@@ -5,9 +5,13 @@
## Copyright, 2018, by Samuel Williams.
##
+.file "Context.S"
.text
-
.globl coroutine_transfer
+.align 2
+.type coroutine_transfer,%function
+.syntax unified
+
coroutine_transfer:
# Save caller state (8 registers + return address)
push {r4-r11,lr}
From 360904b97e0f1012855cd150a59cc0074cfa7453 Mon Sep 17 00:00:00 2001
From: Paul Jordan <paullj1@gmail.com>
Date: Wed, 1 Apr 2020 02:18:23 +0100
Subject: [PATCH 3/3] Fix helper to not assume glibc
---
test/fiddle/helper.rb | 19 ++++++++++++++++---
1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/test/fiddle/helper.rb b/test/fiddle/helper.rb
index 348131e4480f..f5c7bd2ca6c7 100644
--- a/test/fiddle/helper.rb
+++ b/test/fiddle/helper.rb
@@ -32,7 +32,11 @@
# libc.so and libm.so are installed to /lib/arm-linux-gnu*.
# It's not installed to /lib32.
dirs = Dir.glob('/lib/arm-linux-gnu*')
- libdir = dirs[0] if dirs && File.directory?(dirs[0])
+ if dirs.length > 0
+ libdir = dirs[0] if dirs && File.directory?(dirs[0])
+ else # handle alpine environment
+ libdir = '/lib' if File.directory? '/lib'
+ end
else
libdir = '/lib32' if File.directory? '/lib32'
end
@@ -40,8 +44,17 @@
# 64-bit ruby
libdir = '/lib64' if File.directory? '/lib64'
end
- libc_so = File.join(libdir, "libc.so.6")
- libm_so = File.join(libdir, "libm.so.6")
+
+ # Handle musl libc
+ libc = Dir.glob(File.join(libdir, "libc.musl*.so*"))
+ if libc && libc.length > 0
+ libc_so = libc[0]
+ libm_so = libc[0]
+ else
+ # glibc
+ libc_so = File.join(libdir, "libc.so.6")
+ libm_so = File.join(libdir, "libm.so.6")
+ end
when /mingw/, /mswin/
require "rbconfig"
crtname = RbConfig::CONFIG["RUBY_SO_NAME"][/msvc\w+/] || 'ucrtbase'
|