mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-21 20:40:05 +00:00
* sysdeps/generic/sysdep.h (cfi_offset, cfi_startproc,
cfi_endproc, cfi_def_cfa, cfi_def_ccfa_register, cfi_def_cfa_offset, cfi_adjust_cfa_offset, cfi_offset): Define. * sysdeps/x86_64/sysdep.h (CALL_MCOUNT): Add cfi directives. (ENTRY): Likewise. (END): Likewise. * configure.in: Test for asm cfi directives. * config.h.in: Add HAVE_ASM_CFI_DIRECTIVES. 2003-05-21 Andreas Jaeger <aj@suse.de> * sysdeps/generic/sysdep.h (cfi_offset, cfi_startproc, cfi_endproc, cfi_def_cfa, cfi_def_ccfa_register, cfi_def_cfa_offset, cfi_adjust_cfa_offset, cfi_offset): Define. * sysdeps/x86_64/sysdep.h (CALL_MCOUNT): Add cfi directives. (ENTRY): Likewise. (END): Likewise. * configure.in: Test for asm cfi directives. * config.h.in: Add HAVE_ASM_CFI_DIRECTIVES.
This commit is contained in:
parent
479aa8ecb2
commit
5018956927
14
ChangeLog
14
ChangeLog
@ -1,3 +1,17 @@
|
||||
2003-05-21 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/generic/sysdep.h (cfi_offset, cfi_startproc,
|
||||
cfi_endproc, cfi_def_cfa, cfi_def_ccfa_register,
|
||||
cfi_def_cfa_offset, cfi_adjust_cfa_offset, cfi_offset): Define.
|
||||
|
||||
* sysdeps/x86_64/sysdep.h (CALL_MCOUNT): Add cfi directives.
|
||||
(ENTRY): Likewise.
|
||||
(END): Likewise.
|
||||
|
||||
* configure.in: Test for asm cfi directives.
|
||||
|
||||
* config.h.in: Add HAVE_ASM_CFI_DIRECTIVES.
|
||||
|
||||
2003-05-17 Andreas Jaeger <aj@suse.de>
|
||||
|
||||
* sysdeps/unix/sysv/linux/x86_64/syscall.S: Revert last patch.
|
||||
|
@ -31,6 +31,9 @@
|
||||
/* Define if weak symbols are available via the `.weakext' directive. */
|
||||
#undef HAVE_ASM_WEAKEXT_DIRECTIVE
|
||||
|
||||
/* Define if CFI directives are available. */
|
||||
#undef HAVE_ASM_CFI_DIRECTIVES
|
||||
|
||||
/* Define to the assembler line separator character for multiple
|
||||
assembler instructions per line. Default is `;' */
|
||||
#undef ASM_LINE_SEP
|
||||
|
33
configure
vendored
33
configure
vendored
@ -5689,6 +5689,39 @@ _ACEOF
|
||||
;;
|
||||
esac
|
||||
|
||||
echo "$as_me:$LINENO: checking whether CFI directives are supported" >&5
|
||||
echo $ECHO_N "checking whether CFI directives are supported... $ECHO_C" >&6
|
||||
if test "${libc_cv_asm_cfi_directives+set}" = set; then
|
||||
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||
else
|
||||
cat > conftest.s <<EOF
|
||||
.text
|
||||
.type func,@function
|
||||
func:
|
||||
.cfi_startproc
|
||||
.cfi_endproc
|
||||
EOF
|
||||
if { ac_try='${CC-cc} $ASFLAGS -c conftest.s 1>&5'
|
||||
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||
(eval $ac_try) 2>&5
|
||||
ac_status=$?
|
||||
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||
(exit $ac_status); }; }; then
|
||||
libc_cv_asm_cfi_directives=yes
|
||||
else
|
||||
libc_cv_asm_cfi_directives=no
|
||||
fi
|
||||
rm -f conftest*
|
||||
fi
|
||||
echo "$as_me:$LINENO: result: $libc_cv_asm_cfi_directives" >&5
|
||||
echo "${ECHO_T}$libc_cv_asm_cfi_directives" >&6
|
||||
if test $libc_cv_asm_cfi_directives = yes; then
|
||||
cat >>confdefs.h <<\_ACEOF
|
||||
#define HAVE_ASM_CFI_DIRECTIVES 1
|
||||
_ACEOF
|
||||
|
||||
fi
|
||||
|
||||
echo "$as_me:$LINENO: checking if -g produces usable source locations for assembler-with-cpp" >&5
|
||||
echo $ECHO_N "checking if -g produces usable source locations for assembler-with-cpp... $ECHO_C" >&6
|
||||
if test "${libc_cv_cpp_asm_debuginfo+set}" = set; then
|
||||
|
18
configure.in
18
configure.in
@ -1502,6 +1502,24 @@ EOF
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_CACHE_CHECK(whether CFI directives are supported, libc_cv_asm_cfi_directives, [dnl
|
||||
cat > conftest.s <<EOF
|
||||
.text
|
||||
.type func,@function
|
||||
func:
|
||||
.cfi_startproc
|
||||
.cfi_endproc
|
||||
EOF
|
||||
if AC_TRY_COMMAND(${CC-cc} $ASFLAGS -c conftest.s 1>&AS_MESSAGE_LOG_FD); then
|
||||
libc_cv_asm_cfi_directives=yes
|
||||
else
|
||||
libc_cv_asm_cfi_directives=no
|
||||
fi
|
||||
rm -f conftest*])
|
||||
if test $libc_cv_asm_cfi_directives = yes; then
|
||||
AC_DEFINE(HAVE_ASM_CFI_DIRECTIVES)
|
||||
fi
|
||||
|
||||
AC_CACHE_CHECK(if -g produces usable source locations for assembler-with-cpp,
|
||||
libc_cv_cpp_asm_debuginfo, [dnl
|
||||
cat > conftest.S <<EOF
|
||||
|
@ -46,4 +46,25 @@
|
||||
#ifndef JUMPTARGET
|
||||
#define JUMPTARGET(sym) sym
|
||||
#endif
|
||||
|
||||
/* Makros to generate eh_frame unwind information. */
|
||||
# ifdef HAVE_ASM_CFI_DIRECTIVES
|
||||
# define cfi_startproc .cfi_startproc
|
||||
# define cfi_endproc .cfi_endproc
|
||||
# define cfi_def_cfa(reg, off) .cfi_def_cfa reg, off
|
||||
# define cfi_def_cfa_register(reg) .cfi_def_cfa_register reg
|
||||
# define cfi_def_cfa_offset(off) .cfi_def_cfa_offset off
|
||||
# define cfi_adjust_cfa_offset(off) .cfi_adjust_cfa_offset off
|
||||
# define cfi_offset(reg, off) .cfi_offset reg, off
|
||||
# else
|
||||
# define cfi_startproc
|
||||
# define cfi_endproc
|
||||
# define cfi_def_cfa(reg, off)
|
||||
# define cfi_def_cfa_register(reg)
|
||||
# define cfi_def_cfa_offset(off)
|
||||
# define cfi_adjust_cfa_offset(off)
|
||||
# define cfi_offset(reg, off)
|
||||
# endif
|
||||
|
||||
|
||||
#endif /* __ASSEMBLER__ */
|
||||
|
@ -50,18 +50,26 @@
|
||||
ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function) \
|
||||
.align ALIGNARG(4); \
|
||||
C_LABEL(name) \
|
||||
cfi_startproc; \
|
||||
CALL_MCOUNT
|
||||
|
||||
#undef END
|
||||
#define END(name) \
|
||||
ASM_SIZE_DIRECTIVE(name) \
|
||||
cfi_endproc; \
|
||||
ASM_SIZE_DIRECTIVE(name)
|
||||
|
||||
/* If compiled for profiling, call `mcount' at the start of each function. */
|
||||
#ifdef PROF
|
||||
/* The mcount code relies on a normal frame pointer being on the stack
|
||||
to locate our caller, so push one just for its benefit. */
|
||||
#define CALL_MCOUNT \
|
||||
pushq %rbp; movq %rsp, %rbp; call JUMPTARGET(mcount); popq %rbp;
|
||||
#define CALL_MCOUNT \
|
||||
pushq %rbp; \
|
||||
cfi_adjust_cfa_offset(8); \
|
||||
movq %rsp, %rbp; \
|
||||
cfi_def_cfa_register(%rbp); \
|
||||
call JUMPTARGET(mcount); \
|
||||
popq %rbp; \
|
||||
cfi_def_cfa(rsp,8);
|
||||
#else
|
||||
#define CALL_MCOUNT /* Do nothing. */
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user