This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Your recent reload changes




This change has broken the PA port:

        * reload.c (push_secondary_reload): Revert last change.
        If we use a reload_in/out pattern, make the when the same
        as the primary reload.
        (find_reloads): Likewise.

Basically we're running out of reloads for a particular insn.

Basically we have an insn like this:
(insn 1034 1031 1036 (set (mem/f:SI (lo_sum:SI (reg:SI 466)
                (symbol_ref:SI ("warn_std_ptr"))) 110)
        (reg:SI 467)) 69 {pre_ldw-4} (nil)

Neither register will get a hard reg.

(reg:SI 466) is equivalent to (high (symbol_ref ("warn_std_ptr"))
(reg:SI 467) is equivalent to (symbol_ref "whatever")

So we need to reload (high (symbol_ref ("warn_std_ptr")) into GENERAL_REGS,
to do that we need a secondary reload for R1_REGS (loading a symbolic constant
requires %r1 on the PA).  That's going to generate two reloads.

There's an optional reload for the MEM expression as a whole, I don't think
it's important.

Then we need to reload (symbol_ref "whatever") into GENERAL_REGS, again to
do that we need a secondary reload of R1_REGS.

In all there's 5 reloads.  Looking at the toolchain without your patch I
get the following reloads:

Reloads for insn # 1034
Reload 0: R1_REGS, RELOAD_FOR_OPERAND_ADDRESS (opnum = 0), can't combine, 
second
ary_reload_p
        reload_reg_rtx: (reg:SI 1 %r1)
Reload 1: reload_in (SI) = (high:SI (symbol_ref:SI ("warn_std_ptr")))
        GENERAL_REGS, RELOAD_FOR_OPERAND_ADDRESS (opnum = 0), can't combine
        reload_in_reg: (reg:SI 466)
        reload_reg_rtx: (reg:SI 19 %r19)
        secondary_in_reload = 0
Reload 2: reload_out (SI) = (mem/f:SI (lo_sum:SI (reg:SI 466)
                                                        (symbol_ref:SI 
("warn_st
d_ptr"))) 110)
        NO_REGS, RELOAD_FOR_OUTPUT (opnum = 0), optional
        reload_out_reg: (mem/f:SI (lo_sum:SI (reg:SI 466)
                                                        (symbol_ref:SI 
("warn_st
d_ptr"))) 110)
Reload 3: R1_REGS, RELOAD_FOR_INPUT_ADDRESS (opnum = 1), can't combine, 
secondar
y_reload_p
        reload_reg_rtx: (reg:SI 1 %r1)
Reload 4: reload_in (SI) = (symbol_ref:SI ("warn_std"))
        GENERAL_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine
        reload_in_reg: (reg:SI 467)
        reload_reg_rtx: (reg:SI 20 %r20)
        secondary_in_reload = 3

This will result in the reloads being emitted in the following order, note
carefully how the secondary register %r1 is successfully used by two reloads
as they do not have overlapping lifetimes.


#3, #4, #0, #1


However, after your patch we get the following reloads:

Reload 0: R1_REGS, RELOAD_FOR_INPUT (opnum = 0), can't combine, 
secondary_reload_p
Reload 1: reload_in (SI) = (high:SI (symbol_ref:SI ("warn_std_ptr")))
        GENERAL_REGS, RELOAD_FOR_OUTPUT_ADDRESS (opnum = 0), can't combine
        reload_in_reg: (reg:SI 466)
        secondary_in_reload = 0
        secondary_in_icode = reload_insi
Reload 2: reload_out (SI) = (mem/f:SI (lo_sum:SI (reg:SI 466)
                                                        (symbol_ref:SI 
("warn_std_ptr"))) 110)
        NO_REGS, RELOAD_FOR_OUTPUT (opnum = 0), optional
        reload_out_reg: (mem/f:SI (lo_sum:SI (reg:SI 466)
                                                        (symbol_ref:SI 
("warn_std_ptr"))) 110)
Reload 3: R1_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine, 
secondary_reload_p
Reload 4: reload_in (SI) = (symbol_ref:SI ("warn_std"))
        GENERAL_REGS, RELOAD_FOR_INPUT (opnum = 1), can't combine
        reload_in_reg: (reg:SI 467)
        secondary_in_reload = 3
        secondary_in_icode = reload_insi

Which gives us the following output order:

#0, #3, #4, #2

OUCH!  The reload reg for #0 is live across the reloads for #3, #4, which
is bad since we can no longer use R1_REGS to satisfy #0 and #3.


Compile with -O2 on the PA (a cross compiler should work fine).  It'll
abort in reload because it's unable to find a free register for spilling
purposes in R1_REGS.

# 1 "j.c"
enum cmp_type
{
  CMP_SI,
  CMP_SF,
  CMP_DF,
  CMP_MAX
};
extern unsigned int total_code_bytes;
enum processor_type
{
  PROCESSOR_700,
  PROCESSOR_7100,
  PROCESSOR_7100LC,
  PROCESSOR_7200,
  PROCESSOR_8000
};
extern const char *pa_cpu_string;
extern enum processor_type pa_cpu;
enum architecture_type
{
  ARCHITECTURE_10,
  ARCHITECTURE_11,
  ARCHITECTURE_20
};
extern const char *pa_arch_string;
extern enum architecture_type pa_arch;
extern int target_flags;
struct hppa_args {int words, nargs_prototype, indirect; };
extern struct rtx_def *hppa_compare_op0, *hppa_compare_op1;
extern enum cmp_type hppa_branch_type;
extern int may_call_alloca;
enum reg_class { NO_REGS, R1_REGS, GENERAL_REGS, FPUPPER_REGS, FP_REGS,
                 GENERAL_OR_FP_REGS, SHIFT_REGS, ALL_REGS, LIM_REG_CLASSES};
typedef __builtin_va_list __gnuc_va_list;
typedef __gnuc_va_list va_list;
typedef char int8_t;
typedef unsigned char uint8_t;
typedef short int16_t;
typedef unsigned short uint16_t;
typedef int int32_t;
typedef unsigned int uint32_t;
typedef int intfast_t;
typedef unsigned int uintfast_t;
typedef long long int64_t;
typedef unsigned long long uint64_t;
typedef int64_t intmax_t;
typedef uint64_t uintmax_t;
typedef long intptr_t;
typedef unsigned long uintptr_t;
typedef char int_least8_t;
typedef unsigned char uint_least8_t;
typedef int int_fast8_t;
typedef unsigned int uint_fast8_t;
typedef short int_least16_t;
typedef unsigned short uint_least16_t;
typedef int int_fast16_t;
typedef unsigned int uint_fast16_t;
typedef int int_least32_t;
typedef unsigned int uint_least32_t;
typedef int int_fast32_t;
typedef unsigned int uint_fast32_t;
typedef int64_t int_least64_t;
typedef int64_t int_fast64_t;
typedef uint64_t uint_least64_t;
typedef uint64_t uint_fast64_t;
typedef uint32_t ptr32_t;
                typedef int mqd_t;
     typedef int32_t dev_t;
        typedef uint32_t ino32_t;
       typedef uint64_t ino64_t;
         typedef unsigned long ino_t;
     typedef uint16_t mode_t;
     typedef uint16_t nlink_t;
    typedef int32_t fpos32_t;
       typedef int64_t fpos64_t;
       typedef long fpos_t;
     typedef uint32_t fsblkcnt32_t;
       typedef uint64_t fsblkcnt64_t;
       typedef unsigned long fsblkcnt_t;
     typedef int32_t off32_t;
        typedef int64_t off64_t;
        typedef long off_t;
     typedef uint32_t fsfilcnt32_t;
       typedef uint64_t fsfilcnt64_t;
        typedef unsigned long fsfilcnt_t;
     typedef int32_t blkcnt32_t;
       typedef int64_t blkcnt64_t;
        typedef long blkcnt_t;
     typedef int32_t pid_t;
     typedef int32_t lwpid_t;
     typedef int32_t gid_t;
     typedef int32_t uid_t;
     typedef int32_t tid_t;
        typedef long ssize_t;
     typedef uint16_t __site_t;
     typedef uint16_t __cnode_t;
                typedef long time_t;
typedef long unsigned int size_t;
     typedef uint32_t clock_t;
      typedef int32_t key_t;
   typedef unsigned short __ushort;
   typedef int32_t __daddr_t;
   typedef char *__caddr_t;
   typedef int32_t __swblk_t;
     typedef __caddr_t caddr_t;
     typedef int32_t id_t;
     typedef uint32_t useconds_t;
      typedef uint32_t rlim32_t;
        typedef uint64_t rlim64_t;
       typedef unsigned long rlim_t;
   typedef __site_t site_t;
   typedef unsigned char u_char;
   typedef unsigned short u_short;
   typedef unsigned int u_int;
   typedef unsigned long u_long;
   typedef unsigned int uint;
   typedef unsigned short ushort;
   typedef unsigned char ubit8;
   typedef unsigned short ubit16;
   typedef uint32_t ubit32;
   typedef char sbit8;
   typedef short sbit16;
   typedef int32_t sbit32;
   typedef __swblk_t swblk_t;
   typedef __daddr_t daddr_t;
   typedef __cnode_t cnode_t;
   typedef uintptr_t paddr_t;
   typedef intptr_t page_t;
   typedef int32_t pgcnt_t;
   typedef uint32_t physpfn_t;
   typedef uintptr_t iophyspfn_t;
   typedef uintptr_t pgaddr_t;
   typedef uint32_t space_t;
   typedef uint32_t prot_t;
   typedef unsigned long ulong_t;
   typedef int16_t cnt_t;
   typedef uint32_t cdno_t;
   typedef uint16_t use_t;
   typedef struct _physadr { intptr_t r[1]; } *physadr;
   typedef struct _quad { long val[2]; } quad;
   typedef int spu_t;
     typedef short cpu_t;
     typedef struct label_t {
        int32_t lbl_rp;
        int32_t lbl_sp;
        int32_t lbl_s[17];
        int32_t lbl_ss[1];
        double lbl_sf[10];
    } label_t;
typedef struct lkinfo {
       char *lk_name;
       int lk_flags;
       long lk_pad[2];
} lkinfo_t;
typedef unsigned long pl_t;
   typedef char *dm_message;
      typedef int32_t aid_t;
   typedef pid_t sid_t;
typedef int32_t __fd_mask;
   typedef struct fd_set {
     long fds_bits[(((2048)+(((sizeof(long) * 8))-1))/((sizeof(long) * 8)))];
     } fd_set;
     typedef __fd_mask fd_mask;
        typedef int32_t dir_off_t;
   typedef struct {
        int __cnt;
        unsigned char *__ptr;
        unsigned char *__base;
        unsigned short __flag;
        unsigned char __fileL;
        unsigned char __fileH;
   } FILE;
   typedef struct {
        int __cnt;
        unsigned char *__ptr;
        unsigned char *__base;
        unsigned short __flag;
        unsigned char __fileL;
        unsigned char __fileH;
        unsigned char *__bufendp;
        unsigned char *__newbase;
        unsigned char __smbuf[8+2*4];
        void *__unused;
   } _FILEX;
     typedef double *__va_list;
   extern FILE __iob[];
     extern int remove(const char *);
     extern int rename(const char *, const char *);
     extern char *tmpnam(char *);
     extern int fclose(FILE *);
     extern int fflush(FILE *);
     extern void setbuf(FILE *, char *);
     extern int setvbuf(FILE *, char *, int, size_t);
     extern int fprintf(FILE *, const char *, ...);
     extern int fscanf(FILE *, const char *,...);
     extern int printf(const char *,...);
     extern int scanf(const char *,...);
     extern int sprintf(char *, const char *,...);
     extern int sscanf(const char *, const char *,...);
     extern int fgetc(FILE *);
     extern char *fgets(char *, int, FILE *);
     extern int fputc(int, FILE *);
     extern int fputs(const char *, FILE *);
     extern int getc(FILE *);
     extern int getchar(void);
     extern char *gets(char *);
     extern int putc(int, FILE *);
     extern int putchar(int);
     extern int puts(const char *);
     extern int ungetc(int, FILE *);
     extern FILE *tmpfile(void);
     extern int fgetpos(FILE *, fpos_t *);
     extern int fsetpos(FILE *, const fpos_t *);
     extern FILE *fopen(const char *, const char *);
     extern FILE *freopen(const char *, const char *, FILE *);
     extern int fseek(FILE *, long int, int);
     extern long int ftell(FILE *);
     extern void rewind(FILE *);
     extern void clearerr(FILE *);
     extern int feof(FILE *);
     extern int ferror(FILE *);
     extern void perror(const char *);
       extern size_t fread(void *, size_t, size_t, FILE *);
       extern size_t fwrite(const void *, size_t, size_t, FILE *);
     extern int __flsbuf(unsigned char, FILE *);
     extern int __filbuf(FILE *);
     extern char *ctermid(char *);
     extern int fileno(FILE *);
     extern FILE *fdopen(int, const char *);
         typedef double *__not_va_list__;
     extern char *optarg;
     extern int opterr;
     extern int optind;
     extern int optopt;
       extern int getopt(int, char * const [], const char *);
       extern char *cuserid(char *);
     extern int getw(FILE *);
     extern int putw(int, FILE *);
     extern int pclose(FILE *);
     extern FILE *popen(const char *, const char *);
     extern char *tempnam(const char *, const char *);
     extern int vprintf(const char *, __gnuc_va_list);
     extern int vfprintf(FILE *, const char *, __gnuc_va_list);
     extern int vsprintf(char *, const char *, __gnuc_va_list);
     extern int snprintf(char *, size_t, char *,...);
     extern int vsnprintf(char *, size_t, const char *, __gnuc_va_list);
     extern int vscanf(const char *, __gnuc_va_list);
     extern int vfscanf(FILE *, const char *, __gnuc_va_list);
     extern int vsscanf(char *, const char *, __gnuc_va_list);
     extern void flockfile(FILE *);
     extern int ftrylockfile(FILE *);
     extern void funlockfile(FILE *);
   extern unsigned char *__bufendtab[];
     extern int isalnum(int);
     extern int isalpha(int);
     extern int iscntrl(int);
     extern int isdigit(int);
     extern int isgraph(int);
     extern int islower(int);
     extern int isprint(int);
     extern int ispunct(int);
     extern int isspace(int);
     extern int isupper(int);
     extern int isxdigit(int);
     extern unsigned char *__ctype;
     extern unsigned char *__ctype2;
     extern unsigned char *__upshift;
     extern unsigned char *__downshift;
extern int tolower(int);
extern int toupper(int);
     extern int isascii(int);
     extern int toascii(int);
extern int __tolower(int);
extern int __toupper(int);
     extern int isctype(int, unsigned int);
     extern int isblank(int);
     extern unsigned int *__SB_masks;
     extern int _isalnum(int);
     extern int _isalpha(int);
     extern int _iscntrl(int);
     extern int _isdigit(int);
     extern int _isgraph(int);
     extern int _islower(int);
     extern int _isprint(int);
     extern int _ispunct(int);
     extern int _isspace(int);
     extern int _isupper(int);
     extern int _isxdigit(int);
        extern int errno;
         extern int errno;
extern int errno;
     extern int memcmp(const void *, const void *, size_t);
     extern char *strncat(char *, const char *, size_t);
     extern int strncmp(const char *, const char *, size_t);
     extern void *memmove(void *, const void *, size_t);
     extern char *strcpy(char *, const char *);
     extern char *strncpy(char *, const char *, size_t);
     extern char *strcat(char *, const char *);
     extern int strcmp(const char *, const char *);
     extern int strcoll(const char *, const char *);
     extern size_t strxfrm(char *, const char *, size_t);
     extern char *strchr(const char *, int);
     extern char *strpbrk(const char *, const char *);
     extern char *strrchr(const char *, int);
     extern char *strstr(const char *, const char *);
     extern char *strtok(char *, const char *);
     extern char *strerror(int);
       extern void *memcpy(void *, const void *, size_t);
       extern void *memchr(const void *, int, size_t);
       extern void *memset(void *, int, size_t);
       extern size_t strcspn(const char *, const char *);
       extern size_t strspn(const char *, const char *);
          extern size_t strlen(const char *);
       extern void *memccpy(void *, const void *, int, size_t);
     extern char *strdup(const char *);
     extern char *strrstr(const char *, const char *);
     extern int strcasecmp(const char *, const char *);
     extern int strncasecmp(const char *, const char *, size_t);
     extern int nl_strcmp(const char *, const char *);
     extern int nl_strncmp(const char *, const char *, size_t);
     extern char *index(const char *, int);
     extern char *rindex(const char *, int);
     extern void bcopy(const void *, void *, size_t);
     extern int bcmp(const void *, const void *, size_t);
     extern void bzero(void *, size_t);
                        extern int strcasecmp(const char *, const char *);
                        extern int strncasecmp(const char *, const char *, 
size_t);
     extern int ffs(int);
   extern int __nl_char_size;
   typedef struct {
        int quot;
        int rem;
   } div_t;
   typedef struct {
        long int quot;
        long int rem;
   } ldiv_t;
                        typedef unsigned int wchar_t;
       extern double atof(const char *);
     extern int atoi(const char *);
     extern long int atol(const char *);
     extern double strtod(const char *, char **);
     extern long int strtol(const char *, char **, int);
     extern unsigned long int strtoul(const char *, char **, int);
     extern int rand(void);
     extern void srand(unsigned int);
     extern int atexit(void (*) (void));
     extern void exit(int);
     extern char *getenv(const char *);
     extern int system(const char *);
       extern int abs(int);
     extern div_t div(int, int);
     extern ldiv_t ldiv(long int, long int);
     extern long int labs(long int);
     extern int mblen(const char *, size_t);
     extern int mbtowc(wchar_t *, const char *, size_t);
     extern int wctomb(char *, wchar_t);
     extern size_t mbstowcs(wchar_t *, const char *, size_t);
     extern size_t wcstombs(char *, const wchar_t *, size_t);
     extern void free(void *);
     extern void qsort(void *, size_t, size_t, int (*)(const void *, const 
void *));
       extern void abort(void);
       extern void *bsearch(const void *, const void *, size_t, size_t, int 
(*) (const void *, const void *));
       extern void *calloc(size_t, size_t);
       extern void *malloc(size_t);
       extern void *realloc(void *, size_t);
     extern void setkey(const char *);
     extern void lcong48( unsigned short [] );
        extern double drand48(void);
        extern double erand48(unsigned short []);
        extern long jrand48(unsigned short []);
        extern long lrand48(void);
        extern long mrand48(void);
        extern long nrand48(unsigned short []);
        extern void srand48(long);
        extern unsigned short *seed48(unsigned short []);
        extern int putenv(const char *);
       extern int clearenv(void);
       extern int getopt(int, char * const [], const char *);
       extern char *getpass(const char *);
     extern char *optarg;
     extern int optind;
     extern int opterr;
       extern pid_t wait(int *);
       extern pid_t waitpid(pid_t, int *, int);
typedef union sigval {
      struct {
          int __svi_int;
      } __svi_int_s;
      void * __sival_ptr;
   } sigval_t;
typedef int pthread_attr_t;
typedef struct sigevent {
      int __sigev_notify;
      int __sigev_signo;
      sigval_t __sigev_value;
      void (*__sigev_notify_function)(sigval_t);
      pthread_attr_t *__sigev_notify_attributes;
      int __sigev_reserved[8];
   } sigevent_t;
  enum __sigev_types {
          __SIGEV_NONE = 1,
          __SIGEV_SIGNAL
          ,__SIGEV_THREAD
  };
   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;
   };
  struct timespec {
        time_t tv_sec;
        long tv_nsec;
};
typedef struct timespec timestruc_t;
struct itimerspec {
        struct timespec it_interval;
        struct timespec it_value;
};
typedef enum __clockid_t {
        CLOCK_INVALID = 0,
        CLOCK_REALTIME = 1,
        CLOCK_VIRTUAL = 2,
        CLOCK_PROFILE = 4,
        RTTIMER0 = 8,
        RTTIMER1 = 16
} clockid_t;
        typedef unsigned long timer_t;
        struct timeval {
                time_t tv_sec;
                long tv_usec;
        };
   struct itimerval {
        struct timeval it_interval;
        struct timeval it_value;
   };
   struct timezone {
        int tz_minuteswest;
        int tz_dsttime;
   };
   typedef struct __cycles {
        uint32_t hi;
        uint32_t lo;
   } cycles_t;
     extern double difftime(time_t, time_t);
     extern time_t mktime(struct tm *);
     extern time_t time(time_t *);
     extern char *asctime(const struct tm *);
     extern char *ctime(const time_t *);
     extern struct tm *gmtime(const time_t *);
     extern struct tm *localtime(const time_t *);
     extern size_t strftime(char *, size_t, const char *, const struct tm *);
       extern clock_t clock(void);
     extern void tzset(void);
   extern char *tzname[2];
     extern int clock_settime(clockid_t, const struct timespec *);
     extern int clock_gettime(clockid_t, struct timespec *);
     extern int clock_getres(clockid_t, struct timespec *);
     extern int timer_create(clockid_t, struct sigevent *, timer_t *);
     extern int timer_delete(timer_t);
     extern int timer_settime(timer_t, int, const struct itimerspec *,
                              struct itimerspec *);
     extern int timer_gettime(timer_t, struct itimerspec *);
     extern int timer_getoverrun(timer_t);
     extern int nanosleep(const struct timespec *, struct timespec *);
         extern char *strptime(const char *, const char *, struct tm *);
       extern long timezone;
       extern int daylight;
     extern int getitimer(int, struct itimerval *);
     extern int setitimer(int, const struct itimerval *, struct itimerval *);
     extern int utimes(const char *path, const struct timeval amtimes[2]);
     extern int gettimeofday(struct timeval *, void *);
       extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
     extern int adjtime(const struct timeval *, struct timeval *);
       extern struct tm *getdate(const char *);
     extern int settimeofday(const struct timeval *, const struct timezone *);
     extern int stime(const time_t *);
     extern void profil(const void *, size_t, size_t, int);
       extern int getdate_err;
    struct ki_timeval {
            uint32_t pad1;
            uint32_t pad2;
    };
typedef uint64_t kt_t;
struct rlimit {
        rlim_t rlim_cur;
        rlim_t rlim_max;
};
struct rusage {
        struct timeval ru_utime;
        struct timeval ru_stime;
        long ru_maxrss;
        long ru_ixrss;
        long ru_idrss;
        long ru_isrss;
        long ru_minflt;
        long ru_majflt;
        long ru_nswap;
        long ru_inblock;
        long ru_oublock;
        long ru_ioch;
        long ru_msgsnd;
        long ru_msgrcv;
        long ru_nsignals;
        long ru_nvcsw;
        long ru_nivcsw;
};
   extern int getpriority (int, id_t);
   extern int getrusage (int, struct rusage *);
   extern int setpriority (int, id_t, int);
   extern int getrlimit (int, struct rlimit *);
   extern int setrlimit (int, const struct rlimit *);
           extern pid_t wait3(int *, int, struct rusage *);
enum __si_codes {
        SI_QUEUE = -2,
        SI_USER = -1,
        SI_TIMER = 1,
        SI_ASYNCIO= 2,
        SI_MESGQ = 3
};
typedef struct __siginfo {
        int si_signo;
        int si_code;
        int si_errno;
        sigval_t si_value;
        union {
                struct {
                        pid_t __pid;
                        union {
                                struct {
                                        uid_t __uid;
                                } __kill;
                                struct {
                                        int __status;
                                } __SIGCLD;
                        } __pdata;
                } __proc;
                struct {
                        void *__addr;
                } __fault;
                struct {
                        int __fd;
                        long __band;
                } __file;
                struct {
                        void *__addr;
                        void *__lockpage;
                        long __dev_id;
                } __gfault;
        } __data;
        long __pad[9];
} siginfo_t;
     typedef struct __sigset_t {
          unsigned int sigset[8];
     } sigset_t;
typedef struct __fp_dbl_block {
        double ss_fp0;
        double ss_fp1;
        double ss_fp2;
        double ss_fp3;
        double ss_fp4;
        double ss_fp5;
        double ss_fp6;
        double ss_fp7;
        double ss_fp8;
        double ss_fp9;
        double ss_fp10;
        double ss_fp11;
        double ss_fp12;
        double ss_fp13;
        double ss_fp14;
        double ss_fp15;
        double ss_fp16;
        double ss_fp17;
        double ss_fp18;
        double ss_fp19;
        double ss_fp20;
        double ss_fp21;
        double ss_fp22;
        double ss_fp23;
        double ss_fp24;
        double ss_fp25;
        double ss_fp26;
        double ss_fp27;
        double ss_fp28;
        double ss_fp29;
        double ss_fp30;
        double ss_fp31;
} fp_dbl_block_t;
typedef struct __fp_int_block {
        int ss_fpstat;
        int ss_fpexcept1;
        int ss_fpexcept2;
        int ss_fpexcept3;
        int ss_fpexcept4;
        int ss_fpexcept5;
        int ss_fpexcept6;
        int ss_fpexcept7;
        int ss_fp4_hi;
        int ss_fp4_lo;
        int ss_fp5_hi;
        int ss_fp5_lo;
        int ss_fp6_hi;
        int ss_fp6_lo;
        int ss_fp7_hi;
        int ss_fp7_lo;
        int ss_fp8_hi;
        int ss_fp8_lo;
        int ss_fp9_hi;
        int ss_fp9_lo;
        int ss_fp10_hi;
        int ss_fp10_lo;
        int ss_fp11_hi;
        int ss_fp11_lo;
        int ss_fp12_hi;
        int ss_fp12_lo;
        int ss_fp13_hi;
        int ss_fp13_lo;
        int ss_fp14_hi;
        int ss_fp14_lo;
        int ss_fp15_hi;
        int ss_fp15_lo;
        int ss_fp16_hi;
        int ss_fp16_lo;
        int ss_fp17_hi;
        int ss_fp17_lo;
        int ss_fp18_hi;
        int ss_fp18_lo;
        int ss_fp19_hi;
        int ss_fp19_lo;
        int ss_fp20_hi;
        int ss_fp20_lo;
        int ss_fp21_hi;
        int ss_fp21_lo;
        int ss_fp22_hi;
        int ss_fp22_lo;
        int ss_fp23_hi;
        int ss_fp23_lo;
        int ss_fp24_hi;
        int ss_fp24_lo;
        int ss_fp25_hi;
        int ss_fp25_lo;
        int ss_fp26_hi;
        int ss_fp26_lo;
        int ss_fp27_hi;
        int ss_fp27_lo;
        int ss_fp28_hi;
        int ss_fp28_lo;
        int ss_fp29_hi;
        int ss_fp29_lo;
        int ss_fp30_hi;
        int ss_fp30_lo;
        int ss_fp31_hi;
        int ss_fp31_lo;
} fp_int_block_t;
typedef struct __reg64 {
        int64_t ss_reserved;
        int64_t ss_gr1;
        int64_t ss_rp;
        int64_t ss_gr3;
        int64_t ss_gr4;
        int64_t ss_gr5;
        int64_t ss_gr6;
        int64_t ss_gr7;
        int64_t ss_gr8;
        int64_t ss_gr9;
        int64_t ss_gr10;
        int64_t ss_gr11;
        int64_t ss_gr12;
        int64_t ss_gr13;
        int64_t ss_gr14;
        int64_t ss_gr15;
        int64_t ss_gr16;
        int64_t ss_gr17;
        int64_t ss_gr18;
        int64_t ss_gr19;
        int64_t ss_gr20;
        int64_t ss_gr21;
        int64_t ss_gr22;
        int64_t ss_arg3;
        int64_t ss_arg2;
        int64_t ss_arg1;
        int64_t ss_arg0;
        uint64_t ss_dp;
        uint64_t ss_ret0;
        uint64_t ss_ret1;
        uint64_t ss_sp;
        uint64_t ss_gr31;
        uint64_t ss_cr11;
        uint64_t ss_pcoq_head;
        uint64_t ss_pcsq_head;
        uint64_t ss_pcoq_tail;
        uint64_t ss_pcsq_tail;
        uint64_t ss_cr15;
        uint64_t ss_cr19;
        uint64_t ss_cr20;
        uint64_t ss_cr21;
        uint64_t ss_cr22;
        uint64_t ss_cpustate;
        uint64_t ss_sr4;
        uint64_t ss_sr0;
        uint64_t ss_sr1;
        uint64_t ss_sr2;
        uint64_t ss_sr3;
        uint64_t ss_sr5;
        uint64_t ss_sr6;
        uint64_t ss_sr7;
        uint64_t ss_cr0;
        uint64_t ss_cr8;
        uint64_t ss_cr9;
        uint64_t ss_cr10;
        uint64_t ss_cr12;
        uint64_t ss_cr13;
        uint64_t ss_cr24;
        uint64_t ss_cr25;
        uint64_t ss_cr26;
        uint64_t ss_cr27;
        uint64_t ss_reserved2[2];
        uint32_t ss_oldcksum;
        uint32_t ss_newcksum;
} __reg64_t;
typedef struct __reg32 {
        uint32_t ss_reserved[2];
        uint32_t ss_gr1_hi;
        uint32_t ss_gr1_lo;
        uint32_t ss_rp_hi;
        uint32_t ss_rp_lo;
        uint32_t ss_gr3_hi;
        uint32_t ss_gr3_lo;
        uint32_t ss_gr4_hi;
        uint32_t ss_gr4_lo;
        uint32_t ss_gr5_hi;
        uint32_t ss_gr5_lo;
        uint32_t ss_gr6_hi;
        uint32_t ss_gr6_lo;
        uint32_t ss_gr7_hi;
        uint32_t ss_gr7_lo;
        uint32_t ss_gr8_hi;
        uint32_t ss_gr8_lo;
        uint32_t ss_gr9_hi;
        uint32_t ss_gr9_lo;
        uint32_t ss_gr10_hi;
        uint32_t ss_gr10_lo;
        uint32_t ss_gr11_hi;
        uint32_t ss_gr11_lo;
        uint32_t ss_gr12_hi;
        uint32_t ss_gr12_lo;
        uint32_t ss_gr13_hi;
        uint32_t ss_gr13_lo;
        uint32_t ss_gr14_hi;
        uint32_t ss_gr14_lo;
        uint32_t ss_gr15_hi;
        uint32_t ss_gr15_lo;
        uint32_t ss_gr16_hi;
        uint32_t ss_gr16_lo;
        uint32_t ss_gr17_hi;
        uint32_t ss_gr17_lo;
        uint32_t ss_gr18_hi;
        uint32_t ss_gr18_lo;
        uint32_t ss_gr19_hi;
        uint32_t ss_gr19_lo;
        uint32_t ss_gr20_hi;
        uint32_t ss_gr20_lo;
        uint32_t ss_gr21_hi;
        uint32_t ss_gr21_lo;
        uint32_t ss_gr22_hi;
        uint32_t ss_gr22_lo;
        uint32_t ss_arg3_hi;
        uint32_t ss_arg3_lo;
        uint32_t ss_arg2_hi;
        uint32_t ss_arg2_lo;
        uint32_t ss_arg1_hi;
        uint32_t ss_arg1_lo;
        uint32_t ss_arg0_hi;
        uint32_t ss_arg0_lo;
        unsigned int ss_dp_hi;
        unsigned int ss_dp_lo;
        unsigned int ss_ret0_hi;
        unsigned int ss_ret0_lo;
        unsigned int ss_ret1_hi;
        unsigned int ss_ret1_lo;
        unsigned int ss_sp_hi;
        unsigned int ss_sp_lo;
        unsigned int ss_gr31_hi;
        unsigned int ss_gr31_lo;
        unsigned int ss_cr11_hi;
        unsigned int ss_cr11_lo;
        unsigned int ss_pcoq_head_hi;
        unsigned int ss_pcoq_head_lo;
        unsigned int ss_pcsq_head_hi;
        unsigned int ss_pcsq_head_lo;
        unsigned int ss_pcoq_tail_hi;
        unsigned int ss_pcoq_tail_lo;
        unsigned int ss_pcsq_tail_hi;
        unsigned int ss_pcsq_tail_lo;
        unsigned int ss_cr15_hi;
        unsigned int ss_cr15_lo;
        unsigned int ss_cr19_hi;
        unsigned int ss_cr19_lo;
        unsigned int ss_cr20_hi;
        unsigned int ss_cr20_lo;
        unsigned int ss_cr21_hi;
        unsigned int ss_cr21_lo;
        unsigned int ss_cr22_hi;
        unsigned int ss_cr22_lo;
        unsigned int ss_cpustate_hi;
        unsigned int ss_cpustate_lo;
        unsigned int ss_sr4_hi;
        unsigned int ss_sr4_lo;
        unsigned int ss_sr0_hi;
        unsigned int ss_sr0_lo;
        unsigned int ss_sr1_hi;
        unsigned int ss_sr1_lo;
        unsigned int ss_sr2_hi;
        unsigned int ss_sr2_lo;
        unsigned int ss_sr3_hi;
        unsigned int ss_sr3_lo;
        unsigned int ss_sr5_hi;
        unsigned int ss_sr5_lo;
        unsigned int ss_sr6_hi;
        unsigned int ss_sr6_lo;
        unsigned int ss_sr7_hi;
        unsigned int ss_sr7_lo;
        unsigned int ss_cr0_hi;
        unsigned int ss_cr0_lo;
        unsigned int ss_cr8_hi;
        unsigned int ss_cr8_lo;
        unsigned int ss_cr9_hi;
        unsigned int ss_cr9_lo;
        unsigned int ss_cr10_hi;
        unsigned int ss_cr10_lo;
        unsigned int ss_cr12_hi;
        unsigned int ss_cr12_lo;
        unsigned int ss_cr13_hi;
        unsigned int ss_cr13_lo;
        unsigned int ss_cr24_hi;
        unsigned int ss_cr24_lo;
        unsigned int ss_cr25_hi;
        unsigned int ss_cr25_lo;
        unsigned int ss_cr26_hi;
        unsigned int ss_cr26_lo;
        unsigned int ss_cr27_hi;
        unsigned int ss_cr27_lo;
        unsigned int ss_reserved2[4];
        unsigned int ss_oldcksum;
        unsigned int ss_newcksum;
} __reg32_t;
typedef struct __ss_narrow {
        int ss_gr1;
        int ss_rp;
        int ss_gr3;
        int ss_gr4;
        int ss_gr5;
        int ss_gr6;
        int ss_gr7;
        int ss_gr8;
        int ss_gr9;
        int ss_gr10;
        int ss_gr11;
        int ss_gr12;
        int ss_gr13;
        int ss_gr14;
        int ss_gr15;
        int ss_gr16;
        int ss_gr17;
        int ss_gr18;
        int ss_gr19;
        int ss_gr20;
        int ss_gr21;
        int ss_gr22;
        int ss_arg3;
        int ss_arg2;
        int ss_arg1;
        int ss_arg0;
        unsigned int ss_dp;
        unsigned int ss_ret0;
        unsigned int ss_ret1;
        unsigned int ss_sp;
        unsigned int ss_gr31;
        unsigned int ss_cr11;
        unsigned int ss_pcoq_head;
        unsigned int ss_pcsq_head;
        unsigned int ss_pcoq_tail;
        unsigned int ss_pcsq_tail;
        unsigned int ss_cr15;
        unsigned int ss_cr19;
        unsigned int ss_cr20;
        unsigned int ss_cr21;
        unsigned int ss_cr22;
        unsigned int ss_cpustate;
        unsigned int ss_sr4;
        unsigned int ss_sr0;
        unsigned int ss_sr1;
        unsigned int ss_sr2;
        unsigned int ss_sr3;
        unsigned int ss_sr5;
        unsigned int ss_sr6;
        unsigned int ss_sr7;
        unsigned int ss_cr0;
        unsigned int ss_cr8;
        unsigned int ss_cr9;
        unsigned int ss_cr10;
        unsigned int ss_cr12;
        unsigned int ss_cr13;
        unsigned int ss_cr24;
        unsigned int ss_cr25;
        unsigned int ss_cr26;
        unsigned int ss_cr27;
        unsigned int ss_mpsfu_low;
        unsigned int ss_mpsfu_ovflo;
} __ss_narrow_t;
typedef struct __save_state {
        int ss_flags;
        __ss_narrow_t ss_narrow;
        int ss_pad;
        union {
                fp_dbl_block_t fpdbl;
                fp_int_block_t fpint;
        } ss_fpblock;
        char ss_xor[4*32];
        union {
                __reg64_t ss_64;
                __reg32_t ss_32;
        } ss_wide;
} save_state_t;
   typedef struct __stack {
        void *ss_sp;
        int ss_flags;
        size_t ss_size;
   } stack_t;
typedef save_state_t mcontext_t;
struct __sub_ctxt {
        struct __ucontext *__uc_link;
        sigset_t __uc_sigmask;
        stack_t __uc_stack;
};
typedef struct __sub_ctxt __sub_ctxt_t;
typedef struct __ucontext {
        mcontext_t uc_mcontext;
        int uc_spares[8];
        unsigned int uc_created_by_getcontext:1;
        unsigned int uc_reserved_flags:31;
        struct __sub_ctxt uc_subcontext;
} ucontext_t;
  typedef unsigned int sig_atomic_t;
   struct sigaction {
      union {
              void (*__sa_sigaction)(int, siginfo_t *, void *);
              void (*__sa_handler)(int);
      } __handler;
      sigset_t sa_mask;
      int sa_flags;
   };
typedef int pthread_t;
   struct sigstack {
        void *ss_sp;
        int ss_onstack;
   };
   struct sigvec {
      void (*sv_handler)(int);
      int sv_mask;
      int sv_flags;
   };
     extern void (*signal(int, void (*) (int)))(int);
     extern int raise(int);
     extern int kill(pid_t, int);
     extern int sigemptyset(sigset_t *);
     extern int sigfillset(sigset_t *);
     extern int sigaddset(sigset_t *, int);
     extern int sigdelset(sigset_t *, int);
     extern int sigismember(const sigset_t *, int);
     extern int sigaction(int, const struct sigaction *, struct sigaction *);
     extern int sigprocmask(int, const sigset_t *, sigset_t *);
     extern int sigsuspend(const sigset_t *);
     extern int sigpending(sigset_t *);
     extern int sigwait(const sigset_t *set, int *sig);
     extern int pthread_sigmask(int how, const sigset_t *set, sigset_t *oset);
     extern int pthread_kill(pthread_t thread, int sig);
     extern int sigwaitinfo(const sigset_t *set, siginfo_t *info);
     extern int sigtimedwait(const sigset_t *set, siginfo_t * info,
                             const struct timespec *timeout);
     extern int sigqueue(pid_t pid, int signo,
                         const union sigval value);
        extern void (*bsd_signal(int, void(*)(int)))(int);
        extern int killpg(pid_t, int);
        extern int sigstack(struct sigstack *, struct sigstack *);
        extern int sigaltstack(const stack_t *, stack_t *);
        extern int siginterrupt(int, int);
           extern void (*sigset(int, void (*)(int)))(int);
           extern int sighold(int);
           extern int sigrelse(int);
           extern int sigignore(int);
           extern int sigpause(int);
     extern long sigblock(long);
     extern long sigsetmask(long);
     extern int sigvector(int, const struct sigvec *, struct sigvec *);
     extern int (*ssignal(int, int (*) (int)))(int);
     extern ssize_t sigspace(ssize_t);
     extern int gsignal(int);
        extern long ___sysconf(int);
typedef struct frame_marker {
        int fm_edp;
        int fm_esr4;
        int fm_erp;
        int fm_crp;
        int fm_sl;
        int fm_clup;
        int fm_ep;
        int fm_psp;
} frame_marker_t;
       struct siglocal_misc {
                int sm_syscall;
                int sm_onstack;
                int sm_omask;
                char sm_syscall_action;
                char sm_eosys;
                unsigned short sm_error;
                long sm_rval1;
                long sm_rval2;
                long sm_arg[4];
       };
       typedef struct siglocal_misc siglocal_misc_t;
       struct siglocal {
                struct siglocal_misc sl_misc;
                save_state_t sl_ss;
       };
       struct siglocalx {
                struct siglocal_misc sl_misc;
                ucontext_t sl_uc;
                siginfo_t sl_si;
       };
        struct __xsi {
                struct __sub_ctxt sc;
                int __padding;
                siginfo_t si;
        };
        typedef struct __xsi __xsi_t;
       struct sigcontext {
                union {
                        struct siglocal sl;
                        struct siglocalx sx;
                } sc_ctxt;
                long sc_args[4];
                struct frame_marker sc_sfm;
       };
typedef enum {
        P_PID,
        P_PGID,
        P_SID,
        P_UID,
        P_GID,
        P_CID,
        P_ALL
} idtype_t;
        extern int waitid(idtype_t, id_t, siginfo_t *, int);
   union wait {
        int w_status;
        struct {
                unsigned short w_pad;
                unsigned int w_Retcode:8;
                unsigned int w_Coredump:1;
                unsigned int w_Termsig:7;
        } w_T;
        struct {
                unsigned short w_pad;
                unsigned int w_Stopsig:8;
                unsigned int w_Stopval:8;
        } w_S;
   };
                extern int mkstemp(char *);
                extern char *mktemp(char *);
                extern int ttyslot(void);
        extern long a64l(const char *);
        extern char *l64a(long);
       extern char *fcvt(double, int, int *, int *);
       extern char *ecvt(double, int, int *, int *);
        extern char *gcvt(double, int, char *);
        extern int getsubopt(char **, char * const *, char **);
        extern int grantpt(int);
        extern char *ptsname(int);
        extern char *realpath(const char *, char *);
        extern int unlockpt(int);
        extern void *valloc(size_t);
    extern char *initstate(unsigned int, char *, size_t);
    extern char *setstate(const char *);
    extern void srandom(unsigned int);
        extern long random(void);
  struct mallinfo {
        int32_t arena;
        int32_t ordblks;
        int32_t smblks;
        int32_t hblks;
        int32_t hblkhd;
        int32_t usmblks;
        int32_t fsmblks;
        int32_t uordblks;
        int32_t fordblks;
        int32_t keepcost;
  };
     typedef struct {
       uint32_t word1, word2, word3, word4;
     } long_double;
   struct passwd {
        char *pw_name;
        char *pw_passwd;
        uid_t pw_uid;
        gid_t pw_gid;
        char *pw_age;
        char *pw_comment;
        char *pw_gecos;
        char *pw_dir;
        char *pw_shell;
        int32_t pw_audid;
        int pw_audflg;
   };
     extern struct passwd *getpwuid(uid_t);
     extern struct passwd *getpwnam(const char *);
     extern void endpwent(void);
     extern struct passwd *getpwent(void);
     extern void setpwent(void);
   struct s_passwd {
       char *pw_name;
       char *pw_passwd;
       char *pw_age;
       int32_t pw_audid;
       int pw_audflg;
   };
         extern int putpwent(const struct passwd *, FILE *);
     extern struct passwd *fgetpwent(FILE *);
     extern struct s_passwd *getspwent(void);
     extern struct s_passwd *getspwuid(uid_t);
     extern struct s_passwd *getspwaid(int32_t);
     extern struct s_passwd *getspwnam(char *);
     extern struct s_passwd *fgetspwent(FILE *);
     extern void setspwent(void);
     extern void endspwent(void);
     extern char *_ldecvt(long_double, int, int *, int *);
     extern char *_ldfcvt(long_double, int, int *, int *);
     extern char *_ldgcvt(long_double, int, char *);
     extern int getpw(int, char *);
     extern void l3tol(long *, const char *, int);
     extern void ltol3(char *, const long *, int);
     extern char *ltostr(long, int);
     extern char *ultostr(unsigned long, int);
     extern char *ltoa(long);
     extern char *ultoa(unsigned long);
     extern void memorymap(int);
     extern struct mallinfo mallinfo(void);
     extern int mallopt(int, int);
     extern long_double strtold(const char *, char **);
   struct utimbuf {
        time_t actime;
        time_t modtime;
   };
           extern int utime(const char *, const struct utimbuf *);
     extern void _exit (int);
     extern int access (const char *, int);
     extern int chdir (const char *);
     extern int chown (const char *, uid_t, gid_t);
     extern int close (int);
     extern char *ctermid (char *);
     extern char *cuserid (char *);
     extern int dup (int);
     extern int dup2 (int, int);
     extern int execl (const char *, const char *, ...);
     extern int execle (const char *, const char *, ...);
     extern int execlp (const char *, const char *, ...);
     extern int execv (const char *, char *const []);
     extern int execve (const char *, char *const [], char *const []);
     extern int execvp (const char *, char *const []);
     extern long fpathconf (int, int);
     extern char *getcwd (char *, size_t);
     extern int getgroups (int, gid_t []);
     extern char *getlogin (void);
     extern int isatty (int);
     extern int link (const char *, const char *);
     extern off_t lseek (int, off_t, int);
     extern long pathconf (const char *, int);
     extern int pause (void);
     extern int pipe (int *);
     extern ssize_t read (int, void *, size_t);
     extern int rmdir (const char *);
     extern int setgid (gid_t);
     extern int setpgid (pid_t, pid_t);
     extern pid_t setsid (void);
     extern int setuid (uid_t);
     extern unsigned int sleep (unsigned int);
     extern long sysconf (int);
     extern pid_t tcgetpgrp (int);
     extern int tcsetpgrp (int, pid_t);
     extern char *ttyname (int);
     extern int unlink (const char *);
     extern ssize_t write (int, const void *, size_t);
     extern unsigned int alarm (unsigned int);
     extern pid_t fork (void);
     extern gid_t getegid (void);
     extern uid_t geteuid (void);
     extern gid_t getgid (void);
     extern pid_t getpgrp (void);
     extern pid_t getpid (void);
     extern pid_t getppid (void);
     extern uid_t getuid (void);
     extern char *optarg;
     extern int opterr;
     extern int optind;
     extern int optopt;
     extern int getopt (int, char * const [], const char *);
     extern size_t confstr (int, char *, size_t);
     extern int pthread_atfork(void (*prepare)(), void (*parent)(),
                                                           void (*child)());
        extern int chroot (const char *);
        extern char *crypt (const char *, const char *);
        extern void encrypt (char [64], int);
        extern int fsync (int);
        extern char *getpass (const char *);
        extern int nice (int);
        extern int rename (const char *, const char *);
        extern void swab (const void *, void *, ssize_t);
     extern char **environ;
       extern int readlink (const char *, char *, size_t);
     extern int fchown (int, uid_t, gid_t);
     extern int ftruncate (int, off_t);
     extern int truncate (const char *, off_t);
       extern int setgroups (int, gid_t []);
     extern int symlink (const char *, const char *);
        extern pid_t setpgrp (void);
        extern pid_t vfork (void);
        extern int brk (void *);
        extern int fchdir (int);
        extern int getdtablesize (void);
        extern long gethostid (void);
        extern int gethostname (char *, size_t);
        extern int getpagesize (void);
        extern pid_t getpgid (pid_t);
        extern pid_t getsid (pid_t);
        extern char *getwd (char *);
        extern int lockf (int, int, off_t);
        extern int lchown (const char *, uid_t, gid_t);
        extern void *sbrk (int);
        extern int setregid (gid_t, gid_t);
        extern int setreuid (uid_t, uid_t);
        extern void sync (void);
        extern useconds_t ualarm (useconds_t, useconds_t);
        extern int usleep (useconds_t);
     extern void endusershell (void);
     extern int fsctl (int, int, void *, size_t);
     extern char *getcdf (const char *, char *, size_t);
     extern char *gethcwd (char *, size_t);
     extern int getpgrp2 (pid_t);
     extern char *getusershell (void);
     extern char *hidecdf (const char *, char *, size_t);
     extern int initgroups (const char *, gid_t);
     extern char *logname (void);
     extern void lsync (void);
     extern int prealloc (int, off_t);
     extern int sethostname (const char *, size_t);
     extern int setpgrp2 (pid_t, pid_t);
     extern int setresgid (gid_t, gid_t, gid_t);
     extern int setresuid (uid_t, uid_t, uid_t);
     extern void setusershell (void);
     extern long sgetl (const char *);
     extern void sputl (long, char *);
     extern int swapon (const char *, ...);
     extern int swapoff (const char *, int);
     extern char *ttyname (int);
     extern int64_t __sysconfx (int, int);
     extern int set_userthreadid (int);
           extern pid_t setpgrp3 (void);
extern int serialize (int, pid_t);
extern char *ustk_addr_q2_32bit;
extern char *ustk_addr_32bit;
           extern int get_expiration_time (struct timespec *,struct timespec 
*);
   struct flock {
      short l_type;
      short l_whence;
      off_t l_start;
      off_t l_len;
      pid_t l_pid;
   };
       extern int fcntl (int, int, ...);
       extern int creat (const char *, mode_t);
       extern int open (const char *, int, ...);
   void free(void *);
   int mallopt(int, int);
   struct mallinfo mallinfo(void);
   void memorymap(int);
     void *calloc(size_t, size_t);
     void *malloc(size_t);
     void *realloc(void *, size_t);
extern const char *strsignal (int);
   struct stat
   {
        dev_t st_dev;
        ino_t st_ino;
        mode_t st_mode;
        nlink_t st_nlink;
        unsigned short st_reserved1;
        unsigned short st_reserved2;
        dev_t st_rdev;
        off_t st_size;
        time_t st_atime;
        int st_spare1;
        time_t st_mtime;
        int st_spare2;
        time_t st_ctime;
        int st_spare3;
        long st_blksize;
        blkcnt_t st_blocks;
        unsigned int st_pad:29;
        unsigned int st_sysVacl:1;
        unsigned int st_acl:1;
        unsigned int st_remote:1;
        dev_t st_netdev;
        ino_t st_netino;
        __cnode_t st_cnode;
        __cnode_t st_rcnode;
        __site_t st_netsite;
        short st_fstype;
        dev_t st_realdev;
        unsigned short st_basemode;
        unsigned short st_spareshort;
        uid_t st_uid;
        gid_t st_gid;
        int32_t st_spare4[3];
   };
     extern int chmod (const char *, mode_t);
     extern int mkdir (const char *, mode_t);
     extern int mkfifo (const char *, mode_t);
     extern int fstat (int, struct stat *);
     extern int stat (const char *, struct stat *);
       extern mode_t umask (mode_t);
      extern int fchmod (int, mode_t);
      extern int lstat (const char *, struct stat *);
      extern int mknod (const char *, mode_t, dev_t);
extern char **buildargv (char *) __attribute__ ((__malloc__));
extern void freeargv (char **);
extern char **dupargv (char **) __attribute__ ((__malloc__));
extern char *concat (const char *, ...) __attribute__ ((__malloc__));
extern int fdmatch (int fd1, int fd2);
extern char * getpwd (void);
extern long get_run_time (void);
extern char *choose_temp_base (void) __attribute__ ((__malloc__));
extern char *make_temp_file (const char *) __attribute__ ((__malloc__));
extern const char *spaces (int count);
extern int errno_max (void);
extern const char *strerrno (int);
extern int strtoerrno (const char *);
extern char *xstrerror (int);
extern int signo_max (void);
extern const char *strsigno (int);
extern int strtosigno (const char *);
extern int xatexit (void (*fn) (void));
extern void xexit (int status) __attribute__ ((__noreturn__));
extern void xmalloc_set_program_name (const char *);
typedef long int ptrdiff_t;
extern void * xmalloc (size_t) __attribute__ ((__malloc__));
extern void * xrealloc (void *, size_t);
extern void * xcalloc (size_t, size_t) __attribute__ ((__malloc__));
extern char *xstrdup (const char *) __attribute__ ((__malloc__));
extern void * xmemdup (const void *, size_t, size_t) __attribute__ 
((__malloc__));
extern char _hex_value[256];
extern void hex_init (void);
extern int pexecute (const char *, char * const *, const char *,
                            const char *, char **, char **, int);
extern int pwait (int, int *, int);
extern int asprintf (char **, const char *, ...) __attribute__ ((__format__ 
(__printf__, 2, 3)));
extern int vasprintf (char **, const char *, va_list)
  __attribute__ ((__format__ (__printf__, 2, 0)));
extern void *alloca (long unsigned int);
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;
  long int temp;
  int alignment_mask;
  struct _obstack_chunk *(*chunkfun) (void *, long);
  void (*freefun) (void *, struct _obstack_chunk *);
  void *extra_arg;
  unsigned use_extra_arg:1;
  unsigned maybe_empty_object:1;
  unsigned alloc_failed:1;
};
extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *);
extern int _obstack_begin (struct obstack *, int, int,
                            void *(*) (long), void (*) (void *));
extern int _obstack_begin_1 (struct obstack *, int, int,
                             void *(*) (void *, long),
                             void (*) (void *, void *), void *);
extern int _obstack_memory_used (struct obstack *);
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_ptr_grow (struct obstack *obstack, void *data);
void obstack_int_grow (struct obstack *obstack, int data);
void * obstack_finish (struct obstack *obstack);
int obstack_object_size (struct obstack *obstack);
int obstack_room (struct obstack *obstack);
void obstack_make_room (struct obstack *obstack, int size);
void obstack_1grow_fast (struct obstack *obstack, int data_char);
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
void obstack_int_grow_fast (struct obstack *obstack, int data);
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);
int obstack_memory_used (struct obstack *obstack);
extern void (*obstack_alloc_failed_handler) (void);
extern int obstack_exit_failure;
  struct lconv {
        char *decimal_point;
        char *thousands_sep;
        char *grouping;
        char *int_curr_symbol;
        char *currency_symbol;
        char *mon_decimal_point;
        char *mon_thousands_sep;
        char *mon_grouping;
        char *positive_sign;
        char *negative_sign;
        char int_frac_digits;
        char frac_digits;
        char p_cs_precedes;
        char p_sep_by_space;
        char n_cs_precedes;
        char n_sep_by_space;
        char p_sign_posn;
        char n_sign_posn;
        };
     extern char *setlocale(int, const char *);
     extern struct lconv *localeconv(void);
   extern char *_errlocale();
   extern char __locale_names[6+1][255+1];
  struct locale_data {
    char LC_ALL_D[59];
    char LC_COLLATE_D[59];
    char LC_CTYPE_D[59];
    char LC_MONETARY_D[59];
    char LC_NUMERIC_D[59];
    char LC_TIME_D[59];
    char LC_MESSAGES_D[59];
    };
     extern struct locale_data *getlocale(int);
extern char *__err_string;
extern const char *update_path (const char *, const char *);
extern void set_std_prefix (const char *, int);
extern const char *const version_string;
extern int do_spec (const char *);
extern void fancy_abort (void) __attribute__ ((__noreturn__));
extern const char *input_filename;
extern size_t input_filename_length;
extern void fatal (const char *, ...)
     __attribute__ ((__format__ (__printf__, 1, 2))) __attribute__ 
((__noreturn__));
extern void lang_specific_driver (int *, const char *const **, int *);
extern int lang_specific_pre_link (void);
extern int lang_specific_extra_outfiles;
static char dir_separator_str[] = {'/', 0};
static int pass_exit_codes;
static int print_search_dirs;
static const char *print_file_name = ((void *)0);
static const char *print_prog_name = ((void *)0);
static int print_multi_directory;
static int print_multi_lib;
static int print_help_list;
static int verbose_flag;
static int report_times;
static int save_temps_flag;
static const char *compiler_version;
static const char *spec_version = "2.96";
static const char *spec_machine = "hppa2.0w-hp-hpux11.00";
static const char *cross_compile = "0";
static int error_count = 0;
static int greatest_status = 1;
static struct obstack obstack;
static struct obstack collect_obstack;
static struct rusage rus, prus;
struct path_prefix;
static void init_spec (void);
static char **split_directories (const char *, int *);
static void free_split_directories (char **);
static char *make_relative_prefix (const char *, const char *, const char *);
static void store_arg (const char *, int, int);
static char *load_specs (const char *);
static void read_specs (const char *, int);
static void set_spec (const char *, const char *);
static struct compiler *lookup_compiler (const char *, size_t, const char *);
static char *build_search_list (struct path_prefix *, const char *, int);
static void putenv_from_prefixes (struct path_prefix *, const char *);
static int access_check (const char *, int);
static char *find_a_file (struct path_prefix *, const char *, int);
static void add_prefix (struct path_prefix *, const char *,
                                         const char *, int, int, int *);
static void translate_options (int *, const char *const **);
static char *skip_whitespace (char *);
static void record_temp_file (const char *, int, int);
static void delete_if_ordinary (const char *);
static void delete_temp_files (void);
static void delete_failure_queue (void);
static void clear_failure_queue (void);
static int check_live_switch (int, int);
static const char *handle_braces (const char *);
static char *save_string (const char *, int);
static int do_spec_1 (const char *, int, const char *);
static const char *find_file (const char *);
static int is_directory (const char *, const char *, int);
static void validate_switches (const char *);
static void validate_all_switches (void);
static void give_switch (int, int, int);
static int used_arg (const char *, int);
static int default_arg (const char *, int);
static void set_multilib_dir (void);
static void print_multilib_info (void);
static void pfatal_with_name (const char *) __attribute__ ((__noreturn__));
static void perror_with_name (const char *);
static void pfatal_pexecute (const char *, const char *)
  __attribute__ ((__noreturn__));
static void error (const char *, ...)
  __attribute__ ((__format__ (__printf__, 1, 2)));
static void notice (const char *, ...)
  __attribute__ ((__format__ (__printf__, 1, 2)));
static void display_help (void);
static void add_preprocessor_option (const char *, int);
static void add_assembler_option (const char *, int);
static void add_linker_option (const char *, int);
static void process_command (int, const char *const *);
static int execute (void);
static void unused_prefix_warnings (struct path_prefix *);
static void clear_args (void);
static void fatal_error (int);
static void set_input (const char *);
static const char *cpp_spec = "%{mpa-risc-1-0:%(cpp_pa10)} 
%{mpa-risc-1-1:%(cpp_pa11)} %{msnake:%(cpp_pa11)} %{mpa-risc-2-0:%(cpp_pa20)} 
%{!mpa-risc-1-0:%{!mpa-risc-1-1:%{!mpa-risc-2-0:%{!msnake:%(cpp_cpu_default)}}}
} %{m64bit:%(cpp_64bit)} %{!m64bit:%(cpp_64bit_default)} %{!ansi: 
-D_HPUX_SOURCE -D_HIUX_SOURCE -D__STDC_EXT__} %{threads: -D_REENTRANT 
-D_DCE_THREADS}";
static const char *cpp_predefines = "-Dhppa -Dhp9000s800 -D__hp9000s800 
-Dhp9k8 -DPWB -Dhpux -Dunix -Asystem(unix) -Asystem(hpux) -Acpu(hppa) 
-Amachine(hppa)";
static const char *cc1_spec = "%{pg:} %{p:}";
static const char *cc1plus_spec = "";
static const char *signed_char_spec = "%{funsigned-char:-D__CHAR_UNSIGNED__}";
static const char *asm_spec = "";
static const char *asm_final_spec = "";
static const char *link_spec = "%{!mpa-risc-1-0:%{!shared:-L/lib/pa1.1 
-L/usr/lib/pa1.1 }} -z %{mlinker-opt:-O} %{!shared:-u main} %{static:-a 
archive} %{shared:-b}";
static const char *lib_spec = "%{!shared:     %{!p:%{!pg:       
%{!threads:-lc}       %{threads:-lcma -lc_r}}}     %{p: -L/lib/libp/ -lc}     
%{pg: -L/lib/libp/ -lc}}";
static const char *libgcc_spec = "-lgcc";
static const char *endfile_spec = "";
static const char *startfile_spec = "%{!shared:%{pg:gcrt0%O%s}%{!pg:%{p:mcrt0%O
%s}%{!p:crt0%O%s}}}";
static const char *switches_need_spaces = "";
static const char *linker_name_spec = "collect2";
static const char *link_command_spec = "%{!fsyntax-only:%{!c:%{!M:%{!MM:%{!E:%{
!S:    %(linker) %l %X %{o*} %{A} %{d} %{e*} %{m} %{N} %{n} %{r} %{s} %{t}    
%{u*} %{x} %{z} %{Z} %{!A:%{!nostdlib:%{!nostartfiles:%S}}}    %{static:} 
%{L*} %(link_libgcc) %o %{!nostdlib:%{!nodefaultlibs:%G %L %G}}    
%{!A:%{!nostdlib:%{!nostartfiles:%E}}} %{T*} }}}}}}";
static const char *link_libgcc_spec = "%D";
static const char *trad_capable_cpp =
"%{traditional|ftraditional|traditional-cpp:trad}cpp0";
static const char *cpp_options =
"%{C:%{!E:%eGNU C does not support -C without using -E}} %{std*} %{nostdinc*} 
%{C} %{v} %{A*} %{I*} %{P} %{$} %I %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} 
%{MG} %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2 -D__GNUC_PATCHLEVEL__=%v3} 
%{!undef:%{!ansi:%{!std=*:%p}%{std=gnu*:%p}} %P} %{trigraphs} %c 
%{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} 
%{ffast-math:-D__FAST_MATH__} %{fshort-wchar:-D__WCHAR_TYPE__=short\\ 
unsigned\\ int} %{fshow-column} %{fno-show-column} %{fleading-underscore} 
%{fno-leading-underscore} %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} 
%{U*} %{i*} %Z %i %{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}}";
static const char *cc1_options =
"%{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}} 
%1 %{!Q:-quiet} -dumpbase %B %{d*} %{m*} %{a*} %{g*} %{O*} %{W*} %{w} 
%{pedantic*} %{std*} %{ansi} %{traditional} %{v:-version} %{pg:-p} %{p} %{f*} 
%{aux-info*} %{Qn:-fno-ident} %{--help:--help} %{S:%W{o*}%{!o*:-o %b.s}}";
static const char *asm_options =
"%a %Y %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}";
static struct obstack multilib_obstack;
static const char *multilib_select;
static const char *multilib_matches;
static const char *multilib_defaults;
static const char *multilib_exclusions;
static const char *const multilib_raw[] = {
". ;",
((void *)0)
};
static const char *const multilib_matches_raw[] = {
((void *)0)
};
static const char *multilib_extra = "";
static const char *const multilib_exclusions_raw[] = {
((void *)0)
};
static const char *const multilib_defaults_raw[] = { "" };
struct user_specs
{
  struct user_specs *next;
  const char *filename;
};
static struct user_specs *user_specs_head, *user_specs_tail;
struct compiler
{
  const char *suffix;
  const char *spec;
};
static struct compiler *compilers;
static int n_compilers;
static struct compiler default_compilers[] =
{
  {".m", "#Objective-C"},
  {".cc", "#C++"}, {".cxx", "#C++"}, {".cpp", "#C++"},
  {".c++", "#C++"}, {".C", "#C++"},
  {".ads", "#Ada"}, {".adb", "#Ada"}, {".ada", "#Ada"},
  {".f", "#Fortran"}, {".for", "#Fortran"}, {".F", "#Fortran"},
  {".fpp", "#Fortran"}, {".r", "#Ratfor"},
  {".p", "#Pascal"}, {".pas", "#Pascal"},
  {".ch", "#Chill"}, {".chi", "#Chill"},
  {".java", "#Java"}, {".class", "#Java"},
  {".zip", "#Java"}, {".jar", "#Java"},
  {".c", "@c"},
  {"@c",
     "%(trad_capable_cpp) -lang-c %{ansi:-std=c89} %(cpp_options) 			  
%{!M:%{!MM:%{!E:%{!pipe:%g.i} |\n      cc1 %{!pipe:%g.i} %(cc1_options)  
%{!S:-o %{|!pipe:%g.s} |\n      as %(asm_options) %{!pipe:%g.s} %A }}}}\n"
  },
  {"-",
   "%{!E:%e-E required when input is from standard input}    
%(trad_capable_cpp) -lang-c %{ansi:-std=c89} %(cpp_options)"},
  {".h", "@c-header"},
  {"@c-header",
   "%{!E:%eCompilation of header file requested}     %(trad_capable_cpp) 
-lang-c %{ansi:-std=c89} %(cpp_options)"},
  {".i", "@cpp-output"},
  {"@cpp-output",
   "%{!M:%{!MM:%{!E:    cc1 %i %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n    as 
%(asm_options) %{!pipe:%g.s} %A }}}}"},
  {".s", "@assembler"},
  {"@assembler",
   "%{!M:%{!MM:%{!E:%{!S:as %(asm_options) %i %A }}}}"},
  {".S", "@assembler-with-cpp"},
  {"@assembler-with-cpp",
   "%(trad_capable_cpp) -lang-asm %(cpp_options) 			%{!M:%{!MM:%{!E:%{!S: 
%{!pipe:%g.s} |\n    as %(asm_options) %{!pipe:%g.s} %A }}}}"},
  {".ch", "@chill"},
  {".chi", "@chill"},
  {"@chill",
     "tradcpp0 -lang-chill %{!no-gcc:-D__GNUCHILL__=%v1} %(cpp_options)	      
%{!M:%{!MM:%{!E:%{!pipe:%g.i} |\n      cc1chill %{!pipe:%g.i} %(cc1_options) 
%{!S:-o %{|!pipe:%g.s} |\n      as %(asm_options) %{!pipe:%g.s} %A }}}}\n"},
  {".cc", "@c++"},
  {".cp", "@c++"},
  {".cxx", "@c++"},
  {".cpp", "@c++"},
  {".c++", "@c++"},
  {".C", "@c++"},
  {"@c++",
    "cpp0 -lang-c++ %{!no-gcc:-D__GNUG__=%v1}       
%{fnew-abi:-D__GXX_ABI_VERSION=100}       %{ansi:-trigraphs -$ 
-D__STRICT_ANSI__} %(cpp_options)       %{!M:%{!MM:%{!E:%{!pipe:%g.ii} |\n     
cc1plus %{!pipe:%g.ii} %(cc1_options) %{+e*} %{!S:-o %{|!pipe:%g.s} |\n     as 
%(asm_options) %{!pipe:%g.s} %A }}}}\n"
  },
  {".ii", "@c++-cpp-output"},
  {"@c++-cpp-output",
   "%{!M:%{!MM:%{!E:    cc1plus -fpreprocessed %i %(cc1_options) %{+e*}    
%{!S:-o %{|!pipe:%g.s} |\n as %(asm_options) %{!pipe:%g.s} %A }}}}"},
  {".F", "@f77-cpp-input"},
  {".fpp", "@f77-cpp-input"},
  {".FPP", "@f77-cpp-input"},
  {"@f77-cpp-input",
   "tradcpp0 -lang-fortran %(cpp_options) %{!M:%{!MM:%{!E:%{!pipe:%g.f |\n    
f771 %{!pipe:%g.f} %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n    as 
%(asm_options) %{!pipe:%g.s} %A }}}}}\n"},
  {".r", "@ratfor"},
  {"@ratfor",
   "%{C:%{!E:%eGNU C does not support -C without using -E}}    ratfor %{C} 
%{v} %i %{E:%W{o*}} %{!E: %{!pipe:-o %g.f} |\n    f771 %{!pipe:%g.f} 
%(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n    as %(asm_options) %{!pipe:%g.s} 
%A }}\n"},
  {".f", "@f77"},
  {".for", "@f77"},
  {".FOR", "@f77"},
  {"@f77",
   "%{!M:%{!MM:%{!E:f771 %i %(cc1_options) %{!S:-o %{|!pipe:%g.s} |\n     as 
%(asm_options) %{!pipe:%g.s} %A }}}}\n"},
  {"@f77-version",
   "tradcpp0 -lang-fortran %(cpp_options) /dev/null \n    f771 -fnull-version 
%1       %{!Q:-quiet} -dumpbase g77-version.f %{d*} %{m*} %{a*}       %{g*} 
%{O*} %{W*} %{w} %{pedantic*}       -version -fversion %{f*} %{I*} -o %g.s 
/dev/null \n     as %a %Y -o %g%O %g.s %A \n     ld %l %X -o %g %g%O %{A} %{d} 
%{e*} %{m} %{N} %{n}       %{r} %{s} %{t} %{u*} %{x} %{z} %{Z}       
%{!A:%{!nostdlib:%{!nostartfiles:%S}}}       %{static:} %{L*} %D -lg2c -lm     
  %{!nostdlib:%{!nodefaultlibs:%G %L %G}}       %{!A:%{!nostdlib:%{!nostartfile
s:%E}}}       %{T*} \n     %g \n"},
  {".java", "@java" },
  {".class", "@java" },
  {".zip", "@java" },
  {".jar", "@java" },
  {"@java",
   "%{fjni:%{femit-class-file:%e-fjni and -femit-class-file are incompatible}} 
   %{!E:jc1 %i %(jc1) %(cc1_options) %{+e*} %{I*} %{MD} %{MMD} %{M} %{MM}      
       %{!S:-o %{|!pipe:%g.s} |\n    as %(asm_options) %{!pipe:%g.s} %A }}"},
  {".m", "@objective-c"},
  {"@objective-c",
     "%(trad_capable_cpp) -lang-objc %{ansi:-std=c89} %(cpp_options)			  
%{!M:%{!MM:%{!E:%{!pipe:%g.mi} |\n      cc1obj -lang-objc %{!pipe:%g.mi} 
%(cc1_options) %{gen-decls}	     %{!S:-o %{|!pipe:%g.s} |\n      as 
%(asm_options) %{!pipe:%g.s} %A }}}}\n"
    },
  {".mi", "@objc-cpp-output"},
  {"@objc-cpp-output",
     "%{!M:%{!MM:%{!E:cc1obj -lang-objc %i %(cc1_options) %{gen-decls}			     
%{!S:-o %{|!pipe:%g.s} |\n      as %(asm_options) %{!pipe:%g.s} %A }}}}"},
  {0, 0}
};
static int n_default_compilers
  = (sizeof default_compilers / sizeof (struct compiler)) - 1;
