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