summaryrefslogtreecommitdiff
path: root/rdoff/rdfdump.c
diff options
context:
space:
mode:
Diffstat (limited to 'rdoff/rdfdump.c')
-rw-r--r--rdoff/rdfdump.c22
1 files changed, 16 insertions, 6 deletions
diff --git a/rdoff/rdfdump.c b/rdoff/rdfdump.c
index 347fdb17..5bf6264c 100644
--- a/rdoff/rdfdump.c
+++ b/rdoff/rdfdump.c
@@ -2,12 +2,11 @@
#include <stdlib.h>
#include <string.h>
+#include "rdoff.h"
#include "multboot.h"
FILE *infile;
-typedef unsigned short int16;
-
long translatelong(long in) { /* translate from little endian to
local representation */
long r;
@@ -22,7 +21,7 @@ long translatelong(long in) { /* translate from little endian to
return r;
}
-int translateshort(int16 in) {
+int16 translateshort(int16 in) {
int r;
unsigned char *i;
@@ -33,7 +32,7 @@ int translateshort(int16 in) {
}
void print_header(long length, int rdf_version) {
- char buf[129],t,s,l;
+ char buf[129],t,s,l,flags;
unsigned char reclen;
long o,ll;
int16 rs;
@@ -45,6 +44,7 @@ void print_header(long length, int rdf_version) {
fread(&reclen,1,1,infile);
}
switch(t) {
+
case 1: /* relocation record */
case 6: /* segment relocation */
fread(&s,1,1,infile);
@@ -61,6 +61,7 @@ void print_header(long length, int rdf_version) {
if (rdf_version == 1 && t == 6)
printf(" warning: seg relocation not supported in RDOFF1\n");
break;
+
case 2: /* import record */
case 7: /* import far symbol */
fread(&rs,2,1,infile);
@@ -83,7 +84,9 @@ void print_header(long length, int rdf_version) {
if (rdf_version == 1 && t == 7)
printf (" warning: far import not supported in RDOFF1\n");
break;
+
case 3: /* export record */
+ fread(&flags,1,1,infile);
fread(&s,1,1,infile);
fread(&o,4,1,infile);
ll = 0;
@@ -95,12 +98,19 @@ void print_header(long length, int rdf_version) {
}
else
{
- for (; ll < reclen - 5; ll ++)
+ for (; ll < reclen - 6; ll ++)
fread(&buf[ll],1,1,infile);
}
- printf(" export: (%04x:%08lx) = %s\n",(int)s,translatelong(o),buf);
+ if (flags & SYM_GLOBAL)
+ printf(" export");
+ else
+ printf(" global");
+ if (flags & SYM_FUNCTION) printf(" proc");
+ if (flags & SYM_DATA) printf(" data");
+ printf(": (%04x:%08lx) = %s\n",(int)s,translatelong(o),buf);
if (rdf_version == 1) length -= ll + 6;
break;
+
case 4: /* DLL and Module records */
case 8:
ll = 0;