From: Jan-Benedict G. <jb...@us...> - 2004-09-30 21:27:38
|
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); |