gen-aout.c revision 1.2
1/* Generate parameters for an a.out system. 2 Copyright (C) 1990, 91, 92, 93, 94, 98 Free Software Foundation, Inc. 3 4This file is part of BFD, the Binary File Descriptor library. 5 6This program is free software; you can redistribute it and/or modify 7it under the terms of the GNU General Public License as published by 8the Free Software Foundation; either version 2 of the License, or 9(at your option) any later version. 10 11This program is distributed in the hope that it will be useful, 12but WITHOUT ANY WARRANTY; without even the implied warranty of 13MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14GNU General Public License for more details. 15 16You should have received a copy of the GNU General Public License 17along with this program; if not, write to the Free Software 18Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 19 20#include "/usr/include/a.out.h" 21#include <stdio.h> 22 23int 24main (argc, argv) 25 int argc; char** argv; 26{ 27 struct exec my_exec; 28 int page_size; 29 char *target = "unknown", *arch = "unknown"; 30 FILE *file = fopen("gen-aout", "r"); 31 32 if (file == NULL) { 33 fprintf(stderr, "Cannot open gen-aout!\n"); 34 return -1; 35 } 36 if (fread(&my_exec, sizeof(struct exec), 1, file) != 1) { 37 fprintf(stderr, "Cannot read gen-aout!\n"); 38 return -1; 39 } 40 41 target = argv[1]; 42 if (target == NULL) { 43 fprintf(stderr, "Usage: gen-aout target_name\n"); 44 exit (1); 45 } 46 47#ifdef N_TXTOFF 48 page_size = N_TXTOFF(my_exec); 49 if (page_size == 0) 50 printf("#define N_HEADER_IN_TEXT(x) 1\n"); 51 else 52 printf("#define N_HEADER_IN_TEXT(x) 0\n"); 53#endif 54 55 printf("#define BYTES_IN_WORD %d\n", sizeof (int)); 56 if (my_exec.a_entry == 0) { 57 printf("#define ENTRY_CAN_BE_ZERO\n"); 58 printf("#define N_SHARED_LIB(x) 0 /* Avoids warning */\n"); 59 } 60 else { 61 printf("/*#define ENTRY_CAN_BE_ZERO*/\n"); 62 printf("/*#define N_SHARED_LIB(x) 0*/\n"); 63 } 64 65 printf("#define TEXT_START_ADDR %d\n", my_exec.a_entry); 66 67#ifdef PAGSIZ 68 if (page_size == 0) 69 page_size = PAGSIZ; 70#endif 71 if (page_size != 0) 72 printf("#define TARGET_PAGE_SIZE %d\n", page_size); 73 else 74 printf("/* #define TARGET_PAGE_SIZE ??? */\n"); 75 printf("#define SEGMENT_SIZE TARGET_PAGE_SIZE\n"); 76 77#ifdef vax 78 arch = "vax"; 79#endif 80#ifdef m68k 81 arch = "m68k"; 82#endif 83 if (arch[0] == '1') 84 { 85 fprintf (stderr, _("warning: preprocessor substituted architecture name inside string;")); 86 fprintf (stderr, _(" fix DEFAULT_ARCH in the output file yourself\n")); 87 arch = "unknown"; 88 } 89 printf("#define DEFAULT_ARCH bfd_arch_%s\n", arch); 90 91 printf("\n#define MY(OP) CAT(%s_,OP)\n", target); 92 printf("#define TARGETNAME \"a.out-%s\"\n\n", target); 93 94 printf("#include \"bfd.h\"\n"); 95 printf("#include \"sysdep.h\"\n"); 96 printf("#include \"libbfd.h\"\n"); 97 printf("#include \"libaout.h\"\n"); 98 printf("\n#include \"aout-target.h\"\n"); 99 100 return 0; 101} 102