Skip to content

Commit 99ad106

Browse files
committed
asm: add target_env = "musl" to pickup the underscore asm names
`musl` is like `gnu` and does not add an underscore to external function names as the real `link_name`.
1 parent 39ec4e1 commit 99ad106

File tree

2 files changed

+178
-33
lines changed

2 files changed

+178
-33
lines changed

.github/workflows/build.yml

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ jobs:
3838
- name: Set Rustup profile to minimal
3939
run: rustup set profile minimal
4040

41+
- name: Install musl target on Linux
42+
run: |
43+
rustup target add x86_64-unknown-linux-musl
44+
sudo apt-get install musl-tools musl-dev
45+
if: runner.os == 'Linux'
46+
4147
- name: "Print Rust Version"
4248
run: |
4349
rustc -Vv
@@ -60,13 +66,21 @@ jobs:
6066
run: cargo build --no-default-features --features stable
6167
if: runner.os != 'Windows'
6268

69+
- name: "Run cargo build for stable on musl"
70+
run: cargo build --target x86_64-unknown-linux-musl --no-default-features --features stable
71+
if: runner.os == 'Linux'
72+
6373
- name: "Run cargo test"
6474
run: cargo test
6575

6676
- name: "Run cargo test for stable"
6777
run: cargo test --no-default-features --features stable
6878
if: runner.os != 'Windows'
6979

80+
- name: "Run cargo test for stable on musl"
81+
run: cargo test --target x86_64-unknown-linux-musl --no-default-features --features stable
82+
if: runner.os == 'Linux'
83+
7084
- name: 'Deny Warnings'
7185
run: cargo build --features deny-warnings
7286

src/asm/mod.rs

