From 4b8404d153c58b95cb4420fc7603fdae62489a31 Mon Sep 17 00:00:00 2001 From: Arun Sharma Date: Fri, 24 Apr 2009 11:10:08 -0700 Subject: [PATCH] Remove the special casing of ia64 for GetIPInfo() This rule (no IP adjustment on ia64) may be correct for locating the right FDE. Unfortunately the same adjusted/unadjusted return address is being used also by __gxx_personality_v0() to locate the right call-site (the try {} block) for unwinding. And this case is already sensitive for off-by-one PC values. Unlike the FDE location where the function prologue + epilogue make it immune against off-by-one PC calculations. Therefore suggesting to unify it with non-ia64 case. Signed-off-by: Jan Kratochvil --- src/Makefile.am | 9 ++------ src/ia64/unwind_GetIPInfo.c | 43 ------------------------------------- 2 files changed, 2 insertions(+), 50 deletions(-) delete mode 100644 src/ia64/unwind_GetIPInfo.c diff --git a/src/Makefile.am b/src/Makefile.am index c08fb4a6..e6e3b330 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -69,13 +69,8 @@ libunwind_la_SOURCES_local_unwind = \ unwind/GetGR.c unwind/GetIP.c unwind/GetLanguageSpecificData.c \ unwind/GetRegionStart.c unwind/GetTextRelBase.c \ unwind/RaiseException.c unwind/Resume.c \ - unwind/Resume_or_Rethrow.c unwind/SetGR.c unwind/SetIP.c - -if ARCH_IA64 -libunwind_la_SOURCES_local_unwind += ia64/unwind_GetIPInfo.c -else -libunwind_la_SOURCES_local_unwind += unwind/GetIPInfo.c -endif # ARCH_IA64 + unwind/Resume_or_Rethrow.c unwind/SetGR.c unwind/SetIP.c \ + unwind/GetIPInfo.c # _ReadULEB()/_ReadSLEB() are needed for Intel C++ 8.0 compatibility libunwind_la_SOURCES_os_linux_local = mi/_ReadULEB.c mi/_ReadSLEB.c diff --git a/src/ia64/unwind_GetIPInfo.c b/src/ia64/unwind_GetIPInfo.c deleted file mode 100644 index dfdf5e83..00000000 --- a/src/ia64/unwind_GetIPInfo.c +++ /dev/null @@ -1,43 +0,0 @@ -/* libunwind - a platform-independent unwind library - Copyright (C) 2009 Red Hat - Contributed by Jan Kratochvil - -This file is part of libunwind. - -Permission is hereby granted, free of charge, to any person obtaining -a copy of this software and associated documentation files (the -"Software"), to deal in the Software without restriction, including -without limitation the rights to use, copy, modify, merge, publish, -distribute, sublicense, and/or sell copies of the Software, and to -permit persons to whom the Software is furnished to do so, subject to -the following conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF -MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE -LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION -OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION -WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - -#include "../unwind/unwind-internal.h" - -/* gcc/unwind-dw2.c: Retrieve the return address and flag whether that IP is - before or after first not yet fully executed instruction. - IP_BEFORE_INSN ensures leaving IP intact as was designed for ia64. */ - -PROTECTED unsigned long -_Unwind_GetIPInfo (struct _Unwind_Context *context, int *ip_before_insn) -{ - unw_word_t val; - - unw_get_reg (&context->cursor, UNW_REG_IP, &val); - *ip_before_insn = 1; - return val; -} - -unsigned long __libunwind_Unwind_GetIPInfo (struct _Unwind_Context *, int *) - ALIAS (_Unwind_GetIPInfo);