From 7e9576e098e8f293a9bc9d53da7cda4335aa7d0f Mon Sep 17 00:00:00 2001 From: Mark Alexander Date: Mon, 29 Dec 1997 21:50:10 +0000 Subject: * dve3900-rom.c: New file to support Densan DVE-R3900/20 board. * monitor.c (monitor_debug): Move to utils.c, rename to puts_debug. (monitor_write_memory, monitor_read_memory, monitor_insert_breakpoint, monitor_remove_breakpoint): Remove useless address bits if current monitor has MO_ADDR_BITS_REMOVE flag. * monitor.h (MO_ADDR_BITS_REMOVE): Define. * utils.c (puts_debug): Formerly monitor_debug from monitor.c; move here and make public. Add better support for carriage returns. * defs.h (puts_debug): Declare. * dsrec.c (load_srec): Use puts_debug to print remotedebug information. Output header record correctly. (make_srec): Output a header record instead of a termination record if sect is non-NULL (value is ignored), but abfd is NULL. * config/mips/tm-tx39.h (DEFAULT_MIPS_TYPE): Remove definition. (REGISTER_NAMES): Define to add R3900-specific registers. * config/mips/tm-tx39l.h: Ditto. * config/mips/tx39.mt (TDEPFILES): Add dve3900-rom.o and support files. * config/mips/tx39l.mt: Ditto. --- gdb/dsrec.c | 31 +++++++++++++++++++++---------- 1 file changed, 21 insertions(+), 10 deletions(-) (limited to 'gdb/dsrec.c') diff --git a/gdb/dsrec.c b/gdb/dsrec.c index 03b5517..6a40e7e 100644 --- a/gdb/dsrec.c +++ b/gdb/dsrec.c @@ -82,9 +82,12 @@ load_srec (desc, file, load_offset, maxrecsize, flags, hashmark, waitack) is no data, so len is 0. */ reclen = maxrecsize; - make_srec (srec, 0, NULL, NULL, 0, &reclen, flags); + make_srec (srec, 0, NULL, (asection *)1, 0, &reclen, flags); if (remote_debug) - fprintf_unfiltered (gdb_stderr, "%.*s\\r\n", reclen-1, srec); + { + srec[reclen] = '\0'; + puts_debug ("sent -->", srec, "<--"); + } SERIAL_WRITE (desc, srec, reclen); for (s = abfd->sections; s; s = s->next) @@ -93,8 +96,7 @@ load_srec (desc, file, load_offset, maxrecsize, flags, hashmark, waitack) int numbytes; bfd_vma addr = bfd_get_section_vma (abfd, s) + load_offset; bfd_size_type size = bfd_get_section_size_before_reloc (s); - char * section_name = bfd_get_section_name (abfd, s); - + char * section_name = (char *)bfd_get_section_name (abfd, s); printf_filtered ("%s\t: 0x%08x .. 0x%08x ", section_name, (int) addr, (int) addr + size); gdb_flush (gdb_stdout); @@ -108,7 +110,10 @@ load_srec (desc, file, load_offset, maxrecsize, flags, hashmark, waitack) i, &reclen, flags); if (remote_debug) - fprintf_unfiltered (gdb_stderr, "%.*s\\r\n", reclen-1, srec); + { + srec[reclen] = '\0'; + puts_debug ("sent -->", srec, "<--"); + } /* Repeatedly send the S-record until a good acknowledgement is sent back. */ @@ -145,11 +150,16 @@ load_srec (desc, file, load_offset, maxrecsize, flags, hashmark, waitack) make_srec (srec, abfd->start_address, NULL, NULL, 0, &reclen, flags); if (remote_debug) - fprintf_unfiltered (gdb_stderr, "%.*s\\r\n", reclen-1, srec); + { + srec[reclen] = '\0'; + puts_debug ("sent -->", srec, "<--"); + } + SERIAL_WRITE (desc, srec, reclen); /* Some monitors need these to wake up properly. (Which ones? -sts) */ SERIAL_WRITE (desc, "\r\r", 2); + puts_debug ("sent -->", "\r\r", "<---"); SERIAL_FLUSH_INPUT (desc); @@ -215,6 +225,7 @@ make_srec (srec, targ_addr, abfd, sect, sectoff, maxrecsize, flags) const static char hextab[] = "0123456789ABCDEF"; const static char data_code_table[] = "123"; const static char term_code_table[] = "987"; + const static char header_code_table[] = "000"; const static char *formats[] = { "S%c%02X%04X", "S%c%02X%06X", "S%c%02X%08X" }; @@ -226,8 +237,8 @@ make_srec (srec, targ_addr, abfd, sect, sectoff, maxrecsize, flags) if (sect) { - tmp = flags; /* Data record */ - code_table = data_code_table; + tmp = flags; /* Data or header record */ + code_table = abfd ? data_code_table : header_code_table; binbuf = alloca (*maxrecsize/2); } else @@ -249,7 +260,7 @@ make_srec (srec, targ_addr, abfd, sect, sectoff, maxrecsize, flags) /* Now that we know the address size, we can figure out how much data this record can hold. */ - if (sect) + if (sect && abfd) { payload_size = (*maxrecsize - (1 + 1 + 2 + addr_size * 2 + 2)) / 2; payload_size = min (payload_size, sect->_raw_size - sectoff); @@ -257,7 +268,7 @@ make_srec (srec, targ_addr, abfd, sect, sectoff, maxrecsize, flags) bfd_get_section_contents (abfd, sect, binbuf, sectoff, payload_size); } else - payload_size = 0; /* Term packets have no payload */ + payload_size = 0; /* Term or header packets have no payload */ /* Output the header. */ -- cgit v1.1