🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gdb.bug
Article #176

Backtrace bug on HP PA

#176
From: perobert
Date: Mon, 10 Aug 1992 22:24
89 lines
5658 bytes
There is a bug in the code for HP PA that causes the backtrace command
to occasionally go into an infinite loop. The problem is in tm-hppa.h
where a line was inadvertently deleted. The other changes have been made
so that the compiler won't give warnings. ~ftp/dist/pa-gdb-4.5.tar.Z on
jaguar.cs.utah.edu has been updated with the fix. Also a number of
people have been having trouble applying our tar file because some
files in the stock gdb-4.6 have a protection of 444.

Thanks

-Paul

The fix:
rcsdiff -r1.2 -c tm-hppa.h
RCS file: RCS/tm-hppa.h,v
retrieving revision 1.2
diff -c -r1.2 tm-hppa.h
*** /tmp/,RCSt1026853   Mon Aug 10 16:03:49 1992
--- tm-hppa.h   Mon Aug 10 14:47:46 1992
***************
*** 400,405 ****
--- 400,406 ----
            { regnum = GET_FIELD (this_insn, 27, 31);                   \
              (frame_saved_regs).regs[regnum + FP0_REGNUM] = next_addr; \
              next_addr += 8;                                           \
+               pc += 4;                                                  \
            }                                                           \
          else                                                          \
            break;                                                      \
***************
*** 421,429 ****
    /* Space for "arguments"; the RP goes in here. */                   \
    sp += 48;                                                           \
    int_buffer = read_register (RP_REGNUM) | 0x3;                              \
!   write_memory (sp - 20, &int_buffer, 4);                             \
    int_buffer = read_register (FP_REGNUM);                             \
!   write_memory (sp, &int_buffer, 4);                                  \
    write_register (FP_REGNUM, sp);                                     \
    sp += 4;                                                            \
    for (regnum = 1; regnum < 31; regnum++)                             \
--- 422,430 ----
    /* Space for "arguments"; the RP goes in here. */                   \
    sp += 48;                                                           \
    int_buffer = read_register (RP_REGNUM) | 0x3;                              \
!   write_memory (sp - 20, (char *)&int_buffer, 4);                            \
    int_buffer = read_register (FP_REGNUM);                             \
!   write_memory (sp, (char *)&int_buffer, 4);                                 \
    write_register (FP_REGNUM, sp);                                     \
    sp += 4;                                                            \
    for (regnum = 1; regnum < 31; regnum++)                             \
***************
*** 430,437 ****
      if (regnum != RP_REGNUM && regnum != FP_REGNUM)                   \
        sp = push_word (sp, read_register (regnum));                    \
    for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)              \
!     { read_register_bytes (REGISTER_BYTE (regnum), &freg_buffer, 8);  \
!       sp = push_bytes (sp, &freg_buffer, 8);}                         \
    sp = push_word (sp, read_register (IPSW_REGNUM));                   \
    sp = push_word (sp, read_register (SAR_REGNUM));                    \
    sp = push_word (sp, read_register (PCOQ_TAIL_REGNUM));              \
--- 431,438 ----
      if (regnum != RP_REGNUM && regnum != FP_REGNUM)                   \
        sp = push_word (sp, read_register (regnum));                    \
    for (regnum = FP0_REGNUM; regnum < NUM_REGS; regnum++)              \
!     { read_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8); \
!       sp = push_bytes (sp, (char *)&freg_buffer, 8);}                        \
    sp = push_word (sp, read_register (IPSW_REGNUM));                   \
    sp = push_word (sp, read_register (SAR_REGNUM));                    \
    sp = push_word (sp, read_register (PCOQ_TAIL_REGNUM));              \
***************
*** 455,462 ****
        write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
    for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)               \
      if (fsr.regs[regnum])                                             \
!       { read_memory (fsr.regs[regnum], &freg_buffer, 8);              \
!         write_register_bytes (REGISTER_BYTE (regnum), &freg_buffer, 8); }\
    if (fsr.regs[IPSW_REGNUM])                                          \
      write_register (IPSW_REGNUM,                                      \
                    read_memory_integer (fsr.regs[IPSW_REGNUM], 4));    \
--- 456,463 ----
        write_register (regnum, read_memory_integer (fsr.regs[regnum], 4)); \
    for (regnum = NUM_REGS - 1; regnum >= FP0_REGNUM ; regnum--)               \
      if (fsr.regs[regnum])                                             \
!       { read_memory (fsr.regs[regnum], (char *)&freg_buffer, 8);             \
!         write_register_bytes (REGISTER_BYTE (regnum), (char *)&freg_buffer, 8)
; }\
    if (fsr.regs[IPSW_REGNUM])                                          \
      write_register (IPSW_REGNUM,                                      \
                    read_memory_integer (fsr.regs[IPSW_REGNUM], 4));    \
Technical Details
Message-ID: <9208102225.AA24561@bells.cs.utah.edu>
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!bells.cs.utah.edu!perobert

Show Full Headers
Complete Article Headers
Newsgroups: gnu.gdb.bug
Path: arc1-ca.pugleaf.net!sparky!uunet!cis.ohio-state.edu!bells.cs.utah.edu!perobert
From: perobert@bells.cs.utah.edu
Subject: Backtrace bug on HP PA
Message-ID: <9208102225.AA24561@bells.cs.utah.edu>
Sender: gnulists@ai.mit.edu
Organization: GNUs Not Usenet
Distribution: gnu
Date: Mon, 10 Aug 1992 22:24:56 GMT
Approved: bug-gdb@prep.ai.mit.edu
Lines: 90