diff options
author | Lubomir Rintel <lkundrak@v3.sk> | 2010-08-25 23:36:42 +0200 |
---|---|---|
committer | Lubomir Rintel <lkundrak@v3.sk> | 2013-10-29 16:30:53 +0100 |
commit | e30e85c727c9796eaaf18475809f06927a2ba846 (patch) | |
tree | d1ba68ac61de4c1398134e5a30f06278ba85cb41 /ld | |
parent | b2193932e0e172c70e8bbf9f38805cb57b22883e (diff) | |
download | dev86-e30e85c727c9796eaaf18475809f06927a2ba846.tar.gz |
Add size/objdump support for v7
Diffstat (limited to 'ld')
-rw-r--r-- | ld/objdump86.c | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/ld/objdump86.c b/ld/objdump86.c index 003f04c..85032a1 100644 --- a/ld/objdump86.c +++ b/ld/objdump86.c @@ -55,6 +55,11 @@ void fetch_aout_hdr _((void)); void dump_aout _((void)); void size_aout _((void)); void nm_aout _((void)); +#ifndef VERY_SMALL_MEMORY +void fetch_v7_hdr _((void)); +void dump_v7 _((void)); +void size_v7 _((void)); +#endif int obj_ver; int sections; @@ -277,6 +282,19 @@ char * archive; case 2: nm_aout(); break; } break; +#ifndef VERY_SMALL_MEMORY + case 2: /* V7 executable */ + fseek(ifd, 0L, 0); + fetch_v7_hdr(); + + switch(display_mode) + { + case 0: dump_v7(); break; + case 1: size_v7(); break; + case 2: error("Symbol table not supported for v7"); exit(1); break; + } + break; +#endif } if( strtab ) free(strtab); @@ -315,6 +333,13 @@ read_objheader() sections = 1; return 1; } +#ifndef VERY_SMALL_MEMORY + if( buf[1] == 1 ) /* 04xx octal */ + { + sections = 1; + return 2; + } +#endif return error("Bad magic number"); } @@ -867,3 +892,81 @@ nm_aout() if( pending_nl ) putchar('\n'); } + +#ifndef VERY_SMALL_MEMORY +/************************************************************************/ +/* V7 a.out versions + */ + +void +fetch_v7_hdr() +{ + int i; + + h_len = 8; + for(i=0; i<h_len; i++) + { + header[i] = get_word(); + } +} + +void +size_v7() +{ + if( display_mode == 0 ) + printf("text\tdata\tbss\tdec\thex\tfilename\n"); + + printf("%ld\t%ld\t%ld\t%ld\t%lx\t%s\n", + header[1], header[2], header[3], + header[1]+ header[2]+ header[3], + header[1]+ header[2]+ header[3], + ifname); + + tot_size_text += header[1]; + tot_size_data += header[2]; + tot_size_bss += header[3]; +} + +void +dump_v7() +{ + int i; + long l; + + printf("TYPE:"); + switch (header[0]) { + case 0405: printf(" overlay"); break; + case 0407: printf(" impure"); break; + case 0410: printf(" read-only text"); break; + case 0411: printf(" pure"); break; + case 0413: printf(" demand load"); break; + default: printf(" (unknown)"); break; + } + printf("\n"); + + if( header[5] ) + printf("a_entry = 0x%08lx\n", header[5]); + printf("\n"); + + size_aout(); + printf("\n"); + + printf("TEXTSEG\n"); + fseek(ifd, (long)h_len, 0); + for(l=0; l<header[1]; l++) + { + if( (i=getc(ifd)) == EOF ) break; + hex_output(i); + } + hex_output(EOF); + + printf("DATASEG\n"); + fseek(ifd, (long)h_len+header[1], 0); + for(l=0; l<header[2]; l++) + { + if( (i=getc(ifd)) == EOF ) break; + hex_output(i); + } + hex_output(EOF); +} +#endif |