diff --git a/include/stab.h b/include/stab.h deleted file mode 100644 index d7547d4..0000000 --- a/include/stab.h +++ /dev/null @@ -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 - * 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 . - */ -/* - * 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 */ diff --git a/include/time.h b/include/time.h index 7008e09..f21767b 100644 --- a/include/time.h +++ b/include/time.h @@ -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 diff --git a/rootfs.manifest b/rootfs.manifest index 562d7b0..c88d0d6 100644 --- a/rootfs.manifest +++ b/rootfs.manifest @@ -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 diff --git a/src/cmd/reloc/Makefile b/src/cmd/reloc/Makefile deleted file mode 100644 index 799683c..0000000 --- a/src/cmd/reloc/Makefile +++ /dev/null @@ -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 diff --git a/src/cmd/reloc/reloc.1 b/src/cmd/reloc/reloc.1 deleted file mode 100644 index 7ddf6f1..0000000 --- a/src/cmd/reloc/reloc.1 +++ /dev/null @@ -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. diff --git a/src/cmd/reloc/reloc.c b/src/cmd/reloc/reloc.c deleted file mode 100644 index 90278b0..0000000 --- a/src/cmd/reloc/reloc.c +++ /dev/null @@ -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 -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -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] \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) */ - ); - } -} diff --git a/src/games/wump.c b/src/games/wump.c index b52605d..6e27eed 100644 --- a/src/games/wump.c +++ b/src/games/wump.c @@ -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) diff --git a/src/libc/gen/ctime.c b/src/libc/gen/ctime.c index a373e45..82a4545 100644 --- a/src/libc/gen/ctime.c +++ b/src/libc/gen/ctime.c @@ -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;