Conversation
I agree to license my contributions to each file under the terms given at the top of each file I changed.
|
Is there a convenient way to test in Illumos? I checked the https://github.com/rust-embedded/cross support matrix and I didn't see it there. What would be the easiest way to run the tests, starting on either a Linux x86-64 host or Windows x86-64 host? |
|
Hi Brian! The easiest way is generally in a virtual machine, if your Linux/Windows hosts have that available? I know that, e.g., GitHub Actions doesn't currently seem to expose, say, KVM. We are looking at more readily available (e.g., via an API) options for driving tests from CI/CD systems, but I don't have a great answer just yet! I hadn't seen the Do you think it would be alright to at least get this merged without fixing the broader testing situation? One I have the Rust build issue (with the library order) sorted out I intend to come back and see how many tests actually pass at that point. In the meantime it'd be good to be able to build other things that use ring. |
|
@briansmith you can take a look at this pull for a Dockerfile to cross-compile to Illumos. Since it will enter the stable channel with the release of 1.47 I guess cross will add it then. |
|
Hi, I'm going to close this because we did merge a different small change to get things working for people on illumos, even though we don't have a CI/CD solution. Thanks for the PR and thanks for the pointers about how to get the ball rolling towards a CI/CD solution. I guess for now we can't really afford to add illumos to the GitHub Actions build matrix. |
We recently added support for an illumos host triple to the Rust toolchain, and would like to be able to build ring there. This patch adds support for that. We are sufficiently similar to Solaris that we just needed some extra conditional compilation directives.
The tests don't currently pass:
The reason for this is a somewhat complicated artefact of the unwinding machinery and dynamic linker dependencies, and my plan is to go and fix this directly in the Rust toolchain. The issue is in the order of
NEEDEDentries in the resultant executable:Because
libc.so.1is beforelibgcc_s.so.1in the list, we will use the unwinding symbols that are provided as part of the system ABI. Unfortunately for our purposes, there are some additional symbols in the GCC unwinder that are not in the base platform library -- these symbols fall through and are bound to the GCC version, and thus we have two totally separate implementations trying to work on one another's data structures and the result is a crash (or worse). I intend to fix this in the Rust toolchain, to make sure the correct ordering of NEEDED entries is always present in built binaries. Once that's fixed there I expect better behaviour here, as we see with unwinding in binaries that don't have as much custom/FFI stuff.I expect the same issue afflicts the Solaris stuff today, though they might have added the additional symbols to their base libc unwinder.