Skip to content
Snippets Groups Projects
Verified Commit 47bd5545 authored by Jeremy Soller's avatar Jeremy Soller
Browse files

Detailed information on abort using macro and new __abort function

parent 04d2f296
No related branches found
No related tags found
No related merge requests found
#ifndef _BITS_STDLIB_H
#define _BITS_STDLIB_H
# define abort() __abort(__func__, __FILE__, __LINE__)
#ifdef __cplusplus
extern "C" {
#endif
......
#include <stdint.h>
void abort();
uintptr_t __stack_chk_guard = 0xd048c37519fcadfe;
// manually define detailed abort function
void __abort(const char *func, const char *file, int line);
__attribute__((noreturn))
void __stack_chk_fail(void) {
abort();
// call detailed abort function
__abort(__func__, __FILE__, __LINE__);
}
......@@ -3,3 +3,12 @@ double strtod(const char *nptr, char **endptr);
long double strtold(const char *nptr, char **endptr) {
return (long double)strtod(nptr, endptr);
}
// manually define detailed abort function
void __abort(const char *func, const char *file, int line);
// backup definition of abort for programs that link it directly
void abort() {
// call detailed abort function
__abort(__func__, __FILE__, __LINE__);
}
......@@ -5,7 +5,6 @@ use crate::{
header::{stdio, stdlib},
platform::types::*,
};
use core::fmt::Write;
#[no_mangle]
pub unsafe extern "C" fn __assert_fail(
......@@ -18,14 +17,13 @@ pub unsafe extern "C" fn __assert_fail(
let file = CStr::from_ptr(file).to_str().unwrap();
let cond = CStr::from_ptr(cond).to_str().unwrap();
writeln!(
*stdio::stderr,
eprintln!(
"{}: {}:{}: Assertion `{}` failed.",
func,
file,
line,
cond
)
.unwrap();
stdlib::abort();
);
core::intrinsics::abort();
}
......@@ -90,8 +90,21 @@ pub unsafe extern "C" fn a64l(s: *const c_char) -> c_long {
}
#[no_mangle]
pub unsafe extern "C" fn abort() {
eprintln!("abort() called");
pub unsafe extern "C" fn __abort(
func: *const c_char,
file: *const c_char,
line: c_int,
) {
let func = CStr::from_ptr(func).to_str().unwrap();
let file = CStr::from_ptr(file).to_str().unwrap();
eprintln!(
"{}: {}:{}: Abort",
func,
file,
line
);
intrinsics::abort();
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment