Path: utzoo!utgpu!watmath!uunet!tut.cis.ohio-state.edu!MCNC.ORG!matrx!huey!cindy From: matrx!huey!cindy@MCNC.ORG (Cindy Miller) Newsgroups: gnu.gcc.bug Subject: (none) Message-ID: <8910182109.AA28772@huey.matrix.com> Date: 18 Oct 89 21:09:50 GMT Sender: daemon@tut.cis.ohio-state.edu Distribution: gnu Organization: GNUs Not Usenet Lines: 6387 Hi rms, I just got your mail (boy, that was fast, thanks). I have sent you more info, but will include the output of cpp with gcc.c. Below the '+'s, it starts. Thank you, Cindy Miller @ Matrix email: mcnc!matrx!cindy phone: 919-833-2000 +++++++++++++++++++++++++++++++++++++++++++++ # 1 "gcc.c" # 1 "/usr/include/stdio.h" # 1 "/usr/include/_int_stddef.h" typedef unsigned int size_t; typedef int wchar_t; # 15 "/usr/include/stdio.h" # 1 "/usr/include/_int_varargs.h" typedef struct { int __va_arg; int *__va_stk; int *__va_reg; } va_list; # 16 "/usr/include/stdio.h" typedef struct { int _cnt; unsigned char *_ptr; unsigned char *_base; int _flag; int _file; int _reserve[27]; } FILE; int getc (FILE *__stream) ; int putc ( int __c, FILE * __stream) ; int getchar (void) ; int putchar (int __c) ; void clearerr (FILE *__stream) ; int feof (FILE *__stream) ; int ferror (FILE *__stream) ; extern int _filbuf(); extern FILE _iob[64 ]; extern unsigned char *_bufendtab[]; typedef long int fpos_t; extern FILE *fdopen(); extern FILE *popen(); extern char *ctermid(), *cuserid(), *tempnam(); extern int pclose(), system(); extern int rename (const char *__old, const char *__new) ; extern int fclose (FILE *__stream) ; extern int fflush (FILE *__stream) ; extern FILE *fopen (const char *__filename, const char *__mode) ; extern FILE *freopen (const char *__filename, const char *__mode, FILE *__stream) ; extern void setbuf (FILE *__stream, char *__buf) ; extern int setvbuf (FILE *__stream, char *__buf, int __mode, size_t __size) ; extern int fprintf (FILE *__stream, const char *__format, ...) ; extern int fscanf (FILE *__stream, const char *__format, ...) ; extern int printf (const char *__format, ...) ; extern int scanf (const char *__format, ...) ; extern int sprintf (char *__s, const char *__format, ...) ; extern int sscanf (const char *__s, const char *__format, ...) ; extern int vscanf ( const char *__fmt, va_list ) ; extern int vfprintf ( FILE *__stream, const char *__fmt, va_list ) ; extern int vfscanf ( FILE *__stream, const char *__fmt, va_list ) ; extern int vsscanf (const char *__buf, const char *__fmt, va_list) ; extern vprintf (const char *__format, va_list __arg) ; extern int vsprintf (char *__s, const char *__format, va_list __arg) ; extern int fgetc (FILE *__stream) ; extern int ungetc ( int __ch, FILE *__stream ) ; extern int putw ( int __n, FILE *__stream ) ; extern int getw ( FILE *__stream ) ; extern int fputc (int __c, FILE *__stream) ; extern int fputs (const char *__s, FILE *__stream) ; extern char *gets (char *__s) ; extern char *fgets ( char *__line, int __n, FILE *__stream ) ; extern int puts (const char *__s) ; extern size_t fread (void * __ptr, size_t __size, size_t __nmemb, FILE *__stream) ; extern size_t fwrite (const void * __ptr, size_t __size, size_t __nmemb, FILE *__stream) ; extern int fgetpos (FILE *__stream, fpos_t *__pos) ; extern int fseek (FILE *__stream, long int __offset, int __whence) ; extern int fsetpos (FILE *__stream, const fpos_t *__pos) ; extern long int ftell (FILE *__stream) ; extern void rewind (FILE *__stream) ; extern int remove (const char *__filename) ; extern void perror (const char *__s) ; extern FILE *tmpfile (void) ; extern char *tmpnam (char *__s) ; # 134 "gcc.c" # 1 "/usr/include/sys/types.h" # 1 "/usr/include/sys/_int_features.h" # 71 "/usr/include/sys/types.h" typedef long time_t ; typedef long dev_t ; typedef long off_t ; typedef unsigned long ino_t ; typedef unsigned long uid_t ; typedef unsigned long gid_t ; typedef unsigned long mode_t ; typedef long nlink_t ; typedef int pid_t ; # 243 "/usr/include/sys/types.h" typedef unsigned short ushort ; typedef int label_t [10]; typedef char * caddr_t ; typedef long daddr_t ; # 461 "/usr/include/sys/types.h" typedef unsigned char u_char ; typedef unsigned short u_short ; typedef unsigned long u_long ; typedef long fd_mask ; typedef struct fd_set { fd_mask fds_bits [(((256 )+(( (sizeof(fd_mask) * 8 ) )-1))/( (sizeof(fd_mask) * 8 ) )) ]; } fd_set; # 1 "/usr/include/sys/sysmacros.h" # 723 "/usr/include/sys/types.h" # 135 "gcc.c" # 1 "/usr/include/signal.h" # 1 "/usr/include/sys/signal.h" # 257 "/usr/include/sys/signal.h" struct sigvec { void (* sv_handler )(); long sv_mask; long sv_pad1; int sv_flags; }; struct sigstack { char * ss_sp; int ss_onstack; }; # 486 "/usr/include/sys/signal.h" # 528 "/usr/include/sys/signal.h" int kill (pid_t __pid, int __sig) ; # 921 "/usr/include/sys/signal.h" # 25 "/usr/include/signal.h" # 1 "/usr/include/_int_stddef.h" # 45 "/usr/include/_int_stddef.h" # 26 "/usr/include/signal.h" typedef int sig_atomic_t; extern void (*signal (int __sig, void (*__func)(int)) ) (int) ; extern void (*sigset())(); extern int raise (int __sig) ; # 136 "gcc.c" # 1 "/usr/include/sys/file.h" # 1 "/usr/include/sys/fcntl.h" # 92 "/usr/include/sys/fcntl.h" # 176 "/usr/include/sys/fcntl.h" # 192 "/usr/include/sys/fcntl.h" # 249 "/usr/include/sys/fcntl.h" # 360 "/usr/include/sys/fcntl.h" # 376 "/usr/include/sys/fcntl.h" int fcntl (int __fildes, int __cmd, ...) ; int open (char * __path, int __oflag, ...) ; int creat (char * __path, mode_t __mode) ; # 62 "/usr/include/sys/file.h" # 164 "/usr/include/sys/file.h" # 137 "gcc.c" # 1 "/usr/include/setjmp.h" typedef int jmp_buf[24 ]; extern int setjmp(); extern void longjmp(); # 138 "gcc.c" # 1 "/usr/include/varargs.h" # 98 "/usr/include/varargs.h" # 139 "gcc.c" # 1 "config.h" # 1 "tm.h" # 1 "tm-m68k.h" extern int target_flags; # 85 "tm-m68k.h" # 181 "tm-m68k.h" # 197 "tm-m68k.h" # 223 "tm-m68k.h" enum reg_class { NO_REGS, LO_FPA_REGS, FPA_REGS, FP_REGS, FP_OR_FPA_REGS, DATA_REGS, DATA_OR_FPA_REGS, DATA_OR_FP_REGS, DATA_OR_FP_OR_FPA_REGS, ADDR_REGS, GENERAL_REGS, GENERAL_OR_FPA_REGS, GENERAL_OR_FP_REGS, ALL_REGS, LIM_REG_CLASSES }; # 358 "tm-m68k.h" extern enum reg_class regno_reg_class[]; # 389 "tm-m68k.h" # 623 "tm-m68k.h" # 738 "tm-m68k.h" # 786 "tm-m68k.h" # 896 "tm-m68k.h" # 928 "tm-m68k.h" # 996 "tm-m68k.h" # 1076 "tm-m68k.h" # 1176 "tm-m68k.h" # 1448 "tm-m68k.h" # 1598 "tm-m68k.h" # 22 "tm.h" # 58 "tm.h" # 33 "config.h" # 141 "gcc.c" # 1 "obstack.h" struct _obstack_chunk { char *limit; struct _obstack_chunk *prev; char contents[4]; }; struct obstack { long chunk_size; struct _obstack_chunk* chunk; char *object_base; char *next_free; char *chunk_limit; int temp; int alignment_mask; struct _obstack_chunk *(*chunkfun) (); void (*freefun) (); }; void obstack_init (struct obstack *obstack); void * obstack_alloc (struct obstack *obstack, int size); void * obstack_copy (struct obstack *obstack, void *address, int size); void * obstack_copy0 (struct obstack *obstack, void *address, int size); void obstack_free (struct obstack *obstack, void *block); void obstack_blank (struct obstack *obstack, int size); void obstack_grow (struct obstack *obstack, void *data, int size); void obstack_grow0 (struct obstack *obstack, void *data, int size); void obstack_1grow (struct obstack *obstack, int data_char); void * obstack_finish (struct obstack *obstack); int obstack_object_size (struct obstack *obstack); int obstack_room (struct obstack *obstack); void obstack_1grow_fast (struct obstack *obstack, int data_char); void obstack_blank_fast (struct obstack *obstack, int size); void * obstack_base (struct obstack *obstack); void * obstack_next_free (struct obstack *obstack); int obstack_alignment_mask (struct obstack *obstack); int obstack_chunk_size (struct obstack *obstack); # 244 "obstack.h" # 286 "obstack.h" # 369 "obstack.h" # 142 "gcc.c" extern int xmalloc (); extern void free (); struct obstack obstack; char *handle_braces (); char *save_string (); char *concat (); int do_spec (); int do_spec_1 (); char *find_file (); static char *find_exec_file (); void validate_switches (); void validate_all_switches (); struct compiler { char *suffix; char *spec; }; struct compiler compilers[] = { {".c", "cpp %{nostdinc} %{C} %{v} %{D*} %{U*} %{I*} %{M*} %{trigraphs} -undef -D__GNUC__ %{ansi:-trigraphs -$ -D__STRICT_ANSI__} %{!ansi:%p} %P %c %{O:-D__OPTIMIZE__} %{traditional} %{pedantic} %{H} %{C:%{!E:%eGNU CC does not support -C without using -E\n}} %{Wcomment*} %{Wtrigraphs} %{Wall} %C %{V:%{!v:-v}} %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n %{!M*:%{!E:cc1 %{!pipe:%g.cpp} %1 %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*} %{a} %{g} %{O} %{W*} %{w} %{ pedantic} %{ansi} %{traditional} %{v:-version} %{V:%{!v:-version}} %{gg:-symout %g.sym} %{pg:-p} %{p} %{traditional:%{!fwritable-strings:%{!fno-writable-strings:-fwritable-strings}}} %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %2 %{S:%{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n %{!S:a68 %{R} %{j} %{J} %{h} %{d2} %a %{gg:-G %g.sym} %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o} %A %{!p! ipe:%g.s}\n }}}"}, # 256 "gcc.c" {".cc", "cpp -+ %{nostdinc} %{C} %{v} %{D*} %{U*} %{I*} %{M*} -undef -D__GNUC__ %p %P %c %{O:-D__OPTIMIZE__} %{traditional} %{pedantic} %{H} %{Wcomment*} %{Wtrigraphs} %{Wall} %C %{V:%{!v:-v}} %{C:%{!E:%eGNU C++ does not support -C without using -E\n}} %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n %{!M*:%{!E:cc1plus %{!pipe:%g.cpp} %1 %{!Q:-quiet} -dumpbase %i %{Y*} %{d*} %{m*} %{f*} %{a} %{g} %{O} %{W*} %{w} %{pedantic} %{traditional} %{traditional:%{!fwritable -strings:%{!fno-writable-strings:-fwritable-strings}}} %{v:-version} %{V:%{!v:-version}} %{gg:-symout %g.sym} %{pg:-p} %{p} %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} %2 %{S:%{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n %{!S:a68 %{R} %{j} %{J} %{h} %{d2} %a %{gg:-G %g.sym} %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o} %A %{!pipe:%g.s}\n }}}"}, # 273 "gcc.c" {".i", "cc1 %i %1 %{!Q:-quiet} %{Y*} %{d*} %{m*} %{f*} %{a} %{g} %{O} %{W*} %{w} %{pedantic} %{ansi} %{traditional} %{traditional:%{!fwritable-strings:%{!fno-writable-strings:-fwritable-strings}}} %{v:-version} %{V:%{!v:-version}} %{gg:-symout %g.sym} %{pg:-p} %{p} %2 %{S:%{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n %{!S:a68 %{R} %{j} %{J} %{h} %{d2} %a %{gg:-G %g.sym} %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o} %A %{!pipe:%g.s}\n }"}, {".s", "%{!S:a68 %{R} %{j} %{J} %{h} %{d2} %a %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o} %i\n }"}, {".S", "cpp %{nostdinc} %{C} %{v} %{D*} %{U*} %{I*} %{M*} %{trigraphs} -undef -D__GNUC__ -$ %p %P %{V:%{!v:-v}} %c %{O:-D__OPTIMIZE__} %{traditional} %{pedantic} %{H} %{Wcomment*} %{Wtrigraphs} %{Wall} %C %i %{!M*:%{!E:%{!pipe:%g.cpp}}}%{E:%{o*}}%{M*:%{o*}} |\n %{!M*:%{!E:%{!S:a68 %{R} %{j} %{J} %{h} %{d2} %a %{c:%{o*}%{!o*:-o %w%b.o}}%{!c:-o %d%w%b.o} %A %{!pipe:%g.s}\n }}}"}, {0, 0} }; char *link_spec = "%{!c:%{!M*:%{!E:%{!S:ld %{o*} %l %{A} %{d} %{e*} %{N} %{n} %{r} %{s} %{S} %{T*} %{t} %{u*} %{X} %{x} %{z} %{y*} %{!nostdlib:%S} %{L*} %o %{!nostdlib:gnulib%s %{g:-lg} %L}\n }}}}"; char *temp_filename; int temp_filename_length; struct temp_file { char *name; struct temp_file *next; }; struct temp_file *always_delete_queue; struct temp_file *failure_delete_queue; void record_temp_file (filename, always_delete, fail_delete) char *filename; int always_delete; int fail_delete; { register char *name; name = (char *) xmalloc (strlen (filename) + 1); strcpy (name, filename); if (always_delete) { register struct temp_file *temp; temp = (struct temp_file *) xmalloc (sizeof (struct temp_file)); temp->next = always_delete_queue; temp->name = name; always_delete_queue = temp; } if (fail_delete) { register struct temp_file *temp; temp = (struct temp_file *) xmalloc (sizeof (struct temp_file)); temp->next = failure_delete_queue; temp->name = name; failure_delete_queue = temp; } } void delete_temp_files (success) int success; { register struct temp_file *temp; for (temp = always_delete_queue; temp; temp = temp->next) { # 389 "gcc.c" unlink (temp->name); } if (! success) for (temp = failure_delete_queue; temp; temp = temp->next) { # 404 "gcc.c" unlink (temp->name); } always_delete_queue = 0; failure_delete_queue = 0; } void clear_failure_queue () { failure_delete_queue = 0; } void choose_temp_base () { extern char *getenv (); char *base = getenv ("TMPDIR"); int len; if (base == (char *)0) { if (access ("/usr/tmp/" , 4 | 2 ) == 0) base = "/usr/tmp/" ; else if (access ("/usr/tmp", 4 | 2 ) == 0) base = "/usr/tmp/"; else base = "/tmp/"; } len = strlen (base); temp_filename = (char *) xmalloc (len + sizeof("/ccXXXXXX")); strcpy (temp_filename, base); if (len > 0 && temp_filename[len-1] != '/') temp_filename[len++] = '/'; strcpy (temp_filename + len, "ccXXXXXX"); mktemp (temp_filename); temp_filename_length = strlen (temp_filename); } char **argbuf; int argbuf_length; int argbuf_index; unsigned char vflag; unsigned char print_version; char *programname; char *user_exec_prefix = 0; char *env_exec_prefix = 0; char *standard_exec_prefix = "/usr/local/lib/gcc-" ; char *standard_exec_prefix_1 = "/usr/lib/gcc-"; char *standard_startfile_prefix = "/usr/local/lib/" ; char *standard_startfile_prefix_1 = "/lib/"; char *standard_startfile_prefix_2 = "/usr/lib/"; void clear_args () { argbuf_index = 0; } void store_arg (arg, delete_always, delete_failure) char *arg; int delete_always, delete_failure; { if (argbuf_index + 1 == argbuf_length) { argbuf = (char **) realloc (argbuf, (argbuf_length *= 2) * sizeof (char *)); } argbuf[argbuf_index++] = arg; argbuf[argbuf_index] = 0; if (delete_always || delete_failure) record_temp_file (arg, delete_always, delete_failure); } static char * find_exec_file (prog) char *prog; { int win = 0; char *temp; int size; size = strlen (standard_exec_prefix); if (user_exec_prefix != 0 && strlen (user_exec_prefix) > size) size = strlen (user_exec_prefix); if (env_exec_prefix != 0 && strlen (env_exec_prefix) > size) size = strlen (env_exec_prefix); if (strlen (standard_exec_prefix_1) > size) size = strlen (standard_exec_prefix_1); size += strlen (prog) + 1; temp = (char *) xmalloc (size); if (user_exec_prefix) { strcpy (temp, user_exec_prefix); strcat (temp, prog); win = (access (temp, 1 ) == 0); } if (!win && env_exec_prefix) { strcpy (temp, env_exec_prefix); strcat (temp, prog); win = (access (temp, 1 ) == 0); } if (!win) { strcpy (temp, standard_exec_prefix); strcat (temp, prog); win = (access (temp, 1 ) == 0); } if (!win) { strcpy (temp, standard_exec_prefix_1); strcat (temp, prog); win = (access (temp, 1 ) == 0); } if (win) return temp; else return 0; } int last_pipe_input; static int pexecute (func, program, argv, not_last) char *program; int (*func)(); char *argv[]; int not_last; { int pid; int pdes[2]; int input_desc = last_pipe_input; int output_desc = 1 ; if (not_last) { if (pipe (pdes) < 0) pfatal_with_name ("pipe"); output_desc = pdes[1 ]; last_pipe_input = pdes[0 ]; } else last_pipe_input = 0 ; pid = vfork (); switch (pid) { case -1: pfatal_with_name ("vfork"); break; case 0: if (input_desc != 0 ) { close (0 ); dup (input_desc); close (input_desc); } if (output_desc != 1 ) { close (1 ); dup (output_desc); close (output_desc); } if (last_pipe_input != 0 ) close (last_pipe_input); (*func) (program, argv); perror_exec (program); exit (-1); default: if (input_desc != 0 ) close (input_desc); if (output_desc != 1 ) close (output_desc); return pid; } } int execute () { int i, j; int n_commands; char *string; struct command { char *prog; char **argv; int pid; }; struct command *commands; for (n_commands = 1, i = 0; i < argbuf_index; i++) if (strcmp (argbuf[i], "|") == 0) n_commands++; commands = (struct command *) __builtin_alloca (n_commands * sizeof (struct command)); commands[0].prog = argbuf[0]; commands[0].argv = &argbuf[0]; string = find_exec_file (commands[0].prog); if (string) commands[0].argv[0] = string; for (n_commands = 1, i = 0; i < argbuf_index; i++) if (strcmp (argbuf[i], "|") == 0) { argbuf[i] = 0; commands[n_commands].prog = argbuf[i + 1]; commands[n_commands].argv = &argbuf[i + 1]; string = find_exec_file (commands[n_commands].prog); if (string) commands[n_commands].argv[0] = string; n_commands++; } argbuf[argbuf_index] = 0; if (vflag) { for (i = 0; i < n_commands ; i++) { char **j; for (j = commands[i].argv; *j; j++) fprintf ( (&_iob[2]) , " %s", *j); if (i + 1 != n_commands) fprintf ( (&_iob[2]) , " |"); fprintf ( (&_iob[2]) , "\n"); } fflush ( (&_iob[2]) ); # 772 "gcc.c" } last_pipe_input = 0 ; for (i = 0; i < n_commands; i++) { extern int execv(), execvp(); char *string = commands[i].argv[0]; commands[i].pid = pexecute ((string != commands[i].prog ? execv : execvp), string, commands[i].argv, i + 1 < n_commands); if (string != commands[i].prog) free (string); } { int ret_code = 0; for (i = 0; i < n_commands; i++) { int status; int pid; char *prog; pid = wait (&status); if (pid < 0) abort (); if (status != 0) { int j; for (j = 0; j < n_commands; j++) if (commands[j].pid == pid) prog = commands[j].prog; if ((status & 0x7F) != 0) fatal ("Program %s got fatal signal %d.", prog, (status & 0x7F)); if (((status & 0xFF00) >> 8) >= 1 ) ret_code = -1; } } return ret_code; } } struct switchstr { char *part1; char *part2; int valid; }; struct switchstr *switches; int n_switches; char **infiles; int n_infiles; char **outfiles; void process_command (argc, argv) int argc; char **argv; { extern char *getenv (); register int i; n_switches = 0; n_infiles = 0; env_exec_prefix = getenv ("GCC_EXEC_PREFIX"); for (i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] != 'l') { register char *p = &argv[i][1]; register int c = *p; switch (c) { case 'B': user_exec_prefix = p + 1; break; case 'v': vflag++; n_switches++; break; case 'V': print_version++; n_switches++; break; default: n_switches++; if (((c) == 'D' || (c) == 'U' || (c) == 'o' || (c) == 'e' || (c) == 'T' || (c) == 'u' || (c) == 'I' || (c) == 'Y' || (c) == 'm' || (c) == 'L') && p[1] == 0) i++; else if ((!strcmp (p, "Tdata")) ) i++; } } else n_infiles++; } switches = ((struct switchstr *) xmalloc ((n_switches + 1) * sizeof (struct switchstr))); infiles = (char **) xmalloc ((n_infiles + 1) * sizeof (char *)); n_switches = 0; n_infiles = 0; for (i = 1; i < argc; i++) { if (argv[i][0] == '-' && argv[i][1] != 'l') { register char *p = &argv[i][1]; register int c = *p; if (c == 'B') continue; switches[n_switches].part1 = p; if ((((c) == 'D' || (c) == 'U' || (c) == 'o' || (c) == 'e' || (c) == 'T' || (c) == 'u' || (c) == 'I' || (c) == 'Y' || (c) == 'm' || (c) == 'L') && p[1] == 0) || (!strcmp (p, "Tdata")) ) switches[n_switches].part2 = argv[++i]; else switches[n_switches].part2 = 0; switches[n_switches].valid = 0; n_switches++; } else infiles[n_infiles++] = argv[i]; } switches[n_switches].part1 = 0; infiles[n_infiles] = 0; } char *input_filename; int input_file_number; int input_filename_length; int basename_length; char *input_basename; int arg_going; int delete_this_arg; int this_is_output_file; int this_is_library_file; int ignore_spec; jmp_buf spec_label; int do_spec (spec) char *spec; { int value; clear_args (); arg_going = 0; delete_this_arg = 0; this_is_output_file = 0; this_is_library_file = 0; ignore_spec = 0; value = setjmp (spec_label); if (value != 0) return value; value = do_spec_1 (spec, 0); if (value == 0) { if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|")) argbuf_index--; if (argbuf_index > 0) value = execute (); } return value; } int do_spec_1 (spec, inswitch) char *spec; int inswitch; { register char *p = spec; register int c; char *string; while (c = *p++) switch (inswitch ? 'a' : c) { case '\n': if (arg_going && !ignore_spec) { ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( 0); (void) 0; }) ; string = ({ struct obstack *__o = (&obstack); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0) +__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0) ; ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }) ; if (this_is_library_file) string = find_file (string); store_arg (string, delete_this_arg, this_is_output_file); if (this_is_output_file) outfiles[input_file_number] = string; } arg_going = 0; ignore_spec = 0; if (argbuf_index > 0 && !strcmp (argbuf[argbuf_index - 1], "|")) { int i; for (i = 0; i < n_switches; i++) if (!strcmp (switches[i].part1, "pipe")) break; if (i < n_switches) { switches[i].valid = 1; break; } else argbuf_index--; } { int value = (argbuf_index > 0) ? execute () : 0; clear_args (); arg_going = 0; delete_this_arg = 0; this_is_output_file = 0; this_is_library_file = 0; ignore_spec = 0; if (value) longjmp (spec_label, value); } break; case '|': if (arg_going && !ignore_spec) { ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( 0); (void) 0; }) ; string = ({ struct obstack *__o = (&obstack); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0) +__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0) ; ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }) ; if (this_is_library_file) string = find_file (string); store_arg (string, delete_this_arg, this_is_output_file); if (this_is_output_file) outfiles[input_file_number] = string; } ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( c); (void) 0; }) ; arg_going = 1; ignore_spec = 0; break; case '\t': case ' ': if (arg_going && !ignore_spec) { ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( 0); (void) 0; }) ; string = ({ struct obstack *__o = (&obstack); void *value = (void *) __o->object_base; __o->next_free = (((((__o->next_free) - (char *)0) +__o->alignment_mask) & ~ (__o->alignment_mask)) + (char *)0) ; ((__o->next_free - (char *)__o->chunk > __o->chunk_limit - (char *)__o->chunk) ? (__o->next_free = __o->chunk_limit) : 0); __o->object_base = __o->next_free; value; }) ; if (this_is_library_file) string = find_file (string); store_arg (string, delete_this_arg, this_is_output_file); if (this_is_output_file) outfiles[input_file_number] = string; } arg_going = 0; delete_this_arg = 0; this_is_output_file = 0; this_is_library_file = 0; break; case '%': switch (c = *p++) { case 0: fatal ("Invalid specification! Bug in cc."); case 'b': if (!ignore_spec) ({ struct obstack *__o = (&obstack); int __len = ( basename_length); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); memcpy ( __o->next_free, input_basename, __len) ; __o->next_free += __len; (void) 0; }) ; arg_going = 1; break; case 'd': delete_this_arg = 2; break; case 'e': { char *q = p; char *buf; while (*p != 0 && *p != '\n') p++; buf = (char *) __builtin_alloca (p - q + 1); strncpy (buf, q, p - q); error ("%s", buf); return -1; } break; case 'g': if (!ignore_spec) ({ struct obstack *__o = (&obstack); int __len = ( temp_filename_length); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); memcpy ( __o->next_free, temp_filename, __len) ; __o->next_free += __len; (void) 0; }) ; delete_this_arg = 1; arg_going = 1; break; case 'i': if (!ignore_spec) ({ struct obstack *__o = (&obstack); int __len = ( input_filename_length); ((__o->next_free + __len > __o->chunk_limit) ? _obstack_newchunk (__o, __len) : 0); memcpy ( __o->next_free, input_filename, __len) ; __o->next_free += __len; (void) 0; }) ; arg_going = 1; break; case 'o': if (!ignore_spec) { register int f; for (f = 0; f < n_infiles; f++) store_arg (outfiles[f], 0, 0); } break; case 's': this_is_library_file = 1; break; case 'w': this_is_output_file = 1; break; case '{': p = handle_braces (p); if (p == 0) return -1; break; case '%': if (!ignore_spec) ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( '%'); (void) 0; }) ; break; case '~': ignore_spec = ! ignore_spec; arg_going = 0; break; case '1': do_spec_1 ("" , 0); break; case '2': do_spec_1 ("" , 0); break; case 'a': do_spec_1 ("%{m68000:-mc68010}%{mc68000:-mc68010}%{!mc68000:%{!m68000:-mc68020}}" , 0); break; case 'A': do_spec_1 ("" , 0); break; case 'c': do_spec_1 ((1 ? "%{funsigned-char:-D__CHAR_UNSIGNED__}" : "%{!fsigned-char:-D__CHAR_UNSIGNED__}") , 0); break; case 'C': do_spec_1 ("%{!msoft-float:%{mfpa:-D__HAVE_FPA__ }%{!mfpa:-D__HAVE_68881__ }}%{!ansi:%{m68000:-Dmc68010}%{mc68000:-Dmc68010}%{!mc68000:%{!m68000:-Dmc68020}}}" , 0); break; case 'l': do_spec_1 ("" , 0); break; case 'L': do_spec_1 ("%{!p:%{!pg:-lc}}%{p:-lc_p}%{pg:-lc_p} %{a:/usr/lib/bb_link.o} " , 0); break; case 'p': do_spec_1 ("-Dmc68000 -Dsun -Dunix" , 0); break; case 'P': { char *x = (char *) __builtin_alloca (strlen ("-Dmc68000 -Dsun -Dunix" ) * 2 + 1); char *buf = x; char *y = "-Dmc68000 -Dsun -Dunix" ; while (1) { if (! strncmp (y, "-D", 2)) { *x++ = '-'; *x++ = 'D'; *x++ = '_'; *x++ = '_'; y += 2; } else if (*y == ' ' || *y == 0) { *x++ = '_'; *x++ = '_'; if (*y == 0) break; else *x++ = *y++; } else *x++ = *y++; } *x = 0; do_spec_1 (buf, 0); } break; case 'S': do_spec_1 ("%{pg:gcrt0.o%s}%{!pg:%{p:mcrt0.o%s}%{!p:crt0.o%s}} %{mfpa:Wcrt1.o%s} %{msoft-float:Fcrt1.o%s} %{!mfpa:%{!msoft-float:Mcrt1.o%s}}" , 0); break; default: abort (); } break; default: if (!ignore_spec) { ({ struct obstack *__o = (&obstack); ((__o->next_free + 1 > __o->chunk_limit) ? _obstack_newchunk (__o, 1) : 0), *(__o->next_free)++ = ( c); (void) 0; }) ; arg_going = 1; } } return 0; } char * handle_braces (p) register char *p; { register char *q; char *filter; int pipe = 0; int negate = 0; int star = 0; if (*p == '|') pipe = 1, ++p; if (*p == '!') negate = 1, ++p; if (*p == '*') star = 1, ++p; filter = p; while (*p != ':' && *p != '}') p++; if (*p != '}') { register int count = 1; q = p + 1; while (count > 0) { if (*q == '{') count++; else if (*q == '}') count--; else if (*q == 0) abort (); q++; } } else q = p + 1; if (p[-1] == '*' && p[0] == '}') { register int i; --p; for (i = 0; i < n_switches; i++) if (!strncmp (switches[i].part1, filter, p - filter)) give_switch (i, star, p - filter); } else { register int i; int present = 0; if (p[-1] == '*') { for (i = 0; i < n_switches; i++) { if (!strncmp (switches[i].part1, filter, p - filter - 1)) { switches[i].valid = 1; present = 1; } } } else { for (i = 0; i < n_switches; i++) { if (!strncmp (switches[i].part1, filter, p - filter) && switches[i].part1[p - filter] == 0) { switches[i].valid = 1; present = 1; break; } } } if (present != negate) { if (*p == '}') { give_switch (i, star, p - filter); } else { if (do_spec_1 (save_string (p + 1, q - p - 2), 0) < 0) return 0; } } else if (pipe) { do_spec_1 ("-"); } } return q; } give_switch (switchnum, strip_initial, initial_length) int switchnum; int strip_initial; int initial_length; { if (!strip_initial) { do_spec_1 ("-", 0); do_spec_1 (switches[switchnum].part1, 1); do_spec_1 (" ", 0); if (switches[switchnum].part2 != 0) { do_spec_1 (switches[switchnum].part2, 1); do_spec_1 (" ", 0); } } else { int part1_len = strlen (switches[switchnum].part1); if (part1_len > initial_length) { do_spec_1 (switches[switchnum].part1 + initial_length, 1); do_spec_1 (" ", 0); } if (switches[switchnum].part2 != 0) { char *p = switches[switchnum].part2; if (part1_len < initial_length) p += initial_length - part1_len; do_spec_1 (p, 1); do_spec_1 (" ", 0); } } switches[switchnum].valid = 1; } char * find_file (name) char *name; { int size; char *temp; int win = 0; size = strlen (standard_exec_prefix); if (user_exec_prefix != 0 && strlen (user_exec_prefix) > size) size = strlen (user_exec_prefix); if (env_exec_prefix != 0 && strlen (env_exec_prefix) > size) size = strlen (env_exec_prefix); if (strlen (standard_exec_prefix) > size) size = strlen (standard_exec_prefix); if (strlen (standard_exec_prefix_1) > size) size = strlen (standard_exec_prefix_1); if (strlen (standard_startfile_prefix) > size) size = strlen (standard_startfile_prefix); if (strlen (standard_startfile_prefix_1) > size) size = strlen (standard_startfile_prefix_1); if (strlen (standard_startfile_prefix_2) > size) size = strlen (standard_startfile_prefix_2); size += strlen (name) + 1; temp = (char *) __builtin_alloca (size); if (user_exec_prefix) { strcpy (temp, user_exec_prefix); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win && env_exec_prefix) { strcpy (temp, env_exec_prefix); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, standard_exec_prefix); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, standard_exec_prefix_1); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, standard_startfile_prefix); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, standard_startfile_prefix_1); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, standard_startfile_prefix_2); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (!win) { strcpy (temp, "./"); strcat (temp, name); win = (access (temp, 4 ) == 0); } if (win) return save_string (temp, strlen (temp)); return name; } void fatal_error (signum) int signum; { signal (signum, ((void (*)())(0)) ); delete_temp_files (0); kill (getpid (), signum); } int main (argc, argv) int argc; char **argv; { register int i; int value; int nolink = 0; int error_count = 0; programname = argv[0]; if (signal ( 2 , ((void (*)())(1)) ) != ((void (*)())(1)) ) signal ( 2 , fatal_error); if (signal ( 1 , ((void (*)())(1)) ) != ((void (*)())(1)) ) signal ( 1 , fatal_error); if (signal ( 15 , ((void (*)())(1)) ) != ((void (*)())(1)) ) signal ( 15 , fatal_error); argbuf_length = 10; argbuf = (char **) xmalloc (argbuf_length * sizeof (char *)); _obstack_begin ((&obstack), 0, 0, xmalloc , free ) ; choose_temp_base (); process_command (argc, argv); if (vflag | print_version) { extern char *version_string; extern char *strchr (); fprintf ( (&_iob[2]) , "GNU %s version %s", (strchr (argv[0], '+') == (char *)0) ? "GCC" : "G++", version_string); fprintf ( (&_iob[2]) , " (68k, MIT syntax)"); ; fprintf ( (&_iob[2]) , " compiled by GNU C version %s.\n", "1.35"); if (n_infiles == 0) exit (0); } if (n_infiles == 0) fatal ("No input files specified."); outfiles = (char **) xmalloc (n_infiles * sizeof (char *)); memset (outfiles,0, n_infiles * sizeof (char *)) ; for (i = 0; i < n_infiles; i++) { register struct compiler *cp; input_filename = infiles[i]; input_filename_length = strlen (input_filename); input_file_number = i; outfiles[i] = input_filename; for (cp = compilers; cp->spec; cp++) { if (strlen (cp->suffix) < input_filename_length && !strcmp (cp->suffix, infiles[i] + input_filename_length - strlen (cp->suffix))) { register char *p; input_basename = input_filename; for (p = input_filename; *p; p++) if (*p == '/') input_basename = p + 1; basename_length = (input_filename_length - strlen (cp->suffix) - (input_basename - input_filename)); value = do_spec (cp->spec); if (value < 0) error_count = 1; break; } } if (! cp->spec && nolink) { error ("%s: linker input file unused since linking not done", input_filename); } clear_failure_queue (); } if (! nolink && error_count == 0) { value = do_spec (link_spec); if (value < 0) error_count = 1; } validate_all_switches (); for (i = 0; i < n_switches; i++) if (! switches[i].valid) error ("unrecognized option `-%s'", switches[i].part1); delete_temp_files (error_count == 0); exit (error_count); } xmalloc (size) int size; { register int value = malloc (size); if (value == 0) fatal ("Virtual memory full."); return value; } xrealloc (ptr, size) int ptr, size; { register int value = realloc (ptr, size); if (value == 0) fatal ("Virtual memory full."); return value; } char * concat (s1, s2, s3) char *s1, *s2, *s3; { int len1 = strlen (s1), len2 = strlen (s2), len3 = strlen (s3); char *result = (char *) xmalloc (len1 + len2 + len3 + 1); strcpy (result, s1); strcpy (result + len1, s2); strcpy (result + len1 + len2, s3); *(result + len1 + len2 + len3) = 0; return result; } char * save_string (s, len) char *s; int len; { register char *result = (char *) xmalloc (len + 1); memcpy ( result,s, len) ; result[len] = 0; return result; } pfatal_with_name (name) char *name; { extern int errno, sys_nerr; extern char *sys_errlist[]; char *s; if (errno < sys_nerr) s = concat ("%s: ", sys_errlist[errno], ""); else s = "cannot open %s"; fatal (s, name); } perror_with_name (name) char *name; { extern int errno, sys_nerr; extern char *sys_errlist[]; char *s; if (errno < sys_nerr) s = concat ("%s: ", sys_errlist[errno], ""); else s = "cannot open %s"; error (s, name); } perror_exec (name) char *name; { extern int errno, sys_nerr; extern char *sys_errlist[]; char *s; if (errno < sys_nerr) s = concat ("installation problem, cannot exec %s: ", sys_errlist[errno], ""); else s = "installation problem, cannot exec %s"; error (s, name); } int fatal (__va_1st_arg ) int __va_1st_arg ; { va_list ap; char *format; (((ap).__va_reg = (int *) __builtin_saveregs2(1)), ((ap).__va_stk = (int *) __builtin_argptr()), ((ap).__va_arg = (__builtin_argsize() - 4 + 3) / 4)) ; format = (((ap).__va_arg += (__alignof ( char *) >= 8 ? ((ap).__va_arg & 1) : 0) + ((sizeof( char *) + 3) / 4) ), (* (( char * *) (((ap).__va_arg >= 8 + ((sizeof( char *) + 3) / 4) || (...( char *) == 0) ? (ap).__va_stk : (ap).__va_reg) + ((ap).__va_arg - ((sizeof( char *) + 3) / 4) ))))) ; vfprintf ( (&_iob[2]) , format, ap); ; fprintf ( (&_iob[2]) , "\n"); delete_temp_files (0); exit (1); } error (__va_1st_arg ) int __va_1st_arg ; { va_list ap; char *format; (((ap).__va_reg = (int *) __builtin_saveregs2(1)), ((ap).__va_stk = (int *) __builtin_argptr()), ((ap).__va_arg = (__builtin_argsize() - 4 + 3) / 4)) ; format = (((ap).__va_arg += (__alignof ( char *) >= 8 ? ((ap).__va_arg & 1) : 0) + ((sizeof( char *) + 3) / 4) ), (* (( char * *) (((ap).__va_arg >= 8 + ((sizeof( char *) + 3) / 4) || (...( char *) == 0) ? (ap).__va_stk : (ap).__va_reg) + ((ap).__va_arg - ((sizeof( char *) + 3) / 4) ))))) ; fprintf ( (&_iob[2]) , "%s: ", programname); vfprintf ( (&_iob[2]) , format, ap); ; fprintf ( (&_iob[2]) , "\n"); } # 1865 "gcc.c" void validate_all_switches () { struct compiler *comp; register char *p; register char c; for (comp = compilers; comp->spec; comp++) { p = comp->spec; while (c = *p++) if (c == '%' && *p == '{') validate_switches (p + 1); } p = link_spec; while (c = *p++) if (c == '%' && *p == '{') validate_switches (p + 1); } void validate_switches (start) char *start; { register char *p = start; char *filter; register int i; if (*p == '|') ++p; if (*p == '!') ++p; filter = p; while (*p != ':' && *p != '}') p++; if (p[-1] == '*') { --p; for (i = 0; i < n_switches; i++) if (!strncmp (switches[i].part1, filter, p - filter)) switches[i].valid = 1; } else { for (i = 0; i < n_switches; i++) { if (!strncmp (switches[i].part1, filter, p - filter) && switches[i].part1[p - filter] == 0) switches[i].valid = 1; } } }