summary refs log tree commit diff
path: root/sysdeps/generic/unwind-dw2.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2002-01-08 06:28:46 +0000
committerUlrich Drepper <drepper@redhat.com>2002-01-08 06:28:46 +0000
commita0dcb6896c35abf88810296367a63da75ebf1828 (patch)
treed2c3fad2eab4eac4f2020866ca36f2cd4a011169 /sysdeps/generic/unwind-dw2.c
parentabd336891bd17071ed166ae536ef381dbafe00b3 (diff)
downloadglibc-a0dcb6896c35abf88810296367a63da75ebf1828.tar.gz
glibc-a0dcb6896c35abf88810296367a63da75ebf1828.tar.xz
glibc-a0dcb6896c35abf88810296367a63da75ebf1828.zip
Update.
2002-01-03  Jakub Jelinek  <jakub@redhat.com>

	* elf/Makefile (routines, shared-only-routines): Add
	unwind-dw2-fde-glibc instead of unwind-dw2-fde.
	* elf/elf.h (PT_GNU_EH_FRAME): Define.
	* sysdeps/generic/unwind-dw2-fde-glibc.c: New file.
	* sysdeps/generic/unwind-dw2-fde.c (__register_frame_info_bases):
	Optimize if .eh_frame section contains no FDEs.
	(__register_frame, __deregister_frame_info_bases,
	__deregister_frame): Likewise.
	* sysdeps/generic/unwind-dw2.c (execute_cfa_program): Fix
	DW_CFA_restore handling.

2002-01-07  Stephen L Moshier  <moshier@mediaone.net>
Diffstat (limited to 'sysdeps/generic/unwind-dw2.c')
-rw-r--r--sysdeps/generic/unwind-dw2.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sysdeps/generic/unwind-dw2.c b/sysdeps/generic/unwind-dw2.c
index ac56e7c35c..ca0299468f 100644
--- a/sysdeps/generic/unwind-dw2.c
+++ b/sysdeps/generic/unwind-dw2.c
@@ -721,9 +721,9 @@ execute_cfa_program (const unsigned char *insn_ptr,
       _Unwind_Sword offset;
       _Unwind_Ptr ptrtmp;
 
-      if (insn & DW_CFA_advance_loc)
+      if ((insn & 0xc0) == DW_CFA_advance_loc)
 	fs->pc += (insn & 0x3f) * fs->code_align;
-      else if (insn & DW_CFA_offset)
+      else if ((insn & 0xc0) == DW_CFA_offset)
 	{
 	  reg = insn & 0x3f;
 	  insn_ptr = read_uleb128 (insn_ptr, &ptrtmp);
@@ -731,7 +731,7 @@ execute_cfa_program (const unsigned char *insn_ptr,
 	  fs->regs.reg[reg].how = REG_SAVED_OFFSET;
 	  fs->regs.reg[reg].loc.offset = offset;
 	}
-      else if (insn & DW_CFA_restore)
+      else if ((insn & 0xc0) == DW_CFA_restore)
 	{
 	  reg = insn & 0x3f;
 	  fs->regs.reg[reg].how = REG_UNSAVED;