rust 1.39 and errno
Antonio Huete Jiménez
tuxillo at quantumachine.net
Sat Dec 28 05:07:18 PST 2019
Hi guys,
Chuck, I'm going to create a Rust wiki entry with all the information
on how to build it and the known issues we have right now.
Zach, I think I'm going to give the bounty a try. I am just learning
Rust so if there is somebody interested in the bounty that has more
experience with Rust, let me know.
Regards,
Antonio Huete
Zachary Crownover <zachary.crownover at gmail.com> escribió:
> The libc crate on dfly is very hit or miss. We’re a tier III
> platform for Rust which basically means maybe it builds maybe it
> doesn’t but there’s some code in the base to sort of try but commits
> have no requirement to pass any builds against it to be accepted.
> With that, one point release might build for dfly and one point
> release off might not. Another thing is that what you build and what
> you depend on can have varying version requirements, so any number
> of things potentially pulling in libc could be pulling a different
> version and that version has a decent chance of not building. From
> my experience that’s been the biggest pain point of doing any Rust
> development on dfly. There is a code bounty on www.dragonflybsd.org
> for getting a consistent working build of libc for Rust. I don’t
> know if more incentive on it would be entice more work, but I
> maintain hope.
>
> http://www.dragonflybsd.org/docs/developer/Code_Bounties/
>
>> On Dec 27, 2019, at 21:05, Chuck Musser <cmusser at sonic.net> wrote:
>>
>> I attempted to compile Rust 1.39.0 using the bootstrap repo
>> (https://github.com/DragonFlyBSD/rust-bootstrap-dragonfly). Tuxillo
>> is probably already working on this, but I wanted to see if I could
>> understand the process. I didn't get very far.
>>
>> After making mods that were pretty obvious (adding checksums, a
>> subdirectory for the new version, etc.), the build failed when
>> compiling the getrandom crate. The error was:
>>
>> error[E0432]: unresolved import `libc::__error`
>> -->
>> /home/chuck/src/build-1.39/rustc-1.39.0-src/vendor/getrandom/src/util_libc.rs:22:13
>> |
>> 22 | use libc::__error as errno_location;
>> | ^^^^^^-------^^^^^^^^^^^^^^^^^^
>> | | |
>> | | help: a similar name exists in the module: `ferror`
>> | no `__error` in the root
>>
>> Support for the error variable is somehow tied up in "thread local
>> storage". I have a vague understanding that every thread has its
>> own copy of the (traditonally global) errno variable, but I don't
>> understand what the implications are for supporting it in Rust.
>> There's a tracking issue in Rust regarding thread local storage, so
>> it's obviously a non-trivial feature. That issue is
>> https://github.com/rust-lang/rust/issues/29594
>>
>> There was a commit to the Rust libc a while back that purported to
>> add support for a function called __errno_location() for various
>> OSes, but I think it didn't actually do that for DragonFly. It did
>> add __error, but not __errno_location(). This was back in July and
>> I don't think such a function actually existed. The pull request
>> was https://github.com/rust-lang/libc/pull/1432/.
>>
>> More recently, there was a commit to DragonFly itself that did add
>> __errno_location, so presumably the Rust libc could now really use
>> it. That commit was
>> https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff/60d311380ff2bf02a87700a0f3e6eb53e6034920
>>
>> I'd like to gain a better understanding of how all this stuff
>> works. For starters:
>>
>> - The compile failure says that libc::__error does not exist, but
>> the libc included in the source does seem to have it defined. Is it
>> unavailable because thread local storage is disabled?
>>
>> - Why does the __errno_location() function need to exist? It must
>> differ somehow from the __error() function.
>>
>> - As of right now, __errno_location() may only exist in nightly, so
>> I'm assuming that if Rust's libc glue got updated to reference it,
>> it would only work correctly for dfly nightlies after that point,
>> and any subsequent releases (5.8+). Is that correct?
>>
>> - Many prior version of rustc have been successfuly built for
>> DragonFly. Did those have something that avoided the use of errno,
>> or is getrandom a new addition to the build and that's why it's
>> failing?
>>
>> Thanks for any insight on this stuff,
>>
>> Chuck
More information about the Users
mailing list