Skip to content
This repository was archived by the owner on Jan 24, 2022. It is now read-only.

Commit d854091

Browse files
authored
Merge pull request #27 from japaric/handlers
define handlers as weak aliases of DEFAULT_HANDLER
2 parents e547497 + a9f7f47 commit d854091

File tree

2 files changed

+34
-95
lines changed

2 files changed

+34
-95
lines changed

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
77

88
## [Unreleased]
99

10+
### Fixed
11+
12+
- Remove duplication of default exception handlers. This saves 32 bytes of Flash
13+
memory (.text).
14+
1015
## [v0.3.4] - 2017-07-19
1116

1217
### Changed

src/lib.rs

Lines changed: 29 additions & 95 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,7 @@
284284
#![deny(warnings)]
285285
#![feature(asm)]
286286
#![feature(compiler_builtins_lib)]
287+
#![feature(global_asm)]
287288
#![feature(lang_items)]
288289
#![feature(linkage)]
289290
#![feature(naked_functions)]
@@ -371,108 +372,41 @@ unsafe extern "C" fn reset_handler() -> ! {
371372
}
372373
}
373374

374-
#[allow(non_snake_case)]
375-
#[allow(private_no_mangle_fns)]
376-
#[cfg(target_arch = "arm")]
377-
#[linkage = "weak"]
378-
#[naked]
379-
#[no_mangle]
380-
extern "C" fn NMI() {
381-
unsafe {
382-
asm!("b DEFAULT_HANDLER" :::: "volatile");
383-
intrinsics::unreachable();
384-
}
385-
}
375+
global_asm!(r#"
376+
.weak NMI
377+
NMI = DEFAULT_HANDLER
386378
387-
#[allow(non_snake_case)]
388-
#[allow(private_no_mangle_fns)]
389-
#[cfg(target_arch = "arm")]
390-
#[linkage = "weak"]
391-
#[naked]
392-
#[no_mangle]
393-
extern "C" fn HARD_FAULT() {
394-
unsafe {
395-
asm!("b DEFAULT_HANDLER" :::: "volatile");
396-
intrinsics::unreachable();
397-
}
398-
}
379+
.weak HARD_FAULT
380+
HARD_FAULT = DEFAULT_HANDLER
399381
400-
#[allow(non_snake_case)]
401-
#[allow(private_no_mangle_fns)]
402-
#[cfg(target_arch = "arm")]
403-
#[linkage = "weak"]
404-
#[naked]
405-
#[no_mangle]
406-
extern "C" fn MEM_MANAGE() {
407-
unsafe {
408-
asm!("b DEFAULT_HANDLER" :::: "volatile");
409-
intrinsics::unreachable();
410-
}
411-
}
382+
.weak MEM_MANAGE
383+
MEM_MANAGE = DEFAULT_HANDLER
412384
413-
#[allow(non_snake_case)]
414-
#[allow(private_no_mangle_fns)]
415-
#[cfg(target_arch = "arm")]
416-
#[linkage = "weak"]
417-
#[naked]
418-
#[no_mangle]
419-
extern "C" fn BUS_FAULT() {
420-
unsafe {
421-
asm!("b DEFAULT_HANDLER" :::: "volatile");
422-
intrinsics::unreachable();
423-
}
424-
}
385+
.weak BUS_FAULT
386+
BUS_FAULT = DEFAULT_HANDLER
425387
426-
#[allow(non_snake_case)]
427-
#[allow(private_no_mangle_fns)]
428-
#[cfg(target_arch = "arm")]
429-
#[linkage = "weak"]
430-
#[naked]
431-
#[no_mangle]
432-
extern "C" fn USAGE_FAULT() {
433-
unsafe {
434-
asm!("b DEFAULT_HANDLER" :::: "volatile");
435-
intrinsics::unreachable();
436-
}
437-
}
388+
.weak USAGE_FAULT
389+
USAGE_FAULT = DEFAULT_HANDLER
438390
439-
#[allow(non_snake_case)]
440-
#[allow(private_no_mangle_fns)]
441-
#[cfg(target_arch = "arm")]
442-
#[linkage = "weak"]
443-
#[naked]
444-
#[no_mangle]
445-
extern "C" fn SVCALL() {
446-
unsafe {
447-
asm!("b DEFAULT_HANDLER" :::: "volatile");
448-
intrinsics::unreachable();
449-
}
450-
}
391+
.weak SVCALL
392+
SVCALL = DEFAULT_HANDLER
451393
452-
#[allow(non_snake_case)]
453-
#[allow(private_no_mangle_fns)]
454-
#[cfg(target_arch = "arm")]
455-
#[linkage = "weak"]
456-
#[naked]
457-
#[no_mangle]
458-
extern "C" fn PENDSV() {
459-
unsafe {
460-
asm!("b DEFAULT_HANDLER" :::: "volatile");
461-
intrinsics::unreachable();
462-
}
463-
}
394+
.weak PENDSV
395+
PENDSV = DEFAULT_HANDLER
464396
465-
#[allow(non_snake_case)]
466-
#[allow(private_no_mangle_fns)]
467-
#[cfg(target_arch = "arm")]
468-
#[linkage = "weak"]
469-
#[naked]
470-
#[no_mangle]
471-
extern "C" fn SYS_TICK() {
472-
unsafe {
473-
asm!("b DEFAULT_HANDLER" :::: "volatile");
474-
intrinsics::unreachable();
475-
}
397+
.weak SYS_TICK
398+
SYS_TICK = DEFAULT_HANDLER
399+
"#);
400+
401+
extern "C" {
402+
fn NMI();
403+
fn HARD_FAULT();
404+
fn MEM_MANAGE();
405+
fn BUS_FAULT();
406+
fn USAGE_FAULT();
407+
fn SVCALL();
408+
fn PENDSV();
409+
fn SYS_TICK();
476410
}
477411

478412
#[cfg(target_arch = "arm")]

0 commit comments

Comments
 (0)