Fixed declarations in include/time.h file.

Deleted unused file include/stab.h and reloc utility.
This commit is contained in:
Serge Vakulenko
2015-06-24 17:45:47 -07:00
parent d1f1e614f0
commit ea7c1415d7
8 changed files with 30 additions and 824 deletions

View File

@@ -1,42 +0,0 @@
/*
* Copyright (c) 1980 Regents of the University of California.
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* @(#)stab.h 5.1 (Berkeley) 5/30/85
*/
/* IF YOU ADD DEFINITIONS, ADD THEM TO nm.c as well */
/*
* This file gives definitions supplementing <a.out.h>
* for permanent symbol table entries.
* These must have one of the N_STAB bits on,
* and are subject to relocation according to the masks in <a.out.h>.
*/
/*
* for symbolic debugger, sdb(1):
*/
#define N_GSYM 0x20 /* global symbol: name,,0,type,0 */
#define N_FNAME 0x22 /* procedure name (f77 kludge): name,,0 */
#define N_FUN 0x24 /* procedure: name,,0,linenumber,address */
#define N_STSYM 0x26 /* static symbol: name,,0,type,address */
#define N_LCSYM 0x28 /* .lcomm symbol: name,,0,type,address */
#define N_RSYM 0x40 /* register sym: name,,0,type,register */
#define N_SLINE 0x44 /* src line: 0,,0,linenumber,address */
#define N_SSYM 0x60 /* structure elt: name,,0,type,struct_offset */
#define N_SO 0x64 /* source file name: name,,0,0,address */
#define N_LSYM 0x80 /* local sym: name,,0,type,offset */
#define N_SOL 0x84 /* #included file name: name,,0,0,address */
#define N_PSYM 0xa0 /* parameter: name,,0,type,offset */
#define N_ENTRY 0xa4 /* alternate entry: name,linenumber,address */
#define N_LBRAC 0xc0 /* left bracket: 0,,0,nesting level,address */
#define N_RBRAC 0xe0 /* right bracket: 0,,0,nesting level,address */
#define N_BCOMM 0xe2 /* begin common: name,, */
#define N_ECOMM 0xe4 /* end common: name,, */
#define N_ECOML 0xe8 /* end common (local name): ,,address */
#define N_LENG 0xfe /* second stab entry with length information */
/*
* for the berkeley pascal compiler, pc(1):
*/
#define N_PC 0x30 /* global pascal symbol: name,,0,subtype,line */

View File

@@ -6,6 +6,10 @@
#ifndef _TIME_H
#define _TIME_H
#ifndef NULL
#define NULL 0
#endif
#ifndef _TIME_T
#define _TIME_T
typedef long time_t;
@@ -20,24 +24,26 @@ typedef unsigned size_t;
* Structure returned by gmtime and localtime calls (see ctime(3)).
*/
struct tm {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long tm_gmtoff;
char *tm_zone;
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday;
int tm_yday;
int tm_isdst;
long tm_gmtoff;
char *tm_zone;
};
extern struct tm *gmtime(), *localtime();
extern char *asctime(), *ctime();
extern time_t time();
struct tm *gmtime(const time_t *);
struct tm *localtime(const time_t *);
char *asctime(const struct tm *);
char *ctime(const time_t *);
time_t time(time_t *);
size_t strftime (char *s, size_t maxsize, const char *format,
const struct tm *timeptr);
const struct tm *timeptr);
#endif

View File

@@ -799,7 +799,6 @@ file /include/smallc/stdio.h
file /include/smallc/sys/gpio.h
file /include/smallc/sys/spi.h
file /include/smallc/wiznet.h
file /include/stab.h
file /include/stdarg.h
file /include/stddef.h
file /include/stdint.h

View File

@@ -1,12 +0,0 @@
CC = gcc
CFLAGS = -g -ansi -Wall
LIBS =
reloc: reloc.c
$(CC) $(CFLAGS) -o reloc reloc.c
clean:
-rm *core reloc reloc.o
shar: reloc.c makefile reloc.1 notes README
shar reloc.c makefile reloc.1 notes README > reloc.shar

