summaryrefslogtreecommitdiff
path: root/gnu/usr.bin/binutils/bfd/srec.c
diff options
context:
space:
mode:
authorFederico G. Schwindt <fgsch@cvs.openbsd.org>2002-05-13 17:07:46 +0000
committerFederico G. Schwindt <fgsch@cvs.openbsd.org>2002-05-13 17:07:46 +0000
commitc866442bb5e16be2b5323fee961ceb1315393514 (patch)
treef12f495081042abe1a40d83bf05d076ff8aa8a17 /gnu/usr.bin/binutils/bfd/srec.c
parent99d2ba46f95f9f99286b4c66576c4607669b0e7f (diff)
resolve conflicts.
Diffstat (limited to 'gnu/usr.bin/binutils/bfd/srec.c')
-rw-r--r--gnu/usr.bin/binutils/bfd/srec.c100
1 files changed, 50 insertions, 50 deletions
diff --git a/gnu/usr.bin/binutils/bfd/srec.c b/gnu/usr.bin/binutils/bfd/srec.c
index 31f69b04cf0..33dfaa7509d 100644
--- a/gnu/usr.bin/binutils/bfd/srec.c
+++ b/gnu/usr.bin/binutils/bfd/srec.c
@@ -1,5 +1,6 @@
/* BFD back-end for s-record objects.
- Copyright 1990, 91, 92, 93, 94, 95, 96, 97, 98, 1999
+ Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+ 2000
Free Software Foundation, Inc.
Written by Steve Chamberlain of Cygnus Support <sac@cygnus.com>.
@@ -24,7 +25,7 @@ SUBSECTION
S-Record handling
DESCRIPTION
-
+
Ordinary S-Records cannot hold anything but addresses and
data, so that's all that we implement.
@@ -42,10 +43,10 @@ DESCRIPTION
up and output them when it's time to close the bfd.
An s record looks like:
-
+
EXAMPLE
S<type><length><address><data><checksum>
-
+
DESCRIPTION
Where
o length
@@ -61,7 +62,7 @@ DESCRIPTION
7) four byte address termination record
8) three byte address termination record
9) two byte address termination record
-
+
o address
is the start address of the data following, or in the case of
a termination record, the start address of the image
@@ -71,7 +72,6 @@ DESCRIPTION
is the sum of all the raw byte data in the record, from the length
upwards, modulo 256 and subtracted from 255.
-
SUBSECTION
Symbol S-Record handling
@@ -101,7 +101,7 @@ EXAMPLE
DESCRIPTION
We allow symbols to be anywhere in the data stream - the module names
are always ignored.
-
+
*/
#include "bfd.h"
@@ -142,7 +142,7 @@ static asymbol *srec_make_empty_symbol PARAMS ((bfd *));
static long srec_get_symtab_upper_bound PARAMS ((bfd *));
static long srec_get_symtab PARAMS ((bfd *, asymbol **));
-/* Macros for converting between hex and binary. */
+/* Macros for converting between hex and binary. */
static CONST char digs[] = "0123456789ABCDEF";
@@ -154,7 +154,7 @@ static CONST char digs[] = "0123456789ABCDEF";
ch += ((x) & 0xff);
#define ISHEX(x) hex_p(x)
-/* Initialize by filling in the hex conversion array. */
+/* Initialize by filling in the hex conversion array. */
static void
srec_init ()
@@ -168,10 +168,21 @@ srec_init ()
}
}
-/* The maximum number of bytes on a line is FF */
+/* The maximum number of bytes on a line is FF. */
#define MAXCHUNK 0xff
-/* The number of bytes we fit onto a line on output */
-#define CHUNK 16
+
+/* Default size for a CHUNK. */
+#define DEFAULT_CHUNK 16
+
+/* The number of bytes we actually fit onto a line on output.
+ This variable can be modified by objcopy's --srec-len parameter.
+ For a 0x75 byte record you should set --srec-len=0x70. */
+unsigned int Chunk = DEFAULT_CHUNK;
+
+/* The type of srec output (free or forced to S3).
+ This variable can be modified by objcopy's --srec-forceS3
+ parameter. */
+boolean S3Forced = 0;
/* When writing an S-record file, the S-records can not be output as
they are seen. This structure is used to hold them in memory. */
@@ -467,7 +478,8 @@ srec_scan (abfd)
if (! srec_new_symbol (abfd, symname, symval))
goto error_return;
}
- while (c == ' ' || c == '\t');
+ while (c == ' ' || c == '\t')
+ ;
if (c == '\n')
++lineno;
@@ -478,7 +490,7 @@ srec_scan (abfd)
}
break;
-
+
case 'S':
{
file_ptr pos;
@@ -839,7 +851,7 @@ srec_set_arch_mach (abfd, arch, mach)
return bfd_default_set_arch_mach (abfd, arch, mach);
}
-/* we have to save up all the Srecords for a splurge before output */
+/* We have to save up all the Srecords for a splurge before output. */
static boolean
srec_set_section_contents (abfd, section, location, offset, bytes_to_do)
@@ -866,19 +878,17 @@ srec_set_section_contents (abfd, section, location, offset, bytes_to_do)
return false;
memcpy ((PTR) data, location, (size_t) bytes_to_do);
- if ((section->lma + offset + bytes_to_do - 1) <= 0xffff)
- {
-
- }
+ /* Ff S3Forced is true then always select S3 records,
+ regardless of the siez of the addresses. */
+ if (S3Forced)
+ tdata->type = 3;
+ else if ((section->lma + offset + bytes_to_do - 1) <= 0xffff)
+ ; /* The default, S1, is OK. */
else if ((section->lma + offset + bytes_to_do - 1) <= 0xffffff
&& tdata->type <= 2)
- {
- tdata->type = 2;
- }
+ tdata->type = 2;
else
- {
- tdata->type = 3;
- }
+ tdata->type = 3;
entry->data = data;
entry->where = section->lma + offset;
@@ -912,8 +922,8 @@ srec_set_section_contents (abfd, section, location, offset, bytes_to_do)
/* Write a record of type, of the supplied number of bytes. The
supplied bytes and length don't have a checksum. That's worked out
- here
-*/
+ here. */
+
static boolean
srec_write_record (abfd, type, address, data, end)
bfd *abfd;
@@ -933,7 +943,7 @@ srec_write_record (abfd, type, address, data, end)
*dst++ = '0' + type;
length = dst;
- dst += 2; /* leave room for dst*/
+ dst += 2; /* Leave room for dst. */
switch (type)
{
@@ -961,7 +971,7 @@ srec_write_record (abfd, type, address, data, end)
dst += 2;
}
- /* Fill in the length */
+ /* Fill in the length. */
TOHEX (length, (dst - length) / 2, check_sum);
check_sum &= 0xff;
check_sum = 255 - check_sum;
@@ -976,8 +986,6 @@ srec_write_record (abfd, type, address, data, end)
return true;
}
-
-
static boolean
srec_write_header (abfd)
bfd *abfd;
@@ -986,11 +994,10 @@ srec_write_header (abfd)
bfd_byte *dst = buffer;
unsigned int i;
- /* I'll put an arbitary 40 char limit on header size */
+ /* I'll put an arbitary 40 char limit on header size. */
for (i = 0; i < 40 && abfd->filename[i]; i++)
- {
- *dst++ = abfd->filename[i];
- }
+ *dst++ = abfd->filename[i];
+
return srec_write_record (abfd, 0, 0, buffer, dst);
}
@@ -1008,8 +1015,8 @@ srec_write_section (abfd, tdata, list)
bfd_vma address;
unsigned int octets_this_chunk = list->size - octets_written;
- if (octets_this_chunk > CHUNK)
- octets_this_chunk = CHUNK;
+ if (octets_this_chunk > Chunk)
+ octets_this_chunk = Chunk;
address = list->where + octets_written / bfd_octets_per_byte (abfd);
@@ -1038,14 +1045,12 @@ srec_write_terminator (abfd, tdata)
abfd->start_address, buffer, buffer);
}
-
-
static boolean
srec_write_symbols (abfd)
bfd *abfd;
{
char buffer[MAXCHUNK];
- /* Dump out the symbols of a bfd */
+ /* Dump out the symbols of a bfd. */
int i;
int count = bfd_get_symcount (abfd);
@@ -1065,7 +1070,7 @@ srec_write_symbols (abfd)
if (! bfd_is_local_label (abfd, s)
&& (s->flags & BSF_DEBUGGING) == 0)
{
- /* Just dump out non debug symbols */
+ /* Just dump out non debug symbols. */
bfd_size_type l;
char buf2[40], *p;
@@ -1107,7 +1112,7 @@ internal_srec_write_object_contents (abfd, symbols)
if (! srec_write_header (abfd))
return false;
- /* Now wander though all the sections provided and output them */
+ /* Now wander though all the sections provided and output them. */
list = tdata->head;
while (list != (srec_data_list_type *) NULL)
@@ -1133,7 +1138,6 @@ symbolsrec_write_object_contents (abfd)
return internal_srec_write_object_contents (abfd, 1);
}
-/*ARGSUSED*/
static int
srec_sizeof_headers (abfd, exec)
bfd *abfd ATTRIBUTE_UNUSED;
@@ -1195,7 +1199,7 @@ srec_get_symtab (abfd, alocation)
c->udata.p = NULL;
}
}
-
+
for (i = 0; i < symcount; i++)
*alocation++ = csymbols++;
*alocation = NULL;
@@ -1203,7 +1207,6 @@ srec_get_symtab (abfd, alocation)
return symcount;
}
-/*ARGSUSED*/
static void
srec_get_symbol_info (ignore_abfd, symbol, ret)
bfd *ignore_abfd ATTRIBUTE_UNUSED;
@@ -1213,7 +1216,6 @@ srec_get_symbol_info (ignore_abfd, symbol, ret)
bfd_symbol_info (symbol, ret);
}
-/*ARGSUSED*/
static void
srec_print_symbol (ignore_abfd, afile, symbol, how)
bfd *ignore_abfd ATTRIBUTE_UNUSED;
@@ -1316,12 +1318,10 @@ const bfd_target srec_vec =
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
NULL,
-
+
(PTR) 0
};
-
-
const bfd_target symbolsrec_vec =
{
"symbolsrec", /* name */
@@ -1373,6 +1373,6 @@ const bfd_target symbolsrec_vec =
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
NULL,
-
+
(PTR) 0
};