Update of /cvsroot/linux-vax/usr/firmware_dumper
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv28414
Modified Files:
main.c
Log Message:
- Implement some "verbose" mode.
Index: main.c
===================================================================
RCS file: /cvsroot/linux-vax/usr/firmware_dumper/main.c,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- main.c 23 Jul 2004 17:48:44 -0000 1.2
+++ main.c 30 Sep 2004 21:27:28 -0000 1.3
@@ -26,6 +26,8 @@
#define DEFAULT_START "0x00000000"
#define DEFAULT_LEN "0"
#define DEFAULT_SCHEME "3"
+#define DEFAULT_VERBOSE 0
+
static struct backend_descriptor {
unsigned char *name;
@@ -73,6 +75,7 @@
fprintf (stderr, "--start 0xNNNNNNNN\n");
fprintf (stderr, "--len nnnn\n");
fprintf (stderr, "--scheme n\n");
+ fprintf (stderr, "--verbose\n");
fprintf (stderr, "\n");
fprintf (stderr, "scheme:");
fprintf (stderr, "\t1 - XXXXXXnn (low byte of byte longword)\n");
@@ -110,7 +113,7 @@
static int
read_memory_byte (struct backend_descriptor *target, int serial_fd,
- int outfile_fd, unsigned long long int address)
+ int outfile_fd, unsigned long long int address, unsigned char *data)
{
int ret1;
unsigned char one_byte;
@@ -118,8 +121,8 @@
ret1 = target->get_byte (serial_fd, &one_byte, address);
if (ret1 != 0) {
- fprintf (stderr, "Failed to read byte at address %lld\n",
- address);
+ fprintf (stderr, "Failed to read byte at address 0x%0*llx\n",
+ target->wordsize / 4, address);
return -1;
}
@@ -130,18 +133,22 @@
return -2;
}
+ if (data)
+ *data = one_byte;
+
return 0;
}
static int
read_memory (struct backend_descriptor *target, int serial_fd,
unsigned char *outfile, unsigned long long start,
- size_t len, int scheme)
+ size_t len, int scheme, int verbose)
{
int outfile_fd;
size_t i;
int ret;
int read_this_address;
+ unsigned char last_byte;
if (scheme < 1 || scheme > 6) {
fprintf (stderr, "Don't know how to handle scheme %d\n", scheme);
@@ -179,12 +186,14 @@
}
if (read_this_address) {
- ret = read_memory_byte (target, serial_fd, outfile_fd, start + i);
+ ret = read_memory_byte (target, serial_fd, outfile_fd, start + i, &last_byte);
if (ret != 0) {
- fprintf (stderr, "Failed to read byte at offset %lld\n",
+ fprintf (stderr, "Failed to read byte at offset 0x%llx\n",
(unsigned long long int) i);
return -3;
}
+ if (verbose)
+ printf ("[0x%0*llx] = [0x%0*llx+0x%0*x]= 0x%02x\n", target->wordsize / 4, start + i, target->wordsize / 4, start, target->wordsize / 4, i, last_byte);
}
}
@@ -211,12 +220,12 @@
unsigned char *len_string = strdup (DEFAULT_LEN);
unsigned char *outfile_string = strdup (DEFAULT_OUTFILE);
unsigned char *scheme_string = strdup (DEFAULT_SCHEME);
-
unsigned char *device_string = strdup (DEFAULT_DEVICE);
unsigned char *speed_string = strdup (DEFAULT_SPEED);
unsigned char *bits_string = strdup (DEFAULT_BITS);
unsigned char *parity_string = strdup (DEFAULT_PARITY);
unsigned char *stop_string = strdup (DEFAULT_STOP);
+ int verbose = DEFAULT_VERBOSE;
while (1) {
int option_index = 0;
@@ -232,9 +241,10 @@
{ .name = "help", .has_arg = no_argument, .flag = NULL, .val = 'i', },
{ .name = "outfile", .has_arg = required_argument, .flag = NULL, .val = 'j', },
{ .name = "scheme", .has_arg = required_argument, .flag = NULL, .val = 'k', },
+ { .name = "verbose", .has_arg = no_argument, .flag = NULL, .val = 'v', },
};
- c = getopt_long (argc, argv, "a:b:c:d:e:f:g:h:i", long_options, &option_index);
+ c = getopt_long (argc, argv, "a:b:c:d:e:f:g:h:iv", long_options, &option_index);
if (c == -1)
break;
@@ -308,6 +318,10 @@
}
break;
+ case 'v':
+ verbose = 1;
+ break;
+
case 'i':
default:
show_help = 1;
@@ -346,7 +360,7 @@
ret = read_memory (back, fd, outfile_string,
strtoull (start_string, NULL, 0),
strtoul (len_string, NULL, 0),
- atoi (scheme_string));
+ atoi (scheme_string), verbose);
if (back->fini)
back->fini (fd);
|