View File

@@ -1,71 +0,0 @@
'\" t
.TH RELOC 1 "3 MAy 1997"
.SH NAME
reloc \- examine NetBSD/sparc symbol table and relocation information
.SH SYNOPSIS
.B reloc
[
.B \-h
.B \-x
.B \-d
.B \-t
.B \-s
.B \-c
.B \-n
.B \-a
]
.I infile
.SH DESCRIPTION
.B reloc
examines NetBSD/sparc object and executable files (a.out format files)
and prints a.out header, symbol table and relocation information in
a human-readable form on stdout.
.PP
Performs a function similar to the
.B nm
system utility, but prints more of the information contained in an a.out
file.
.PP
.SH OPTIONS
.TP 10
.B \-h
Print a representation of the a.out ``exec'' header.
.TP
.B \-x
Print extra information derivable from, but not directly contained by
the a.out header.
.TP
.B \-d
Print a representation of the ``.data'' segment relocation information.
.TP
.B \-t
Print a representation of the ``.text'' segment relocation information.
.TP
.B \-s
Print a representation of the symbol table information.
.TP
.B \-c
When printing relocation information, show the correspondence of the
relocations to symbol table entries.
.TP
.B \-c
When printing symbol table, don't print symbol names
.TP
.B \-a
Show everything: equivalent to ``-h -d -t -s -c -x''
.SH FILES
.I infile
must be specified.
.SH BUGS
.PP
The output format is awkward.
.SH "SEE ALSO"
.PD
a.out(5), stab(5), nm(1), nlist(3)
.SH AUTHOR
Bruce Ediger, bediger@csn.net
.PP
Permission to use, copy, modify, and distribute this software and its
documentation for any purpose and without fee is hereby granted,
without any conditions or restrictions. This software is provided ``as
is'' without express or implied warranty.

View File

