This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Your recent reload changes
- To: rth at cygnus dot com
- Subject: Your recent reload changes
- From: Jeffrey A Law <law at cygnus dot com>
- Date: Tue, 22 Aug 2000 09:45:01 -0600
- cc: gcc at gcc dot gnu dot org
- Reply-To: law at cygnus dot com
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));
}