Bug installing 2.95.1 on Solaris
mterribile@lucent.com
mterribile@lucent.com
Mon Oct 18 06:53:00 GMT 1999
I attempted to bootstrap 2.95.1 as a second compiler on a system whose
existing GCC is 2.7.2 . The result was an error in compiling collect2.c:
../libiberty/libiberty.a
gcc -DIN_GCC -DHAIFA -DSVR4 -g -DHAVE_CONFIG_H -I. -I../../gcc-2.95.1/gcc -I../../gcc-2.95.1/gcc/config -I../../gcc-2.95.1/gcc/../include \
-DTARGET_MACHINE=\"sparc-sun-solaris2.6\" \
-c `echo ../../gcc-2.95.1/gcc/collect2.c | sed 's,^\./,,'`
In file included from ../../gcc-2.95.1/gcc/system.h:153,
from ../../gcc-2.95.1/gcc/collect2.c:29:
/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/param.h:187: warning: `NBBY' redefined
/usr/include/sys/select.h:45: warning: this is the location of the previous definition
../../gcc-2.95.1/gcc/collect2.c: In function `my_strsignal':
../../gcc-2.95.1/gcc/collect2.c:364: `sys_siglist' undeclared (first use this function)
../../gcc-2.95.1/gcc/collect2.c:364: (Each undeclared identifier is reported only once
../../gcc-2.95.1/gcc/collect2.c:364: for each function it appears in.)
make[2]: *** [collect2.o] Error 1
make[2]: Leaving directory `/home/markt/gcc-obj/gcc'
make[1]: *** [bootstrap] Error 2
make[1]: Leaving directory `/home/markt/gcc-obj/gcc'
make: *** [bootstrap] Error 2
Here's the machine's info:
sculpin$ uname -a
SunOS sculpin 5.6 Generic_105181-12 sun4u sparc SUNW,Ultra-1
sculpin$ whence gcc
/opt/gnu/bin/gcc
sculpin$ gcc -v
Reading specs from /opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/specs
gcc version 2.7.2
The configuration was run with the command
../gcc-2.95.1/configure --prefix=$HOME/gcc
and the directories all exist.
The config.cache file and a .i for collect2.c follow.
Mark Terribile
--------------------------------- config.cache -------------------------------
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs. It is not useful on other systems.
# If it contains results you don't want to keep, you may remove or edit it.
#
# By default, configure uses ./config.cache as the cache file,
# creating it if it does not exist already. You can give configure
# the --cache-file=FILE option to use a different cache file; that is
# what configure does when it calls configure scripts in
# subdirectories, so they share the cache.
# Giving --cache-file=/dev/null disables caching, for debugging configure.
# config.status only pays attention to the cache file if you give it the
# --recheck option to rerun configure.
#
ac_cv_type_size_t=${ac_cv_type_size_t='yes'}
gcc_cv_c_have_stringify=${gcc_cv_c_have_stringify='yes'}
ac_cv_prog_cc_works=${ac_cv_prog_cc_works='yes'}
gcc_cv_nm=${gcc_cv_nm='nm'}
ac_cv_func_getcwd=${ac_cv_func_getcwd='yes'}
ac_cv_func_setrlimit=${ac_cv_func_setrlimit='yes'}
ac_cv_lib_fl_yywrap=${ac_cv_lib_fl_yywrap='yes'}
ac_cv_header_sys_times_h=${ac_cv_header_sys_times_h='yes'}
ac_cv_header_stdlib_h=${ac_cv_header_stdlib_h='yes'}
gcc_cv_prog_LN=${gcc_cv_prog_LN='ln'}
gcc_cv_as_subsections=${gcc_cv_as_subsections='.subsection'}
gcc_cv_decl_needed_getenv=${gcc_cv_decl_needed_getenv='no'}
ac_cv_func_strtoul=${ac_cv_func_strtoul='yes'}
ac_cv_header_sys_time_h=${ac_cv_header_sys_time_h='yes'}
ac_cv_header_nl_types_h=${ac_cv_header_nl_types_h='yes'}
ac_cv_lib_cposix_strerror=${ac_cv_lib_cposix_strerror='no'}
gcc_cv_decl_needed_rindex=${gcc_cv_decl_needed_rindex='no'}
ac_cv_prog_cc_g=${ac_cv_prog_cc_g='yes'}
gcc_cv_decl_needed_strstr=${gcc_cv_decl_needed_strstr='no'}
gcc_cv_decl_needed_putc_unlocked=${gcc_cv_decl_needed_putc_unlocked='yes'}
ac_cv_path_install=${ac_cv_path_install='/usr/bin/install -c'}
ac_cv_func_setlocale=${ac_cv_func_setlocale='yes'}
gcc_cv_decl_needed_fputs_unlocked=${gcc_cv_decl_needed_fputs_unlocked='yes'}
gcc_cv_decl_needed_bcmp=${gcc_cv_decl_needed_bcmp='no'}
gcc_cv_decl_needed_free=${gcc_cv_decl_needed_free='no'}
ac_cv_func_mmap_fixed_mapped=${ac_cv_func_mmap_fixed_mapped='yes'}
gcc_cv_decl_needed_abort=${gcc_cv_decl_needed_abort='no'}
gcc_cv_decl_needed_index=${gcc_cv_decl_needed_index='no'}
ac_cv_decl_sys_siglist=${ac_cv_decl_sys_siglist='yes'}
ac_cv_header_sys_wait_h=${ac_cv_header_sys_wait_h='yes'}
ac_cv_prog_RANLIB=${ac_cv_prog_RANLIB='ranlib'}
ac_cv_func_strcasecmp=${ac_cv_func_strcasecmp='yes'}
gcc_cv_decl_needed_getwd=${gcc_cv_decl_needed_getwd='no'}
ac_cv_func___argz_count=${ac_cv_func___argz_count='no'}
gcc_cv_decl_needed_bcopy=${gcc_cv_decl_needed_bcopy='no'}
ac_cv_func_rindex=${ac_cv_func_rindex='yes'}
ac_cv_func_bsearch=${ac_cv_func_bsearch='yes'}
ac_cv_header_fcntl_h=${ac_cv_header_fcntl_h='yes'}
ac_cv_c_const=${ac_cv_c_const='yes'}
ac_cv_func_putc_unlocked=${ac_cv_func_putc_unlocked='no'}
ac_cv_prog_YACC=${ac_cv_prog_YACC='bison -y'}
gcc_cv_as_gas_srcdir=${gcc_cv_as_gas_srcdir='./gas'}
gcc_cv_decl_needed_atof=${gcc_cv_decl_needed_atof='no'}
gcc_cv_decl_needed_realloc=${gcc_cv_decl_needed_realloc='no'}
ac_cv_func_fputs_unlocked=${ac_cv_func_fputs_unlocked='no'}
ac_cv_func_bcmp=${ac_cv_func_bcmp='yes'}
gcc_cv_decl_needed_calloc=${gcc_cv_decl_needed_calloc='no'}
ac_cv_func_index=${ac_cv_func_index='yes'}
ac_cv_header_sys_resource_h=${ac_cv_header_sys_resource_h='yes'}
ac_cv_prog_CC=${ac_cv_prog_CC='gcc'}
gcc_cv_as_alignment_features=${gcc_cv_as_alignment_features='.p2align including maximum skip'}
ac_cv_func_munmap=${ac_cv_func_munmap='yes'}
ac_cv_header_sys_stat_h=${ac_cv_header_sys_stat_h='yes'}
gcc_cv_as_instructions=${gcc_cv_as_instructions=''}
gcc_cv_decl_needed_bzero=${gcc_cv_decl_needed_bzero='no'}
gcc_cv_mkdir_takes_one_arg=${gcc_cv_mkdir_takes_one_arg='no'}
ac_cv_func_sysconf=${ac_cv_func_sysconf='yes'}
ac_cv_header_limits_h=${ac_cv_header_limits_h='yes'}
ac_cv_func_alloca_works=${ac_cv_func_alloca_works='yes'}
ac_cv_header_alloca_h=${ac_cv_header_alloca_h='no'}
gcc_cv_decl_needed_getrlimit=${gcc_cv_decl_needed_getrlimit='yes'}
gcc_cv_decl_needed_strerror=${gcc_cv_decl_needed_strerror='no'}
ac_cv_func_atoll=${ac_cv_func_atoll='no'}
gcc_cv_decl_needed_atol=${gcc_cv_decl_needed_atol='no'}
ac_cv_func_gettimeofday=${ac_cv_func_gettimeofday='yes'}
ac_cv_func_bcopy=${ac_cv_func_bcopy='yes'}
ac_cv_header_stab_h=${ac_cv_header_stab_h='yes'}
ac_cv_header_stdc=${ac_cv_header_stdc='yes'}
gcc_cv_c_volatile=${gcc_cv_c_volatile='yes'}
ac_cv_func___argz_stringify=${ac_cv_func___argz_stringify='no'}
ac_cv_func_strrchr=${ac_cv_func_strrchr='yes'}
ac_cv_header_strings_h=${ac_cv_header_strings_h='yes'}
ac_cv_header_time=${ac_cv_header_time='yes'}
gcc_cv_decl_needed_sbrk=${gcc_cv_decl_needed_sbrk='no'}
ac_cv_func_vprintf=${ac_cv_func_vprintf='yes'}
ac_cv_prog_make_make_set=${ac_cv_prog_make_make_set='yes'}
nls_cv_header_intl=${nls_cv_header_intl='intl/libintl.h'}
ac_cv_func___argz_next=${ac_cv_func___argz_next='no'}
ac_cv_func_setenv=${ac_cv_func_setenv='yes'}
ac_cv_header_locale_h=${ac_cv_header_locale_h='yes'}
ac_cv_c_inline=${ac_cv_c_inline='inline'}
ac_cv_header_sys_param_h=${ac_cv_header_sys_param_h='yes'}
ac_cv_header_unistd_h=${ac_cv_header_unistd_h='yes'}
ac_cv_header_string_h=${ac_cv_header_string_h='yes'}
ac_cv_func_kill=${ac_cv_func_kill='yes'}
ac_cv_func_strchr=${ac_cv_func_strchr='yes'}
gcc_cv_prog_LN_S=${gcc_cv_prog_LN_S='ln -s'}
gcc_cv_decl_needed_strsignal=${gcc_cv_decl_needed_strsignal='yes'}
gcc_cv_decl_needed_malloc=${gcc_cv_decl_needed_malloc='no'}
ac_cv_func_isascii=${ac_cv_func_isascii='yes'}
ac_cv_func_bzero=${ac_cv_func_bzero='yes'}
ac_cv_func_popen=${ac_cv_func_popen='yes'}
ac_cv_header_time_h=${ac_cv_header_time_h='yes'}
gcc_cv_header_string=${gcc_cv_header_string='yes'}
ac_cv_header_pthread_h=${ac_cv_header_pthread_h='yes'}
ac_cv_prog_gcc=${ac_cv_prog_gcc='yes'}
ac_cv_prog_cc_cross=${ac_cv_prog_cc_cross='no'}
am_cv_val_LC_MESSAGES=${am_cv_val_LC_MESSAGES='yes'}
ac_cv_type_off_t=${ac_cv_type_off_t='yes'}
ac_cv_func_getrlimit=${ac_cv_func_getrlimit='yes'}
ac_cv_func_strerror=${ac_cv_func_strerror='yes'}
ac_cv_header_sys_file_h=${ac_cv_header_sys_file_h='yes'}
gcc_cv_header_inttypes_h=${gcc_cv_header_inttypes_h='no'}
ac_cv_func_vfork_works=${ac_cv_func_vfork_works='yes'}
ac_cv_header_vfork_h=${ac_cv_header_vfork_h='no'}
ac_cv_type_pid_t=${ac_cv_type_pid_t='yes'}
ac_cv_header_argz_h=${ac_cv_header_argz_h='no'}
ac_cv_prog_CPP=${ac_cv_prog_CPP='gcc -E'}
ac_cv_prog_AWK=${ac_cv_prog_AWK='awk'}
ac_cv_header_malloc_h=${ac_cv_header_malloc_h='no'}
ac_cv_func_getpagesize=${ac_cv_func_getpagesize='yes'}
gcc_cv_decl_needed_setrlimit=${gcc_cv_decl_needed_setrlimit='yes'}
gcc_cv_decl_needed_getcwd=${gcc_cv_decl_needed_getcwd='no'}
ac_cv_header_thread_h=${ac_cv_header_thread_h='no'}
gcc_cv_as=${gcc_cv_as='/usr/bin/as'}
ac_cv_func_strsignal=${ac_cv_func_strsignal='no'}
ac_cv_func_atoq=${ac_cv_func_atoq='no'}
ac_cv_header_stddef_h=${ac_cv_header_stddef_h='yes'}
ac_cv_prog_gnat=${ac_cv_prog_gnat='no'}
ac_cv_header_direct_h=${ac_cv_header_direct_h='no'}
gcc_cv_func_printf_ptr=${gcc_cv_func_printf_ptr='yes'}
nls_cv_header_libgt=${nls_cv_header_libgt='intl/libgettext.h'}
ac_cv_func_strdup=${ac_cv_func_strdup='yes'}
ac_cv_func_putenv=${ac_cv_func_putenv='yes'}
ac_cv_prog_LEX=${ac_cv_prog_LEX='flex'}
ac_cv_func_stpcpy=${ac_cv_func_stpcpy='no'}
ac_cv_func_fputc_unlocked=${ac_cv_func_fputc_unlocked='no'}
--------------------------------- collect2.i -------------------------------
# 1 "../gcc-2.95.1/gcc/collect2.c"
# 1 "../gcc-2.95.1/gcc/config.h" 1
# 1 "../gcc-2.95.1/gcc/auto-host.h" 1
# 2 "../gcc-2.95.1/gcc/config.h" 2
# 1 "../gcc-2.95.1/gcc/gansidecl.h" 1
# 1 "../gcc-2.95.1/gcc/../include/ansidecl.h" 1
# 161 "../gcc-2.95.1/gcc/../include/ansidecl.h"
# 28 "../gcc-2.95.1/gcc/gansidecl.h" 2
# 5 "../gcc-2.95.1/gcc/config.h" 2
# 1 "../gcc-2.95.1/gcc/config/i386/xm-i386.h" 1
# 1 "../gcc-2.95.1/gcc/tm.h" 1
# 1 "../gcc-2.95.1/gcc/config/i386/i386.h" 1
struct processor_costs {
int add;
int lea;
int shift_var;
int shift_const;
int mult_init;
int mult_bit;
int divide;
};
extern struct processor_costs *ix86_cost;
extern int target_flags;
extern const int x86_use_leave, x86_push_memory, x86_zero_extend_with_and;
extern const int x86_use_bit_test, x86_cmove, x86_deep_branch;
extern const int x86_unroll_strlen, x86_use_q_reg, x86_use_any_reg;
extern const int x86_double_with_add;
# 219 "../gcc-2.95.1/gcc/config/i386/i386.h"
enum processor_type
{PROCESSOR_I386,
PROCESSOR_I486,
PROCESSOR_PENTIUM,
PROCESSOR_PENTIUMPRO,
PROCESSOR_K6};
extern enum processor_type ix86_cpu;
extern int ix86_arch;
# 272 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 366 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 461 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 509 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 549 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 673 "../gcc-2.95.1/gcc/config/i386/i386.h"
enum reg_class
{
NO_REGS,
AREG, DREG, CREG, BREG,
AD_REGS,
Q_REGS,
SIREG, DIREG,
INDEX_REGS,
GENERAL_REGS,
FP_TOP_REG, FP_SECOND_REG,
FLOAT_REGS,
ALL_REGS, LIM_REG_CLASSES
};
# 836 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 852 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 913 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 935 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 974 "../gcc-2.95.1/gcc/config/i386/i386.h"
typedef struct i386_args {
int words;
int nregs;
int regno;
} CUMULATIVE_ARGS;
# 1173 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1332 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1459 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1493 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1561 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1595 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1654 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 1844 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 2005 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 2118 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 2295 "../gcc-2.95.1/gcc/config/i386/i386.h"
extern struct rtx_def *(*i386_compare_gen)(), *(*i386_compare_gen_eq)();
# 2427 "../gcc-2.95.1/gcc/config/i386/i386.h"
extern char *hi_reg_name[];
extern char *qi_reg_name[];
extern char *qi_high_reg_name[];
# 2626 "../gcc-2.95.1/gcc/config/i386/i386.h"
# 2660 "../gcc-2.95.1/gcc/config/i386/i386.h"
extern void override_options ();
extern void order_regs_for_local_alloc ();
extern char *output_strlen_unroll ();
extern struct rtx_def *i386_sext16_if_const ();
extern int i386_aligned_p ();
extern int i386_cc_probably_useless_p ();
extern int i386_valid_decl_attribute_p ();
extern int i386_valid_type_attribute_p ();
extern int i386_return_pops_args ();
extern int i386_comp_type_attributes ();
extern void init_cumulative_args ();
extern void function_arg_advance ();
extern struct rtx_def *function_arg ();
extern int function_arg_partial_nregs ();
extern char *output_strlen_unroll ();
extern char *singlemove_string ();
extern char *output_move_double ();
extern char *output_move_pushmem ();
extern int standard_80387_constant_p ();
extern char *output_move_const_single ();
extern int symbolic_operand ();
extern int call_insn_operand ();
extern int expander_call_insn_operand ();
extern int symbolic_reference_mentioned_p ();
extern int ix86_expand_binary_operator ();
extern int ix86_binary_operator_ok ();
extern int ix86_expand_unary_operator ();
extern int ix86_unary_operator_ok ();
extern void emit_pic_move ();
extern void function_prologue ();
extern int simple_386_epilogue ();
extern void function_epilogue ();
extern int legitimate_address_p ();
extern struct rtx_def *legitimize_pic_address ();
extern struct rtx_def *legitimize_address ();
extern void print_operand ();
extern void print_operand_address ();
extern void notice_update_cc ();
extern void split_di ();
extern int binary_387_op ();
extern int shift_op ();
extern int VOIDmode_compare_op ();
extern char *output_387_binary_op ();
extern char *output_fix_trunc ();
extern void output_float_extend ();
extern char *output_float_compare ();
extern char *output_fp_cc0_set ();
extern void save_386_machine_status ();
extern void restore_386_machine_status ();
extern void clear_386_stack_locals ();
extern struct rtx_def *assign_386_stack_local ();
extern int is_mul ();
extern int is_div ();
extern int last_to_set_cc ();
extern int doesnt_set_condition_code ();
extern int sets_condition_code ();
extern int str_immediate_operand ();
extern int is_fp_insn ();
extern int is_fp_dest ();
extern int is_fp_store ();
extern int agi_dependent ();
extern int reg_mentioned_in_mem ();
extern char *output_int_conditional_move ();
extern char *output_fp_conditional_move ();
extern int ix86_can_use_return_insn_p ();
extern int small_shift_operand ();
extern char *output_ashl ();
extern int memory_address_info ();
extern char *ix86_cpu_string;
extern char *ix86_arch_string;
extern char *i386_reg_alloc_order;
extern char *i386_regparm_string;
extern char *i386_align_loops_string;
extern char *i386_align_jumps_string;
extern char *i386_align_funcs_string;
extern char *i386_preferred_stack_boundary_string;
extern char *i386_branch_cost_string;
extern int i386_regparm;
extern int i386_align_loops;
extern int i386_align_jumps;
extern int i386_align_funcs;
extern int i386_preferred_stack_boundary;
extern int i386_branch_cost;
extern char *hi_reg_name[];
extern char *qi_reg_name[];
extern char *qi_high_reg_name[];
extern enum reg_class regclass_map[];
extern struct rtx_def *i386_compare_op0;
extern struct rtx_def *i386_compare_op1;
extern int optimize;
extern int obey_regdecls;
extern struct rtx_def *force_operand ();
# 5 "../gcc-2.95.1/gcc/tm.h" 2
# 1 "../gcc-2.95.1/gcc/config/i386/att.h" 1
# 1 "../gcc-2.95.1/gcc/config/i386/unix.h" 1
# 191 "../gcc-2.95.1/gcc/config/i386/unix.h"
# 22 "../gcc-2.95.1/gcc/config/i386/att.h" 2
# 50 "../gcc-2.95.1/gcc/config/i386/att.h"
# 8 "../gcc-2.95.1/gcc/tm.h" 2
# 1 "../gcc-2.95.1/gcc/config/svr4.h" 1
# 170 "../gcc-2.95.1/gcc/config/svr4.h"
# 181 "../gcc-2.95.1/gcc/config/svr4.h"
# 205 "../gcc-2.95.1/gcc/config/svr4.h"
# 1 "../gcc-2.95.1/gcc/config/dbxelf.h" 1
# 99 "../gcc-2.95.1/gcc/config/dbxelf.h"
# 272 "../gcc-2.95.1/gcc/config/svr4.h" 2
extern void text_section ();
# 506 "../gcc-2.95.1/gcc/config/svr4.h"
# 517 "../gcc-2.95.1/gcc/config/svr4.h"
# 528 "../gcc-2.95.1/gcc/config/svr4.h"
# 580 "../gcc-2.95.1/gcc/config/svr4.h"
# 613 "../gcc-2.95.1/gcc/config/svr4.h"
# 659 "../gcc-2.95.1/gcc/config/svr4.h"
# 719 "../gcc-2.95.1/gcc/config/svr4.h"
# 742 "../gcc-2.95.1/gcc/config/svr4.h"
# 766 "../gcc-2.95.1/gcc/config/svr4.h"
# 787 "../gcc-2.95.1/gcc/config/svr4.h"
# 811 "../gcc-2.95.1/gcc/config/svr4.h"
# 861 "../gcc-2.95.1/gcc/config/svr4.h"
# 924 "../gcc-2.95.1/gcc/config/svr4.h"
# 11 "../gcc-2.95.1/gcc/tm.h" 2
# 1 "../gcc-2.95.1/gcc/config/i386/freebsd-elf.h" 1
# 137 "../gcc-2.95.1/gcc/config/i386/freebsd-elf.h"
# 244 "../gcc-2.95.1/gcc/config/i386/freebsd-elf.h"
# 14 "../gcc-2.95.1/gcc/tm.h" 2
# 1 "../gcc-2.95.1/gcc/config/i386/perform.h" 1
# 40 "../gcc-2.95.1/gcc/config/i386/perform.h"
# 52 "../gcc-2.95.1/gcc/config/i386/perform.h"
# 63 "../gcc-2.95.1/gcc/config/i386/perform.h"
# 75 "../gcc-2.95.1/gcc/config/i386/perform.h"
# 98 "../gcc-2.95.1/gcc/config/i386/perform.h"
# 17 "../gcc-2.95.1/gcc/tm.h" 2
# 43 "../gcc-2.95.1/gcc/config/i386/xm-i386.h" 2
# 8 "../gcc-2.95.1/gcc/config.h" 2
# 1 "../gcc-2.95.1/gcc/hwint.h" 1
# 81 "../gcc-2.95.1/gcc/hwint.h"
# 11 "../gcc-2.95.1/gcc/config.h" 2
# 28 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "../gcc-2.95.1/gcc/system.h" 1
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdarg.h" 1 3
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 1 3
# 19 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 3
typedef void * __gnuc_va_list;
# 50 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 3
# 89 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 3
void va_end (__gnuc_va_list);
enum __va_type_classes {
__no_type_class = -1,
__void_type_class,
__integer_type_class,
__char_type_class,
__enumeral_type_class,
__boolean_type_class,
__pointer_type_class,
__reference_type_class,
__offset_type_class,
__real_type_class,
__complex_type_class,
__function_type_class,
__method_type_class,
__record_type_class,
__union_type_class,
__array_type_class,
__string_type_class,
__set_type_class,
__file_type_class,
__lang_type_class
};
# 176 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 3
# 201 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/va-sparc.h" 3
# 30 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdarg.h" 2 3
# 100 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 169 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdarg.h" 3
# 27 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdio.h" 1 3
#pragma ident "@(#)stdio.h 1.37 95/08/29 SMI"
# 1 "/usr/include/sys/feature_tests.h" 1 3
#pragma ident "@(#)feature_tests.h 1.13 97/06/26 SMI"
# 17 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdio.h" 2 3
typedef unsigned int size_t;
typedef long fpos_t;
typedef struct
{
int _cnt;
unsigned char *_ptr;
unsigned char *_base;
unsigned char _flag;
unsigned char _file;
} FILE;
extern FILE __iob[20 ];
extern FILE *_lastbuf;
extern unsigned char *_bufendtab[];
extern unsigned char _sibuf[], _sobuf[];
extern int remove(const char *);
extern int rename(const char *, const char *);
extern FILE *tmpfile(void);
extern char *tmpnam(char *);
extern int fclose(FILE *);
extern int fflush(FILE *);
extern FILE *fopen(const char *, const char *);
extern FILE *freopen(const char *, const char *, 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 vfprintf(FILE *, const char *, void *);
extern int vprintf(const char *, void *);
extern int vsprintf(char *, const char *, void *);
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 size_t fread(void *, size_t, size_t, FILE *);
extern size_t fwrite(const void *, size_t, size_t, FILE *);
extern int fgetpos(FILE *, fpos_t *);
extern int fseek(FILE *, long, int);
extern int fsetpos(FILE *, const fpos_t *);
extern long ftell(FILE *);
extern void rewind(FILE *);
extern void clearerr(FILE *);
extern int feof(FILE *);
extern int ferror(FILE *);
extern void perror(const char *);
extern int __filbuf(FILE *);
extern int __flsbuf(int, FILE *);
extern FILE *fdopen(int, const char *);
extern char *ctermid(char *);
extern int fileno(FILE *);
# 237 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdio.h" 3
extern FILE *popen(const char *, const char *);
extern char *cuserid(char *);
extern char *tempnam(const char *, const char *);
extern int getopt(int, char *const *, const char *);
extern int getsubopt(char **, char *const *, char **);
extern char *optarg;
extern int optind, opterr, optopt;
extern int getw(FILE *);
extern int putw(int, FILE *);
extern int pclose(FILE *);
# 341 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdio.h" 3
# 395 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdio.h" 3
# 32 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/ctype.h" 1 3
#pragma ident "@(#)ctype.h 1.19 95/01/28 SMI"
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 tolower(int);
extern int toupper(int);
extern int isascii(int);
extern int toascii(int);
extern int _tolower(int);
extern int _toupper(int);
extern unsigned char __ctype[];
# 114 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/ctype.h" 3
# 64 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 1 3
#pragma ident "@(#)types.h 1.36 94/12/20 SMI"
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/isa_defs.h" 1 3
#pragma ident "@(#)isa_defs.h 1.1 93/07/01 SMI"
# 117 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/isa_defs.h" 3
# 14 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 2 3
# 1 "/usr/include/sys/machtypes.h" 1 3
#pragma ident "@(#)machtypes.h 1.11 96/04/29 SMI"
typedef struct _physadr_t { int r[1]; } *physadr_t;
typedef struct _label_t { int val[2]; } label_t;
typedef unsigned char lock_t;
# 19 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 2 3
typedef unsigned char uchar_t;
typedef unsigned short ushort_t;
typedef unsigned int uint_t;
typedef unsigned long ulong_t;
typedef char * caddr_t;
typedef long daddr_t;
typedef long off_t;
typedef short cnt_t;
typedef ulong_t paddr_t;
typedef uchar_t use_t;
typedef short sysid_t;
typedef short index_t;
typedef enum { B_FALSE, B_TRUE } boolean_t;
typedef long long longlong_t;
typedef unsigned long long u_longlong_t;
# 66 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 3
typedef longlong_t offset_t;
typedef longlong_t diskaddr_t;
# 85 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 3
typedef union {
offset_t _f;
struct {
long _u;
off_t _l;
} _p;
} lloff_t;
# 105 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 3
typedef union {
diskaddr_t _f;
struct {
long _u;
daddr_t _l;
} _p;
} lldaddr_t;
typedef ulong_t k_fltset_t;
typedef long id_t;
typedef ulong_t major_t;
typedef ulong_t minor_t;
typedef short pri_t;
typedef ushort_t o_mode_t;
typedef short o_dev_t;
typedef ushort_t o_uid_t;
typedef o_uid_t o_gid_t;
typedef short o_nlink_t;
typedef short o_pid_t;
typedef ushort_t o_ino_t;
typedef int key_t;
typedef ulong_t mode_t;
typedef long uid_t;
typedef uid_t gid_t;
typedef ulong_t nlink_t;
typedef ulong_t dev_t;
typedef ulong_t ino_t;
typedef long pid_t;
typedef int ssize_t;
typedef long time_t;
typedef long clock_t;
typedef int clockid_t;
typedef int timer_t;
typedef unsigned char unchar;
typedef unsigned short ushort;
typedef unsigned int uint;
typedef unsigned long ulong;
# 234 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 3
typedef long hostid_t;
typedef unsigned char u_char;
typedef unsigned short u_short;
typedef unsigned int u_int;
typedef unsigned long u_long;
typedef struct _quad { long val[2]; } quad;
# 1 "/usr/include/sys/select.h" 1 3
#pragma ident "@(#)select.h 1.11 96/06/20 SMI"
# 1 "/usr/include/sys/time.h" 1 3
#pragma ident "@(#)time.h 2.52 96/11/15 SMI"
struct timeval {
time_t tv_sec;
long tv_usec;
};
struct timezone {
int tz_minuteswest;
int tz_dsttime;
};
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 1 3
# 302 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 3
# 71 "/usr/include/sys/time.h" 2 3
struct itimerval {
struct timeval it_interval;
struct timeval it_value;
};
typedef struct timespec {
time_t tv_sec;
long tv_nsec;
} timespec_t;
typedef struct timespec timestruc_t;
# 204 "/usr/include/sys/time.h" 3
typedef struct itimerspec {
struct timespec it_interval;
struct timespec it_value;
} itimerspec_t;
typedef longlong_t hrtime_t;
# 318 "/usr/include/sys/time.h" 3
int adjtime(struct timeval *, struct timeval *);
int getitimer(int, struct itimerval *);
int setitimer(int, struct itimerval *, struct itimerval *);
int settimeofday(struct timeval *, void *);
hrtime_t gethrtime(void);
hrtime_t gethrvtime(void);
int gettimeofday(struct timeval *, void *);
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/time.h" 1 3
#pragma ident "@(#)time.h 1.23 95/08/28 SMI"
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;
};
extern clock_t clock(void);
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 char *strptime(const char *, const char *, struct tm *);
# 1 "/usr/include/sys/time.h" 1 3
# 414 "/usr/include/sys/time.h" 3
# 89 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/time.h" 2 3
# 1 "/usr/include/sys/siginfo.h" 1 3
#pragma ident "@(#)siginfo.h 1.39 96/06/28 SMI"
union sigval {
int sival_int;
void *sival_ptr;
};
struct sigevent {
int sigev_notify;
union {
int _sigev_signo;
void (*_sigev_notify_function)(union sigval);
} _sigev_un;
union sigval sigev_value;
int _sigev_pad1;
void *_sigev_notify_attributes;
int _sigev_pad2;
};
# 1 "/usr/include/sys/machsig.h" 1 3
#pragma ident "@(#)machsig.h 1.12 96/04/29 SMI"
# 88 "/usr/include/sys/siginfo.h" 2 3
# 1 "/usr/include/sys/time.h" 1 3
# 414 "/usr/include/sys/time.h" 3
# 160 "/usr/include/sys/siginfo.h" 2 3
# 181 "/usr/include/sys/siginfo.h" 3
typedef struct siginfo {
int si_signo;
int si_code;
int si_errno;
union {
int __pad[((128 / sizeof (int)) - 3) ];
struct {
pid_t __pid;
union {
struct {
uid_t __uid;
union sigval __value;
} __kill;
struct {
clock_t __utime;
int __status;
clock_t __stime;
} __cld;
} __pdata;
} __proc;
struct {
void *__addr;
int __trapno;
caddr_t __pc;
} __fault;
struct {
int __fd;
long __band;
} __file;
struct {
caddr_t __faddr;
timestruc_t __tstamp;
short __syscall;
char __nsysarg;
char __fault;
long __sysarg[8];
long __mstate[17];
} __prof;
} __data;
} siginfo_t;
typedef struct k_siginfo {
int si_signo;
int si_code;
int si_errno;
union {
struct {
pid_t __pid;
union {
struct {
uid_t __uid;
union sigval __value;
} __kill;
struct {
clock_t __utime;
int __status;
clock_t __stime;
} __cld;
} __pdata;
} __proc;
struct {
void *__addr;
int __trapno;
caddr_t __pc;
} __fault;
struct {
int __fd;
long __band;
} __file;
struct {
caddr_t __faddr;
timestruc_t __tstamp;
short __syscall;
char __nsysarg;
char __fault;
} __prof;
} __data;
} k_siginfo_t;
typedef struct sigqueue {
struct sigqueue *sq_next;
k_siginfo_t sq_info;
void (*sq_func)(struct sigqueue *);
void *sq_backptr;
} sigqueue_t;
# 90 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/time.h" 2 3
extern int clock_getres(clockid_t, struct timespec *);
extern int clock_gettime(clockid_t, struct timespec *);
extern int clock_settime(clockid_t, const struct timespec *);
extern int timer_create(clockid_t, struct sigevent *, timer_t *);
extern int timer_delete(timer_t);
extern int timer_getoverrun(timer_t);
extern int timer_gettime(timer_t, struct itimerspec *);
extern int timer_settime(timer_t, int, const struct itimerspec *,
struct itimerspec *);
extern int nanosleep(const struct timespec *, struct timespec *);
extern void tzset(void);
extern char *tzname[2];
extern long _sysconf(int);
extern long timezone;
extern int daylight;
extern int cftime(char *, char *, const time_t *);
extern int ascftime(char *, const char *, const struct tm *);
extern long altzone;
extern struct tm *getdate(const char *);
extern int getdate_err;
# 171 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/time.h" 3
# 249 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/time.h" 3
# 399 "/usr/include/sys/time.h" 2 3
# 1 "/usr/include/sys/select.h" 1 3
# 96 "/usr/include/sys/select.h" 3
# 405 "/usr/include/sys/time.h" 2 3
# 16 "/usr/include/sys/select.h" 2 3
typedef long fd_mask;
typedef long fds_mask;
typedef struct fd_set {
long fds_bits[((( 1024 )+(( (sizeof (fds_mask) * 8 ) )-1))/( (sizeof (fds_mask) * 8 ) )) ];
} fd_set;
extern int select(int, fd_set *, fd_set *, fd_set *, struct timeval *);
# 278 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/types.h" 2 3
# 124 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/errno.h" 1 3
#pragma ident "@(#)errno.h 1.13 95/09/10 SMI"
# 1 "/usr/include/sys/errno.h" 1 3
#pragma ident "@(#)errno.h 1.16 95/07/04 SMI"
# 17 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/errno.h" 2 3
extern int errno;
extern int errno;
# 125 "../gcc-2.95.1/gcc/system.h" 2
extern int errno;
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/string.h" 1 3
#pragma ident "@(#)string.h 1.17 95/08/28 SMI"
extern void *memcpy(void *, const void *, 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 char *strncat(char *, const char *, size_t);
extern int memcmp(const void *, const void *, size_t);
extern int strcmp(const char *, const char *);
extern int strcoll(const char *, const char *);
extern int strncmp(const char *, const char *, size_t);
extern size_t strxfrm(char *, const char *, size_t);
extern void *memchr(const void *, int, size_t);
extern char *strchr(const char *, int);
extern size_t strcspn(const char *, const char *);
extern char *strpbrk(const char *, const char *);
extern char *strrchr(const char *, int);
extern size_t strspn(const char *, const char *);
extern char *strstr(const char *, const char *);
extern char *strtok(char *, const char *);
extern void *memset(void *, int, size_t);
extern char *strerror(int);
extern size_t strlen(const char *);
extern void *memccpy(void *, const void *, int, size_t);
extern char *strdup(const char *);
extern char *strsignal(int);
extern int ffs(const int);
extern int strcasecmp(const char *, const char *);
extern int strncasecmp(const char *, const char *, size_t);
# 119 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/string.h" 3
# 132 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/usr/include/strings.h" 1 3
#pragma ident "@(#)strings.h 1.3 96/03/12 SMI"
extern int bcmp(const void *, const void *, size_t);
extern void bcopy(const void *, void *, size_t);
extern void bzero(void *, size_t);
extern char *index(const char *, int);
extern char *rindex(const char *, int);
# 62 "/usr/include/strings.h" 3
# 133 "../gcc-2.95.1/gcc/system.h" 2
# 142 "../gcc-2.95.1/gcc/system.h"
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdlib.h" 1 3
#pragma ident "@(#)stdlib.h 1.27 95/08/28 SMI"
typedef struct {
int quot;
int rem;
} div_t;
typedef struct {
long quot;
long rem;
} ldiv_t;
typedef struct {
long long quot;
long long rem;
} lldiv_t;
typedef long int wchar_t;
extern unsigned char __ctype[];
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 void *calloc(size_t, size_t);
extern void free(void *);
extern void *malloc(size_t);
extern void *realloc(void *, size_t);
extern void abort(void);
extern int atexit(void (*)(void));
extern void exit(int);
extern char *getenv(const char *);
extern int system(const char *);
extern void *bsearch(const void *, const void *, size_t, size_t,
int (*)(const void *, const void *));
extern void qsort(void *, size_t, size_t,
int (*)(const void *, const void *));
extern int abs(int);
extern div_t div(int, int);
extern long int labs(long);
extern ldiv_t ldiv(long, long);
extern int mbtowc(wchar_t *, const char *, size_t);
extern int mblen(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 double drand48(void);
extern double erand48(unsigned short *);
extern long jrand48(unsigned short *);
extern void lcong48(unsigned short *);
extern long lrand48(void);
extern long mrand48(void);
extern long nrand48(unsigned short *);
extern unsigned short *seed48(unsigned short *);
extern void srand48(long);
extern int putenv(const char *);
extern void setkey(const char *);
extern void swab(const char *, char *, int);
extern long a64l(const char *);
extern int dup2(int, int);
extern char *ecvt(double, int, int *, int *);
extern char *fcvt(double, int, int *, int *);
extern char *qecvt(long double, int, int *, int *);
extern char *qfcvt(long double, int, int *, int *);
extern char *qgcvt(long double, int, char *);
extern char *getcwd(char *, size_t);
extern char *getlogin(void);
extern int getopt(int, char *const *, const char *);
extern int getsubopt(char **, char *const *, char **);
extern char *optarg;
extern int optind, opterr, optopt;
extern char *getpass(const char *);
extern int getpw(uid_t, char *);
extern char *gcvt(double, int, char *);
extern int isatty(int);
extern char *l64a(long);
extern void *memalign(size_t, size_t);
extern char *mktemp(char *);
extern char *realpath(char *, char *);
extern char *ttyname(int);
extern int ttyslot(void);
extern void *valloc(size_t);
extern char *ptsname(int);
extern int grantpt(int);
extern int unlockpt(int);
extern long long atoll(const char *);
extern long long llabs(long long);
extern lldiv_t lldiv(long long, long long);
extern char *lltostr(long long, char *);
extern long long strtoll(const char *, char **, int);
extern unsigned long long strtoull(const char *, char **, int);
extern char *ulltostr(unsigned long long, char *);
# 282 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stdlib.h" 3
# 145 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/unistd.h" 1 3
#pragma ident "@(#)unistd.h 1.33 95/08/28 SMI"
# 1 "/usr/include/sys/unistd.h" 1 3
#pragma ident "@(#)unistd.h 1.29 96/06/05 SMI"
# 16 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/unistd.h" 2 3
extern int access(const char *, int);
extern int acct(const char *);
extern unsigned alarm(unsigned);
extern int brk(void *);
extern int chdir(const char *);
extern int chown(const char *, uid_t, gid_t);
extern int chroot(const char *);
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 void _exit(int);
extern int fattach(int, const char *);
extern int fchdir(int);
extern int fchown(int, uid_t, gid_t);
extern int fchroot(int);
extern int fdatasync(int);
extern int fdetach(const char *);
extern pid_t fork(void);
extern pid_t fork1(void);
extern long fpathconf(int, int);
extern int fsync(int);
extern int ftruncate(int, off_t);
extern char *getcwd(char *, size_t);
extern gid_t getegid(void);
extern uid_t geteuid(void);
extern gid_t getgid(void);
extern int getgroups(int, gid_t *);
extern char *getlogin(void);
extern pid_t getpgid(pid_t);
extern pid_t getpid(void);
extern pid_t getppid(void);
extern pid_t getpgrp(void);
char *gettxt(const char *, const char *);
extern pid_t getsid(pid_t);
extern uid_t getuid(void);
extern int ioctl(int, int, ...);
extern int isatty(int);
extern int link(const char *, const char *);
extern int lchown(const char *, uid_t, gid_t);
extern offset_t llseek(int, offset_t, int);
extern int lockf(int, int, long);
extern off_t lseek(int, off_t, int);
extern int mincore(caddr_t, size_t, char *);
extern int nice(int);
extern long pathconf(const char *, int);
extern int pause(void);
extern int pipe(int *);
extern ssize_t pread(int, void *, size_t, off_t);
extern void profil(unsigned short *, size_t, int, unsigned);
extern int ptrace(int, pid_t, int, int);
extern ssize_t pwrite(int, const void *, size_t, off_t);
extern ssize_t read(int, void *, unsigned);
extern int readlink(const char *, void *, int);
extern int rename(const char *, const char *);
extern int rmdir(const char *);
extern void *sbrk(int);
extern int setgid(gid_t);
extern int setegid(gid_t);
extern int setgroups(int, const gid_t *);
extern int setpgid(pid_t, pid_t);
extern pid_t setpgrp(void);
extern pid_t setsid(void);
extern int setuid(uid_t);
extern int seteuid(uid_t);
extern unsigned sleep(unsigned);
extern int stime(const time_t *);
extern int symlink(const char *, const char *);
extern void sync(void);
extern long sysconf(int);
extern pid_t tcgetpgrp(int);
extern int tcsetpgrp(int, pid_t);
extern int truncate(const char *, off_t);
extern char *ttyname(int);
extern int unlink(const char *);
extern pid_t vfork(void);
extern void vhangup(void);
extern ssize_t write(int, const void *, unsigned);
extern void yield(void);
# 448 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/unistd.h" 3
#pragma unknown_control_flow(vfork)
# 540 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/unistd.h" 3
# 149 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/param.h" 1 3
#pragma ident "@(#)param.h 1.32 95/08/28 SMI"
# 131 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/param.h" 3
# 263 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/param.h" 3
# 377 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/param.h" 3
extern long _sysconf(int);
# 153 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/limits.h" 1 3
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/syslimits.h" 1 3
#pragma ident "@(#)limits.h 1.26 95/08/24 SMI"
# 11 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/limits.h" 2 3
# 157 "../gcc-2.95.1/gcc/system.h" 2
# 199 "../gcc-2.95.1/gcc/system.h"
# 1 "/usr/include/fcntl.h" 1 3
#pragma ident "@(#)fcntl.h 1.12 96/06/17 SMI"
# 1 "/usr/include/sys/fcntl.h" 1 3
#pragma ident "@(#)fcntl.h 1.37 96/07/07 SMI"
typedef struct flock {
short l_type;
short l_whence;
off_t l_start;
off_t l_len;
long l_sysid;
pid_t l_pid;
long l_pad[4];
} flock_t;
# 162 "/usr/include/sys/fcntl.h" 3
# 174 "/usr/include/sys/fcntl.h" 3
typedef struct fshare {
short f_access;
short f_deny;
long f_id;
} fshare_t;
# 19 "/usr/include/fcntl.h" 2 3
# 42 "/usr/include/fcntl.h" 3
# 53 "/usr/include/fcntl.h" 3
extern int fcntl(int, int, ...);
extern int open(const char *, int, ...);
extern int creat(const char *, mode_t);
extern int directio(int, int);
# 89 "/usr/include/fcntl.h" 3
# 202 "../gcc-2.95.1/gcc/system.h" 2
# 1 "/usr/include/sys/wait.h" 1 3
#pragma ident "@(#)wait.h 1.20 97/03/02 SMI"
# 1 "/usr/include/sys/resource.h" 1 3
#pragma ident "@(#)resource.h 1.21 96/06/03 SMI"
typedef unsigned long rlim_t;
# 69 "/usr/include/sys/resource.h" 3
struct rlimit {
rlim_t rlim_cur;
rlim_t rlim_max;
};
# 90 "/usr/include/sys/resource.h" 3
# 107 "/usr/include/sys/resource.h" 3
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_msgsnd;
long ru_msgrcv;
long ru_nsignals;
long ru_nvcsw;
long ru_nivcsw;
};
# 144 "/usr/include/sys/resource.h" 3
extern int setrlimit(int, const struct rlimit *);
extern int getrlimit(int, struct rlimit *);
extern int getpriority(int, id_t);
extern int setpriority(int, id_t, int);
extern int getrusage(int, struct rusage *);
# 178 "/usr/include/sys/resource.h" 3
# 24 "/usr/include/sys/wait.h" 2 3
# 1 "/usr/include/sys/procset.h" 1 3
#pragma ident "@(#)procset.h 1.17 96/04/24 SMI"
typedef enum
idtype
{
P_PID,
P_PPID,
P_PGID,
P_SID,
P_CID,
P_UID,
P_GID,
P_ALL,
P_LWPID
} idtype_t;
typedef enum idop {
POP_DIFF,
POP_AND,
POP_OR,
POP_XOR
} idop_t;
typedef struct procset {
idop_t p_op;
idtype_t p_lidtype;
id_t p_lid;
idtype_t p_ridtype;
id_t p_rid;
} procset_t;
# 140 "/usr/include/sys/procset.h" 3
# 26 "/usr/include/sys/wait.h" 2 3
extern pid_t wait(int *);
extern pid_t waitpid(pid_t, int *, int);
extern int waitid(idtype_t, id_t, siginfo_t *, int);
extern pid_t wait3(int *, int, struct rusage *);
# 104 "/usr/include/sys/wait.h" 3
# 237 "../gcc-2.95.1/gcc/system.h" 2
extern int getrlimit ();
extern int setrlimit ();
extern void fatal (const char *, ...) __attribute__ ((format (__printf__, 1 , 2 ))) __attribute__ ((__noreturn__)) ;
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/stat.h" 1 3
#pragma ident "@(#)stat.h 1.26 95/08/14 SMI"
# 70 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/stat.h" 3
struct stat {
dev_t st_dev;
long st_pad1[3];
ino_t st_ino;
mode_t st_mode;
nlink_t st_nlink;
uid_t st_uid;
gid_t st_gid;
dev_t st_rdev;
long st_pad2[2];
off_t st_size;
long st_pad3;
timestruc_t st_atim;
timestruc_t st_mtim;
timestruc_t st_ctim;
long st_blksize;
long st_blocks;
char st_fstype[16 ];
long st_pad4[8];
};
extern int fstat(int, struct stat *);
extern int stat(const char *, struct stat *);
extern int lstat(const char *, struct stat *);
extern int mknod(const char *, mode_t, dev_t);
extern int fchmod(int, mode_t);
extern int chmod(const char *, mode_t);
extern int mkdir(const char *, mode_t);
extern int mkfifo(const char *, mode_t);
extern mode_t umask(mode_t);
# 195 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/stat.h" 3
# 428 "../gcc-2.95.1/gcc/system.h" 2
# 1 "../gcc-2.95.1/gcc/../include/libiberty.h" 1
extern char **buildargv (char *) ;
extern void freeargv (char **) ;
extern char **dupargv (char **) ;
extern char *basename ();
extern char *concat (const char *, ...) ;
extern int fdmatch (int fd1, int fd2) ;
extern long get_run_time (void) ;
extern char *choose_temp_base (void) ;
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)) ;
void xexit (int status) __attribute__ ((noreturn));
extern void xmalloc_set_program_name (const char *) ;
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stddef.h" 1 3
# 59 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stddef.h" 3
typedef int ptrdiff_t;
# 180 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stddef.h" 3
# 254 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stddef.h" 3
# 288 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/stddef.h" 3
# 127 "../gcc-2.95.1/gcc/../include/libiberty.h" 2
extern void * xmalloc (size_t) ;
extern void * xrealloc (void * , size_t) ;
extern void * xcalloc (size_t, size_t) ;
extern char *xstrdup (const char *) ;
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) ;
# 491 "../gcc-2.95.1/gcc/system.h" 2
# 29 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/signal.h" 1 3
#pragma ident "@(#)signal.h 1.27 95/08/30 SMI"
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/signal.h" 1 3
#pragma ident "@(#)signal.h 1.44 95/03/16 SMI"
extern long _sysconf(int);
# 89 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/signal.h" 3
typedef struct {
unsigned long __sigbits[4];
} sigset_t;
typedef struct {
unsigned long __sigbits[2];
} k_sigset_t;
struct sigaction {
int sa_flags;
union {
void (*_handler)();
void (*_sigaction)(int, siginfo_t *, void *);
} _funcptr;
sigset_t sa_mask;
int sa_resv[2];
};
struct sigaltstack {
char *ss_sp;
int ss_size;
int ss_flags;
};
typedef struct sigaltstack stack_t;
# 287 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/sys/signal.h" 3
# 15 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/signal.h" 2 3
typedef int sig_atomic_t;
extern const char **_sys_siglistp;
extern const int _sys_siglistn;
extern void (*signal(int, void (*)(int)))(int);
extern int raise(int);
extern int kill(pid_t, int);
extern int sigaction(int, const struct sigaction *, struct sigaction *);
extern int sigaddset(sigset_t *, int);
extern int sigdelset(sigset_t *, int);
extern int sigemptyset(sigset_t *);
extern int sigfillset(sigset_t *);
extern int sigismember(const sigset_t *, int);
extern int sigpending(sigset_t *);
extern int sigprocmask(int, const sigset_t *, sigset_t *);
extern int sigsuspend(const sigset_t *);
extern int gsignal(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 int (*ssignal(int, int (*)(int)))(int);
extern int sigaltstack(const stack_t *, stack_t *);
extern int sigsend(idtype_t, id_t, int);
extern int sigsendset(const procset_t *, int);
extern int sig2str(int, char *);
extern int str2sig(const char *, int *);
extern int sigwaitinfo(const sigset_t *, siginfo_t *);
extern int sigtimedwait(const sigset_t *, siginfo_t *, const struct timespec *);
extern int sigqueue(pid_t, int, const union sigval);
# 149 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/signal.h" 3
# 176 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/signal.h" 3
extern int sigwait(sigset_t *);
# 209 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/signal.h" 3
# 30 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "../gcc-2.95.1/gcc/collect2.h" 1
extern void do_tlink (char **, char **) ;
extern void collect_execute (char *, char **, char *) ;
extern void collect_exit (int) __attribute__ ((__noreturn__)) ;
extern int collect_wait (char *) ;
extern void dump_file (char *) ;
extern int file_exists (char *) ;
# 47 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "../gcc-2.95.1/gcc/../include/demangle.h" 1
extern enum demangling_styles
{
unknown_demangling = 0,
auto_demangling = (1 << 8) ,
gnu_demangling = (1 << 9) ,
lucid_demangling = (1 << 10) ,
arm_demangling = (1 << 11) ,
hp_demangling = (1 << 12) ,
edg_demangling = (1 << 13)
} current_demangling_style;
extern char *
cplus_demangle (const char *mangled, int options) ;
extern int
cplus_demangle_opname (const char *opname, char *result, int options) ;
extern const char *
cplus_mangle_opname (const char *opname, int options) ;
extern void
set_cplus_marker_for_demangling (int ch) ;
# 48 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "../gcc-2.95.1/gcc/../include/obstack.h" 1
struct _obstack_chunk
{
char *limit;
struct _obstack_chunk *prev;
char contents[4];
};
struct obstack
{
long chunk_size;
struct _obstack_chunk *chunk;
char *object_base;
char *next_free;
char *chunk_limit;
int temp;
int alignment_mask;
struct _obstack_chunk *(*chunkfun) (void *, 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;
# 338 "../gcc-2.95.1/gcc/../include/obstack.h"
# 391 "../gcc-2.95.1/gcc/../include/obstack.h"
# 402 "../gcc-2.95.1/gcc/../include/obstack.h"
# 478 "../gcc-2.95.1/gcc/../include/obstack.h"
# 587 "../gcc-2.95.1/gcc/../include/obstack.h"
# 49 "../gcc-2.95.1/gcc/collect2.c" 2
# 1 "../gcc-2.95.1/gcc/intl.h" 1
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/locale.h" 1 3
#pragma ident "@(#)locale.h 1.13 93/07/09 SMI"
# 1 "../gcc-2.95.1/gcc/libintl.h" 1
# 1 "../gcc-2.95.1/gcc/intl/libintl.h" 1
# 1 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/locale.h" 1 3
# 75 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/locale.h" 3
# 36 "../gcc-2.95.1/gcc/intl/libintl.h" 2
struct _msg_ent
{
const char *_msg;
int _msg_number;
};
extern char *gettext (const char *__msgid) ;
extern char *gettext__ (const char *__msgid) ;
extern char *dgettext (const char *__domainname, const char *__msgid) ;
extern char *dgettext__ (const char *__domainname,
const char *__msgid) ;
extern char *dcgettext (const char *__domainname, const char *__msgid,
int __category) ;
extern char *dcgettext__ (const char *__domainname,
const char *__msgid, int __category) ;
extern char *textdomain (const char *__domainname) ;
extern char *textdomain__ (const char *__domainname) ;
extern char *bindtextdomain (const char *__domainname,
const char *__dirname) ;
extern char *bindtextdomain__ (const char *__domainname,
const char *__dirname) ;
# 166 "../gcc-2.95.1/gcc/intl/libintl.h"
# 1 "../gcc-2.95.1/gcc/libintl.h" 2
# 23 "/opt/gnu/lib/gcc-lib/sparc-sun-solaris2/2.7.2/include/locale.h" 2 3
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);
# 20 "../gcc-2.95.1/gcc/intl.h" 2
# 50 "../gcc-2.95.1/gcc/collect2.c" 2
extern char *make_temp_file (char *) ;
# 72 "../gcc-2.95.1/gcc/collect2.c"
# 109 "../gcc-2.95.1/gcc/collect2.c"
# 127 "../gcc-2.95.1/gcc/collect2.c"
int do_collecting = 0;
struct id
{
struct id *next;
int sequence;
char name[1];
};
struct head
{
struct id *first;
struct id *last;
int number;
};
enum pass {
PASS_FIRST,
PASS_OBJ,
PASS_LIB,
PASS_SECOND
};
extern char *version_string;
int vflag;
static int rflag;
static int strip_flag;
int debug;
static int shared_obj;
static char *c_file;
static char *o_file;
char *ldout;
static char *output_file;
static char *nm_file_name;
static char *strip_file_name;
char *c_file_name;
static char *initname, *fininame;
static struct head constructors;
static struct head destructors;
static struct head frame_tables;
struct obstack temporary_obstack;
struct obstack permanent_obstack;
char * temporary_firstobj;
int pexecute_pid;
extern int prepends_underscore;
extern FILE *fdopen ();
struct prefix_list
{
char *prefix;
struct prefix_list *next;
};
struct path_prefix
{
struct prefix_list *plist;
int max_len;
char *name;
};
# 264 "../gcc-2.95.1/gcc/collect2.c"
void error (const char *, ...) __attribute__ ((format (__printf__, 1 , 2 ))) ;
void fatal (const char *, ...)
__attribute__ ((format (__printf__, 1 , 2 ))) __attribute__ ((__noreturn__)) ;
void fatal_perror (const char *, ...)
__attribute__ ((format (__printf__, 1 , 2 ))) __attribute__ ((__noreturn__)) ;
static char *my_strerror (int) ;
static const char *my_strsignal (int) ;
static void handler (int) ;
static int is_ctor_dtor (char *) ;
static char *find_a_file (struct path_prefix *, char *) ;
static void add_prefix (struct path_prefix *, char *) ;
static void prefix_from_env (char *, struct path_prefix *) ;
static void prefix_from_string (char *, struct path_prefix *) ;
static void do_wait (char *) ;
static void fork_execute (char *, char **) ;
static void maybe_unlink (char *) ;
static void add_to_list (struct head *, char *) ;
static int extract_init_priority (char *) ;
static void sort_ids (struct head *) ;
static void write_list (FILE *, char *, struct id *) ;
static void write_list_with_asm (FILE *, char *, struct id *) ;
static void write_c_file (FILE *, char *) ;
static void scan_prog_file (char *, enum pass) ;
# 327 "../gcc-2.95.1/gcc/collect2.c"
static char *
my_strerror (e)
int e;
{
return strerror (e);
# 346 "../gcc-2.95.1/gcc/collect2.c"
}
static const char *
my_strsignal (s)
int s;
{
if (s >= 0 && s < 45 )
{
return sys_siglist[s];
}
else
return ((void *)0) ;
}
void
collect_exit (status)
int status;
{
if (c_file != 0 && c_file[0])
maybe_unlink (c_file);
if (o_file != 0 && o_file[0])
maybe_unlink (o_file);
if (ldout != 0 && ldout[0])
{
dump_file (ldout);
maybe_unlink (ldout);
}
if (status != 0 && output_file != 0 && output_file[0])
maybe_unlink (output_file);
exit (status);
}
void
notice (char *msgid, ...)
{
va_list ap;
(__builtin_next_arg ( msgid ), ap = (char *) __builtin_saveregs ()) ;
vfprintf ((&__iob[2]) , ( msgid ) , ap);
((void)0) ;
}
void
fatal_perror (const char * msgid, ...)
{
int e = errno;
va_list ap;
(__builtin_next_arg ( msgid ), ap = (char *) __builtin_saveregs ()) ;
fprintf ((&__iob[2]) , "collect2: ");
vfprintf ((&__iob[2]) , ( msgid ) , ap);
fprintf ((&__iob[2]) , ": %s\n", my_strerror (e));
((void)0) ;
collect_exit (33 );
}
void
fatal (const char * msgid, ...)
{
va_list ap;
(__builtin_next_arg ( msgid ), ap = (char *) __builtin_saveregs ()) ;
fprintf ((&__iob[2]) , "collect2: ");
vfprintf ((&__iob[2]) , ( msgid ) , ap);
fprintf ((&__iob[2]) , "\n");
((void)0) ;
collect_exit (33 );
}
void
error (const char * msgid, ...)
{
va_list ap;
(__builtin_next_arg ( msgid ), ap = (char *) __builtin_saveregs ()) ;
fprintf ((&__iob[2]) , "collect2: ");
vfprintf ((&__iob[2]) , ( msgid ) , ap);
fprintf ((&__iob[2]) , "\n");
((void)0) ;
}
void
fancy_abort ()
{
fatal ("internal error");
}
static void
handler (signo)
int signo;
{
if (c_file != 0 && c_file[0])
maybe_unlink (c_file);
if (o_file != 0 && o_file[0])
maybe_unlink (o_file);
if (ldout != 0 && ldout[0])
maybe_unlink (ldout);
signal (signo, (void (*)(int))0 );
kill (getpid (), signo);
}
void *
xcalloc (size1, size2)
size_t size1, size2;
{
void * ptr = (void * ) calloc (size1, size2);
if (!ptr)
fatal ("out of memory");
return ptr;
}
void *
xmalloc (size)
size_t size;
{
void * ptr = (void * ) malloc (size);
if (!ptr)
fatal ("out of memory");
return ptr;
}
void *
xrealloc (old, size)
void * old;
size_t size;
{
register void * ptr;
if (old)
ptr = (void * ) realloc (old, size);
else
ptr = (void * ) malloc (size);
if (ptr == 0)
fatal ("virtual memory exhausted");
return ptr;
}
int
file_exists (name)
char *name;
{
return access (name, 4 ) == 0;
}
char *
xstrdup (input)
const char *input;
{
register size_t len = strlen (input) + 1;
register char *output = xmalloc (len);
memcpy (output, input, len);
return output;
}
static char *
extract_string (pp)
char **pp;
{
char *p = *pp;
int backquote = 0;
int inside = 0;
for (;;)
{
char c = *p;
if (c == '\0')
break;
++p;
if (backquote)
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = ( c ); (void) 0; }) ;
else if (! inside && c == ' ')
break;
else if (! inside && c == '\\')
backquote = 1;
else if (c == '\'')
inside = !inside;
else
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = ( c ); (void) 0; }) ;
}
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = ( '\0' ); (void) 0; }) ;
*pp = p;
return __extension__ ({ struct obstack *__o1 = ( &temporary_obstack ); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (( ((( __o1->next_free ) - (char *) 0) +__o1->alignment_mask) & ~ (__o1->alignment_mask) ) + (char *) 0) ; if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }) ;
}
void
dump_file (name)
char *name;
{
FILE *stream = fopen (name, "r");
int no_demangle = !! getenv ("COLLECT_NO_DEMANGLE");
if (stream == 0)
return;
while (1)
{
int c;
while (c = (--( stream )->_cnt < 0 ? __filbuf( stream ) : (int)*( stream )->_ptr++) ,
c != (-1) && ((1 && ((__ctype + 1)[ c ] & (01 | 02 | 04 )) ) || c == '_' || c == '$' || c == '.'))
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = ( c ); (void) 0; }) ;
if (__extension__ ({ struct obstack *__o = ( &temporary_obstack ); (unsigned) (__o->next_free - __o->object_base); }) > 0)
{
char *word, *p, *result;
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); if (__o->next_free + 1 > __o->chunk_limit) _obstack_newchunk (__o, 1); *(__o->next_free)++ = ( '\0' ); (void) 0; }) ;
word = __extension__ ({ struct obstack *__o1 = ( &temporary_obstack ); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (( ((( __o1->next_free ) - (char *) 0) +__o1->alignment_mask) & ~ (__o1->alignment_mask) ) + (char *) 0) ; if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }) ;
if (*word == '.')
++word, (--( (&__iob[2]) )->_cnt < 0 ? __flsbuf((unsigned char) ( '.' ), ( (&__iob[2]) )) : (int)(*( (&__iob[2]) )->_ptr++ = ( '.' ))) ;
p = word;
if (*p == '_' && prepends_underscore)
++p;
if (no_demangle)
result = 0;
else
result = cplus_demangle (p, (1 << 0) | (1 << 1) );
if (result)
{
int diff;
fputs (result, (&__iob[2]) );
diff = strlen (word) - strlen (result);
while (diff > 0)
--diff, (--( (&__iob[2]) )->_cnt < 0 ? __flsbuf((unsigned char) ( ' ' ), ( (&__iob[2]) )) : (int)(*( (&__iob[2]) )->_ptr++ = ( ' ' ))) ;
while (diff < 0 && c == ' ')
++diff, c = (--( stream )->_cnt < 0 ? __filbuf( stream ) : (int)*( stream )->_ptr++) ;
free (result);
}
else
fputs (word, (&__iob[2]) );
fflush ((&__iob[2]) );
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); void *__obj = ( temporary_firstobj ); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); }) ;
}
if (c == (-1) )
break;
(--( (&__iob[2]) )->_cnt < 0 ? __flsbuf((unsigned char) ( c ), ( (&__iob[2]) )) : (int)(*( (&__iob[2]) )->_ptr++ = ( c ))) ;
}
fclose (stream);
}
static int
is_ctor_dtor (s)
char *s;
{
struct names { char *name; int len; int ret; int two_underscores; };
register struct names *p;
register int ch;
register char *orig_s = s;
static struct names special[] = {
# 699 "../gcc-2.95.1/gcc/collect2.c"
{ "GLOBAL_$I$", sizeof ("GLOBAL_$I$")-1, 1, 0 },
{ "GLOBAL_$D$", sizeof ("GLOBAL_$D$")-1, 2, 0 },
{ "GLOBAL_$F$", sizeof ("GLOBAL_$F$")-1, 5, 0 },
{ "GLOBAL__FI_", sizeof ("GLOBAL__FI_")-1, 3, 0 },
{ "GLOBAL__FD_", sizeof ("GLOBAL__FD_")-1, 4, 0 },
{ ((void *)0) , 0, 0, 0 }
};
while ((ch = *s) == '_')
++s;
if (s == orig_s)
return 0;
for (p = &special[0]; p->len > 0; p++)
{
if (ch == p->name[0]
&& (!p->two_underscores || ((s - orig_s) >= 2))
&& strncmp(s, p->name, p->len) == 0)
{
return p->ret;
}
}
return 0;
}
# 781 "../gcc-2.95.1/gcc/collect2.c"
static struct path_prefix cpath, path;
static char *
find_a_file (pprefix, name)
struct path_prefix *pprefix;
char *name;
{
char *temp;
struct prefix_list *pl;
int len = pprefix->max_len + strlen (name) + 1;
if (debug)
fprintf ((&__iob[2]) , "Looking for '%s'\n", name);
temp = xmalloc (len);
if (*name == '/'
)
{
if (access (name, 1 ) == 0)
{
strcpy (temp, name);
if (debug)
fprintf ((&__iob[2]) , " - found: absolute path\n");
return temp;
}
# 849 "../gcc-2.95.1/gcc/collect2.c"
if (debug)
fprintf ((&__iob[2]) , " - failed to locate using absolute path\n");
}
else
for (pl = pprefix->plist; pl; pl = pl->next)
{
strcpy (temp, pl->prefix);
strcat (temp, name);
if (access (temp, 1 ) == 0)
return temp;
}
if (debug && pprefix->plist == ((void *)0) )
fprintf ((&__iob[2]) , " - failed: no entries in prefix list\n");
free (temp);
return 0;
}
static void
add_prefix (pprefix, prefix)
struct path_prefix *pprefix;
char *prefix;
{
struct prefix_list *pl, **prev;
int len;
if (pprefix->plist)
{
for (pl = pprefix->plist; pl->next; pl = pl->next)
;
prev = &pl->next;
}
else
prev = &pprefix->plist;
len = strlen (prefix);
if (len > pprefix->max_len)
pprefix->max_len = len;
pl = (struct prefix_list *) xmalloc (sizeof (struct prefix_list));
pl->prefix = xstrdup (prefix);
if (*prev)
pl->next = *prev;
else
pl->next = (struct prefix_list *) 0;
*prev = pl;
}
static void
prefix_from_env (env, pprefix)
char *env;
struct path_prefix *pprefix;
{
char *p;
do { ( p ) = getenv ( env ); } while (0) ;
if (p)
prefix_from_string (p, pprefix);
}
static void
prefix_from_string (p, pprefix)
char *p;
struct path_prefix *pprefix;
{
char *startp, *endp;
char *nstore = (char *) xmalloc (strlen (p) + 3);
if (debug)
fprintf ((&__iob[2]) , "Convert string '%s' into prefixes, separator = '%c'\n", p, ':' );
startp = endp = p;
while (1)
{
if (*endp == ':' || *endp == 0)
{
strncpy (nstore, startp, endp-startp);
if (endp == startp)
{
strcpy (nstore, "./");
}
else if (endp[-1] != '/')
{
nstore[endp-startp] = '/';
nstore[endp-startp+1] = 0;
}
else
nstore[endp-startp] = 0;
if (debug)
fprintf ((&__iob[2]) , " - add prefix: %s\n", nstore);
add_prefix (pprefix, nstore);
if (*endp == 0)
break;
endp = startp = endp + 1;
}
else
endp++;
}
}
int
main (argc, argv)
int argc;
char *argv[];
{
char *ld_suffix = "ld";
char *full_ld_suffix = ld_suffix;
char *real_ld_suffix = "real-ld";
char *collect_ld_suffix = "collect-ld";
char *nm_suffix = "nm";
char *full_nm_suffix = nm_suffix;
char *gnm_suffix = "gnm";
char *full_gnm_suffix = gnm_suffix;
char *strip_suffix = "strip";
char *full_strip_suffix = strip_suffix;
char *gstrip_suffix = "gstrip";
char *full_gstrip_suffix = gstrip_suffix;
char *arg;
FILE *outf;
char *ld_file_name;
char *p;
char **c_argv;
char **c_ptr;
char **ld1_argv;
char **ld1;
char **ld2_argv;
char **ld2;
char **object_lst;
char **object;
int first_file;
int num_c_args = argc+9;
setlocale (5 , "");
(void) ( "gcc" ) ;
(void) ( "gcc" ) ;
ld1 = ld1_argv = (char **) xcalloc (sizeof (char *), argc+3);
ld2 = ld2_argv = (char **) xcalloc (sizeof (char *), argc+6);
object = object_lst = (char **) xcalloc (sizeof (char *), argc);
{
int i;
for (i = 1; argv[i] != ((void *)0) ; i ++)
if (! strcmp (argv[i], "-debug"))
debug = 1;
vflag = debug;
}
output_file = "a.out";
_obstack_begin (( &temporary_obstack ), ( 0 ), 0, (void *(*) (long)) xmalloc , (void (*) (void *)) free ) ;
_obstack_begin (( &permanent_obstack ), ( 0 ), 0, (void *(*) (long)) xmalloc , (void (*) (void *)) free ) ;
temporary_firstobj = (char *) __extension__ ({ struct obstack *__h = ( &temporary_obstack ); __extension__ ({ struct obstack *__o = ( __h ); int __len = ( ( 0 ) ); if (__o->chunk_limit - __o->next_free < __len) _obstack_newchunk (__o, __len); __o->next_free += __len; (void) 0; }) ; __extension__ ({ struct obstack *__o1 = ( __h ); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (( ((( __o1->next_free ) - (char *) 0) +__o1->alignment_mask) & ~ (__o1->alignment_mask) ) + (char *) 0) ; if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }) ; }) ;
current_demangling_style = gnu_demangling;
p = getenv ("COLLECT_GCC_OPTIONS");
while (p && *p)
{
char *q = extract_string (&p);
if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
num_c_args++;
}
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); void *__obj = ( temporary_firstobj ); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); }) ;
++num_c_args;
c_ptr = c_argv = (char **) xcalloc (sizeof (char *), num_c_args);
if (argc < 2)
fatal ("no arguments");
if (signal (3 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (3 , handler);
if (signal (2 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (2 , handler);
if (signal (14 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (14 , handler);
if (signal (1 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (1 , handler);
if (signal (11 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (11 , handler);
if (signal (10 , (void (*)(int))1 ) != (void (*)(int))1 )
signal (10 , handler);
prefix_from_env ("COMPILER_PATH", &cpath);
prefix_from_env ("PATH", &path);
# 1150 "../gcc-2.95.1/gcc/collect2.c"
ld_file_name = 0;
ld_file_name = find_a_file (&cpath, real_ld_suffix);
if (ld_file_name == 0)
ld_file_name = find_a_file (&cpath, collect_ld_suffix);
if (ld_file_name == 0)
ld_file_name = find_a_file (&cpath, ld_suffix);
if (ld_file_name == 0)
ld_file_name = find_a_file (&path, full_ld_suffix);
nm_file_name = find_a_file (&cpath, gnm_suffix);
if (nm_file_name == 0)
nm_file_name = find_a_file (&path, full_gnm_suffix);
if (nm_file_name == 0)
nm_file_name = find_a_file (&cpath, nm_suffix);
if (nm_file_name == 0)
nm_file_name = find_a_file (&path, full_nm_suffix);
strip_file_name = find_a_file (&cpath, gstrip_suffix);
if (strip_file_name == 0)
strip_file_name = find_a_file (&path, full_gstrip_suffix);
if (strip_file_name == 0)
strip_file_name = find_a_file (&cpath, strip_suffix);
if (strip_file_name == 0)
strip_file_name = find_a_file (&path, full_strip_suffix);
c_file_name = getenv ("COLLECT_GCC");
if (c_file_name == 0)
{
c_file_name = "gcc";
}
p = find_a_file (&cpath, c_file_name);
if (p == 0)
p = find_a_file (&path, c_file_name);
if (p)
c_file_name = p;
*ld1++ = *ld2++ = ld_file_name;
c_file = make_temp_file (".c");
o_file = make_temp_file (".o");
ldout = make_temp_file (".ld");
*c_ptr++ = c_file_name;
*c_ptr++ = "-x";
*c_ptr++ = "c";
*c_ptr++ = "-c";
*c_ptr++ = "-o";
*c_ptr++ = o_file;
p = getenv ("COLLECT_GCC_OPTIONS");
while (p && *p)
{
char *q = extract_string (&p);
if (*q == '-' && (q[1] == 'm' || q[1] == 'f'))
*c_ptr++ = __extension__ ({ struct obstack *__h = ( &permanent_obstack ); __extension__ ({ struct obstack *__o = ( __h ); int __len = ( ( strlen (q) ) ); if (__o->next_free + __len + 1 > __o->chunk_limit) _obstack_newchunk (__o, __len + 1); memcpy (( __o->next_free ), ( (char *) ( ( q ) ) ), ( __len )) ; __o->next_free += __len; *(__o->next_free)++ = 0; (void) 0; }) ; __extension__ ({ struct obstack *__o1 = ( __h ); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (( ((( __o1->next_free ) - (char *) 0) +__o1->alignment_mask) & ~ (__o1->alignment_mask) ) + (char *) 0) ; if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }) ; }) ;
if (strcmp (q, "-EL") == 0 || strcmp (q, "-EB") == 0)
*c_ptr++ = __extension__ ({ struct obstack *__h = ( &permanent_obstack ); __extension__ ({ struct obstack *__o = ( __h ); int __len = ( ( strlen (q) ) ); if (__o->next_free + __len + 1 > __o->chunk_limit) _obstack_newchunk (__o, __len + 1); memcpy (( __o->next_free ), ( (char *) ( ( q ) ) ), ( __len )) ; __o->next_free += __len; *(__o->next_free)++ = 0; (void) 0; }) ; __extension__ ({ struct obstack *__o1 = ( __h ); void *value; value = (void *) __o1->object_base; if (__o1->next_free == value) __o1->maybe_empty_object = 1; __o1->next_free = (( ((( __o1->next_free ) - (char *) 0) +__o1->alignment_mask) & ~ (__o1->alignment_mask) ) + (char *) 0) ; if (__o1->next_free - (char *)__o1->chunk > __o1->chunk_limit - (char *)__o1->chunk) __o1->next_free = __o1->chunk_limit; __o1->object_base = __o1->next_free; value; }) ; }) ;
if (strncmp (q, "-shared", sizeof ("-shared") - 1) == 0)
shared_obj = 1;
}
__extension__ ({ struct obstack *__o = ( &temporary_obstack ); void *__obj = ( temporary_firstobj ); if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) __o->next_free = __o->object_base = __obj; else (obstack_free) (__o, __obj); }) ;
*c_ptr++ = "-fno-exceptions";
first_file = 1;
while ((arg = *++argv) != (char *) 0)
{
*ld1++ = *ld2++ = arg;
if (arg[0] == '-')
{
switch (arg[1])
{
# 1305 "../gcc-2.95.1/gcc/collect2.c"
case 'd':
if (!strcmp (arg, "-debug"))
{
ld1--;
ld2--;
}
break;
case 'l':
if (first_file)
{
first_file = 0;
ld2--;
*ld2++ = o_file;
*ld2++ = arg;
}
# 1341 "../gcc-2.95.1/gcc/collect2.c"
break;
case 'o':
if (arg[2] == '\0')
output_file = *ld1++ = *ld2++ = *++argv;
else
output_file = &arg[2];
break;
case 'r':
if (arg[2] == '\0')
rflag = 1;
break;
case 's':
if (arg[2] == '\0' && do_collecting)
{
strip_flag = 1;
ld1--;
}
break;
case 'v':
if (arg[2] == '\0')
vflag = 1;
break;
}
}
else if ((p = rindex (arg, '.')) != (char *) 0
&& (strcmp (p, ".o") == 0 || strcmp (p, ".a") == 0
|| strcmp (p, ".so") == 0))
{
if (first_file)
{
first_file = 0;
if (p[1] == 'o')
*ld2++ = o_file;
else
{
ld2--;
*ld2++ = o_file;
*ld2++ = arg;
}
}
if (p[1] == 'o')
*object++ = arg;
# 1414 "../gcc-2.95.1/gcc/collect2.c"
}
}
# 1460 "../gcc-2.95.1/gcc/collect2.c"
*c_ptr++ = c_file;
*object = *c_ptr = *ld1 = (char *) 0;
if (vflag)
{
notice ("collect2 version %s", version_string);
fprintf ((&__iob[2]) , " (i386 FreeBSD/ELF)"); ;
fprintf ((&__iob[2]) , "\n");
}
if (debug)
{
char *ptr;
fprintf ((&__iob[2]) , "ld_file_name = %s\n",
(ld_file_name ? ld_file_name : "not found"));
fprintf ((&__iob[2]) , "c_file_name = %s\n",
(c_file_name ? c_file_name : "not found"));
fprintf ((&__iob[2]) , "nm_file_name = %s\n",
(nm_file_name ? nm_file_name : "not found"));
fprintf ((&__iob[2]) , "strip_file_name = %s\n",
(strip_file_name ? strip_file_name : "not found"));
fprintf ((&__iob[2]) , "c_file = %s\n",
(c_file ? c_file : "not found"));
fprintf ((&__iob[2]) , "o_file = %s\n",
(o_file ? o_file : "not found"));
ptr = getenv ("COLLECT_GCC_OPTIONS");
if (ptr)
fprintf ((&__iob[2]) , "COLLECT_GCC_OPTIONS = %s\n", ptr);
ptr = getenv ("COLLECT_GCC");
if (ptr)
fprintf ((&__iob[2]) , "COLLECT_GCC = %s\n", ptr);
ptr = getenv ("COMPILER_PATH");
if (ptr)
fprintf ((&__iob[2]) , "COMPILER_PATH = %s\n", ptr);
ptr = getenv ("LIBRARY_PATH");
if (ptr)
fprintf ((&__iob[2]) , "LIBRARY_PATH = %s\n", ptr);
fprintf ((&__iob[2]) , "\n");
}
do_tlink (ld1_argv, object_lst);
if (rflag
|| ! do_collecting
)
{
maybe_unlink (c_file);
maybe_unlink (o_file);
return 0;
}
scan_prog_file (output_file, PASS_FIRST);
if (debug)
{
notice ("%d constructor(s) found\n", constructors.number);
notice ("%d destructor(s) found\n", destructors.number);
notice ("%d frame table(s) found\n", frame_tables.number);
}
if (constructors.number == 0 && destructors.number == 0
&& frame_tables.number == 0
)
{
if (strip_flag)
{
char **strip_argv = (char **) xcalloc (sizeof (char *), 3);
strip_argv[0] = strip_file_name;
strip_argv[1] = output_file;
strip_argv[2] = (char *) 0;
fork_execute ("strip", strip_argv);
}
maybe_unlink (c_file);
maybe_unlink (o_file);
return 0;
}
sort_ids (&constructors);
sort_ids (&destructors);
maybe_unlink(output_file);
outf = fopen (c_file, "w");
if (outf == (FILE *) 0)
fatal_perror ("fopen %s", c_file);
write_c_file (outf, c_file);
if (fclose (outf))
fatal_perror ("fclose %s", c_file);
*ld2 = (char*) 0;
# 1631 "../gcc-2.95.1/gcc/collect2.c"
if (debug)
{
fprintf ((&__iob[2]) , "\n========== output_file = %s, c_file = %s\n",
output_file, c_file);
write_c_file ((&__iob[2]) , "stderr");
fprintf ((&__iob[2]) , "========== end of c_file\n\n");
}
fork_execute ("gcc", c_argv);
fork_execute ("ld", ld2_argv);
scan_prog_file (output_file, PASS_SECOND);
maybe_unlink (c_file);
maybe_unlink (o_file);
return 0;
}
int
collect_wait (prog)
char *prog;
{
int status;
pwait (pexecute_pid, &status, 0);
if (status)
{
if (((int)(( status )&0xFF) > 0 && (int)(( status )&0xFF00) == 0) )
{
int sig = ((int)(( status )&0x7F)) ;
error ((status & 0200
? "%s terminated with signal %d [%s]"
: "%s terminated with signal %d [%s], core dumped"),
prog,
sig,
my_strsignal(sig));
collect_exit (33 );
}
if (((int)(( status )&0xFF) == 0) )
return ((int)((( status )>>8)&0xFF)) ;
}
return 0;
}
static void
do_wait (prog)
char *prog;
{
int ret = collect_wait (prog);
if (ret != 0)
{
error ("%s returned %d exit status", prog, ret);
collect_exit (ret);
}
}
void
collect_execute (prog, argv, redir)
char *prog;
char **argv;
char *redir;
{
char *errmsg_fmt;
char *errmsg_arg;
int redir_handle = -1;
int stdout_save = -1;
int stderr_save = -1;
if (vflag || debug)
{
char **p_argv;
char *str;
if (argv[0])
fprintf ((&__iob[2]) , "%s", argv[0]);
else
notice ("[cannot find %s]", prog);
for (p_argv = &argv[1]; (str = *p_argv) != (char *) 0; p_argv++)
fprintf ((&__iob[2]) , " %s", str);
fprintf ((&__iob[2]) , "\n");
}
fflush ((&__iob[1]) );
fflush ((&__iob[2]) );
if (argv[0] == 0)
fatal ("cannot find `%s'", prog);
if (redir)
{
redir_handle = open (redir, 1 | 0x200 | 0x100 );
stdout_save = dup (1 );
if (stdout_save == -1)
fatal_perror ("redirecting stdout: %s", redir);
stderr_save = dup (2 );
if (stderr_save == -1)
fatal_perror ("redirecting stdout: %s", redir);
dup2 (redir_handle, 1 );
dup2 (redir_handle, 2 );
}
pexecute_pid = pexecute (argv[0], argv, argv[0], ((void *)0) ,
&errmsg_fmt, &errmsg_arg,
(1 | 2 | 4 ));
if (redir)
{
dup2 (stdout_save, 1 );
dup2 (stderr_save, 2 );
close (redir_handle);
}
if (pexecute_pid == -1)
fatal_perror (errmsg_fmt, errmsg_arg);
}
static void
fork_execute (prog, argv)
char *prog;
char **argv;
{
collect_execute (prog, argv, ((void *)0) );
do_wait (prog);
}
static void
maybe_unlink (file)
char *file;
{
if (!debug)
unlink (file);
else
notice ("[Leaving %s]\n", file);
}
static long sequence_number = 0;
static void
add_to_list (head_ptr, name)
struct head *head_ptr;
char *name;
{
struct id *newid
= (struct id *) xcalloc (sizeof (struct id) + strlen (name), 1);
struct id *p;
strcpy (newid->name, name);
if (head_ptr->first)
head_ptr->last->next = newid;
else
head_ptr->first = newid;
for (p = head_ptr->first;
strcmp (name, p->name) != 0;
p = p->next)
;
if (p != newid)
{
head_ptr->last->next = 0;
free (newid);
return;
}
newid->sequence = ++sequence_number;
head_ptr->last = newid;
head_ptr->number++;
}
static int
extract_init_priority (name)
char *name;
{
int pos = 0, pri;
while (name[pos] == '_')
++pos;
pos += 10;
pri = atoi (name + pos);
return pri ? pri : 65535 ;
}
static void
sort_ids (head_ptr)
struct head *head_ptr;
{
struct id *id, *id_next, **id_ptr;
id = head_ptr->first;
head_ptr->first = ((void *)0) ;
for (; id; id = id_next)
{
id_next = id->next;
id->sequence = extract_init_priority (id->name);
for (id_ptr = &(head_ptr->first); ; id_ptr = &((*id_ptr)->next))
if (*id_ptr == ((void *)0)
|| id->sequence > (*id_ptr)->sequence
)
{
id->next = *id_ptr;
*id_ptr = id;
break;
}
}
for (id = head_ptr->first; id; id = id->next)
id->sequence = ++sequence_number;
}
static void
write_list (stream, prefix, list)
FILE *stream;
char *prefix;
struct id *list;
{
while (list)
{
fprintf (stream, "%sx%d,\n", prefix, list->sequence);
list = list->next;
}
}
# 1940 "../gcc-2.95.1/gcc/collect2.c"
# 1956 "../gcc-2.95.1/gcc/collect2.c"
# 1971 "../gcc-2.95.1/gcc/collect2.c"
static void
write_list_with_asm (stream, prefix, list)
FILE *stream;
char *prefix;
struct id *list;
{
while (list)
{
fprintf (stream, "%sx%d __asm__ (\"%s\");\n",
prefix, list->sequence, list->name);
list = list->next;
}
}
static void
write_c_file_stat (stream, name)
FILE *stream;
char *name;
{
char *prefix, *p, *q;
int frames = (frame_tables.number > 0);
p = rindex (output_file, '/');
if (p == 0)
p = (char *) output_file;
else
p++;
q = p;
while (q)
{
q = index (q,'.');
if (q == 0)
{
q = p + strlen (p);
break;
}
else
{
if (strncmp (q, ".so", 3) == 0)
{
q += 3;
break;
}
else
q++;
}
}
prefix = xmalloc (q - p + 1);
strncpy (prefix, p, q - p);
prefix[q - p] = 0;
for (q = prefix; *q; q++)
if (! (1 && ((__ctype + 1)[ (unsigned char)*q ] & (01 | 02 | 04 )) ) )
*q = '_';
if (debug)
notice ("\nwrite_c_file - output name is %s, prefix is %s\n",
output_file, prefix);
initname = xmalloc (strlen (prefix) + sizeof ("_GLOBAL__FI_%s" ) - 2);
sprintf (initname, "_GLOBAL__FI_%s" , prefix);
fininame = xmalloc (strlen (prefix) + sizeof ("_GLOBAL__FD_%s" ) - 2);
sprintf (fininame, "_GLOBAL__FD_%s" , prefix);
free (prefix);
fprintf (stream, "static int count;\n");
fprintf (stream, "typedef void entry_pt();\n");
write_list_with_asm (stream, "extern entry_pt ", constructors.first);
if (frames)
{
write_list_with_asm (stream, "extern void *", frame_tables.first);
fprintf (stream, "\tstatic void *frame_table[] = {\n");
write_list (stream, "\t\t&", frame_tables.first);
fprintf (stream, "\t0\n};\n");
fprintf (stream, "struct object {\n");
fprintf (stream, " void *pc_begin;\n");
fprintf (stream, " void *pc_end;\n");
fprintf (stream, " void *fde_begin;\n");
fprintf (stream, " void *fde_array;\n");
fprintf (stream, " __SIZE_TYPE__ count;\n");
fprintf (stream, " struct object *next;\n");
fprintf (stream, "};\n");
fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
fprintf (stream, "static void reg_frame () {\n");
fprintf (stream, "\tstatic struct object ob;\n");
fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
fprintf (stream, "\t}\n");
fprintf (stream, "static void dereg_frame () {\n");
fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
fprintf (stream, "\t}\n");
}
fprintf (stream, "void %s() {\n", initname);
if (constructors.number > 0 || frames)
{
fprintf (stream, "\tstatic entry_pt *ctors[] = {\n");
write_list (stream, "\t\t", constructors.first);
if (frames)
fprintf (stream, "\treg_frame,\n");
fprintf (stream, "\t};\n");
fprintf (stream, "\tentry_pt **p;\n");
fprintf (stream, "\tif (count++ != 0) return;\n");
fprintf (stream, "\tp = ctors + %d;\n", constructors.number + frames);
fprintf (stream, "\twhile (p > ctors) (*--p)();\n");
}
else
fprintf (stream, "\t++count;\n");
fprintf (stream, "}\n");
write_list_with_asm (stream, "extern entry_pt ", destructors.first);
fprintf (stream, "void %s() {\n", fininame);
if (destructors.number > 0 || frames)
{
fprintf (stream, "\tstatic entry_pt *dtors[] = {\n");
write_list (stream, "\t\t", destructors.first);
if (frames)
fprintf (stream, "\tdereg_frame,\n");
fprintf (stream, "\t};\n");
fprintf (stream, "\tentry_pt **p;\n");
fprintf (stream, "\tif (--count != 0) return;\n");
fprintf (stream, "\tp = dtors;\n");
fprintf (stream, "\twhile (p < dtors + %d) (*p++)();\n",
destructors.number + frames);
}
fprintf (stream, "}\n");
if (shared_obj)
{
fprintf (stream, "void _GLOBAL__DI() {\n\t%s();\n}\n", initname);
fprintf (stream, "void _GLOBAL__DD() {\n\t%s();\n}\n", fininame);
}
}
static void
write_c_file_glob (stream, name)
FILE *stream;
char *name;
{
int frames = (frame_tables.number > 0);
fprintf (stream, "typedef void entry_pt();\n\n");
write_list_with_asm (stream, "extern entry_pt ", constructors.first);
if (frames)
{
write_list_with_asm (stream, "extern void *", frame_tables.first);
fprintf (stream, "\tstatic void *frame_table[] = {\n");
write_list (stream, "\t\t&", frame_tables.first);
fprintf (stream, "\t0\n};\n");
fprintf (stream, "struct object {\n");
fprintf (stream, " void *pc_begin;\n");
fprintf (stream, " void *pc_end;\n");
fprintf (stream, " void *fde_begin;\n");
fprintf (stream, " void *fde_array;\n");
fprintf (stream, " __SIZE_TYPE__ count;\n");
fprintf (stream, " struct object *next;\n");
fprintf (stream, "};\n");
fprintf (stream, "extern void __register_frame_info_table (void *, struct object *);\n");
fprintf (stream, "extern void *__deregister_frame_info (void *);\n");
fprintf (stream, "static void reg_frame () {\n");
fprintf (stream, "\tstatic struct object ob;\n");
fprintf (stream, "\t__register_frame_info_table (frame_table, &ob);\n");
fprintf (stream, "\t}\n");
fprintf (stream, "static void dereg_frame () {\n");
fprintf (stream, "\t__deregister_frame_info (frame_table);\n");
fprintf (stream, "\t}\n");
}
fprintf (stream, "\nentry_pt * __CTOR_LIST__[] = {\n");
fprintf (stream, "\t(entry_pt *) %d,\n", constructors.number + frames);
write_list (stream, "\t", constructors.first);
if (frames)
fprintf (stream, "\treg_frame,\n");
fprintf (stream, "\t0\n};\n\n");
write_list_with_asm (stream, "extern entry_pt ", destructors.first);
fprintf (stream, "\nentry_pt * __DTOR_LIST__[] = {\n");
fprintf (stream, "\t(entry_pt *) %d,\n", destructors.number + frames);
write_list (stream, "\t", destructors.first);
if (frames)
fprintf (stream, "\tdereg_frame,\n");
fprintf (stream, "\t0\n};\n\n");
fprintf (stream, "extern entry_pt %s;\n", "__main" );
fprintf (stream, "entry_pt *__main_reference = %s;\n\n", "__main" );
}
static void
write_c_file (stream, name)
FILE *stream;
char *name;
{
fprintf (stream, "#ifdef __cplusplus\nextern \"C\" {\n#endif\n");
if (! shared_obj)
write_c_file_glob (stream, name);
else
write_c_file_stat (stream, name);
fprintf (stream, "#ifdef __cplusplus\n}\n#endif\n");
}
# 2224 "../gcc-2.95.1/gcc/collect2.c"
static void
scan_prog_file (prog_name, which_pass)
char *prog_name;
enum pass which_pass;
{
void (*int_handler) ();
void (*quit_handler) ();
char *nm_argv[4];
int pid;
int argc = 0;
int pipe_fd[2];
char *p, buf[1024];
FILE *inf;
if (which_pass == PASS_SECOND)
return;
if (nm_file_name == 0)
fatal ("cannot find `nm'");
nm_argv[argc++] = nm_file_name;
if ("-n" [0] != '\0')
nm_argv[argc++] = "-n" ;
nm_argv[argc++] = prog_name;
nm_argv[argc++] = (char *) 0;
if (pipe (pipe_fd) < 0)
fatal_perror ("pipe");
inf = fdopen (pipe_fd[0], "r");
if (inf == (FILE *) 0)
fatal_perror ("fdopen");
if (vflag)
{
char **p_argv;
char *str;
for (p_argv = &nm_argv[0]; (str = *p_argv) != (char *) 0; p_argv++)
fprintf ((&__iob[2]) , " %s", str);
fprintf ((&__iob[2]) , "\n");
}
fflush ((&__iob[1]) );
fflush ((&__iob[2]) );
pid = vfork ();
if (pid == -1)
fatal_perror ("vfork" );
if (pid == 0)
{
if (dup2 (pipe_fd[1], 1) < 0)
fatal_perror ("dup2 %d 1", pipe_fd[1]);
if (close (pipe_fd[0]) < 0)
fatal_perror ("close %d", pipe_fd[0]);
if (close (pipe_fd[1]) < 0)
fatal_perror ("close %d", pipe_fd[1]);
execv (nm_file_name, nm_argv);
fatal_perror ("execvp %s", nm_file_name);
}
int_handler = (void (*) ())signal (2 , (void (*)(int))1 );
quit_handler = (void (*) ())signal (3 , (void (*)(int))1 );
if (close (pipe_fd[1]) < 0)
fatal_perror ("close %d", pipe_fd[1]);
if (debug)
fprintf ((&__iob[2]) , "\nnm output with constructors/destructors.\n");
while (fgets (buf, sizeof buf, inf) != (char *) 0)
{
int ch, ch2;
char *name, *end;
for (p = buf; (ch = *p) != '\0' && ch != '\n' && ch != '_'; p++)
if (ch == ' ' && p[1] == 'U' && p[2] == ' ')
break;
if (ch != '_')
continue;
name = p;
for (end = p; (ch2 = *end) != '\0' && ! (1 && ((__ctype + 1)[ ch2 ] & 010 ) ) && ch2 != '|';
end++)
continue;
*end = '\0';
switch (is_ctor_dtor (name))
{
case 1:
if (which_pass != PASS_LIB)
add_to_list (&constructors, name);
break;
case 2:
if (which_pass != PASS_LIB)
add_to_list (&destructors, name);
break;
case 3:
if (which_pass != PASS_LIB)
fatal ("init function found in object %s", prog_name);
add_to_list (&constructors, name);
break;
case 4:
if (which_pass != PASS_LIB)
fatal ("fini function found in object %s", prog_name);
add_to_list (&destructors, name);
break;
case 5:
if (which_pass != PASS_LIB)
add_to_list (&frame_tables, name);
break;
default:
continue;
}
if (debug)
fprintf ((&__iob[2]) , "\t%s\n", buf);
}
if (debug)
fprintf ((&__iob[2]) , "\n");
if (fclose (inf) != 0)
fatal_perror ("fclose");
do_wait (nm_file_name);
signal (2 , int_handler);
signal (3 , quit_handler);
}
# 2669 "../gcc-2.95.1/gcc/collect2.c"
# 2806 "../gcc-2.95.1/gcc/collect2.c"
# 3137 "../gcc-2.95.1/gcc/collect2.c"
# 3801 "../gcc-2.95.1/gcc/collect2.c"
More information about the Gcc-bugs
mailing list