diff options
Diffstat (limited to 'src/libstd/rt')
| -rw-r--r-- | src/libstd/rt/local_heap.rs | 19 | ||||
| -rw-r--r-- | src/libstd/rt/unwind.rs | 18 |
2 files changed, 36 insertions, 1 deletions
diff --git a/src/libstd/rt/local_heap.rs b/src/libstd/rt/local_heap.rs index 4ff25a34210..29b3dcaa4f2 100644 --- a/src/libstd/rt/local_heap.rs +++ b/src/libstd/rt/local_heap.rs @@ -276,6 +276,14 @@ impl Drop for MemoryRegion { } } + +#[cfg(not(test))] +#[lang="malloc"] +#[inline] +pub unsafe fn local_malloc_(drop_glue: fn(*mut u8), size: uint, align: uint) -> *u8 { + local_malloc(drop_glue, size, align) +} + #[inline] pub unsafe fn local_malloc(drop_glue: fn(*mut u8), size: uint, align: uint) -> *u8 { // FIXME: Unsafe borrow for speed. Lame. @@ -288,7 +296,16 @@ pub unsafe fn local_malloc(drop_glue: fn(*mut u8), size: uint, align: uint) -> * } } -// A little compatibility function +#[cfg(not(test))] +#[lang="free"] +#[inline] +pub unsafe fn local_free_(ptr: *u8) { + local_free(ptr) +} + +// NB: Calls to free CANNOT be allowed to fail, as throwing an exception from +// inside a landing pad may corrupt the state of the exception handler. If a +// problem occurs, call exit instead. #[inline] pub unsafe fn local_free(ptr: *u8) { // FIXME: Unsafe borrow for speed. Lame. diff --git a/src/libstd/rt/unwind.rs b/src/libstd/rt/unwind.rs index 16d677b5ff2..b9459aed582 100644 --- a/src/libstd/rt/unwind.rs +++ b/src/libstd/rt/unwind.rs @@ -376,6 +376,24 @@ pub mod eabi { } } +#[cold] +#[lang="fail_"] +#[cfg(not(test))] +pub fn fail_(expr: *u8, file: *u8, line: uint) -> ! { + begin_unwind_raw(expr, file, line); +} + +#[cold] +#[lang="fail_bounds_check"] +#[cfg(not(test))] +pub fn fail_bounds_check(file: *u8, line: uint, index: uint, len: uint) -> ! { + use c_str::ToCStr; + + let msg = format!("index out of bounds: the len is {} but the index is {}", + len as uint, index as uint); + msg.with_c_str(|buf| fail_(buf as *u8, file, line)) +} + /// This is the entry point of unwinding for things like lang items and such. /// The arguments are normally generated by the compiler, and need to /// have static lifetimes. |