@@ -1,668 +0,0 @@
/*
* reloc - program to print out all of the a.out header, symbol table, and
* relocation information in an a.out file. Prints out more information
* than ``nm'', and correlates a relocation info to symbol table entries if
* it can.
*
* Author: Bruce Ediger, bediger@csn.net
*
* Permission to use, copy, modify, and distribute this software and its
* documentation for any purpose and without fee is hereby granted,
* without any conditions or restrictions. This software is provided
* ``as is'' without express or implied warranty.
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <assert.h>
#include <stdarg.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <a.out.h>
#include <stab.h>
char *read_extent(FILE *fin, int rsize, int offset, int calling_lineno);
char *read_stringtable(FILE *fin, struct exec *exhdr, int *strtbl_sz);
void cleanup(FILE *fin, int count, ...);
void run_header(struct exec *exhdr, int extended_info);
void run_reloc(struct exec *exhdr, int size, struct relocation_info *data_reloc, struct nlist *symtabl, char *stringtable, int strtbl_sz, int correspondence);
void run_symtable(struct exec *exhdr, struct nlist *symbol_table, char *stringtable, int strtbl_sz, int print_symnames);
char *print_reloc_type(enum reloc_type type);
char *symbol_type(struct nlist *sym);
char *print_reloc_segment(int segnum);
extern char *optarg;
extern int optind;
struct stat attributes;
int main(int ac, char **av)
{
FILE *fin = NULL;
struct exec *exhdr = NULL;
char *fname = NULL;
char *stringtable;
int strtbl_sz;
struct relocation_info *data_reloc = NULL, *text_reloc = NULL;
struct nlist *symbol_table = NULL;
int show_header = 0;
int show_data_reloc = 0;
int show_text_reloc = 0;
int show_symbol_table = 0;
int print_symnames = 1;
int correspondence = 0;
int hdr_info = 0;
int opt;
while (-1 != (opt = getopt(ac, av, "hdtsacxn"))) {
switch (opt) {
case 'h': show_header = 1; break;
case 'x': show_header = hdr_info = 1; break; /* show_header implied */
case 'd': show_data_reloc = 1; break;
case 't': show_text_reloc = 1; break;
case 's': show_symbol_table = 1; break;
case 'c': correspondence = 1; break;
case 'n': print_symnames = 0; break;
case 'a':
show_header = show_data_reloc = show_text_reloc = show_symbol_table = correspondence = hdr_info = 1;
break;
default: errout:
fprintf(stderr, "%s: show exec header, relocation and symbol table data\n", av[0]);
fprintf(stderr, "usage: %s [-h] [-d] [-t] [-s] [-c] [-x] [-a] <filename>\n", av[0]);
fprintf(stderr, " -h: show exec header\n"
" -x: show info derivable from exec header \n"
" -d: show data segment relocations\n"
" -t: show text segment relocations\n"
" -c: show symbols that correspond to relocations\n"
" -s: show symbol table\n"
" -n: when showing symbol table, don't print symbol names\n"
" -a: show it all\n");
return 1;
break;
}
}
if (0 == show_header && 0 == show_data_reloc && 0 == show_text_reloc &&
0 == show_symbol_table)
show_header = show_data_reloc = show_text_reloc = show_symbol_table = correspondence = 1;
if (optind < ac)
fname = av[optind];
if (NULL == fname) {
fprintf(stderr, "Need a file to examine\n");
goto errout;
}
if (NULL == (fin = fopen(fname, "r"))) {
fprintf(stderr, "Couldn't open \"%s\" for reading: %s\n",
fname, strerror(errno));
return 1;
}
if (stat(fname, &attributes) < 0) {
fprintf(stderr, "Problem on stat(2) of \"%s\": %s\n",
fname, strerror(errno));
fclose(fin);
return 1;
}
exhdr = (struct exec *)read_extent(fin, sizeof(*exhdr), 0, __LINE__);
if (NULL == exhdr) {
cleanup(fin, 1, exhdr);
return 2;
}
if (show_header) {
puts("a.out header:");
run_header(exhdr, hdr_info);
}
if (N_BADMAG(*exhdr)) {
fprintf(stderr, "%s isn't a recognized NetBSD a.out file\n", fname);
cleanup(fin, 1, exhdr);
return 3;
}
stringtable = read_stringtable(fin, exhdr, &strtbl_sz);
data_reloc = (struct relocation_info *)read_extent(fin, exhdr->a_drsize, N_DRELOFF(*exhdr), __LINE__);
text_reloc = (struct relocation_info *)read_extent(fin, exhdr->a_trsize, N_TRELOFF(*exhdr), __LINE__);
symbol_table = (struct nlist *) read_extent(fin, exhdr->a_syms, N_SYMOFF(*exhdr), __LINE__);
if (show_data_reloc) {
puts("\nData relocations:");
run_reloc(exhdr, exhdr->a_drsize, data_reloc, symbol_table, stringtable, strtbl_sz, correspondence);
}
if (show_text_reloc) {
puts("\nText relocations:");
run_reloc(exhdr, exhdr->a_trsize, text_reloc, symbol_table, stringtable, strtbl_sz, correspondence);
}
if (show_symbol_table) {
puts("\nSymbol table:");
run_symtable(exhdr, symbol_table, stringtable, strtbl_sz, print_symnames);
}
cleanup(fin, 5, exhdr, stringtable, data_reloc, text_reloc, symbol_table);
return 0;
}
void
cleanup(FILE *fin, int count, ...)
{
va_list ap;
int i;
if (NULL != fin)
fclose(fin);
va_start(ap, count);
for (i = 0; i < count; ++i) {
char *p = va_arg(ap, char *);
if (NULL != p)
free(p);
}
va_end(ap);
}
char *
read_stringtable(FILE *fin, struct exec *exhdr, int *strtbl_sz)
{
unsigned long length;
char *p = NULL;
assert(NULL != fin);
if (NULL == exhdr) {
fprintf(stderr, "Trying to read string table, but got no a.out header\n");
return NULL;
}
if (fseek(fin, N_STROFF(*exhdr), SEEK_SET) < 0) {
fprintf(stderr, "Problem seeking to string table: %s\n",
strerror(errno));
return NULL;
}
if (fread(&length, sizeof(length), 1, fin) != 1) {
fprintf(stderr, "Problem reading length of string table: %s\n",
strerror(errno));
return NULL;
}
if (length >= 4) {
p = read_extent(fin, length, N_STROFF(*exhdr), __LINE__);
*strtbl_sz = length;
printf("\nstring table size %d\n", *strtbl_sz);
} else {
fprintf(stderr, "Problem, length of string table read as %d,"
" can't be right\n, ", length);
*strtbl_sz = 0;
}
return p;
}
char *
read_extent(FILE *fin, int rsize, int offset, int calling_lineno)
{
char *r = NULL;
off_t potential_eof = (off_t)rsize + (off_t)offset;
assert(NULL != fin);
if (potential_eof > attributes.st_size) {
fprintf(stderr, "Line %d, reading extent from %d, size %d:"
" larger than file size %qd\n", calling_lineno, offset,
rsize, attributes.st_size);
} else if (fseek(fin, offset, SEEK_SET) < 0) {
fprintf(stderr, "Line %d, seeking to extent at %d, file size %qd: %s\n",
calling_lineno, offset, attributes.st_size, strerror(errno));
} else {
r = malloc(rsize);
assert(NULL != r);
if (fread(r, 1, rsize, fin) != rsize) {
fprintf(stderr, "Line %d, problem reading in extent\n", calling_lineno);
free(r);
r = NULL;
}
}
return r;
}
void
run_reloc(
struct exec *exhdr,
int size,
struct relocation_info *reloc,
struct nlist *symtabl,
char *stringtable,
int strtbl_sz,
int correspondence
)
{
int i, count;
int max_ordinal;
if (NULL == exhdr || NULL == symtabl || NULL == stringtable || NULL == reloc) {
if (NULL == exhdr) fprintf(stderr, "a.out header NULL, ");
if (NULL == symtabl) fprintf(stderr, "symbol table NULL, ");
if (NULL == stringtable) fprintf(stderr, "string table NULL, ");
if (NULL == reloc) fprintf(stderr, "relocation table NULL, ");
fprintf(stderr, " can't possibly list the relocations meaningfully\n");
return;
}
max_ordinal = exhdr->a_syms/sizeof(*symtabl);
count = size/sizeof(*reloc);
printf("%d relocations\n", count);
for (i = 0; i < count; ++i) {
printf("r_address 0x%x, symbol ordinal %d, ", reloc[i].r_address,
reloc[i].r_symbolnum);
if (reloc[i].r_extern)
fputs("extern, ", stdout);
else {
printf("local, %s segment, ", print_reloc_segment(reloc[i].r_symbolnum));
}
printf(
"r_addend 0x%x (%d), type %s (0x%x)",
reloc[i].r_addend,
reloc[i].r_addend,
print_reloc_type(reloc[i].r_type), reloc[i].r_type
);
if (reloc[i].r_extern && correspondence && reloc[i].r_symbolnum <= max_ordinal) {
char *sname = "";
/* stuff from struct nlist associated with this relocation */
if (symtabl[reloc[i].r_symbolnum].n_un.n_strx >= 4 &&
symtabl[reloc[i].r_symbolnum].n_un.n_strx < strtbl_sz)
sname = &stringtable[symtabl[reloc[i].r_symbolnum].n_un.n_strx];
else
fprintf(stderr,
"relocation entry %d, symbol ordinal %d, n_strx is %d, "
"string table size is %d\n",
i, reloc[i].r_symbolnum, symtabl[reloc[i].r_symbolnum].n_un.n_strx,
strtbl_sz);
printf("\n name \"%s\" (sym num %d), type 0x%x - %s, desc 0x%x, value 0x%x\n",
sname,
reloc[i].r_symbolnum,
symtabl[reloc[i].r_symbolnum].n_type,
symbol_type(&symtabl[reloc[i].r_symbolnum]),
symtabl[reloc[i].r_symbolnum].n_desc,
symtabl[reloc[i].r_symbolnum].n_value
);
} else
fputc('\n', stdout);
}
}
char *
print_reloc_type(enum reloc_type type)
{
char *r = NULL;
if (type == RELOC_8) {
r = "RELOC_8, 8 bit simple, ";
} else if (type == RELOC_16) {
r = "RELOC_16, 16 bit simple, ";
} else if (type == RELOC_32) {
r = "RELOC_32, 32 bit simple, ";
} else if (type == RELOC_DISP8) {
r = "RELOC_DISP8, 8 bit PC relative, ";
} else if (type == RELOC_DISP16) {
r = "RELOC_DISP16, 16 bit PC relative, ";
} else if (type == RELOC_DISP32) {
r = "RELOC_DISP32, 32 bit PC relative, ";
} else if (type == RELOC_WDISP30) {
r = "RELOC_WDISP30, 30 bit PC relative CALL, ";
} else if (type == RELOC_WDISP22) {
r = "RELOC_WDISP22, 22 bit PC relative BRANCH, ";
} else if (type == RELOC_HI22) {
r = "RELOC_HI22, ";
} else if (type == RELOC_22) {
r = "RELOC_22, ";
} else if (type == RELOC_13) {
r = "RELOC_13, ";
} else if (type == RELOC_LO10) {
r = "RELOC_LO10, ";
} else if (type == RELOC_BASE13) {
r = "RELOC_BASE13, ";
} else if (type == RELOC_BASE22) {
r = "RELOC_BASE22, ";
} else if (type == RELOC_PC10) {
r = "RELOC_PC10, 10 bit PC relative PIC, ";
} else if (type == RELOC_PC22) {
r = "RELOC_PC22, 22 bit PC relative PIC, ";
} else if (type == RELOC_JMP_TBL) {
r = "RELOC_JMP_TBL, jump table relative PIC, ";
} else if (type == RELOC_GLOB_DAT) {
r = "RELOC_GLOB_DAT, rtld global data, ";
} else if (type == RELOC_JMP_SLOT) {
r = "RELOC_JMP_SLOT, rtld jump slot, ";
} else if (type == RELOC_RELATIVE) {
r = "RELOC_RELATIVE, rtld relative, ";
} else {
r = "some unknown reloc type..., ";
}
assert(NULL != r);
return r;
}
char *
print_reloc_segment(int segnum)
{
char *r = "unknown segment";
switch (segnum) {
case N_TEXT: r = "N_TEXT"; break;
case N_DATA: r = "N_DATA"; break;
case N_BSS: r = "N_BSS"; break;
}
return r;
}
static char symbol_type_buffer[512];
char *
symbol_type(struct nlist *sym)
{
unsigned char n_type = sym->n_type;
symbol_type_buffer[0] = '\0';
/*
N_EXT = 0x01 = 0000 0001
N_TYPE = 0x1e = 0001 1110
N_STAB = 0xe0 = 1110 0000 <= not just a mask. if n_type field has
one or more of these bits set, the whole
n_type field is signifigant.
*/
if (n_type & N_EXT)
strcat(symbol_type_buffer, "external, ");
if ((n_type & N_TYPE) & ~N_EXT) {
switch ((n_type & N_TYPE) & ~N_EXT) {
case N_UNDF : strcat(symbol_type_buffer, "undefined, "); break;
case N_ABS : strcat(symbol_type_buffer, "absolute address, "); break;
case N_TEXT : strcat(symbol_type_buffer, "text segment, "); break;
case N_DATA : strcat(symbol_type_buffer, "data segment, "); break;
case N_BSS : strcat(symbol_type_buffer, "bss segment, "); break;
case N_INDR : strcat(symbol_type_buffer, "alias definition, "); break;
case N_SIZE : strcat(symbol_type_buffer, "symbol's size, "); break;
case N_COMM : strcat(symbol_type_buffer, "common reference, "); break;
case N_FN :
if (n_type & N_EXT)
strcat(symbol_type_buffer, "file name, ");
else
strcat(symbol_type_buffer, "warning message, ");
break;
}
}
if ((n_type & N_STAB)) {
switch (n_type & ~N_EXT) {
case N_GSYM: strcat(symbol_type_buffer, "global symbol, "); break;
case N_FNAME: strcat(symbol_type_buffer, "F77 function name, "); break;
case N_FUN: strcat(symbol_type_buffer, "procedure name, "); break;
case N_STSYM: strcat(symbol_type_buffer, "data segment variable, "); break;
case N_LCSYM: strcat(symbol_type_buffer, "bss segment variable, "); break;
case N_MAIN: strcat(symbol_type_buffer, "main function name, "); break;
case N_PC: strcat(symbol_type_buffer, "global Pascal symbol, "); break;
case N_RSYM: strcat(symbol_type_buffer, "register variable, "); break;
case N_DSLINE: case N_BSLINE: case N_SLINE:
sprintf(
&symbol_type_buffer[strlen(symbol_type_buffer)],
"line %d at address 0x%x, ",
sym->n_desc,
sym->n_value
);
break;
case N_SSYM: strcat(symbol_type_buffer, "structure/union element, "); break;
case N_SO: strcat(symbol_type_buffer, "main source file name, "); break;
case N_LSYM:
sprintf(
&symbol_type_buffer[strlen(symbol_type_buffer)],
"stack variable, [%%fp + %d]",
sym->n_value
);
break;
case N_BINCL: strcat(symbol_type_buffer, "include file beginning, "); break;
case N_SOL: strcat(symbol_type_buffer, "included source file name, "); break;
case N_PSYM:
sprintf(
&symbol_type_buffer[strlen(symbol_type_buffer)],
"parameter variable, [%%fp + %d]",
sym->n_value
);
break;
case N_EINCL: strcat(symbol_type_buffer, "include file end, "); break;
case N_ENTRY: strcat(symbol_type_buffer, "alternate entry point, "); break;
case N_LBRAC: strcat(symbol_type_buffer, "left bracket, "); break;
case N_EXCL: strcat(symbol_type_buffer, "deleted include file, "); break;
case N_RBRAC: strcat(symbol_type_buffer, "right bracket, "); break;
case N_BCOMM: strcat(symbol_type_buffer, "begin common, "); break;
case N_ECOMM: strcat(symbol_type_buffer, "end common, "); break;
case N_ECOML: strcat(symbol_type_buffer, "end common (local name), "); break;
case N_LENG: strcat(symbol_type_buffer, "length of preceding entry, "); break;
}
}
if (' ' == symbol_type_buffer[strlen(symbol_type_buffer)-1])
symbol_type_buffer[strlen(symbol_type_buffer)-1] = '\0';
if (',' == symbol_type_buffer[strlen(symbol_type_buffer)-1])
symbol_type_buffer[strlen(symbol_type_buffer)-1] = '\0';
return symbol_type_buffer;
}
void
run_symtable(
struct exec *exhdr,
struct nlist *symtabl,
char *stringtable,
int strtbl_sz,
int sym_names)
{
int i, count;
if (NULL == exhdr || NULL == symtabl || NULL == stringtable) {
if (NULL == exhdr) fprintf(stderr, "a.out header NULL, ");
if (NULL == symtabl) fprintf(stderr, "symbol table NULL, ");
if (NULL == stringtable) fprintf(stderr, "string table NULL, ");
fprintf(stderr, " can't possibly list the symbol table meaningfully\n");
return;
}
count = exhdr->a_syms/sizeof(*symtabl);
printf("%d symbols\n", count);
for (i = 0; i < count; ++i) {
if (!sym_names)
printf("%4d name offset (%d), type 0x%x - %s, other 0x%x, desc 0x%x, value 0x%x (%d)\n",
i,
symtabl[i].n_un.n_strx,
symtabl[i].n_type,
symbol_type(&symtabl[i]),
symtabl[i].n_other,
symtabl[i].n_desc,
symtabl[i].n_value,
symtabl[i].n_value
);
else {
char *sname = "";
if (symtabl[i].n_un.n_strx >= 0 && symtabl[i].n_un.n_strx < strtbl_sz)
sname = &stringtable[symtabl[i].n_un.n_strx];
printf("%4d name \"%s\" (%d), type 0x%x - %s, other 0x%x, desc 0x%x, value 0x%x (%d)\n",
i,
sname,
symtabl[i].n_un.n_strx,
symtabl[i].n_type,
symbol_type(&symtabl[i]),
symtabl[i].n_other,
symtabl[i].n_desc,
symtabl[i].n_value,
symtabl[i].n_value
);
}
}
}
void
run_header(struct exec *exhdr, int extended_info)
{
char *id = NULL;
assert(NULL != exhdr);
/* print raw values */
printf(
"\ta_midmag 0x%08x (mid %d, magic 0%o, flag 0x%x)\n"
"\ta_text 0x%08x\n"
"\ta_data 0x%08x\n"
"\ta_bss 0x%08x\n"
"\ta_syms 0x%08x\n"
"\ta_entry 0x%08x\n"
"\ta_trsize 0x%08x\n"
"\ta_drsize 0x%08x\n",
exhdr->a_midmag,
N_GETMID(*exhdr), N_GETMAGIC(*exhdr), N_GETFLAG(*exhdr),
exhdr->a_text,
exhdr->a_data,
exhdr->a_bss,
exhdr->a_syms,
exhdr->a_entry,
exhdr->a_trsize,
exhdr->a_drsize
);
printf(
"magic number %04o: %s\n", N_GETMAGIC(*exhdr),
N_GETMAGIC(*exhdr) == OMAGIC ? "old impure format" :
N_GETMAGIC(*exhdr) == NMAGIC ? "read-only text" :
N_GETMAGIC(*exhdr) == ZMAGIC ? "demand load format" :
N_GETMAGIC(*exhdr) == QMAGIC ? "deprecated format" :
"totally funky"
);
switch (N_GETMID(*exhdr)) {
case MID_ZERO: id = "unknown - implementation dependent"; break;
case MID_SUN010: id = "sun 68010/68020 binary"; break;
case MID_SUN020: id = "sun 68020-only binary"; break;
case MID_PC386: id = "386 PC binary. (so quoth BFD)"; break;
case MID_HP200: id = "hp200 (68010) BSD binary"; break;
case MID_I386: id = "i386 BSD binary"; break;
case MID_M68K: id = "m68k BSD binary with 8K page sizes"; break;
case MID_M68K4K: id = "m68k BSD binary with 4K page sizes"; break;
case MID_NS32532: id = "ns32532"; break;
case MID_SPARC: id = "sparc"; break;
case MID_PMAX: id = "pmax"; break;
case MID_VAX: id = "vax"; break;
case MID_ALPHA: id = "Alpha BSD binary"; break;
case MID_MIPS: id = "big-endian MIPS"; break;
case MID_ARM6: id = "ARM6"; break;
case MID_HP300: id = "hp300 (68020+68881) BSD binary"; break;
case MID_HPUX: id = "hp200/300 HP-UX binary"; break;
case MID_HPUX800: id = "hp800 HP-UX binary"; break;
default:
id = "don't know"; break;
}
printf("type %d, %s\n", N_GETMID(*exhdr), id);
/* this left shift seems a bit bogus */
switch((N_GETFLAG(*exhdr) & EX_DPMASK)>>4) {
case 0:
id = "traditional executable or object file"; break;
case 1:
id = "object file contains PIC code"; break;
case 2:
id = "dynamic executable"; break;
case 3:
id = "position independent executable image"; break;
default:
id = NULL;
}
if (NULL != id)
printf("flags: 0x%x, %s\n", N_GETFLAG(*exhdr), id);
else
printf("flags: 0x%x\n", N_GETFLAG(*exhdr));
if (extended_info) {
unsigned long txt_addr;
unsigned long dat_addr;
unsigned long bss_addr;
/* N_TXTADDR and N_DATADDR macros DON'T WORK */
if (N_GETMAGIC(*exhdr) == ZMAGIC) {
txt_addr = __LDPGSZ;
dat_addr = ((txt_addr + exhdr->a_text + __LDPGSZ - 1) & ~(__LDPGSZ - 1));
} else if (N_GETMAGIC(*exhdr) == OMAGIC) {
txt_addr = 0;
dat_addr = txt_addr + exhdr->a_text;
} else {
txt_addr = 0xdeadbeef;
dat_addr = 0xcafebabe;
}
bss_addr = dat_addr + exhdr->a_data;
printf(" text segment size = 0x%lx, text segment file offset = %ld\n", exhdr->a_text, N_TXTOFF(*exhdr));
printf(" data segment size = 0x%lx, data segment file offset = %ld\n", exhdr->a_data, N_DATOFF(*exhdr));
printf(" bss segment size = 0x%lx\n", exhdr->a_bss);
printf(" text segment relocation size = 0x%lx, file offset = %ld, %d text relocations\n",
exhdr->a_trsize, N_TRELOFF(*exhdr), exhdr->a_trsize/sizeof(struct relocation_info));
printf(" data segment relocation size = 0x%lx, file offset = %ld, %d data relocations\n",
exhdr->a_drsize, N_DRELOFF(*exhdr), exhdr->a_drsize/sizeof(struct relocation_info));
printf(" symbol table size = 0x%lx, symbol table file offset = %ld (%d symbols)\n",
exhdr->a_syms, N_SYMOFF(*exhdr), exhdr->a_syms/sizeof(struct nlist));
printf(" string table file offset = 0x%lx (%d)\n", N_STROFF(*exhdr), N_STROFF(*exhdr));
printf(" entry point = 0x%lx\n", exhdr->a_entry);
printf(" text address = 0x%lx\n\tdata address = 0x%lx\n"
"\tbss address = 0x%lx\n",
txt_addr, dat_addr, bss_addr
/* N_TXTADDR(*exhdr), N_DATADDR(*exhdr), N_BSSADDR(*exhdr) */
);
}
}