Lines changed: 164 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,69 +1,200 @@
11
#[link(name = "x86_64_asm", kind = "static")]
22
extern "C" {
3-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_interrupt_enable")]
3+
#[cfg_attr(
4+
any(target_env = "gnu", target_env = "musl"),
5+
link_name = "_x86_64_asm_interrupt_enable"
6+
)]
47
pub(crate) fn x86_64_asm_interrupt_enable();
5-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_interrupt_disable")]
8+
9+
#[cfg_attr(
10+
any(target_env = "gnu", target_env = "musl"),
11+
link_name = "_x86_64_asm_interrupt_disable"
12+
)]
613
pub(crate) fn x86_64_asm_interrupt_disable();
7-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_int3")]
14+
15+
#[cfg_attr(
16+
any(target_env = "gnu", target_env = "musl"),
17+
link_name = "_x86_64_asm_int3"
18+
)]
819
pub(crate) fn x86_64_asm_int3();
9-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_hlt")]
20+
21+
#[cfg_attr(
22+
any(target_env = "gnu", target_env = "musl"),
23+
link_name = "_x86_64_asm_hlt"
24+
)]
1025
pub(crate) fn x86_64_asm_hlt();
11-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_from_port_u8")]
26+
27+
#[cfg_attr(
28+
any(target_env = "gnu", target_env = "musl"),
29+
link_name = "_x86_64_asm_read_from_port_u8"
30+
)]
1231
pub(crate) fn x86_64_asm_read_from_port_u8(port: u16) -> u8;
13-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_from_port_u16")]
32+
33+
#[cfg_attr(
34+
any(target_env = "gnu", target_env = "musl"),
35+
link_name = "_x86_64_asm_read_from_port_u16"
36+
)]
1437
pub(crate) fn x86_64_asm_read_from_port_u16(port: u16) -> u16;
15-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_from_port_u32")]
38+
39+
#[cfg_attr(
40+
any(target_env = "gnu", target_env = "musl"),
41+
link_name = "_x86_64_asm_read_from_port_u32"
42+
)]
1643
pub(crate) fn x86_64_asm_read_from_port_u32(port: u16) -> u32;
17-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_to_port_u8")]
44+
45+
#[cfg_attr(
46+
any(target_env = "gnu", target_env = "musl"),
47+
link_name = "_x86_64_asm_write_to_port_u8"
48+
)]
1849
pub(crate) fn x86_64_asm_write_to_port_u8(port: u16, value: u8);
19-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_to_port_u16")]
50+
51+
#[cfg_attr(
52+
any(target_env = "gnu", target_env = "musl"),
53+
link_name = "_x86_64_asm_write_to_port_u16"
54+
)]
2055
pub(crate) fn x86_64_asm_write_to_port_u16(port: u16, value: u16);
21-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_to_port_u32")]
56+
57+
#[cfg_attr(
58+
any(target_env = "gnu", target_env = "musl"),
59+
link_name = "_x86_64_asm_write_to_port_u32"
60+
)]
2261
pub(crate) fn x86_64_asm_write_to_port_u32(port: u16, value: u32);
23-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_set_cs")]
62+
63+
#[cfg_attr(
64+
any(target_env = "gnu", target_env = "musl"),
65+
link_name = "_x86_64_asm_set_cs"
66+
)]
2467
pub(crate) fn x86_64_asm_set_cs(sel: u64);
25-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_load_ss")]
68+
69+
#[cfg_attr(
70+
any(target_env = "gnu", target_env = "musl"),
71+
link_name = "_x86_64_asm_load_ss"
72+
)]
2673
pub(crate) fn x86_64_asm_load_ss(sel: u16);
27-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_load_ds")]
74+
75+
#[cfg_attr(
76+
any(target_env = "gnu", target_env = "musl"),
77+
link_name = "_x86_64_asm_load_ds"
78+
)]
2879
pub(crate) fn x86_64_asm_load_ds(sel: u16);
29-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_load_es")]
80+
81+
#[cfg_attr(
82+
any(target_env = "gnu", target_env = "musl"),
83+
link_name = "_x86_64_asm_load_es"
84+
)]
3085
pub(crate) fn x86_64_asm_load_es(sel: u16);
31-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_load_fs")]
86+
87+
#[cfg_attr(
88+
any(target_env = "gnu", target_env = "musl"),
89+
link_name = "_x86_64_asm_load_fs"
90+
)]
3291
pub(crate) fn x86_64_asm_load_fs(sel: u16);
33-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_load_gs")]
92+
93+
#[cfg_attr(
94+
any(target_env = "gnu", target_env = "musl"),
95+
link_name = "_x86_64_asm_load_gs"
96+
)]
3497
pub(crate) fn x86_64_asm_load_gs(sel: u16);
35-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_swapgs")]
98+
99+
#[cfg_attr(
100+
any(target_env = "gnu", target_env = "musl"),
101+
link_name = "_x86_64_asm_swapgs"
102+
)]
36103
pub(crate) fn x86_64_asm_swapgs();
37-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_get_cs")]
104+
105+
#[cfg_attr(
106+
any(target_env = "gnu", target_env = "musl"),
107+
link_name = "_x86_64_asm_get_cs"
108+
)]
38109
pub(crate) fn x86_64_asm_get_cs() -> u16;
39-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_lgdt")]
110+
111+
#[cfg_attr(
112+
any(target_env = "gnu", target_env = "musl"),
113+
link_name = "_x86_64_asm_lgdt"
114+
)]
40115
pub(crate) fn x86_64_asm_lgdt(gdt: *const crate::instructions::tables::DescriptorTablePointer);
41-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_lidt")]
116+
117+
#[cfg_attr(
118+
any(target_env = "gnu", target_env = "musl"),
119+
link_name = "_x86_64_asm_lidt"
120+
)]
42121
pub(crate) fn x86_64_asm_lidt(idt: *const crate::instructions::tables::DescriptorTablePointer);
43-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_ltr")]
122+
123+
#[cfg_attr(
124+
any(target_env = "gnu", target_env = "musl"),
125+
link_name = "_x86_64_asm_ltr"
126+
)]
44127
pub(crate) fn x86_64_asm_ltr(sel: u16);
45-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_invlpg")]
128+
129+
#[cfg_attr(
130+
any(target_env = "gnu", target_env = "musl"),
131+
link_name = "_x86_64_asm_invlpg"
132+
)]
46133
pub(crate) fn x86_64_asm_invlpg(addr: u64);
47-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_cr0")]
134+
135+
#[cfg_attr(
136+
any(target_env = "gnu", target_env = "musl"),
137+
link_name = "_x86_64_asm_read_cr0"
138+
)]
48139
pub(crate) fn x86_64_asm_read_cr0() -> u64;
49-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_cr0")]
140+
141+
#[cfg_attr(
142+
any(target_env = "gnu", target_env = "musl"),
143+
link_name = "_x86_64_asm_write_cr0"
144+
)]
50145
pub(crate) fn x86_64_asm_write_cr0(value: u64);
51-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_cr2")]
146+
147+
#[cfg_attr(
148+
any(target_env = "gnu", target_env = "musl"),
149+
link_name = "_x86_64_asm_read_cr2"
150+
)]
52151
pub(crate) fn x86_64_asm_read_cr2() -> u64;
53-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_cr3")]
152+
153+
#[cfg_attr(
154+
any(target_env = "gnu", target_env = "musl"),
155+
link_name = "_x86_64_asm_read_cr3"
156+
)]
54157
pub(crate) fn x86_64_asm_read_cr3() -> u64;
55-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_cr3")]
158+
159+
#[cfg_attr(
160+
any(target_env = "gnu", target_env = "musl"),
161+
link_name = "_x86_64_asm_write_cr3"
162+
)]
56163
pub(crate) fn x86_64_asm_write_cr3(value: u64);
57-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_cr4")]
164+
165+
#[cfg_attr(
166+
any(target_env = "gnu", target_env = "musl"),
167+
link_name = "_x86_64_asm_read_cr4"
168+
)]
58169
pub(crate) fn x86_64_asm_read_cr4() -> u64;
59-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_cr4")]
170+
171+
#[cfg_attr(
172+
any(target_env = "gnu", target_env = "musl"),
173+
link_name = "_x86_64_asm_write_cr4"
174+
)]
60175
pub(crate) fn x86_64_asm_write_cr4(value: u64);
61-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_rdmsr")]
176+
177+
#[cfg_attr(
178+
any(target_env = "gnu", target_env = "musl"),
179+
link_name = "_x86_64_asm_rdmsr"
180+
)]
62181
pub(crate) fn x86_64_asm_rdmsr(msr: u32) -> u64;
63-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_wrmsr")]
182+
183+
#[cfg_attr(
184+
any(target_env = "gnu", target_env = "musl"),
185+
link_name = "_x86_64_asm_wrmsr"
186+
)]
64187
pub(crate) fn x86_64_asm_wrmsr(msr: u32, value: u64);
65-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_read_rflags")]
188+
189+
#[cfg_attr(
190+
any(target_env = "gnu", target_env = "musl"),
191+
link_name = "_x86_64_asm_read_rflags"
192+
)]
66193
pub(crate) fn x86_64_asm_read_rflags() -> u64;
67-
#[cfg_attr(target_env = "gnu", link_name = "_x86_64_asm_write_rflags")]
194+
195+
#[cfg_attr(
196+
any(target_env = "gnu", target_env = "musl"),
197+
link_name = "_x86_64_asm_write_rflags"
198+
)]
68199
pub(crate) fn x86_64_asm_write_rflags(val: u64);
69200
}

0 commit comments

Comments
 (0)