static int n_linker_options;
static char **linker_options;
static int n_assembler_options;
static char **assembler_options;
static int n_preprocessor_options;
static char **preprocessor_options;
struct option_map
{
  const char *name;
  const char *equivalent;
  const char *arg_info;
};
struct option_map option_map[] =
 {
   {"--all-warnings", "-Wall", 0},
   {"--ansi", "-ansi", 0},
   {"--assemble", "-S", 0},
   {"--assert", "-A", "a"},
   {"--classpath", "-fclasspath=", "aj"},
   {"--CLASSPATH", "-fCLASSPATH=", "aj"},
   {"--comments", "-C", 0},
   {"--compile", "-c", 0},
   {"--debug", "-g", "oj"},
   {"--define-macro", "-D", "aj"},
   {"--dependencies", "-M", 0},
   {"--dump", "-d", "a"},
   {"--dumpbase", "-dumpbase", "a"},
   {"--entry", "-e", 0},
   {"--extra-warnings", "-W", 0},
   {"--for-assembler", "-Wa", "a"},
   {"--for-linker", "-Xlinker", "a"},
   {"--force-link", "-u", "a"},
   {"--imacros", "-imacros", "a"},
   {"--include", "-include", "a"},
   {"--include-barrier", "-I-", 0},
   {"--include-directory", "-I", "aj"},
   {"--include-directory-after", "-idirafter", "a"},
   {"--include-prefix", "-iprefix", "a"},
   {"--include-with-prefix", "-iwithprefix", "a"},
   {"--include-with-prefix-before", "-iwithprefixbefore", "a"},
   {"--include-with-prefix-after", "-iwithprefix", "a"},
   {"--language", "-x", "a"},
   {"--library-directory", "-L", "a"},
   {"--machine", "-m", "aj"},
   {"--machine-", "-m", "*j"},
   {"--no-line-commands", "-P", 0},
   {"--no-precompiled-includes", "-noprecomp", 0},
   {"--no-standard-includes", "-nostdinc", 0},
   {"--no-standard-libraries", "-nostdlib", 0},
   {"--no-warnings", "-w", 0},
   {"--optimize", "-O", "oj"},
   {"--output", "-o", "a"},
   {"--output-class-directory", "-foutput-class-dir=", "ja"},
   {"--pedantic", "-pedantic", 0},
   {"--pedantic-errors", "-pedantic-errors", 0},
   {"--pipe", "-pipe", 0},
   {"--prefix", "-B", "a"},
   {"--preprocess", "-E", 0},
   {"--print-search-dirs", "-print-search-dirs", 0},
   {"--print-file-name", "-print-file-name=", "aj"},
   {"--print-libgcc-file-name", "-print-libgcc-file-name", 0},
   {"--print-missing-file-dependencies", "-MG", 0},
   {"--print-multi-lib", "-print-multi-lib", 0},
   {"--print-multi-directory", "-print-multi-directory", 0},
   {"--print-prog-name", "-print-prog-name=", "aj"},
   {"--profile", "-p", 0},
   {"--profile-blocks", "-a", 0},
   {"--quiet", "-q", 0},
   {"--save-temps", "-save-temps", 0},
   {"--shared", "-shared", 0},
   {"--silent", "-q", 0},
   {"--specs", "-specs=", "aj"},
   {"--static", "-static", 0},
   {"--std", "-std=", "aj"},
   {"--symbolic", "-symbolic", 0},
   {"--target", "-b", "a"},
   {"--time", "-time", 0},
   {"--trace-includes", "-H", 0},
   {"--traditional", "-traditional", 0},
   {"--traditional-cpp", "-traditional-cpp", 0},
   {"--trigraphs", "-trigraphs", 0},
   {"--undefine-macro", "-U", "aj"},
   {"--use-version", "-V", "a"},
   {"--user-dependencies", "-MM", 0},
   {"--verbose", "-v", 0},
   {"--version", "-dumpversion", 0},
   {"--warn-", "-W", "*j"},
   {"--write-dependencies", "-MD", 0},
   {"--write-user-dependencies", "-MMD", 0},
   {"--", "-f", "*j"}
 };
