mirror of
https://github.com/systemd/systemd.git
synced 2024-11-06 16:59:03 +03:00
log: make asserts cheaper
On my x86_64 this shrinks the size of .text by 53 KB (7 %).
This commit is contained in:
parent
2b7dec8661
commit
b7f336383d
23
src/log.c
23
src/log.c
@ -618,18 +618,13 @@ int log_meta(
|
||||
return r;
|
||||
}
|
||||
|
||||
void log_assert(
|
||||
const char*file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *format, ...) {
|
||||
|
||||
_noreturn_ static void log_assert(const char *text, const char *file, int line, const char *func, const char *format) {
|
||||
static char buffer[LINE_MAX];
|
||||
va_list ap;
|
||||
|
||||
va_start(ap, format);
|
||||
vsnprintf(buffer, sizeof(buffer), format, ap);
|
||||
va_end(ap);
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wformat-nonliteral"
|
||||
snprintf(buffer, sizeof(buffer), format, text, file, line, func);
|
||||
#pragma GCC diagnostic pop
|
||||
|
||||
char_array_0(buffer);
|
||||
log_abort_msg = buffer;
|
||||
@ -638,6 +633,14 @@ void log_assert(
|
||||
abort();
|
||||
}
|
||||
|
||||
void log_assert_failed(const char *text, const char *file, int line, const char *func) {
|
||||
log_assert(text, file, line, func, "Assertion '%s' failed at %s:%u, function %s(). Aborting.");
|
||||
}
|
||||
|
||||
void log_assert_failed_unreachable(const char *text, const char *file, int line, const char *func) {
|
||||
log_assert(text, file, line, func, "Code should not be reached '%s' at %s:%u, function %s(). Aborting.");
|
||||
}
|
||||
|
||||
int log_set_target_from_string(const char *e) {
|
||||
LogTarget t;
|
||||
|
||||
|
@ -73,11 +73,8 @@ int log_meta(
|
||||
const char *func,
|
||||
const char *format, ...) _printf_attr_(5,6);
|
||||
|
||||
_noreturn_ void log_assert(
|
||||
const char*file,
|
||||
int line,
|
||||
const char *func,
|
||||
const char *format, ...) _printf_attr_(4,5);
|
||||
_noreturn_ void log_assert_failed(const char *text, const char *file, int line, const char *func);
|
||||
_noreturn_ void log_assert_failed_unreachable(const char *text, const char *file, int line, const char *func);
|
||||
|
||||
/* This modifies the buffer passed! */
|
||||
int log_dump_internal(
|
||||
|
@ -91,9 +91,7 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
|
||||
#define assert_se(expr) \
|
||||
do { \
|
||||
if (_unlikely_(!(expr))) \
|
||||
log_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
|
||||
"Assertion '%s' failed at %s:%u, function %s(). Aborting.", \
|
||||
#expr , __FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||
log_assert_failed(#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||
} while (false) \
|
||||
|
||||
/* We override the glibc assert() here. */
|
||||
@ -106,9 +104,7 @@ static inline size_t ALIGN_TO(size_t l, size_t ali) {
|
||||
|
||||
#define assert_not_reached(t) \
|
||||
do { \
|
||||
log_assert(__FILE__, __LINE__, __PRETTY_FUNCTION__, \
|
||||
"Code should not be reached '%s' at %s:%u, function %s(). Aborting.", \
|
||||
t, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||
log_assert_failed_unreachable(t, __FILE__, __LINE__, __PRETTY_FUNCTION__); \
|
||||
} while (false)
|
||||
|
||||
#define assert_cc(expr) \
|
||||
|
Loading…
Reference in New Issue
Block a user