CHDK_DE Vorschauversion  Trunk Rev. 6014
 Alle Datenstrukturen Dateien Funktionen Variablen Typdefinitionen Aufzählungen Aufzählungswerte Makrodefinitionen
extract_error_table.c-Dateireferenz
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include <stdlib.h>
#include "dumputil.h"
+ Include-Abhängigkeitsdiagramm für extract_error_table.c:

gehe zum Quellcode dieser Datei

Funktionen

void usage ()
 
void dump_error_table_dry (dump_t *dump, unsigned index)
 
void dump_error_table_vx (dump_t *dump, unsigned index)
 
int process_dump_dry (dump_t *dump)
 
int process_dump_vx (dump_t *dump)
 
int main (int argc, char **argv)
 

Dokumentation der Funktionen

void dump_error_table_dry ( dump_t dump,
unsigned  index 
)

Definiert in Zeile 17 der Datei extract_error_table.c.

18 {
19  unsigned i;
20  for(i=index; i < dump->words - 2 && dump->pw[i+1]; i+=2) {
21  printf("E%02d %02d %s\n",(short)(dump->pw[i] >> 16),dump->pw[i]&0xFFFF,deref_string_ptr(dump,(i+1)*4));
22  }
23 }
void dump_error_table_vx ( dump_t dump,
unsigned  index 
)

Definiert in Zeile 25 der Datei extract_error_table.c.

26 {
27  unsigned i;
28  for(i=index; i < dump->words - 2 && dump->pw[i+1]; i+=2) {
29  printf("E%02d %s\n",dump->pw[i+1],deref_string_ptr(dump,i*4));
30  }
31 }
int main ( int  argc,
char **  argv 
)

Definiert in Zeile 90 der Datei extract_error_table.c.

91 {
92 
93  dump_t dump;
94  int i;
95  const char *dumpname=NULL;
96  const char *base=NULL;
97  int opt_vxworks = 0;
98 
99  for(i = 1; i < argc; i++) {
100  if ( strcmp(argv[i],"-vxworks") == 0 ) {
101  opt_vxworks = 1;
102  } else if ( argv[i][0] == '-' ) {
103  fprintf(stderr,"%s unknown option %s\n",argv[0],argv[i]);
104  usage();
105  }
106  else {
107  if (!dumpname) {
108  dumpname=argv[i];
109  } else if(!base) {
110  base=argv[i];
111  } else {
112  fprintf(stderr,"%s unexpected %s\n",argv[0],argv[i]);
113  usage();
114  }
115  }
116  }
117  if(!dumpname || !base) {
118  usage();
119  }
120 
121  if(!load_dump(dumpname,base,&dump))
122  return 1;
123 
124  int r;
125  if(opt_vxworks) {
126  r=process_dump_vx(&dump);
127  } else {
128  r=process_dump_dry(&dump);
129  }
130  if(!r) {
131  return 1;
132  }
133  return 0;
134 }
int process_dump_dry ( dump_t dump)

Definiert in Zeile 33 der Datei extract_error_table.c.

34 {
35  const char *sig_str="NoError";
36  unsigned mark_offset=0;
37  unsigned mark_addr=0;
38  unsigned i;
39  while(find_cstring(dump,&mark_offset,sig_str)) {
40  mark_addr=offset_to_ptr(dump,mark_offset);
41  i=0;
42  while(find_word_aligned(dump,&i,mark_addr)) {
43  if( dump->pw[i-1] == 0) {
44  printf("error_table 0x%X\n",(i-1)*4+dump->base);
45  dump_error_table_dry(dump,i-1);
46  return 1;
47  }
48  i++;
49  }
50  mark_offset += strlen(sig_str);
51  }
52  if(!mark_offset) {
53  fprintf(stderr,"error: \"%s\" not found\n",sig_str);
54  }
55  else {
56  fprintf(stderr,"error: error table not found\n");
57  }
58  return 0;
59 }
int process_dump_vx ( dump_t dump)

Definiert in Zeile 61 der Datei extract_error_table.c.

62 {
63  const char *sig_str="BrtDrv.TimeOutPreBvInteg";
64  unsigned mark_offset=0;
65  unsigned mark_addr=0;
66  unsigned i;
67  while(find_cstring(dump,&mark_offset,sig_str)) {
68  mark_addr=offset_to_ptr(dump,mark_offset);
69  i=0;
70  while(find_word_aligned(dump,&i,mark_addr)) {
71  if( dump->pw[i+1] == 1) {
72  printf("error_table 0x%X\n",i*4+dump->base);
73  dump_error_table_vx(dump,i);
74  return 1;
75  }
76  i++;
77  }
78  mark_offset += strlen(sig_str);
79  }
80  if(!mark_offset) {
81  fprintf(stderr,"error: \"%s\" not found\n",sig_str);
82  }
83  else {
84  fprintf(stderr,"error: error table not found\n");
85  }
86  return 0;
87 }
void usage ( void  )

Definiert in Zeile 11 der Datei extract_error_table.c.

12 {
13  fprintf(stderr,"extract_error_table [-vxworks] <dumpfile.bin> <base address>\n");
14  exit(1);
15 }