* config/pa/tm-hppa.h (PROLOGUE_FIRSTLINE_OVERLAP): Define.
authorJeff Law <law@redhat.com>
Thu, 17 Aug 1995 04:01:24 +0000 (04:01 +0000)
committerJeff Law <law@redhat.com>
Thu, 17 Aug 1995 04:01:24 +0000 (04:01 +0000)
Yes, this dusty old macro is really the right thing to do when you've
got a port which performs scheduling on prologues...  Fixes latest
mentor gdb PR.

gdb/ChangeLog
gdb/config/pa/tm-hppa.h

index c5fef4ed723517aead3fbed62764460270c580d7..d19e663d05a3f9fead0660c08de369e72a36b71c 100644 (file)
@@ -1,3 +1,7 @@
+Wed Aug 16 21:54:39 1995  Jeff Law  (law@snake.cs.utah.edu)
+
+       * config/pa/tm-hppa.h (PROLOGUE_FIRSTLINE_OVERLAP): Define.
+
 Tue Aug 15 07:51:21 1995  steve chamberlain  <sac@slash.cygnus.com>
 
        * remote.c (remote_write_bytes): Chop up large transfers.
index d3ec6cf0f61fc3a4b7616e85e9a50fe307f83869..0e1c104ee24d37ddb12fbdc8f48b2cc809a5ff00 100644 (file)
@@ -19,7 +19,7 @@ GNU General Public License for more details.
 
 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software
-Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */
 
 /* Target system byte order. */
 
@@ -176,6 +176,27 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define PC_REGNUM PCOQ_HEAD_REGNUM
 #define NPC_REGNUM PCOQ_TAIL_REGNUM
 
+/*
+ * Processor Status Word Masks
+ */
+
+#define PSW_T   0x01000000      /* Taken Branch Trap Enable */
+#define PSW_H   0x00800000      /* Higher-Privilege Transfer Trap Enable */
+#define PSW_L   0x00400000      /* Lower-Privilege Transfer Trap Enable */
+#define PSW_N   0x00200000      /* PC Queue Front Instruction Nullified */
+#define PSW_X   0x00100000      /* Data Memory Break Disable */
+#define PSW_B   0x00080000      /* Taken Branch in Previous Cycle */
+#define PSW_C   0x00040000      /* Code Address Translation Enable */
+#define PSW_V   0x00020000      /* Divide Step Correction */
+#define PSW_M   0x00010000      /* High-Priority Machine Check Disable */
+#define PSW_CB  0x0000ff00      /* Carry/Borrow Bits */
+#define PSW_R   0x00000010      /* Recovery Counter Enable */
+#define PSW_Q   0x00000008      /* Interruption State Collection Enable */
+#define PSW_P   0x00000004      /* Protection ID Validation Enable */
+#define PSW_D   0x00000002      /* Data Address Translation Enable */
+#define PSW_I   0x00000001      /* External, Power Failure, Low-Priority */
+                                /* Machine Check Interruption Enable */
+
 /* When fetching register values from an inferior or a core file,
    clean them up using this macro.  BUF is a char pointer to
    the raw value of the register in the registers[] array.  */
@@ -192,7 +213,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 #define DO_REGISTERS_INFO(_regnum, fp) pa_do_registers_info (_regnum, fp)
 
 /* PA specific macro to see if the current instruction is nullified. */
+#ifndef INSTRUCTION_NULLIFIED
 #define INSTRUCTION_NULLIFIED ((int)read_register (IPSW_REGNUM) & 0x00200000)
+#endif
 
 /* Number of bytes of storage in the actual machine representation
    for register N.  On the PA-RISC, all regs are 4 bytes, including
@@ -263,7 +286,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
    the address in which a function should return its structure value,
    as a CORE_ADDR (or an expression that can be used as one).  */
 
-#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)((REGBUF) + 28))
+#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) \
+  (*(int *)((REGBUF) + REGISTER_BYTE (28)))
 
 /*
  * This macro defines the register numbers (from REGISTER_NAMES) that
@@ -382,7 +406,7 @@ call_dummy
        ble,n 0(sr0, r22)
 text_space                             ; Otherwise, go through _sr4export,
        ble (sr4, r1)                   ; which will return back here.
-       stw 31,-24(r30)
+       stw r31,-24(r30)
        break 4, 8
        mtsp r21, sr0
        ble,n 0(sr0, r22)
@@ -446,9 +470,12 @@ call_dummy
        ldw -48(%sp), %arg3
        ldil 0, %r31                    ; FUNC_LDIL_OFFSET must point here
        ldo 0(%r31), %r31               ; FUNC_LDO_OFFSET must point here
-       ble 0(0,%r31)
+       ble 0(%sr0, %r31)
        copy %r31, %r2
        break 4, 8 
+       nop                             ; restore_pc_queue expects these
+       bv,n 0(%r22)                    ; instructions to be here...
+       nop
 */
 
 /* Define offsets into the call dummy for the target function address */
@@ -457,9 +484,9 @@ call_dummy
 
 #define CALL_DUMMY {0x4bda3fb9, 0x4bd93fb1, 0x4bd83fa9, 0x4bd73fa1,\
                    0x23e00000, 0x37ff0000, 0xe7e00000, 0x081f0242,\
-                   0x00010004}
+                   0x00010004, 0x08000240, 0xeac0c002, 0x08000240}
 
-#define CALL_DUMMY_LENGTH (INSTRUCTION_SIZE * 9)
+#define CALL_DUMMY_LENGTH (INSTRUCTION_SIZE * 12)
 
 #endif
 
@@ -593,3 +620,10 @@ extern CORE_ADDR skip_trampoline_code PARAMS ((CORE_ADDR, char *));
 #define HPREAD_ADJUST_STACK_ADDRESS(ADDR) hpread_adjust_stack_address(ADDR)
 
 extern int hpread_adjust_stack_address PARAMS ((CORE_ADDR));
+
+/* When prologues are scheduled, the first line of the function may
+   overlap with prologue instructions.  We want to avoid "skipping"
+   to the start of the next source line in such situations (might
+   skip over a conditional branch when trying to set a breakpoint at
+   the start of a function.  */
+#define PROLOGUE_FIRSTLINE_OVERLAP