aboutsummaryrefslogtreecommitdiff
path: root/gdb
diff options
context:
space:
mode:
Diffstat (limited to 'gdb')
-rw-r--r--gdb/ChangeLog9
-rw-r--r--gdb/gdbtypes.c7
-rw-r--r--gdb/h8300-tdep.c12
-rw-r--r--gdb/remote-hms.c158
-rw-r--r--gdb/tm-h8300.h8
5 files changed, 118 insertions, 76 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 3e1192a..f4802ff 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,12 @@
+Mon Mar 2 23:00:12 1992 Steve Chamberlain (sac@thepub.cygnus.com)
+
+ * gdbtypes.c (lookup_pointer_type): initialize the TYPE_LENGTH of
+ a ptype to reflect the setting of TARGET_PTR_BIT. Set the
+ TYPE_FLAGS of a ptype to TYPE_FLAG_UNSIGNED.
+ * tm-h8300.h, h8300-tdep.c, remote-hms.c: personal checkpoint
+ * printcmd.c (print_address): if ADDR_BITS_REMOVE is defined, use
+ it before printing out the hex shape of an address.
+
Sun Mar 1 17:41:09 1992 Per Bothner (bothner@cygnus.com)
* rs6000-xdep.c (frame_initial_stack_address): Move
diff --git a/gdb/gdbtypes.c b/gdb/gdbtypes.c
index c67b41c..a2bf943 100644
--- a/gdb/gdbtypes.c
+++ b/gdb/gdbtypes.c
@@ -80,12 +80,13 @@ lookup_pointer_type (type)
TYPE_POINTER_TYPE (type) = ptype;
/* We assume the machine has only one representation for pointers! */
- /* FIXME: This confuses host<->target data representations, and is a
- poor assumption besides. */
- TYPE_LENGTH (ptype) = sizeof (char *);
+ TYPE_LENGTH (ptype) = TARGET_PTR_BIT / TARGET_CHAR_BIT;
TYPE_CODE (ptype) = TYPE_CODE_PTR;
+ /* pointers are unsigned */
+ TYPE_FLAGS(ptype) |= TYPE_FLAG_UNSIGNED;
+
}
return (ptype);
}
diff --git a/gdb/h8300-tdep.c b/gdb/h8300-tdep.c
index 4983e34..0ef703d 100644
--- a/gdb/h8300-tdep.c
+++ b/gdb/h8300-tdep.c
@@ -55,17 +55,17 @@ CORE_ADDR start_pc;
/* Skip past all push insns */
short int w;
- w = read_memory_integer(start_pc, 2);
+ w = read_memory_short(start_pc);
while (IS_PUSH(w))
{
start_pc+=2;
- w = read_memory_integer(start_pc, 2);
+ w = read_memory_short(start_pc);
}
/* Skip past a move to FP */
if (IS_MOVE_FP(w)) {
start_pc +=2 ;
- w = read_memory_integer(start_pc, 2);
+ w = read_memory_short(start_pc);
}
return start_pc;
@@ -287,7 +287,7 @@ examine_prologue (ip, limit, after_prolog_fp, fsr, fi)
/* Locals are always reffed based from the fp */
fi->locals_pointer = after_prolog_fp ;
/* The PC is at a known place */
- fi->from_pc = read_memory_integer(after_prolog_fp + reg_save_depth-2 , 2);
+ fi->from_pc = read_memory_short(after_prolog_fp + reg_save_depth-2 );
/* Rememeber any others too */
@@ -307,7 +307,7 @@ examine_prologue (ip, limit, after_prolog_fp, fsr, fi)
}
if (have_fp)
/* We keep the old FP in the SP spot */
- fsr->regs[SP_REGNUM] = read_memory_integer(fsr->regs[6],2);
+ fsr->regs[SP_REGNUM] = (read_memory_short(fsr->regs[6])) ;
else
fsr->regs[SP_REGNUM] = after_prolog_fp + reg_save_depth;
@@ -384,7 +384,7 @@ void h8300_pop_frame()
{
if(fsr.regs[regnum])
{
- write_register(regnum, read_memory_integer (fsr.regs[regnum], 2));
+ write_register(regnum, read_memory_short (fsr.regs[regnum]));
}
flush_cached_frames();
diff --git a/gdb/remote-hms.c b/gdb/remote-hms.c
index 4e4e349..75af3b9 100644
--- a/gdb/remote-hms.c
+++ b/gdb/remote-hms.c
@@ -510,14 +510,29 @@ int fromtty;
{
if (s->flags & SEC_LOAD)
{
- char *buffer = xmalloc(s->_raw_size);
- bfd_get_section_contents(abfd, s, buffer, 0, s->_raw_size);
+ int i;
- hms_write_inferior_memory(s->vma, buffer, s->_raw_size);
+
+#define DELTA 2048
+ char *buffer = xmalloc(DELTA);
+ printf_filtered("%s: %4x .. %4x ",s->name, s->vma, s->vma + s->_raw_size);
+ for (i = 0; i < s->_raw_size; i+= DELTA)
+ {
+ int delta = DELTA;
+ if (delta > s->_raw_size - i)
+ delta = s->_raw_size - i ;
+
+ bfd_get_section_contents(abfd, s, buffer, i, delta);
+ hms_write_inferior_memory(s->vma + i, buffer, delta);
+ printf_filtered("*");
+ fflush(stdout);
+ }
+ printf_filtered( "\n");
free(buffer);
}
s = s->next;
}
+
DEXIT("hms_load()");
}
@@ -545,16 +560,19 @@ hms_create_inferior (execfile, args, env)
if (OPEN(hms_desc))
{
-
+char buffer[100];
hms_kill(NULL,NULL);
hms_clear_breakpoints();
init_wait_for_inferior ();
/* Clear the input because what the hms sends back is different
* depending on whether it was running or not.
*/
+/*sprintf(buffer,"g %x", entry_pt);
+
+ hms_write_cr(buffer);
+ */
+hms_write_cr("");
- hms_write_cr("r");
-
expect_prompt();
@@ -680,6 +698,7 @@ set_rate()
#endif
ioctl (hms_desc, TIOCSETP, &sg);
+
}
static void
@@ -690,14 +709,13 @@ get_baudrate_right()
while (!is_baudrate_right())
{
+ which_rate++;
+
if (baudtab[which_rate].rate == -1)
{
which_rate = 0;
}
- else
- {
- which_rate++;
- }
+
baudrate = baudtab[which_rate].rate;
printf_filtered("Board not responding, trying %d baud\n",baudrate);
@@ -860,9 +878,8 @@ hms_resume (step, sig)
if (step)
{
hms_write_cr("s");
-
- hms_write("\003",1);
- expect_prompt();
+ expect("Step>");
+
/* Force the next hms_wait to return a trap. Not doing anything
about I/O from the target means that the user has to type
"continue" to see any. FIXME, this should be fixed. */
@@ -871,7 +888,7 @@ hms_resume (step, sig)
else
{
hms_write_cr("g");
- expect("g\r");
+ expect("g");
}
DEXIT("hms_resume()");
}
@@ -888,7 +905,7 @@ hms_wait (status)
of the string cannot recur in the string, or we will not
find some cases of the string in the input. */
- static char bpt[] = "At breakpoint:\r";
+ static char bpt[] = "At breakpoint:";
/* It would be tempting to look for "\n[__exit + 0x8]\n"
but that requires loading symbols with "yc i" and even if
we did do that we don't know that the file has symbols. */
@@ -920,46 +937,56 @@ hms_wait (status)
timeout = 0; /* Don't time out -- user program is running. */
immediate_quit = 1; /* Helps ability to QUIT */
- while (1) {
- QUIT; /* Let user quit and leave process running */
- ch_handled = 0;
- ch = readchar ();
- if (ch == *bp) {
- bp++;
- if (*bp == '\0')
- break;
- ch_handled = 1;
-
- *swallowed_p++ = ch;
- } else
- bp = bpt;
- if (ch == *ep || *ep == '?') {
- ep++;
- if (*ep == '\0')
- break;
-
- if (!ch_handled)
- *swallowed_p++ = ch;
- ch_handled = 1;
- } else
- ep = exitmsg;
- if (!ch_handled) {
- char *p;
- /* Print out any characters which have been swallowed. */
- for (p = swallowed; p < swallowed_p; ++p)
- putc (*p, stdout);
- swallowed_p = swallowed;
+ while (1)
+ {
+ QUIT; /* Let user quit and leave process running */
+ ch_handled = 0;
+ ch = readchar ();
+ if (ch == *bp)
+ {
+ bp++;
+ if (*bp == '\0')
+ break;
+ ch_handled = 1;
+
+ *swallowed_p++ = ch;
+ }
+ else
+ {
+ bp = bpt;
+ }
+ if (ch == *ep || *ep == '?')
+ {
+ ep++;
+ if (*ep == '\0')
+ break;
+
+ if (!ch_handled)
+ *swallowed_p++ = ch;
+ ch_handled = 1;
+ }
+ else
+ {
+ ep = exitmsg;
+ }
+
+ if (!ch_handled) {
+ char *p;
+ /* Print out any characters which have been swallowed. */
+ for (p = swallowed; p < swallowed_p; ++p)
+ putc (*p, stdout);
+ swallowed_p = swallowed;
- if ((ch != '\r' && ch != '\n') || swallowed_cr>10)
- {
- putc (ch, stdout);
- swallowed_cr = 10;
- }
- swallowed_cr ++;
-
+ if ((ch != '\r' && ch != '\n') || swallowed_cr>10)
+ {
+ putc (ch, stdout);
+ swallowed_cr = 10;
}
- }
+ swallowed_cr ++;
+
+ }
+ }
if (*bp== '\0')
{
WSETSTOP ((*status), SIGTRAP);
@@ -1044,11 +1071,11 @@ char *a;
{
int i;
write(hms_desc,a,l);
-if (!quiet)
- for (i = 0; i < l ; i++)
- {
- printf("%c", a[i]);
- }
+ if (!quiet)
+ for (i = 0; i < l ; i++)
+ {
+ printf("%c", a[i]);
+ }
}
hms_write_cr(s)
@@ -1081,8 +1108,6 @@ hms_fetch_registers ()
linebuf[REGREPLY_SIZE] = 0;
gottok = 0;
if (linebuf[0] == 'r' &&
- linebuf[1] == '\r' &&
- linebuf[2] == '\n' &&
linebuf[3] == 'P' &&
linebuf[4] == 'C' &&
linebuf[5] == '=' &&
@@ -1359,7 +1384,7 @@ hms_read_inferior_memory(memaddr, myaddr, len)
if (memaddr & 0xf) abort();
if (len != 16) abort();
- sprintf(buffer, "m %4x %4x", start, end);
+ sprintf(buffer, "m %4x %4x", start & 0xffff, end & 0xffff);
hms_write_cr(buffer);
/* drop the echo and newline*/
for (i = 0; i < 13; i++)
@@ -1410,7 +1435,7 @@ hms_read_inferior_memory(memaddr, myaddr, len)
- hms_write("\003",1);
+ hms_write_cr(" ");
expect_prompt();
@@ -1620,9 +1645,13 @@ char *s;
}
}
-static hms_speed(s)
+static
+hms_speed(s)
char *s;
{
+check_open();
+
+
if (s)
{
char buffer[100];
@@ -1637,10 +1666,7 @@ char *s;
which++;
}
-
-
printf_filtered("Checking target is in sync\n");
-
get_baudrate_right();
baudrate = newrate;
@@ -1648,7 +1674,7 @@ char *s;
baudrate);
sprintf(buffer, "tm %d. N 8 1", baudrate);
- hms_write(buffer);
+ hms_write_cr(buffer);
}
}
diff --git a/gdb/tm-h8300.h b/gdb/tm-h8300.h
index 330576e..12e5b05 100644
--- a/gdb/tm-h8300.h
+++ b/gdb/tm-h8300.h
@@ -44,11 +44,12 @@ extern void init_extra_frame_info ();
#define IEEE_FLOAT
-
/* Define the bit, byte, and word ordering of the machine. */
#define TARGET_BYTE_ORDER BIG_ENDIAN
#undef TARGET_INT_BIT
#define TARGET_INT_BIT 16
+#undef TARGET_PTR_BIT
+#define TARGET_PTR_BIT 16
/* Offset from address of function to start of its code.
@@ -304,3 +305,8 @@ UNSIGNED_SHORT(read_memory_integer (read_register (SP_REGNUM), 2))
#define NAMES_HAVE_UNDERSCORE
typedef unsigned short INSN_WORD;
+
+#define ADDR_BITS_REMOVE(addr) ((addr) & 0xffff)
+#define ADDR_BITS_SET(addr) (((addr)))
+
+#define read_memory_short(x) (read_memory_integer(x,2) & 0xffff)