annotate target-utils/libload/cmd_memdump_human.c @ 923:10b4bed10192

gsm-fw/L1: fix for the DSP patch corruption bug The L1 code we got from the LoCosto fw contains a feature for DSP CPU load measurement. This feature is a LoCosto-ism, i.e., not applicable to earlier DBB chips (Calypso) with their respective earlier DSP ROMs. Most of the code dealing with that feature is conditionalized as #if (DSP >= 38), but one spot was missed, and the MCU code was writing into an API word dealing with this feature. In TCS211 this DSP API word happens to be used by the DSP code patch, hence that write was corrupting the patched DSP code.
author Mychaela Falconia <falcon@ivan.Harhan.ORG>
date Mon, 19 Oct 2015 17:13:56 +0000
parents 9ee91bc6057c
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
19
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
1 /*
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
2 * This is a human-oriented memory dump command. The dump is given in
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
3 * both hex and ASCII, with readable spacing.
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
4 */
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
5
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
6 #include <sys/types.h>
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
7 #include "types.h"
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
8
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
9 void
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
10 cmd_memdump_human(argbulk)
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
11 char *argbulk;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
12 {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
13 char *argv[3];
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
14 u_long start, length;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
15 u_long offset;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
16 u_char intbuf[16];
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
17 int i, c;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
18
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
19 if (parse_args(argbulk, 2, 2, argv, 0) < 0)
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
20 return;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
21 if (parse_hexarg(argv[0], 8, &start) < 0) {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
22 printf("ERROR: arg1 must be a valid 32-bit hex address\n");
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
23 return;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
24 }
24
9ee91bc6057c loadagent buglet in the memory dump command argument parsing
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents: 19
diff changeset
25 if (parse_hexarg(argv[1], 8, &length) < 0) {
19
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
26 printf("ERROR: arg2 must be a valid 32-bit hex value (length)\n");
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
27 return;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
28 }
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
29 if (start & 0xF || length & 0xF) {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
30 printf("ERROR: implementation limit: 16-byte alignment required\n");
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
31 return;
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
32 }
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
33 for (offset = 0; offset < length; offset += 0x10) {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
34 bcopy(start + offset, intbuf, 0x10);
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
35 printf("%08X: ", start + offset);
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
36 for (i = 0; i < 16; i++) {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
37 printf("%02X ", intbuf[i]);
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
38 if ((i & 3) == 3)
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
39 putchar(' ');
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
40 }
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
41 for (i = 0; i < 16; i++) {
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
42 c = intbuf[i];
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
43 if (c >= ' ' && c <= '~')
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
44 putchar(c);
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
45 else
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
46 putchar('.');
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
47 }
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
48 putchar('\n');
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
49 }
c0e063494194 loadagent built with memory dump commands
Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
parents:
diff changeset
50 }