File: /usr/src/linux/arch/ppc/boot/utils/piggyback.c
1 /*
2 * BK Id: SCCS/s.piggyback.c 1.7 05/18/01 15:17:23 cort
3 */
4 #include <stdio.h>
5 #include <unistd.h>
6
7 extern long ce_exec_config[];
8
9 int main(int argc, char *argv[])
10 {
11 int i, cnt, pos, len;
12 unsigned int cksum, val;
13 unsigned char *lp;
14 unsigned char buf[8192];
15 if (argc != 2)
16 {
17 fprintf(stderr, "usage: %s name <in-file >out-file\n",
18 argv[0]);
19 exit(1);
20 }
21 fprintf(stdout, "#\n");
22 fprintf(stdout, "# Miscellaneous data structures:\n");
23 fprintf(stdout, "# WARNING - this file is automatically generated!\n");
24 fprintf(stdout, "#\n");
25 fprintf(stdout, "\n");
26 fprintf(stdout, "\t.data\n");
27 fprintf(stdout, "\t.globl %s_data\n", argv[1]);
28 fprintf(stdout, "%s_data:\n", argv[1]);
29 pos = 0;
30 cksum = 0;
31 while ((len = read(0, buf, sizeof(buf))) > 0)
32 {
33 cnt = 0;
34 lp = (unsigned char *)buf;
35 len = (len + 3) & ~3; /* Round up to longwords */
36 for (i = 0; i < len; i += 4)
37 {
38 if (cnt == 0)
39 {
40 fprintf(stdout, "\t.long\t");
41 }
42 fprintf(stdout, "0x%02X%02X%02X%02X", lp[0], lp[1], lp[2], lp[3]);
43 val = *(unsigned long *)lp;
44 cksum ^= val;
45 lp += 4;
46 if (++cnt == 4)
47 {
48 cnt = 0;
49 fprintf(stdout, " # %x \n", pos+i-12);
50 fflush(stdout);
51 } else
52 {
53 fprintf(stdout, ",");
54 }
55 }
56 if (cnt)
57 {
58 fprintf(stdout, "0\n");
59 }
60 pos += len;
61 }
62 fprintf(stdout, "\t.globl %s_len\n", argv[1]);
63 fprintf(stdout, "%s_len:\t.long\t0x%x\n", argv[1], pos);
64 fflush(stdout);
65 fclose(stdout);
66 fprintf(stderr, "cksum = %x\n", cksum);
67 exit(0);
68 }
69
70