Skip to content

Commit 5b8837a

Browse files
committed
[GR-16641] Find the types automatically for the native configurations.
PullRequest: truffleruby/909
2 parents 69c74d8 + c145bad commit 5b8837a

File tree

7 files changed

+148
-94
lines changed

7 files changed

+148
-94
lines changed

ci.jsonnet

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -381,6 +381,14 @@ local part_definitions = {
381381
["tool/make-standalone-distribution.sh"],
382382
],
383383
},
384+
385+
generate_native_config: function(platform)
386+
{
387+
run+: [
388+
["ruby", "tool/generate-native-config.rb"],
389+
["cat", "src/main/java/org/truffleruby/platform/" + platform + "NativeConfiguration.java"],
390+
],
391+
},
384392
},
385393

386394
benchmark: {
@@ -669,8 +677,15 @@ local composition_environment = utils.add_inclusion_tracking(part_definitions, "
669677
{ timelimit: "02:00:00" },
670678
},
671679

680+
manual_builds: {
681+
local shared = $.cap.manual + { timelimit: "5:00" },
682+
683+
"ruby-generate-native-config-linux": shared + $.platform.linux + $.run.generate_native_config("linux/Linux"),
684+
"ruby-generate-native-config-darwin": shared + $.platform.darwin + $.run.generate_native_config("darwin/Darwin"),
685+
},
686+
672687
builds:
673-
local all_builds = $.test_builds + $.bench_builds;
688+
local all_builds = $.test_builds + $.bench_builds + $.manual_builds;
674689
utils.check_builds(
675690
restrict_builds_to,
676691
# Move name inside into `name` field

lib/truffle/socket/socket.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -140,12 +140,12 @@ def self.gethostbyname(hostname)
140140

141141

142142
if a[4] == AF_INET
143-
offset, type = Truffle::Socket::Foreign::SockaddrIn.layout[:sin_addr]
144-
size = FFI.type_size(type) # TODO BJF 30-Apr-2017 This appears to be a bug in rubysl-socket?
143+
offset = Truffle::Config['platform.sockaddr_in.sin_addr.offset']
144+
size = Truffle::Config['platform.sockaddr_in.sin_addr.size']
145145
addresses << sockaddr.byteslice(offset, size)
146146
elsif a[4] == AF_INET6
147-
offset, type = Truffle::Socket::Foreign::SockaddrIn6.layout[:sin6_addr]
148-
size = FFI.type_size(type) # TODO BJF 30-Apr-2017 This appears to be a bug in rubysl-socket?
147+
offset = Truffle::Config['platform.sockaddr_in6.sin6_addr.offset']
148+
size = Truffle::Config['platform.sockaddr_in6.sin6_addr.size']
149149
addresses << sockaddr.byteslice(offset, size)
150150
end
151151
end

lib/truffle/socket/truffle/foreign/servent.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ class Servent < Truffle::FFI::Struct
3131
config('platform.servent', :s_name, :s_aliases, :s_port, :s_proto)
3232

3333
def name
34-
self[:s_name].read_string
34+
self[:s_name]
3535
end
3636

3737
def port

spec/ruby/library/socket/socket/gethostbyname_spec.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,15 @@
22
require_relative '../spec_helper'
33
require_relative '../fixtures/classes'
44

5-
describe "Socket#gethostbyname" do
5+
describe "Socket.gethostbyname" do
66
it "returns broadcast address info for '<broadcast>'" do
77
addr = Socket.gethostbyname('<broadcast>');
8-
addr.should == ["255.255.255.255", [], 2, "\377\377\377\377"]
8+
addr.should == ["255.255.255.255", [], 2, "\xFF\xFF\xFF\xFF"]
99
end
1010

1111
it "returns broadcast address info for '<any>'" do
1212
addr = Socket.gethostbyname('<any>');
13-
addr.should == ["0.0.0.0", [], 2, "\000\000\000\000"]
13+
addr.should == ["0.0.0.0", [], 2, "\x00\x00\x00\x00"]
1414
end
1515
end
1616

src/main/java/org/truffleruby/platform/darwin/DarwinNativeConfiguration.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
public class DarwinNativeConfiguration extends DefaultNativeConfiguration {
4545

4646
public static void load(NativeConfiguration configuration, RubyContext context) {
47-
// Generated from tool/generate-native-config.rb on x86_64-darwin17
47+
// Generated from tool/generate-native-config.rb on universal.x86_64-darwin18
4848
configuration.config("platform.sigaction.sizeof", 16);
4949
configuration.config("platform.sigaction.sa_handler.offset", 0);
5050
configuration.config("platform.sigaction.sa_handler.size", 8);
@@ -64,7 +64,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
6464
configuration.config("platform.addrinfo.ai_protocol.type", string(context, "int"));
6565
configuration.config("platform.addrinfo.ai_addrlen.offset", 16);
6666
configuration.config("platform.addrinfo.ai_addrlen.size", 4);
67-
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "int"));
67+
configuration.config("platform.addrinfo.ai_addrlen.type", string(context, "uint"));
6868
configuration.config("platform.addrinfo.ai_addr.offset", 32);
6969
configuration.config("platform.addrinfo.ai_addr.size", 8);
7070
configuration.config("platform.addrinfo.ai_addr.type", string(context, "pointer"));
@@ -83,7 +83,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
8383
configuration.config("platform.ifaddrs.ifa_name.type", string(context, "string"));
8484
configuration.config("platform.ifaddrs.ifa_flags.offset", 16);
8585
configuration.config("platform.ifaddrs.ifa_flags.size", 4);
86-
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "int"));
86+
configuration.config("platform.ifaddrs.ifa_flags.type", string(context, "uint"));
8787
configuration.config("platform.ifaddrs.ifa_addr.offset", 24);
8888
configuration.config("platform.ifaddrs.ifa_addr.size", 8);
8989
configuration.config("platform.ifaddrs.ifa_addr.type", string(context, "pointer"));
@@ -97,42 +97,45 @@ public static void load(NativeConfiguration configuration, RubyContext context)
9797
configuration.config("platform.ifaddrs.ifa_dstaddr.size", 8);
9898
configuration.config("platform.ifaddrs.ifa_dstaddr.type", string(context, "pointer"));
9999
configuration.config("platform.sockaddr.sizeof", 16);
100+
configuration.config("platform.sockaddr.sa_family.offset", 1);
101+
configuration.config("platform.sockaddr.sa_family.size", 1);
102+
configuration.config("platform.sockaddr.sa_family.type", string(context, "uchar"));
100103
configuration.config("platform.sockaddr.sa_data.offset", 2);
101104
configuration.config("platform.sockaddr.sa_data.size", 14);
102105
configuration.config("platform.sockaddr.sa_data.type", string(context, "char_array"));
103-
configuration.config("platform.sockaddr.sa_family.offset", 1);
104-
configuration.config("platform.sockaddr.sa_family.size", 1);
105-
configuration.config("platform.sockaddr.sa_family.type", string(context, "sa_family_t"));
106106
configuration.config("platform.sockaddr_in.sizeof", 16);
107107
configuration.config("platform.sockaddr_in.sin_family.offset", 1);
108108
configuration.config("platform.sockaddr_in.sin_family.size", 1);
109-
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "sa_family_t"));
109+
configuration.config("platform.sockaddr_in.sin_family.type", string(context, "uchar"));
110110
configuration.config("platform.sockaddr_in.sin_port.offset", 2);
111111
configuration.config("platform.sockaddr_in.sin_port.size", 2);
112112
configuration.config("platform.sockaddr_in.sin_port.type", string(context, "ushort"));
113113
configuration.config("platform.sockaddr_in.sin_addr.offset", 4);
114114
configuration.config("platform.sockaddr_in.sin_addr.size", 4);
115+
configuration.config("platform.sockaddr_in.sin_addr.type", string(context, "char_array"));
115116
configuration.config("platform.sockaddr_in.sin_zero.offset", 8);
116117
configuration.config("platform.sockaddr_in.sin_zero.size", 8);
117118
configuration.config("platform.sockaddr_in.sin_zero.type", string(context, "char_array"));
118119
configuration.config("platform.sockaddr_in6.sizeof", 28);
119120
configuration.config("platform.sockaddr_in6.sin6_family.offset", 1);
120121
configuration.config("platform.sockaddr_in6.sin6_family.size", 1);
121-
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "sa_family_t"));
122+
configuration.config("platform.sockaddr_in6.sin6_family.type", string(context, "uchar"));
122123
configuration.config("platform.sockaddr_in6.sin6_port.offset", 2);
123124
configuration.config("platform.sockaddr_in6.sin6_port.size", 2);
124125
configuration.config("platform.sockaddr_in6.sin6_port.type", string(context, "ushort"));
125126
configuration.config("platform.sockaddr_in6.sin6_flowinfo.offset", 4);
126127
configuration.config("platform.sockaddr_in6.sin6_flowinfo.size", 4);
128+
configuration.config("platform.sockaddr_in6.sin6_flowinfo.type", string(context, "uint"));
127129
configuration.config("platform.sockaddr_in6.sin6_addr.offset", 8);
128130
configuration.config("platform.sockaddr_in6.sin6_addr.size", 16);
129131
configuration.config("platform.sockaddr_in6.sin6_addr.type", string(context, "char_array"));
130132
configuration.config("platform.sockaddr_in6.sin6_scope_id.offset", 24);
131133
configuration.config("platform.sockaddr_in6.sin6_scope_id.size", 4);
134+
configuration.config("platform.sockaddr_in6.sin6_scope_id.type", string(context, "uint"));
132135
configuration.config("platform.sockaddr_un.sizeof", 106);
133136
configuration.config("platform.sockaddr_un.sun_family.offset", 1);
134137
configuration.config("platform.sockaddr_un.sun_family.size", 1);
135-
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "sa_family_t"));
138+
configuration.config("platform.sockaddr_un.sun_family.type", string(context, "uchar"));
136139
configuration.config("platform.sockaddr_un.sun_path.offset", 2);
137140
configuration.config("platform.sockaddr_un.sun_path.size", 104);
138141
configuration.config("platform.sockaddr_un.sun_path.type", string(context, "char_array"));
@@ -165,33 +168,33 @@ public static void load(NativeConfiguration configuration, RubyContext context)
165168
configuration.config("platform.iovec.iov_base.type", string(context, "pointer"));
166169
configuration.config("platform.iovec.iov_len.offset", 8);
167170
configuration.config("platform.iovec.iov_len.size", 8);
168-
configuration.config("platform.iovec.iov_len.type", string(context, "size_t"));
171+
configuration.config("platform.iovec.iov_len.type", string(context, "ulong"));
169172
configuration.config("platform.msghdr.sizeof", 48);
170173
configuration.config("platform.msghdr.msg_name.offset", 0);
171174
configuration.config("platform.msghdr.msg_name.size", 8);
172175
configuration.config("platform.msghdr.msg_name.type", string(context, "pointer"));
173176
configuration.config("platform.msghdr.msg_namelen.offset", 8);
174177
configuration.config("platform.msghdr.msg_namelen.size", 4);
175-
configuration.config("platform.msghdr.msg_namelen.type", string(context, "int"));
178+
configuration.config("platform.msghdr.msg_namelen.type", string(context, "uint"));
176179
configuration.config("platform.msghdr.msg_iov.offset", 16);
177180
configuration.config("platform.msghdr.msg_iov.size", 8);
178181
configuration.config("platform.msghdr.msg_iov.type", string(context, "pointer"));
179182
configuration.config("platform.msghdr.msg_iovlen.offset", 24);
180183
configuration.config("platform.msghdr.msg_iovlen.size", 4);
181-
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "size_t"));
184+
configuration.config("platform.msghdr.msg_iovlen.type", string(context, "int"));
182185
configuration.config("platform.msghdr.msg_control.offset", 32);
183186
configuration.config("platform.msghdr.msg_control.size", 8);
184187
configuration.config("platform.msghdr.msg_control.type", string(context, "pointer"));
185188
configuration.config("platform.msghdr.msg_controllen.offset", 40);
186189
configuration.config("platform.msghdr.msg_controllen.size", 4);
187-
configuration.config("platform.msghdr.msg_controllen.type", string(context, "size_t"));
190+
configuration.config("platform.msghdr.msg_controllen.type", string(context, "uint"));
188191
configuration.config("platform.msghdr.msg_flags.offset", 44);
189192
configuration.config("platform.msghdr.msg_flags.size", 4);
190193
configuration.config("platform.msghdr.msg_flags.type", string(context, "int"));
191194
configuration.config("platform.servent.sizeof", 32);
192195
configuration.config("platform.servent.s_name.offset", 0);
193196
configuration.config("platform.servent.s_name.size", 8);
194-
configuration.config("platform.servent.s_name.type", string(context, "pointer"));
197+
configuration.config("platform.servent.s_name.type", string(context, "string"));
195198
configuration.config("platform.servent.s_aliases.offset", 8);
196199
configuration.config("platform.servent.s_aliases.size", 8);
197200
configuration.config("platform.servent.s_aliases.type", string(context, "pointer"));
@@ -200,7 +203,7 @@ public static void load(NativeConfiguration configuration, RubyContext context)
200203
configuration.config("platform.servent.s_port.type", string(context, "int"));
201204
configuration.config("platform.servent.s_proto.offset", 24);
202205
configuration.config("platform.servent.s_proto.size", 8);
203-
configuration.config("platform.servent.s_proto.type", string(context, "pointer"));
206+
configuration.config("platform.servent.s_proto.type", string(context, "string"));
204207
configuration.config("platform.errno.EPERM", 1);
205208
configuration.config("platform.errno.ENOENT", 2);
206209
configuration.config("platform.errno.ESRCH", 3);

0 commit comments

Comments
 (0)