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