View File

@@ -15,11 +15,6 @@
#define NROOM 20
#define NTUNN 3
#define NPIT 3
#ifdef pdp11
#define BIGINT 32768.0
#else
#define BIGINT 2147483648.0
#endif
struct room
{
@@ -105,14 +100,13 @@ int tchar;
int rnum(n)
{
static short first[2];
static time_t first;
if(first[1] == 0) {
time(first);
if(first[1]==0) first[1] = 1;
srand((first[1]*first[0])^first[1]);
if (first == 0) {
time(&first);
srand(first);
}
return((int)((rand()/BIGINT) * n));
return rand() % n;
}
int tunnel(i)

View File

@@ -15,7 +15,7 @@
char *
ctime(t)
time_t *t;
const time_t *t;
{
return asctime(localtime(t));
}
@@ -26,7 +26,7 @@ time_t *t;
char *
asctime(timeptr)
register struct tm * timeptr;
register const struct tm *timeptr;
{
static char wday_name[DAYS_PER_WEEK][3] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
@@ -272,7 +272,7 @@ tzset()
struct tm *
localtime(timep)
time_t * timep;
const time_t *timep;
{
register struct ttinfo * ttisp;
register struct tm * tmp;
@@ -310,7 +310,7 @@ time_t * timep;
struct tm *
gmtime(clock)
time_t * clock;
const time_t *clock;
{
register struct tm * tmp;