Skip to content

Commit e787b87

Browse files
committed
Use link_args to alias arm builtins
1 parent 89594e1 commit e787b87

File tree

2 files changed

+13
-33
lines changed

2 files changed

+13
-33
lines changed

src/arm.rs

+12-33
Original file line numberDiff line numberDiff line change
@@ -36,57 +36,36 @@ extern "C" {
3636
fn memset(dest: *mut u8, c: i32, n: usize) -> *mut u8;
3737
}
3838

39-
// FIXME: The `*4` and `*8` variants should be defined as aliases.
39+
// Create aliases for the *4 and *8 variants
40+
#[link_args = "--defsym=__aeabi_memcpy4=__aeabi_memcpy --defsym=__aeabi_memcpy8=__aeabi_memcpy"]
41+
extern {}
4042

4143
#[cfg_attr(not(test), no_mangle)]
4244
pub unsafe extern "C" fn __aeabi_memcpy(dest: *mut u8, src: *const u8, n: usize) {
4345
memcpy(dest, src, n);
4446
}
45-
#[cfg_attr(not(test), no_mangle)]
46-
pub unsafe extern "C" fn __aeabi_memcpy4(dest: *mut u8, src: *const u8, n: usize) {
47-
memcpy(dest, src, n);
48-
}
49-
#[cfg_attr(not(test), no_mangle)]
50-
pub unsafe extern "C" fn __aeabi_memcpy8(dest: *mut u8, src: *const u8, n: usize) {
51-
memcpy(dest, src, n);
52-
}
47+
48+
#[link_args = "--defsym=__aeabi_memmove4=__aeabi_memmove --defsym=__aeabi_memmove8=__aeabi_memmove"]
49+
extern {}
5350

5451
#[cfg_attr(not(test), no_mangle)]
5552
pub unsafe extern "C" fn __aeabi_memmove(dest: *mut u8, src: *const u8, n: usize) {
5653
memmove(dest, src, n);
5754
}
58-
#[cfg_attr(not(test), no_mangle)]
59-
pub unsafe extern "C" fn __aeabi_memmove4(dest: *mut u8, src: *const u8, n: usize) {
60-
memmove(dest, src, n);
61-
}
62-
#[cfg_attr(not(test), no_mangle)]
63-
pub unsafe extern "C" fn __aeabi_memmove8(dest: *mut u8, src: *const u8, n: usize) {
64-
memmove(dest, src, n);
65-
}
55+
56+
#[link_args = "--defsym=__aeabi_memset4=__aeabi_memset --defsym=__aeabi_memset8=__aeabi_memset"]
57+
extern {}
6658

6759
// Note the different argument order
6860
#[cfg_attr(not(test), no_mangle)]
6961
pub unsafe extern "C" fn __aeabi_memset(dest: *mut u8, n: usize, c: i32) {
7062
memset(dest, c, n);
7163
}
72-
#[cfg_attr(not(test), no_mangle)]
73-
pub unsafe extern "C" fn __aeabi_memset4(dest: *mut u8, n: usize, c: i32) {
74-
memset(dest, c, n);
75-
}
76-
#[cfg_attr(not(test), no_mangle)]
77-
pub unsafe extern "C" fn __aeabi_memset8(dest: *mut u8, n: usize, c: i32) {
78-
memset(dest, c, n);
79-
}
64+
65+
#[link_args = "--defsym=__aeabi_memclr4=__aeabi_memclr --defsym=__aeabi_memclr8=__aeabi_memclr"]
66+
extern {}
8067

8168
#[cfg_attr(not(test), no_mangle)]
8269
pub unsafe extern "C" fn __aeabi_memclr(dest: *mut u8, n: usize) {
8370
memset(dest, 0, n);
8471
}
85-
#[cfg_attr(not(test), no_mangle)]
86-
pub unsafe extern "C" fn __aeabi_memclr4(dest: *mut u8, n: usize) {
87-
memset(dest, 0, n);
88-
}
89-
#[cfg_attr(not(test), no_mangle)]
90-
pub unsafe extern "C" fn __aeabi_memclr8(dest: *mut u8, n: usize) {
91-
memset(dest, 0, n);
92-
}

src/lib.rs

+1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#![feature(asm)]
22
#![feature(core_intrinsics)]
33
#![feature(linkage)]
4+
#![feature(link_args)]
45
#![feature(naked_functions)]
56
#![cfg_attr(not(test), no_std)]
67
#![no_builtins]

0 commit comments

Comments
 (0)