mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-08-06 15:17:01 +02:00
MINOR: debug: make sure calls to ha_crash_now() are never merged
As indicated in previous commit, we don't want calls to ha_crash_now() to be merged, since it will make gdb return a wrong line number. This was found to happen with gcc 4.7 and 4.8 in h3.c where 26 calls end up as only 5 to 18 "ud2" instructions depending on optimizations. By calling DO_NOT_FOLD() just before provoking the trap, we can reliably avoid this folding problem. Note that this does not address the case where abort() is used instead (DEBUG_USE_ABORT).
This commit is contained in:
parent
e06e8a2390
commit
2bb192ba91
@ -51,6 +51,7 @@
|
||||
#define ha_crash_now() do { \
|
||||
/* ud2 opcode: 2 bytes, raises illegal instruction */ \
|
||||
__asm__ volatile(".byte 0x0f,0x0b\n"); \
|
||||
DO_NOT_FOLD(); \
|
||||
my_unreachable(); \
|
||||
} while (0)
|
||||
|
||||
@ -58,6 +59,7 @@
|
||||
#define ha_crash_now() do { \
|
||||
/* udf#imm16: 4 bytes (), raises illegal instruction */ \
|
||||
__asm__ volatile(".byte 0x00,0x00,0x00,0x00\n"); \
|
||||
DO_NOT_FOLD(); \
|
||||
my_unreachable(); \
|
||||
} while (0)
|
||||
|
||||
@ -77,6 +79,7 @@ static inline __attribute((always_inline)) void ha_crash_now(void)
|
||||
#if __GNUC_PREREQ__(5, 0)
|
||||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
DO_NOT_FOLD();
|
||||
my_unreachable();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user