1- use core:: arch:: global_asm;
2-
31// Probe-rs doesn't know how to call a function on the Xtensa architecture. Due to the windowed
42// ABI, just jumping to the function address won't work. Instead, we need to use a call<N>
53// instruction, which will set up the window increment and then jump to the function address.
@@ -19,69 +17,93 @@ static STACK_PTR: u32 = 0x3FFD_F000;
1917// End of SRAM1 - DATA_CACHE_SIZE
2018static STACK_PTR : u32 = 0x3FCD_0000 ;
2119
22- global_asm ! (
23- "
24- Init:
25- .global Init_impl
26- l32r a1, STACK_PTR
27- mov.n a6, a2
28- mov.n a7, a3
29- mov.n a8, a4
30- call4 Init_impl
31- mov.n a2, a6
32- break 1, 15
20+ #[ unsafe( naked) ]
21+ #[ unsafe( no_mangle) ]
22+ extern "C" fn Init ( ) {
23+ core:: arch:: naked_asm!(
24+ "l32r a1, STACK_PTR" ,
25+ "mov.n a6, a2" ,
26+ "mov.n a7, a3" ,
27+ "mov.n a8, a4" ,
28+ "call4 Init_impl" ,
29+ "mov.n a2, a6" ,
30+ "break 1, 15" ,
31+ ) ;
32+ }
3333
34- EraseSector:
35- .global EraseSector_impl
36- l32r a1, STACK_PTR
37- mov.n a6, a2
38- call4 EraseSector_impl
39- mov.n a2, a6
40- break 1, 15
34+ #[ unsafe( naked) ]
35+ #[ unsafe( no_mangle) ]
36+ extern "C" fn EraseSector ( ) {
37+ core:: arch:: naked_asm!(
38+ "l32r a1, STACK_PTR" ,
39+ "mov.n a6, a2" ,
40+ "call4 EraseSector_impl" ,
41+ "mov.n a2, a6" ,
42+ "break 1, 15" ,
43+ ) ;
44+ }
4145
42- EraseChip:
43- .global EraseChip_impl
44- l32r a1, STACK_PTR
45- call4 EraseChip_impl
46- mov.n a2, a6
47- break 1, 15
46+ #[ unsafe( naked) ]
47+ #[ unsafe( no_mangle) ]
48+ extern "C" fn EraseChip ( ) {
49+ core:: arch:: naked_asm!(
50+ "l32r a1, STACK_PTR" ,
51+ "call4 EraseChip_impl" ,
52+ "mov.n a2, a6" ,
53+ "break 1, 15"
54+ ) ;
55+ }
4856
49- ProgramPage:
50- .global ProgramPage_impl
51- l32r a1, STACK_PTR
52- mov.n a6, a2
53- mov.n a7, a3
54- mov.n a8, a4
55- call4 ProgramPage_impl
56- mov.n a2, a6
57- break 1, 15
57+ #[ unsafe( naked) ]
58+ #[ unsafe( no_mangle) ]
59+ extern "C" fn ProgramPage ( ) {
60+ core:: arch:: naked_asm!(
61+ "l32r a1, STACK_PTR" ,
62+ "mov.n a6, a2" ,
63+ "mov.n a7, a3" ,
64+ "mov.n a8, a4" ,
65+ "call4 ProgramPage_impl" ,
66+ "mov.n a2, a6" ,
67+ "break 1, 15" ,
68+ ) ;
69+ }
5870
59- Verify:
60- .global Verify_impl
61- l32r a1, STACK_PTR
62- mov.n a6, a2
63- mov.n a7, a3
64- mov.n a8, a4
65- call4 Verify_impl
66- mov.n a2, a6
67- break 1, 15
71+ #[ unsafe( naked) ]
72+ #[ unsafe( no_mangle) ]
73+ extern "C" fn Verify ( ) {
74+ core:: arch:: naked_asm!(
75+ "l32r a1, STACK_PTR" ,
76+ "mov.n a6, a2" ,
77+ "mov.n a7, a3" ,
78+ "mov.n a8, a4" ,
79+ "call4 Verify_impl" ,
80+ "mov.n a2, a6" ,
81+ "break 1, 15" ,
82+ ) ;
83+ }
6884
69- ReadFlash:
70- .global ReadFlash_impl
71- l32r a1, STACK_PTR
72- mov.n a6, a2
73- mov.n a7, a3
74- mov.n a8, a4
75- call4 ReadFlash_impl
76- mov.n a2, a6
77- break 1, 15
85+ #[ unsafe( naked) ]
86+ #[ unsafe( no_mangle) ]
87+ extern "C" fn ReadFlash ( ) {
88+ core:: arch:: naked_asm!(
89+ "l32r a1, STACK_PTR" ,
90+ "mov.n a6, a2" ,
91+ "mov.n a7, a3" ,
92+ "mov.n a8, a4" ,
93+ "call4 ReadFlash_impl" ,
94+ "mov.n a2, a6" ,
95+ "break 1, 15" ,
96+ ) ;
97+ }
7898
79- UnInit:
80- .global UnInit_impl
81- l32r a1, STACK_PTR
82- mov.n a6, a2
83- call4 UnInit_impl
84- mov.n a2, a6
85- break 1, 15
86- "
87- ) ;
99+ #[ unsafe( naked) ]
100+ #[ unsafe( no_mangle) ]
101+ extern "C" fn UnInit ( ) {
102+ core:: arch:: naked_asm!(
103+ "l32r a1, STACK_PTR" ,
104+ "mov.n a6, a2" ,
105+ "call4 UnInit_impl" ,
106+ "mov.n a2, a6" ,
107+ "break 1, 15" ,
108+ ) ;
109+ }
0 commit comments