Build raise and abort function with dwarf2 info by using
-fasynchronous-unwind-tables to make backtrace() working across a
call to abort.
A scenario where it could be useful is within a signal handler that
wants to dump a backtrace when catching some signal (i.e SIGABRT).
Without having abort & raise built with DWARF2 information, it is not
possible for the libgcc stack unwinder to walk through the call stack
out of the abort/raise function.
Impacts in terms of size are really limited
Current
text data bss dec hex filename
164 0 0 164 a4 ./libpthread/nptl/sysdeps/unix/sysv/linux/raise.os
164 0 0 164 a4 ./libpthread/nptl/sysdeps/unix/sysv/linux/raise.oS
220 24 4 248 f8 ./libc/stdlib/abort.os
With (-fasynchronous-unwind-tables)
text data bss dec hex filename
216 0 0 216 d8 ./libpthread/nptl/sysdeps/unix/sysv/linux/raise.os
216 0 0 216 d8 ./libpthread/nptl/sysdeps/unix/sysv/linux/raise.oS
280 24 4 308 134 ./libc/stdlib/abort.os
Signed-off-by: Carmelo Amoroso <carmelo.amoroso@st.com>
Acked-by: Bernhard Reutner-Fischer <rep.dot.nop@gmail.com>
CSRC-y := $(filter-out $(notdir $(ARCH_OBJS:.o=.c)),$(CSRC-y))
endif
+CFLAGS-raise.c = -fasynchronous-unwind-tables
+
SIGNAL_DIR := $(top_srcdir)libc/signal
SIGNAL_OUT := $(top_builddir)libc/signal
gcvt.c
CSRC-$(UCLIBC_SUSV3_LEGACY) += mktemp.c
+CFLAGS-abort.c = -fasynchronous-unwind-tables
+
# multi source stdlib.c
CSRC-y += abs.c labs.c atoi.c atol.c strtol.c strtoul.c _stdlib_strto_l.c \
qsort.c qsort_r.c bsearch.c \
CFLAGS-timer_routines.c = -I$(top_srcdir)librt -DIS_IN_librt
CFLAGS-timer_settime.c = -I$(top_srcdir)librt -DIS_IN_librt
+CFLAGS-raise.c = -fasynchronous-unwind-tables
+
CFLAGS-linux = -DNOT_IN_libc -DIS_IN_libpthread $(SSP_ALL_CFLAGS)
CFLAGS-OMIT-libc_pthread_init.c = -DNOT_IN_libc -DIS_IN_libpthread