summaryrefslogtreecommitdiff
path: root/rdoff/rdfdump.c
diff options
context:
space:
mode:
authorFrank Kotler <fbkotler@users.sourceforge.net>2002-12-04 00:49:37 +0000
committerFrank Kotler <fbkotler@users.sourceforge.net>2002-12-04 00:49:37 +0000
commitf17039406f097ded4b3b59560f227f0ef69386b4 (patch)
treebe4462c95677cb401cf22f5b518aecfc605c8b08 /rdoff/rdfdump.c
parent0bfed6cfdb0624a6f2f028e326e59815be806d74 (diff)
downloadnasm-f17039406f097ded4b3b59560f227f0ef69386b4.tar.gz
Yuri's 12/3/2002 rdoff patches-
Diffstat (limited to 'rdoff/rdfdump.c')
-rw-r--r--rdoff/rdfdump.c67
1 files changed, 38 insertions, 29 deletions
diff --git a/rdoff/rdfdump.c b/rdoff/rdfdump.c
index 5bf6264c..d8690d20 100644
--- a/rdoff/rdfdump.c
+++ b/rdoff/rdfdump.c
@@ -1,9 +1,12 @@
+/*
+ * rdfdump.c - dump RDOFF file header.
+ */
+
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "rdoff.h"
-#include "multboot.h"
FILE *infile;
@@ -31,12 +34,12 @@ int16 translateshort(int16 in) {
return r;
}
-void print_header(long length, int rdf_version) {
- char buf[129],t,s,l,flags;
+void print_header(long length, int rdf_version)
+{
+ char buf[129],t,l,s,flags;
unsigned char reclen;
long o,ll;
int16 rs;
- struct tMultiBootHeader *mb;
while (length > 0) {
fread(&t,1,1,infile);
@@ -44,9 +47,13 @@ void print_header(long length, int rdf_version) {
fread(&reclen,1,1,infile);
}
switch(t) {
+ case RDFREC_GENERIC: /* generic record */
+ printf(" generic record (length=%d)\n", (int)reclen);
+ fseek(infile, reclen, SEEK_CUR);
+ break;
- case 1: /* relocation record */
- case 6: /* segment relocation */
+ case RDFREC_RELOC: /* relocation record */
+ case RDFREC_SEGRELOC: /* segment relocation */
fread(&s,1,1,infile);
fread(&o,4,1,infile);
fread(&l,1,1,infile);
@@ -62,8 +69,8 @@ void print_header(long length, int rdf_version) {
printf(" warning: seg relocation not supported in RDOFF1\n");
break;
- case 2: /* import record */
- case 7: /* import far symbol */
+ case RDFREC_IMPORT: /* import record */
+ case RDFREC_FARIMPORT: /* import far symbol */
fread(&rs,2,1,infile);
ll = 0;
@@ -71,9 +78,7 @@ void print_header(long length, int rdf_version) {
do {
fread(&buf[ll],1,1,infile);
} while (buf[ll++]);
- }
- else
- {
+ } else {
for (;ll < reclen - 2; ll++)
fread(&buf[ll],1,1,infile);
}
@@ -85,7 +90,7 @@ void print_header(long length, int rdf_version) {
printf (" warning: far import not supported in RDOFF1\n");
break;
- case 3: /* export record */
+ case RDFREC_GLOBAL: /* export record */
fread(&flags,1,1,infile);
fread(&s,1,1,infile);
fread(&o,4,1,infile);
@@ -95,9 +100,7 @@ void print_header(long length, int rdf_version) {
do {
fread(&buf[ll],1,1,infile);
} while (buf[ll++]);
- }
- else
- {
+ } else {
for (; ll < reclen - 6; ll ++)
fread(&buf[ll],1,1,infile);
}
@@ -111,17 +114,15 @@ void print_header(long length, int rdf_version) {
if (rdf_version == 1) length -= ll + 6;
break;
- case 4: /* DLL and Module records */
- case 8:
+ case RDFREC_DLL: /* DLL and Module records */
+ case RDFREC_MODNAME:
ll = 0;
if (rdf_version == 1) {
do {
fread(&buf[ll],1,1,infile);
} while (buf[ll++]);
- }
- else
- {
+ } else {
for (; ll < reclen; ll++)
fread(&buf[ll],1,1,infile);
}
@@ -129,7 +130,8 @@ void print_header(long length, int rdf_version) {
else printf(" module: %s\n",buf);
if (rdf_version == 1) length -= ll + 1;
break;
- case 5: /* BSS reservation */
+
+ case RDFREC_BSS: /* BSS reservation */
fread(&ll,4,1,infile);
printf(" bss reservation: %08lx bytes\n",translatelong(ll));
if (rdf_version == 1) length -= 5;
@@ -137,20 +139,27 @@ void print_header(long length, int rdf_version) {
printf(" warning: reclen != 4\n");
break;
- case 9: /* MultiBoot header record */
- fread(buf,reclen,1,infile);
- mb = (struct tMultiBootHeader *)buf;
- printf(" multiboot header: load address=0x%X, size=0x%X, entry=0x%X\n",
- mb->LoadAddr, mb->LoadEndAddr - mb->LoadAddr, mb->Entry);
+ case RDFREC_COMMON: {
+ unsigned short seg, align;
+ unsigned long size;
+
+ fread(&seg, 2, 1, infile);
+ fread(&size, 4, 1, infile);
+ fread(&align, 2, 1, infile);
+ for (ll = 0; ll < reclen - 8; ll++)
+ fread(buf+ll, 1, 1, infile);
+ printf(" common: segment %04x = %s, %ld:%d\n", translateshort(seg),
+ buf, translatelong(size), translateshort(align));
break;
+ }
+
default:
- printf(" unrecognised record (type %d",(int)t);
+ printf(" unrecognized record (type %d", (int)t);
if (rdf_version > 1) {
printf(", length %d",(int)reclen);
fseek(infile,reclen,SEEK_CUR);
- }
+ } else length --;
printf(")\n");
- if (rdf_version == 1) length --;
}
if (rdf_version != 1) length -= 2 + reclen;
}