* infcmd.c (step_1), infrun.c (wait_for_inferior): Add comments
authorJim Kingdon <jkingdon@engr.sgi.com>
Thu, 23 Sep 1993 17:16:35 +0000 (17:16 +0000)
committerJim Kingdon <jkingdon@engr.sgi.com>
Thu, 23 Sep 1993 17:16:35 +0000 (17:16 +0000)
about SHIFT_INST_REGS.

* exec.c (exec_file_command): Set text_end based on all code readonly
sections, not just ".text".

* defs.h, infcmd.c, config/z8k/tm-z8k.h, config/m88k/tm-m88k.h,
config/sh/tm-sh.h, config/h8300/tm-h8300.h, config/h8500/tm-h8500.h,
z8k-tdep.c: Remove all references to ADDR_BITS_SET.
* config/m88k/tm-m88k.h: Define TARGET_WRITE_PC.

* config/m88k/tm-m88k.h: Add definitions for calling functions.

gdb/ChangeLog
gdb/config/h8300/tm-h8300.h
gdb/config/h8500/tm-h8500.h
gdb/config/m88k/tm-m88k.h
gdb/config/sh/tm-sh.h
gdb/config/z8k/tm-z8k.h
gdb/z8k-tdep.c

index 69373841358ffd1b78d6804417a6f2199ee3dbdc..c27d9967c4c7599264bf7f4c160d222b6ec46869 100644 (file)
@@ -1,3 +1,18 @@
+Thu Sep 23 10:49:37 1993  Jim Kingdon  (kingdon@lioth.cygnus.com)
+
+       * infcmd.c (step_1), infrun.c (wait_for_inferior): Add comments
+       about SHIFT_INST_REGS.
+
+       * exec.c (exec_file_command): Set text_end based on all code readonly
+       sections, not just ".text".
+
+       * defs.h, infcmd.c, config/z8k/tm-z8k.h, config/m88k/tm-m88k.h,
+       config/sh/tm-sh.h, config/h8300/tm-h8300.h, config/h8500/tm-h8500.h,
+       z8k-tdep.c: Remove all references to ADDR_BITS_SET.
+       * config/m88k/tm-m88k.h: Define TARGET_WRITE_PC.
+
+       * config/m88k/tm-m88k.h: Add definitions for calling functions.
+
 Thu Sep 23 00:13:06 1993  Peter Schauer  (pes@regent.e-technik.tu-muenchen.de)
 
        * config/mips/tm-mips.h (STORE_STRUCT_RETURN):  Define as noop as
index 67f5aa3fcd740e0fbcff6390276892d4a5028b5b..16d5415ebe612114eabcd8a5cda2f799fa2160c4 100644 (file)
@@ -284,7 +284,6 @@ extern CORE_ADDR h8300_skip_prologue ();
 typedef unsigned short INSN_WORD;
 
 #define ADDR_BITS_REMOVE(addr) ((addr) & 0xffff)
-#define ADDR_BITS_SET(addr) (((addr)))
 
 #define DONT_USE_REMOTE
 
index 75e377a1b1f446c6a7d18213d796ad33cb8d9dca..c908bf8c37fa75a3a7d7971698048a7b8d212895 100644 (file)
@@ -277,7 +277,6 @@ CORE_ADDR h8500_frame_chain (/* FRAME thisframe */);
 typedef unsigned short INSN_WORD;
 
 #define ADDR_BITS_REMOVE(addr) ((addr) & 0xffffff)
-#define ADDR_BITS_SET(addr) (((addr)))
 
 #define read_memory_short(x)  (read_memory_integer(x,2) & 0xffff)
 #define DONT_USE_REMOTE
index 7c64e0d6a7f89903bd61c610ec8e827361e5cac1..68bdd61fd7a9f00860cd58896a63f6cdf2fd1ed2 100644 (file)
@@ -66,7 +66,6 @@ extern CORE_ADDR skip_prologue ();
    of an instruction.  Shrug.  */
 
 #define ADDR_BITS_REMOVE(addr) ((addr) & ~3)
-#define ADDR_BITS_SET(addr) (((addr) | 0x00000002) - 4)
 
 /* Immediately after a function call, return the saved pc.
    Can't always go through the frames for this because on some machines
@@ -523,15 +522,103 @@ void frame_find_saved_regs PARAMS((struct frame_info *fi,
         frame_find_saved_regs (frame_info, &frame_saved_regs)
 
 \f
-/* There is not currently a functioning way to call functions in the
-   inferior.  */
+#define POP_FRAME pop_frame ()
+extern void pop_frame ();
 
-/* But if there was this is where we'd put the call dummy.  */
-/* #define CALL_DUMMY_LOCATION AFTER_TEXT_END */
+/* Call function stuff contributed by Kevin Buettner of Motorola.  */
+
+#define CALL_DUMMY_LOCATION AFTER_TEXT_END
+
+extern void m88k_push_dummy_frame();
+#define PUSH_DUMMY_FRAME       m88k_push_dummy_frame()
+
+#define CALL_DUMMY {                           \
+0x67ff00c0,    /*   0:   subu  #sp,#sp,0xc0 */ \
+0x243f0004,    /*   4:   st    #r1,#sp,0x4 */ \
+0x245f0008,    /*   8:   st    #r2,#sp,0x8 */ \
+0x247f000c,    /*   c:   st    #r3,#sp,0xc */ \
+0x249f0010,    /*  10:   st    #r4,#sp,0x10 */ \
+0x24bf0014,    /*  14:   st    #r5,#sp,0x14 */ \
+0x24df0018,    /*  18:   st    #r6,#sp,0x18 */ \
+0x24ff001c,    /*  1c:   st    #r7,#sp,0x1c */ \
+0x251f0020,    /*  20:   st    #r8,#sp,0x20 */ \
+0x253f0024,    /*  24:   st    #r9,#sp,0x24 */ \
+0x255f0028,    /*  28:   st    #r10,#sp,0x28 */ \
+0x257f002c,    /*  2c:   st    #r11,#sp,0x2c */ \
+0x259f0030,    /*  30:   st    #r12,#sp,0x30 */ \
+0x25bf0034,    /*  34:   st    #r13,#sp,0x34 */ \
+0x25df0038,    /*  38:   st    #r14,#sp,0x38 */ \
+0x25ff003c,    /*  3c:   st    #r15,#sp,0x3c */ \
+0x261f0040,    /*  40:   st    #r16,#sp,0x40 */ \
+0x263f0044,    /*  44:   st    #r17,#sp,0x44 */ \
+0x265f0048,    /*  48:   st    #r18,#sp,0x48 */ \
+0x267f004c,    /*  4c:   st    #r19,#sp,0x4c */ \
+0x269f0050,    /*  50:   st    #r20,#sp,0x50 */ \
+0x26bf0054,    /*  54:   st    #r21,#sp,0x54 */ \
+0x26df0058,    /*  58:   st    #r22,#sp,0x58 */ \
+0x26ff005c,    /*  5c:   st    #r23,#sp,0x5c */ \
+0x271f0060,    /*  60:   st    #r24,#sp,0x60 */ \
+0x273f0064,    /*  64:   st    #r25,#sp,0x64 */ \
+0x275f0068,    /*  68:   st    #r26,#sp,0x68 */ \
+0x277f006c,    /*  6c:   st    #r27,#sp,0x6c */ \
+0x279f0070,    /*  70:   st    #r28,#sp,0x70 */ \
+0x27bf0074,    /*  74:   st    #r29,#sp,0x74 */ \
+0x27df0078,    /*  78:   st    #r30,#sp,0x78 */ \
+0x63df0000,    /*  7c:   addu  #r30,#sp,0x0 */ \
+0x145f0000,    /*  80:   ld    #r2,#sp,0x0 */ \
+0x147f0004,    /*  84:   ld    #r3,#sp,0x4 */ \
+0x149f0008,    /*  88:   ld    #r4,#sp,0x8 */ \
+0x14bf000c,    /*  8c:   ld    #r5,#sp,0xc */ \
+0x14df0010,    /*  90:   ld    #r6,#sp,0x10 */ \
+0x14ff0014,    /*  94:   ld    #r7,#sp,0x14 */ \
+0x151f0018,    /*  98:   ld    #r8,#sp,0x18 */ \
+0x153f001c,    /*  9c:   ld    #r9,#sp,0x1c */ \
+0x5c200000,    /*  a0:   or.u  #r1,#r0,0x0 */ \
+0x58210000,    /*  a4:   or    #r1,#r1,0x0 */ \
+0xf400c801,    /*  a8:   jsr   #r1 */ \
+0xf000d1ff     /*  ac:   tb0   0x0,#r0,0x1ff */ \
+}
 
