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