rust-osdev / linked-list-allocator

Apache License 2.0
219 stars 53 forks source link

Can't use the crate for the target riscv32i-unknown-none-elf #76

Open 58celep58 opened 1 year ago

58celep58 commented 1 year ago

I don't know if this is an issue and I would like to apologize for that. (It is my first issue that i wrote. )

What I did was only include the linked_list_allocator in the Cargo.toml .

/* Cargo.toml */

[dependencies]
linked_list_allocator = "0.10.4"

Terminal Output:

error[E0432]: unresolved import `core::sync::atomic::AtomicUsize`
  --> /home/user123/.cargo/registry/src/github.com-1ecc6299db9ec823/lock_api-0.4.9/src/remutex.rs:19:20
     |
19 |     sync::atomic::{AtomicUsize, Ordering},
     |                    ^^^^^^^^^^^ no `AtomicUsize` in `sync::atomic`

The problem is that the Riscv32i does not contain an atomic instruction set (A) and that is why the error occurs.

I do not know if I have forgotten something or if it is a bug.

phil-opp commented 1 year ago

Thanks a lot for reporting! See https://github.com/Amanieu/parking_lot/issues/277. Looks like the underlying issue is in rustc: https://github.com/rust-lang/rust/issues/99668.

phil-opp commented 1 year ago

If you don't need the LockedHeap type, you should be able to work around this issue by disabling the default features in your dependency:

[dependencies]
linked_list_allocator = { version = "0.10.4", default-features = false }
universal-git commented 3 months ago

Probably it needs a feature from spin for portable_atomic: https://github.com/mvdnes/spin-rs/tree/master#feature-flags which allows: [target.] rustflags = [ "--cfg", "portable_atomic_unsafe_assume_single_core" ]