-/* When popping a frame on the 88k (say when doing a return command), the
-   calling function only expects to have the "preserved" registers restored.
-   Thus, those are the only ones that we even try to restore here.   */
+#define CALL_DUMMY_START_OFFSET 0x80
+#define CALL_DUMMY_LENGTH 0xb0
+
+/* FIXME: byteswapping.  */
+#define FIX_CALL_DUMMY(dummy, pc, fun, nargs, args, type, gcc_p)       \
+{                                                                      \
+  *(unsigned long *)((char *) (dummy) + 0xa0) |=                       \
+       (((unsigned long) (fun)) >> 16);                                \
+  *(unsigned long *)((char *) (dummy) + 0xa4) |=                       \
+       (((unsigned long) (fun)) & 0xffff);                             \
+  pc = text_end;                                                       \
+}
 
-#define POP_FRAME pop_frame ()
-extern void pop_frame ();
+#define STACK_ALIGN(addr) (((addr)+7) & -8)
+
+#define STORE_STRUCT_RETURN(addr, sp) \
+    write_register (SRA_REGNUM, (addr))
+
+#define NEED_TEXT_START_END 1
+
+/* According to the MC88100 RISC Microprocessor User's Manual, section
+   6.4.3.1.2:
+
+       ... can be made to return to a particular instruction by placing a
+       valid instruction address in the SNIP and the next sequential
+       instruction address in the SFIP (with V bits set and E bits clear).
+       The rte resumes execution at the instruction pointed to by the 
+       SNIP, then the SFIP.
+
+   The E bit is the least significant bit (bit 0).  The V (valid) bit is
+   bit 1.  This is why we logical or 2 into the values we are writing
+   below.  It turns out that SXIP plays no role when returning from an
+   exception so nothing special has to be done with it.  We could even
+   (presumably) give it a totally bogus value.
+
+   -- Kevin Buettner
+*/
+#define TARGET_WRITE_PC(val)   {                               \
+  write_register(SXIP_REGNUM, (long) val);                     \
+  write_register(SNIP_REGNUM, (long) val | 2);                 \
+  write_register(SFIP_REGNUM, ((long) val | 2) + 4);           \
+}
index b1f53c2550f86076677d129e915321d75baea389..784a4839ef5b0b4170a2ef678f81f6c3907f3cd1 100644 (file)
@@ -226,7 +226,6 @@ extern CORE_ADDR sh_skip_prologue ();
 typedef unsigned short INSN_WORD;
 
 #define ADDR_BITS_REMOVE(addr) ((addr) & 0xffffff)
-#define ADDR_BITS_SET(addr)    (addr)
 
 #define CALL_DUMMY_LENGTH 10
 
index 1599ea40c67bcf79a3644f14464b39078eedd3d8..5412c0499809555a4d81069dbb0da76eb3435be0 100644 (file)
@@ -291,7 +291,6 @@ extern void z8k_pop_frame PARAMS ((void));
 #define SP_ARG0 (1 * 4)
 
 #define ADDR_BITS_REMOVE(x) addr_bits_remove(x)
-#define ADDR_BITS_SET(x) addr_bits_set(x)
 int z8001_mode;
 #define BIG (z8001_mode)
 
index eb596bb595e15a71807c2dd88f82038ec6c84967..e6b5e8aff971d048b13fcc96427f8ad3504e4825 100644 (file)
@@ -296,12 +296,6 @@ frame_find_saved_regs (fip, fsrp)
 
 }
 
-void
-addr_bits_set ()
-{
-  abort ();
-}
-
 int
 saved_pc_after_call ()
 {