From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Harris To: Subject: Fix arm_addr_bits_remove: 26-bit Thumb doesn't exist Date: Sat, 20 Oct 2001 10:23:00 -0000 Message-id: X-SW-Source: 2001-10/msg00271.html I haven't actually encountered this bug in reality yet, but it looks to me as if arm_addr_bits_remove() is bogus. Specifically, it has a case for Thumb state in a 26-bit mode. According to the ARM ARM (2nd Edition, section A8.1), no processor will support both 26-bit mode and thumb state at all, let alone at the same time. I suspect this might be a noticable problem when debugging SVC mode code, since then R15 will have its bottom bit set, which arm_pc_is_thumb() is likely to interpret as meaning the CPU is in Thumb state. ChangeLog entry: 2001-10-20 Ben Harris * arm-tdep.c (arm_addr_bits_remove): Don't believe in 26-bit Thumb. Patch: *** arm-tdep.c 2000/07/26 00:32:33 --- arm-tdep.c 2001/10/20 17:14:36 *************** arm_pc_is_thumb_dummy (bfd_vma memaddr) *** 270,279 **** CORE_ADDR arm_addr_bits_remove (CORE_ADDR val) { ! if (arm_pc_is_thumb (val)) ! return (val & (arm_apcs_32 ? 0xfffffffe : 0x03fffffe)); else ! return (val & (arm_apcs_32 ? 0xfffffffc : 0x03fffffc)); } CORE_ADDR --- 270,281 ---- CORE_ADDR arm_addr_bits_remove (CORE_ADDR val) { ! if (!arm_apcs_32) ! return (val & 0x03fffffc); ! else if (arm_pc_is_thumb (val)) ! return (val & 0xfffffffe); else ! return (val & 0xfffffffc); } -- Ben Harris Portmaster, NetBSD/arm26