struct spec_list
{
  const char *name;
  const char *ptr;
  const char **ptr_spec;
  struct spec_list *next;
  int name_len;
  int alloc_p;
};
static struct spec_list static_specs[] =
{
  { "asm", ((void *) 0), &asm_spec, (struct spec_list *)0, sizeof ("asm")-1, 0 
},
  { "asm_final", ((void *) 0), &asm_final_spec, (struct spec_list *)0, sizeof 
("asm_final")-1, 0 },
  { "asm_options", ((void *) 0), &asm_options, (struct spec_list *)0, sizeof 
("asm_options")-1, 0 },
  { "cpp", ((void *) 0), &cpp_spec, (struct spec_list *)0, sizeof ("cpp")-1, 0 
},
  { "cpp_options", ((void *) 0), &cpp_options, (struct spec_list *)0, sizeof 
("cpp_options")-1, 0 },
  { "trad_capable_cpp", ((void *) 0), &trad_capable_cpp, (struct spec_list 
*)0, sizeof ("trad_capable_cpp")-1, 0 },
  { "cc1", ((void *) 0), &cc1_spec, (struct spec_list *)0, sizeof ("cc1")-1, 0 
},
  { "cc1_options", ((void *) 0), &cc1_options, (struct spec_list *)0, sizeof 
("cc1_options")-1, 0 },
  { "cc1plus", ((void *) 0), &cc1plus_spec, (struct spec_list *)0, sizeof 
("cc1plus")-1, 0 },
  { "endfile", ((void *) 0), &endfile_spec, (struct spec_list *)0, sizeof 
("endfile")-1, 0 },
  { "link", ((void *) 0), &link_spec, (struct spec_list *)0, sizeof 
("link")-1, 0 },
  { "lib", ((void *) 0), &lib_spec, (struct spec_list *)0, sizeof ("lib")-1, 0 
},
  { "libgcc", ((void *) 0), &libgcc_spec, (struct spec_list *)0, sizeof 
("libgcc")-1, 0 },
  { "startfile", ((void *) 0), &startfile_spec, (struct spec_list *)0, sizeof 
("startfile")-1, 0 },
  { "switches_need_spaces", ((void *) 0), &switches_need_spaces, (struct 
spec_list *)0, sizeof ("switches_need_spaces")-1, 0 },
  { "signed_char", ((void *) 0), &signed_char_spec, (struct spec_list *)0, 
sizeof ("signed_char")-1, 0 },
  { "predefines", ((void *) 0), &cpp_predefines, (struct spec_list *)0, sizeof 
("predefines")-1, 0 },
  { "cross_compile", ((void *) 0), &cross_compile, (struct spec_list *)0, 
sizeof ("cross_compile")-1, 0 },
  { "version", ((void *) 0), &compiler_version, (struct spec_list *)0, sizeof 
("version")-1, 0 },
  { "multilib", ((void *) 0), &multilib_select, (struct spec_list *)0, sizeof 
("multilib")-1, 0 },
  { "multilib_defaults", ((void *) 0), &multilib_defaults, (struct spec_list 
*)0, sizeof ("multilib_defaults")-1, 0 },
  { "multilib_extra", ((void *) 0), &multilib_extra, (struct spec_list *)0, 
sizeof ("multilib_extra")-1, 0 },
  { "multilib_matches", ((void *) 0), &multilib_matches, (struct spec_list 
*)0, sizeof ("multilib_matches")-1, 0 },
  { "multilib_exclusions", ((void *) 0), &multilib_exclusions, (struct 
spec_list *)0, sizeof ("multilib_exclusions")-1, 0 },
  { "linker", ((void *) 0), &linker_name_spec, (struct spec_list *)0, sizeof 
("linker")-1, 0 },
  { "link_libgcc", ((void *) 0), &link_libgcc_spec, (struct spec_list *)0, 
sizeof ("link_libgcc")-1, 0 },
};
struct spec_list_1
{
  const char *name;
  const char *ptr;
};
static struct spec_list_1 extra_specs_1[] = { { "cpp_pa10", ""}, { "cpp_pa11", 
"-D_PA_RISC1_1 -D__hp9000s700"}, { "cpp_pa20", "-D_PA_RISC2_0 
-D__hp9000s800"}, { "cpp_64bit", "-D__LP64__ -D__LONG_MAX__=9223372036854775807
L"}, { "cpp_cpu_default", "%(cpp_pa11)" }, { "cpp_64bit_default", "" }, };
static struct spec_list * extra_specs = (struct spec_list *)0;
static struct spec_list *specs = (struct spec_list *)0;
static const char **argbuf;
static int argbuf_length;
static int argbuf_index;
static struct temp_name {
  const char *suffix;
  int length;
  int unique;
  const char *filename;
  int filename_length;
  struct temp_name *next;
} *temp_names;
static int execution_count;
static int signal_count;
static const char *programname;
struct prefix_list
{
  char *prefix;
  struct prefix_list *next;
  int require_machine_suffix;
  int *used_flag_ptr;
  int priority;
};
struct path_prefix
{
  struct prefix_list *plist;
  int max_len;
  const char *name;
};
static struct path_prefix exec_prefixes = { 0, 0, "exec" };
static struct path_prefix startfile_prefixes = { 0, 0, "startfile" };
static struct path_prefix include_prefixes = { 0, 0, "include" };
static const char *machine_suffix = 0;
static const char *just_machine_suffix = 0;
static const char *gcc_exec_prefix;
static const char *standard_exec_prefix = "/usr/egcs/lib/gcc-lib/";
static const char *standard_exec_prefix_1 = "/usr/lib/gcc/";
static const char *md_exec_prefix = "/usr/ccs/bin/";
static const char *md_startfile_prefix = "/usr/ccs/lib/";
static const char *md_startfile_prefix_1 = "/opt/langtools/lib/";
static const char *standard_startfile_prefix = "../../../";
static const char *standard_startfile_prefix_1 = "/lib/";
static const char *standard_startfile_prefix_2 = "/usr/lib/";
static const char *tooldir_base_prefix = "../../../../";
static const char *tooldir_prefix;
static const char *standard_bindir_prefix = "/usr/egcs/bin/";
static const char *multilib_dir;
static const char *temp_filename;
static int temp_filename_length;
struct temp_file
{
  const char *name;
  struct temp_file *next;
};
static struct temp_file *always_delete_queue;
static struct temp_file *failure_delete_queue;
struct switchstr
{
  const char *part1;
  const char **args;
  int live_cond;
  int validated;
};
static struct switchstr *switches;
static int n_switches;
struct infile
{
  const char *name;
  const char *language;
};
static struct infile *infiles;
static int n_infiles;
static int added_libraries;
static const char **outfiles;
static int warn_B;
static int warn_std;
static int *warn_std_ptr = 0;
static void
process_command (argc, argv)
     int argc;
     const char *const *argv;
{
  register int i;
  const char *temp;
  char *temp1;
  const char *spec_lang = 0;
  int last_language_n_infiles;
  int have_c = 0;
  int have_o = 0;
  int lang_n_infiles = 0;


  for (i = 1; i < argc; i++)
    {
      if (! strcmp (argv[i], "-dumpspecs"))
        {
          struct spec_list *sl;
          init_spec ();
          for (sl = specs; sl; sl = sl->next)
            printf ("*%s:\n%s\n\n", sl->name, *(sl->ptr_spec));
          if (link_command_spec)
            printf ("*link_command:\n%s\n\n", link_command_spec);
          exit (0);
        }
      else if (! strcmp (argv[i], "-dumpversion"))
        {
          printf ("%s\n", spec_version);
          exit (0);
        }
      else if (! strcmp (argv[i], "-dumpmachine"))
        {
          printf ("%s\n", spec_machine);
          exit (0);
        }
      else if (strcmp (argv[i], "-fhelp") == 0)
        {
          print_help_list = 1;
          n_infiles++;
          n_switches++;
          add_preprocessor_option ("--help", 6);
          add_assembler_option ("--help", 6);
          add_linker_option ("--help", 6);
        }
      else if (! strcmp (argv[i], "-pass-exit-codes"))
        {
          pass_exit_codes = 1;
          n_switches++;
        }
      else if (! strcmp (argv[i], "-print-search-dirs"))
        print_search_dirs = 1;
      else if (! strcmp (argv[i], "-print-libgcc-file-name"))
        print_file_name = "libgcc.a";
      else if (! strncmp (argv[i], "-print-file-name=", 17))
        print_file_name = argv[i] + 17;
      else if (! strncmp (argv[i], "-print-prog-name=", 17))
        print_prog_name = argv[i] + 17;
      else if (! strcmp (argv[i], "-print-multi-lib"))
        print_multi_lib = 1;
      else if (! strcmp (argv[i], "-print-multi-directory"))
        print_multi_directory = 1;
      else if (! strncmp (argv[i], "-Wa,", 4))
        {
          int prev, j;
          prev = 4;
          for (j = 4; argv[i][j]; j++)
            if (argv[i][j] == ',')
              {
                add_assembler_option (argv[i] + prev, j - prev);
                prev = j + 1;
              }
          add_assembler_option (argv[i] + prev, j - prev);
        }
      else if (! strncmp (argv[i], "-Wp,", 4))
        {
          int prev, j;
          prev = 4;
          for (j = 4; argv[i][j]; j++)
            if (argv[i][j] == ',')
              {
                add_preprocessor_option (argv[i] + prev, j - prev);
                prev = j + 1;
              }
          add_preprocessor_option (argv[i] + prev, j - prev);
        }
      else if (strncmp (argv[i], "-Wl,", 4) == 0)
        {
          int j;
          for (j = 3; argv[i][j]; j++)
            n_infiles += (argv[i][j] == ',');
        }
      else if (strcmp (argv[i], "-Xlinker") == 0)
        {
          if (i + 1 == argc)
            fatal ("argument to `-Xlinker' is missing");
          n_infiles++;
          i++;
        }
      else if (argv[i][0] == '-' && argv[i][1] != 0)
        {
          register const char *p = &argv[i][1];
          register int c = *p;
          switch (c)
            {
            case 'b':
              n_switches++;
              if (p[1] == 0 && i + 1 == argc)
                fatal ("argument to `-b' is missing");
              if (p[1] == 0)
                spec_machine = argv[++i];
              else
                spec_machine = p + 1;
              warn_std_ptr = &warn_std;
              break;
            case 'B':
              {
                const char *value;
                if (p[1] == 0 && i + 1 == argc)
                  fatal ("argument to `-B' is missing");
                if (p[1] == 0)
                  value = argv[++i];
                else
                  value = p + 1;
                {
                  int len = strlen (value);
                  if ((len == 7
                       || (len > 7
                           && (((value[len - 8]) == '/'))))
                      && strncmp (value + len - 7, "stage", 5) == 0
                      && ((unsigned) (value[len - 2]) - '0' <= 9)
                      && (((value[len - 1]) == '/')))
                    {
                      if (len == 7)
                        add_prefix (&include_prefixes, "include", ((void *) 0),
                                    128, 0, ((void *) 0));
                      else
                        {
                          char *string = xmalloc (len + 1);
                          strncpy (string, value, len-7);
                          strcpy (string+len-7, "include");
                          add_prefix (&include_prefixes, string, ((void *) 0),
                                      128, 0, ((void *) 0));
                        }
                    }
                }
                add_prefix (&exec_prefixes, value, ((void *) 0),
                            128, 0, &warn_B);
                add_prefix (&startfile_prefixes, value, ((void *) 0),
                            128, 0, &warn_B);
                add_prefix (&include_prefixes, concat (value, "include",
                                                       ((void *) 0)),
                            ((void *) 0),
                            128, 0, ((void *) 0));
                n_switches++;
              }
              break;
            case 'v':
              n_switches++;
              if (p[1] != 0)
                break;
              verbose_flag++;
              break;
            case 'V':
              n_switches++;
              if (p[1] == 0 && i + 1 == argc)
                fatal ("argument to `-V' is missing");
              if (p[1] == 0)
                spec_version = argv[++i];
              else
                spec_version = p + 1;
              warn_std_ptr = &warn_std;
              {
                const char *v = compiler_version;
                while (! ((unsigned) (*v) - '0' <= 9))
                  v++;
                if (v > compiler_version && v[-1] != '-')
                  fatal ("invalid version number format");
                while (((unsigned) (*v) - '0' <= 9))
                  v++;
                if (*v != '.')
                  fatal ("invalid version number format");
                v++;
                while (((unsigned) (*v) - '0' <= 9))
                  v++;
                if (*v != 0 && *v != ' ' && *v != '.' && *v != '-')
                  fatal ("invalid version number format");
              }
              if (p[1] == 0)
                {
                  n_switches++;
                }
            case 'o':
              have_o = 1;
            default:
            normal_switch:
              if (((c) == 'D' || (c) == 'U' || (c) == 'o' || (c) == 'e' || (c) 
== 'T' || (c) == 'u' || (c) == 'I' || (c) == 'm' || (c) == 'x' || (c) == 'L' 
|| (c) == 'A' || (c) == 'V' || (c) == 'B' || (c) == 'b') > (p[1] != 0))
                i += ((c) == 'D' || (c) == 'U' || (c) == 'o' || (c) == 'e' || 
(c) == 'T' || (c) == 'u' || (c) == 'I' || (c) == 'm' || (c) == 'x' || (c) == 
'L' || (c) == 'A' || (c) == 'V' || (c) == 'B' || (c) == 'b') - (p[1] != 0);
              else if ((!strcmp (p, "Tdata") || !strcmp (p, "Ttext") || 
!strcmp (p, "Tbss") || !strcmp (p, "include") || !strcmp (p, "imacros") || 
!strcmp (p, "aux-info") || !strcmp (p, "idirafter") || !strcmp (p, "iprefix") 
|| !strcmp (p, "iwithprefix") || !strcmp (p, "iwithprefixbefore") || !strcmp 
(p, "isystem") || !strcmp (p, "specs")))
                i += (!strcmp (p, "Tdata") || !strcmp (p, "Ttext") || !strcmp 
(p, "Tbss") || !strcmp (p, "include") || !strcmp (p, "imacros") || !strcmp (p, 
"aux-info") || !strcmp (p, "idirafter") || !strcmp (p, "iprefix") || !strcmp 
(p, "iwithprefix") || !strcmp (p, "iwithprefixbefore") || !strcmp (p, 
"isystem") || !strcmp (p, "specs"));
            }
        }
    }
    {
      if (gcc_exec_prefix)
        {
          char *gcc_exec_tooldir_prefix
            = concat (gcc_exec_prefix, spec_machine, dir_separator_str,
                      spec_version, dir_separator_str, tooldir_prefix, ((void 
*) 0));
          add_prefix (&exec_prefixes,
                      concat (gcc_exec_tooldir_prefix, "bin",
                              dir_separator_str, ((void *) 0)),
                      ((void *) 0), 255, 0, ((void *) 0));
        }
      tooldir_prefix = concat (standard_exec_prefix, spec_machine,
                               dir_separator_str, spec_version,
                               dir_separator_str, tooldir_prefix, ((void *) 
0));
    }
  add_prefix (&exec_prefixes,
              concat (tooldir_prefix, "bin", dir_separator_str, ((void *) 0)),
              "BINUTILS", 255, 0, ((void *) 0));
}









Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]