From: Gabriel Dos Reis Date: Thu, 4 Dec 2003 02:18:22 +0000 (+0000) Subject: [multiple changes] X-Git-Tag: releases/gcc-3.3.3~242 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=379b7071934942987d27845e7ec5908ac5ace6f7;p=thirdparty%2Fgcc.git [multiple changes] 2003-11-29 James E Wilson * gcc.c (init_spec): Pass -lunwind to init_gcc_specs in eh_name instead of in shared_name. 2003-11-20 David Mosberger * config/t-libunwind (LIB2ADDEH): Add unwind-c.c. (SHLIB_LC): Define. * unwind-libunwind.c (_Unwind_GetCFA): Implement. (_Unwind_GetBSP) [UNW_TARGET_IA64]: New function. From-SVN: r74262 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 565dd9c78bb3..871348e91d98 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,17 @@ +2003-12-03 James E Wilson + + 2003-11-29 James E Wilson + * gcc.c (init_spec): Pass -lunwind to init_gcc_specs in eh_name + instead of in shared_name. + +2003-12-03 David Mosberger + + 2003-11-20 David Mosberger + * config/t-libunwind (LIB2ADDEH): Add unwind-c.c. + (SHLIB_LC): Define. + * unwind-libunwind.c (_Unwind_GetCFA): Implement. + (_Unwind_GetBSP) [UNW_TARGET_IA64]: New function. + 2003-12-03 Jakub Jelinek * expr.c (store_constructor): Only set RTX_UNCHANGING_P for diff --git a/gcc/config/t-libunwind b/gcc/config/t-libunwind index be50bc481c5f..53ba327a3167 100644 --- a/gcc/config/t-libunwind +++ b/gcc/config/t-libunwind @@ -1 +1,6 @@ -LIB2ADDEH = $(srcdir)/unwind-libunwind.c $(srcdir)/unwind-sjlj.c +# Override the default value from t-slibgcc-elf-ver and mention -lunwind +# so that the resulting libgcc_s.so has the necessary DT_NEEDED entry for +# libunwind. +SHLIB_LC = -lunwind -lc +LIB2ADDEH = $(srcdir)/unwind-libunwind.c $(srcdir)/unwind-sjlj.c \ + $(srcdir)/unwind-c.c diff --git a/gcc/gcc.c b/gcc/gcc.c index 4a3baf8e600d..92d2e44cc0dc 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c @@ -1570,12 +1570,14 @@ init_spec () #else "-lgcc_s%M" #endif + , + "-lgcc", + "-lgcc_eh" #ifdef USE_LIBUNWIND_EXCEPTIONS " -lunwind" #endif - , - "-lgcc", - "-lgcc_eh"); + ); + p += 5; in_sep = 0; } @@ -1591,7 +1593,11 @@ init_spec () #endif , "libgcc.a%s", - "libgcc_eh.a%s"); + "libgcc_eh.a%s" +#ifdef USE_LIBUNWIND_EXCEPTIONS + "libunwind.a%s" +#endif + ); p += 10; in_sep = 0; } diff --git a/gcc/unwind-libunwind.c b/gcc/unwind-libunwind.c index 2e53a59eac7b..89e841759cf9 100644 --- a/gcc/unwind-libunwind.c +++ b/gcc/unwind-libunwind.c @@ -110,9 +110,11 @@ _Unwind_GetGR (struct _Unwind_Context *context, int index) _Unwind_Word _Unwind_GetCFA (struct _Unwind_Context *context) { - /* ??? Is there any way to get this information? */ - return NULL; -} + unw_word_t ret; + + unw_get_reg (&context->cursor, UNW_IA64_SP, &ret); + return ret; +} /* Overwrite the saved value for register REG in CONTEXT with VAL. */ @@ -167,6 +169,19 @@ _Unwind_FindEnclosingFunction (void *pc) return NULL; } +#ifdef UNW_TARGET_IA64 + +_Unwind_Word +_Unwind_GetBSP (struct _Unwind_Context *context) +{ + unw_word_t ret; + + unw_get_reg (&context->cursor, UNW_IA64_BSP, &ret); + return ret; +} + +#endif + #include "unwind.inc" #endif /* !__USING_SJLJ_EXCEPTIONS__ */