⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sysfix.c

📁 UNIX v6源代码 这几乎是最经典的unix版本 unix操作系统设计和莱昂氏unix源代码分析都是用的该版
💻 C
字号:
/* * fix system image for I/D space *  Move data down to 0; move text to 4K. *  Also put the data at the start of the *  file and the text after it. */int	tbuf[259];int	rbuf[259];int	obuf[259];int	txtsiz;int	datsiz;int	bsssiz;int	symsiz;int	txtrel	8192;int	datrel;main(argc, argv)char **argv;{	register word, rel, s;	if (argc<3) {		printf("Arg count\n");		exit(1);	}	if ((tbuf[0] = open(argv[1], 0)) < 0) {		printf("Input file\n");		exit(1);	}	rbuf[0] = open(argv[1], 0);	if ((fcreat(argv[2], obuf)) < 0) {		printf("Output file\n");		exit(1);	}	if (getw(tbuf) != 0407) {		printf("Bad input format\n");		exit(1);	}	putw(0407, obuf);	txtsiz = getw(tbuf);	datsiz = getw(tbuf);	bsssiz = getw(tbuf);	symsiz = getw(tbuf);	getw(tbuf);	getw(tbuf);	if (getw(tbuf) != 0) {		printf("No relocation bits\n");		exit(1);	}	putw(txtsiz, obuf);	putw(datsiz, obuf);	putw(bsssiz, obuf);	putw(symsiz, obuf);	putw(0, obuf);	putw(0, obuf);	putw(1, obuf);	datrel = -txtsiz;/* *  Copy out data first */	tbuf[1] = 0;	seek(tbuf[0], 020+txtsiz, 0);	seek(rbuf[0], 020+txtsiz, 0);	seek(rbuf[0], txtsiz, 1);	seek(rbuf[0], datsiz, 1);	s = datsiz >> 1;	while (s--) {		word = getw(tbuf);		rel = getw(rbuf);		if (rel&01)			word =- datrel;		word =+ getrel(rel);		putw(word, obuf);	}/* * Now to the text. */	rbuf[1] = 0;	tbuf[1] = 0;	seek(rbuf[0], 020+txtsiz, 0);	seek(rbuf[0], datsiz, 1);	seek(tbuf[0], 020, 0);	s = txtsiz >> 1;	while(s--) {		rel = getw(rbuf);		word = getw(tbuf);		if (rel&01)			word =- txtrel;		word =+ getrel(rel);		putw(word, obuf);	}/* * The symbol table. */	tbuf[1] = 0;	seek(tbuf[0], 020+txtsiz, 0);	seek(tbuf[0], txtsiz, 1);	seek(tbuf[0], datsiz, 1);	seek(tbuf[0], datsiz, 1);	s = symsiz;	while ((s =- 12) >= 0) {		putw(getw(tbuf), obuf);		putw(getw(tbuf), obuf);		putw(getw(tbuf), obuf);		putw(getw(tbuf), obuf);		rel = getw(tbuf);		putw(rel, obuf);		word = getw(tbuf);		switch(rel&07) {			case 2:				word =+ txtrel;				break;			case 3:			case 4:				word =+ datrel;		}		putw(word, obuf);	}	fflush(obuf);	close(obuf[0]);	exit(0);}getrel(r){	switch (r&016) {	case 02:	/* ref to text */		return(txtrel);	case 04:		/* ref to data */	case 06:		/* ref to bss */		return(datrel);	case 0:		return(0);	default:		printf("Bad relocation %o\n", r);		return(0);	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -