public inbox for gcc-prs@sourceware.org
help / color / mirror / Atom feed
* Re: c/5124: gcc fails to compile binutils on alpha
@ 2002-04-26  2:07 rth
  0 siblings, 0 replies; 2+ messages in thread
From: rth @ 2002-04-26  2:07 UTC (permalink / raw)
  To: dl8bcu, gcc-bugs, gcc-prs, nobody

Synopsis: gcc fails to compile binutils on alpha

State-Changed-From-To: open->closed
State-Changed-By: rth
State-Changed-When: Fri Apr 26 02:07:11 2002
State-Changed-Why:
    Fixed for gcc 3.1.

http://gcc.gnu.org/cgi-bin/gnatsweb.pl?cmd=view%20audit-trail&database=gcc&pr=5124


^ permalink raw reply	[flat|nested] 2+ messages in thread

* c/5124: gcc fails to compile binutils on alpha
@ 2001-12-15  6:06 dl8bcu
  0 siblings, 0 replies; 2+ messages in thread
From: dl8bcu @ 2001-12-15  6:06 UTC (permalink / raw)
  To: gcc-gnats


>Number:         5124
>Category:       c
>Synopsis:       gcc fails to compile binutils on alpha
>Confidential:   no
>Severity:       critical
>Priority:       medium
>Responsible:    unassigned
>State:          open
>Class:          rejects-legal
>Submitter-Id:   net
>Arrival-Date:   Sat Dec 15 06:06:01 PST 2001
>Closed-Date:
>Last-Modified:
>Originator:     Thorsten Kranzkowski
>Release:        3.1 20011212 (experimental)
>Organization:
>Environment:
System: Linux Marvin 2.5.1-pre1 #4 Tue Nov 27 18:28:06 UTC 2001 alpha unknown
Architecture: alpha

	
host: alpha-unknown-linux-gnu
build: alpha-unknown-linux-gnu
target: alpha-unknown-linux-gnu
configured with: ../gcc/configure --prefix=/usr --enable-languages=c,c++
Alpha AXPpci33 ev4
>Description:
	When compiling binutils 2.11.92.0.12.3 I get this error:

/bin/sh ./libtool --mode=compile gcc -DHAVE_CONFIG_H -I. -I. -I. -D_GNU_SOURCE   -DTRAD_CORE   -I. -I. -I./../include  -I./../intl -I../intl   -W -Wall -Wstrict-prototypes -Wmissing-prototypes -g -O2 -c elf64.c
gcc -DHAVE_CONFIG_H -I. -I. -I. -D_GNU_SOURCE -DTRAD_CORE -I. -I. -I./../include -I./../intl -I../intl -W
-Wall -Wstrict-prototypes -Wmissing-prototypes -g -O2 -c elf64.c  -fPIC -DPIC -o .libs/elf64.o
In file included from elfcode.h:1553,
                 from elf64.c:22:
elflink.h: In function `elf_link_input_bfd':
elflink.h:6849: unable to find a register to spill in class `R27_REG'
elflink.h:6849: this is the insn:
(insn 1986 2858 1992 (parallel[
            (set (reg:DI 3 $3 [624])
                (udiv:DI (reg:DI 24 $24 [622])
                    (reg:DI 25 $25 [623])))
            (clobber (reg:DI 23 $23))
            (clobber (reg:DI 28 $28))
        ] ) 37 {*divmoddi_internal} (insn_list 1983 (insn_list 1985 (nil)))
    (expr_list:REG_DEAD (reg:DI 24 $24 [622])
        (expr_list:REG_DEAD (reg:DI 25 $25 [623])
            (expr_list:REG_UNUSED (reg:DI 23 $23)
                (expr_list:REG_UNUSED (reg:DI 28 $28)
                    (nil))))))
elflink.h:6849: confused by earlier errors, bailing out
make[3]: *** [elf64.lo] Error 1
make[3]: Leaving directory `/home/th/src/binutils-2.11.92.0.12.3/bfd'

>How-To-Repeat:
	

compile this (generated by adding -save-temps to above compiler invocation):

# 1 "elf64.c"
# 1 "<builtin>"
# 1 "<command line>"
# 1 "elf64.c"
# 22 "elf64.c"
# 1 "elfcode.h" 1
# 67 "elfcode.h"
# 1 "bfd.h" 1
# 36 "bfd.h"
# 1 "../include/ansidecl.h" 1
# 37 "bfd.h" 2
# 1 "../include/symcat.h" 1
# 38 "bfd.h" 2
# 81 "bfd.h"
typedef struct _bfd bfd;
# 106 "bfd.h"
typedef enum bfd_boolean {false, true} boolean;
# 139 "bfd.h"
typedef unsigned long bfd_vma;
typedef long bfd_signed_vma;
typedef unsigned long bfd_size_type;
typedef unsigned long symvalue;
# 188 "bfd.h"
typedef bfd_signed_vma file_ptr;
typedef bfd_vma ufile_ptr;

extern void bfd_sprintf_vma (bfd *, char *, bfd_vma);
extern void bfd_fprintf_vma (bfd *, void *, bfd_vma);




typedef unsigned int flagword;
typedef unsigned char bfd_byte;



typedef enum bfd_format {
              bfd_unknown = 0,
              bfd_object,
              bfd_archive,
              bfd_core,
              bfd_type_end}
         bfd_format;
# 270 "bfd.h"
typedef unsigned long symindex;


typedef const struct reloc_howto_struct reloc_howto_type;
# 292 "bfd.h"
typedef struct carsym {
  char *name;
  file_ptr file_offset;
} carsym;



struct orl {
  char **name;
  union {
    file_ptr pos;
    bfd *abfd;
  } u;
  int namidx;
};


typedef struct lineno_cache_entry {
  unsigned int line_number;
  union {
    struct symbol_cache_entry *sym;
    bfd_vma offset;
  } u;
} alent;






typedef struct sec *sec_ptr;
# 341 "bfd.h"
typedef struct stat stat_type;

typedef enum bfd_print_symbol
{
  bfd_print_symbol_name,
  bfd_print_symbol_more,
  bfd_print_symbol_all
} bfd_print_symbol_type;



typedef struct _symbol_info
{
  symvalue value;
  char type;
  const char *name;
  unsigned char stab_type;
  char stab_other;
  short stab_desc;
  const char *stab_name;
} symbol_info;



extern const char *bfd_get_stab_name (int);






struct bfd_hash_entry
{

  struct bfd_hash_entry *next;

  const char *string;


  unsigned long hash;
};



struct bfd_hash_table
{

  struct bfd_hash_entry **table;

  unsigned int size;







  struct bfd_hash_entry *(*newfunc) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);




  void * memory;
};


extern boolean bfd_hash_table_init
  (struct bfd_hash_table *, struct bfd_hash_entry *(*) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *));





extern boolean bfd_hash_table_init_n
  (struct bfd_hash_table *, struct bfd_hash_entry *(*) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *), unsigned int size);






extern void bfd_hash_table_free (struct bfd_hash_table *);





extern struct bfd_hash_entry *bfd_hash_lookup
  (struct bfd_hash_table *, const char *, boolean create, boolean copy);



extern void bfd_hash_replace
  (struct bfd_hash_table *, struct bfd_hash_entry *old, struct bfd_hash_entry *nw);



extern struct bfd_hash_entry *bfd_hash_newfunc
  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);



extern void * bfd_hash_allocate (struct bfd_hash_table *, unsigned int);





extern void bfd_hash_traverse (struct bfd_hash_table *, boolean (*) (struct bfd_hash_entry *, void *), void * info);
# 461 "bfd.h"
extern bfd_size_type bfd_bread (void *, bfd_size_type, bfd *);
extern bfd_size_type bfd_bwrite (const void *, bfd_size_type, bfd *);
extern int bfd_seek (bfd *, file_ptr, int);
extern ufile_ptr bfd_tell (bfd *);
extern int bfd_flush (bfd *);
extern int bfd_stat (bfd *, struct stat *);
# 484 "bfd.h"
extern void warn_deprecated
  (const char *, const char *, int, const char *);
# 521 "bfd.h"
extern boolean bfd_cache_close (bfd *abfd);


extern boolean bfd_record_phdr
  (bfd *, unsigned long, boolean, flagword, boolean, bfd_vma, boolean, boolean, unsigned int, struct sec **);




bfd_vma bfd_getb64 (const unsigned char *);
bfd_vma bfd_getl64 (const unsigned char *);
bfd_signed_vma bfd_getb_signed_64 (const unsigned char *);
bfd_signed_vma bfd_getl_signed_64 (const unsigned char *);
bfd_vma bfd_getb32 (const unsigned char *);
bfd_vma bfd_getl32 (const unsigned char *);
bfd_signed_vma bfd_getb_signed_32 (const unsigned char *);
bfd_signed_vma bfd_getl_signed_32 (const unsigned char *);
bfd_vma bfd_getb16 (const unsigned char *);
bfd_vma bfd_getl16 (const unsigned char *);
bfd_signed_vma bfd_getb_signed_16 (const unsigned char *);
bfd_signed_vma bfd_getl_signed_16 (const unsigned char *);
void bfd_putb64 (bfd_vma, unsigned char *);
void bfd_putl64 (bfd_vma, unsigned char *);
void bfd_putb32 (bfd_vma, unsigned char *);
void bfd_putl32 (bfd_vma, unsigned char *);
void bfd_putb16 (bfd_vma, unsigned char *);
void bfd_putl16 (bfd_vma, unsigned char *);



bfd_vma bfd_get_bits (bfd_byte *, int, boolean);
void bfd_put_bits (bfd_vma, bfd_byte *, int, boolean);




struct ecoff_debug_info;
struct ecoff_debug_swap;
struct ecoff_extr;
struct symbol_cache_entry;
struct bfd_link_info;
struct bfd_link_hash_entry;
struct bfd_elf_version_tree;

extern bfd_vma bfd_ecoff_get_gp_value (bfd * abfd);
extern boolean bfd_ecoff_set_gp_value (bfd *abfd, bfd_vma gp_value);
extern boolean bfd_ecoff_set_regmasks
  (bfd *abfd, unsigned long gprmask, unsigned long fprmask, unsigned long *cprmask);

extern void * bfd_ecoff_debug_init
  (bfd *output_bfd, struct ecoff_debug_info *output_debug, const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);


extern void bfd_ecoff_debug_free
  (void * handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, const struct ecoff_debug_swap *output_swap, struct bfd_link_info *);


extern boolean bfd_ecoff_debug_accumulate
  (void * handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, const struct ecoff_debug_swap *output_swap, bfd *input_bfd, struct ecoff_debug_info *input_debug, const struct ecoff_debug_swap *input_swap, struct bfd_link_info *);




extern boolean bfd_ecoff_debug_accumulate_other
  (void * handle, bfd *output_bfd, struct ecoff_debug_info *output_debug, const struct ecoff_debug_swap *output_swap, bfd *input_bfd, struct bfd_link_info *);


extern boolean bfd_ecoff_debug_externals
  (bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap, boolean relocateable, boolean (*get_extr) (struct symbol_cache_entry *, struct ecoff_extr *), void (*set_index) (struct symbol_cache_entry *, bfd_size_type));






extern boolean bfd_ecoff_debug_one_external
  (bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap, const char *name, struct ecoff_extr *esym);


extern bfd_size_type bfd_ecoff_debug_size
  (bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap);

extern boolean bfd_ecoff_write_debug
  (bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap, file_ptr where);

extern boolean bfd_ecoff_write_accumulated_debug
  (void * handle, bfd *abfd, struct ecoff_debug_info *debug, const struct ecoff_debug_swap *swap, struct bfd_link_info *info, file_ptr where);


extern boolean bfd_mips_ecoff_create_embedded_relocs
  (bfd *, struct bfd_link_info *, struct sec *, struct sec *, char **);




struct bfd_link_needed_list
{
  struct bfd_link_needed_list *next;
  bfd *by;
  const char *name;
};

extern boolean bfd_elf32_record_link_assignment
  (bfd *, struct bfd_link_info *, const char *, boolean);
extern boolean bfd_elf64_record_link_assignment
  (bfd *, struct bfd_link_info *, const char *, boolean);
extern struct bfd_link_needed_list *bfd_elf_get_needed_list
  (bfd *, struct bfd_link_info *);
extern boolean bfd_elf_get_bfd_needed_list
  (bfd *, struct bfd_link_needed_list **);
extern boolean bfd_elf32_size_dynamic_sections
  (bfd *, const char *, const char *, const char *, const char * const *, struct bfd_link_info *, struct sec **, struct bfd_elf_version_tree *);


extern boolean bfd_elf64_size_dynamic_sections
  (bfd *, const char *, const char *, const char *, const char * const *, struct bfd_link_info *, struct sec **, struct bfd_elf_version_tree *);


extern void bfd_elf_set_dt_needed_name (bfd *, const char *);
extern void bfd_elf_set_dt_needed_soname (bfd *, const char *);
extern const char *bfd_elf_get_dt_soname (bfd *);
extern struct bfd_link_needed_list *bfd_elf_get_runpath_list
  (bfd *, struct bfd_link_info *);
extern boolean bfd_elf32_discard_info
  (struct bfd_link_info *);
extern boolean bfd_elf64_discard_info
  (struct bfd_link_info *);




extern long bfd_get_elf_phdr_upper_bound (bfd *abfd);
# 661 "bfd.h"
extern int bfd_get_elf_phdrs (bfd *abfd, void *phdrs);


extern int bfd_get_arch_size (bfd *);


extern int bfd_get_sign_extend_vma (bfd *);

extern boolean bfd_m68k_elf32_create_embedded_relocs
  (bfd *, struct bfd_link_info *, struct sec *, struct sec *, char **);




extern struct bfd_link_needed_list *bfd_sunos_get_needed_list
  (bfd *, struct bfd_link_info *);
extern boolean bfd_sunos_record_link_assignment
  (bfd *, struct bfd_link_info *, const char *);
extern boolean bfd_sunos_size_dynamic_sections
  (bfd *, struct bfd_link_info *, struct sec **, struct sec **, struct sec **);




extern boolean bfd_i386linux_size_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern boolean bfd_m68klinux_size_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern boolean bfd_sparclinux_size_dynamic_sections
  (bfd *, struct bfd_link_info *);



struct _bfd_window_internal;
typedef struct _bfd_window_internal bfd_window_internal;

typedef struct _bfd_window {

  void * data;
  bfd_size_type size;






  struct _bfd_window_internal *i;
} bfd_window;

extern void bfd_init_window (bfd_window *);
extern void bfd_free_window (bfd_window *);
extern boolean bfd_get_file_window
  (bfd *, file_ptr, bfd_size_type, bfd_window *, boolean);



extern boolean bfd_xcoff_link_record_set
  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_size_type);

extern boolean bfd_xcoff_import_symbol
  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *, bfd_vma, const char *, const char *, const char *, unsigned int);

extern boolean bfd_xcoff_export_symbol
  (bfd *, struct bfd_link_info *, struct bfd_link_hash_entry *);
extern boolean bfd_xcoff_link_count_reloc
  (bfd *, struct bfd_link_info *, const char *);
extern boolean bfd_xcoff_record_link_assignment
  (bfd *, struct bfd_link_info *, const char *);
extern boolean bfd_xcoff_size_dynamic_sections
  (bfd *, struct bfd_link_info *, const char *, const char *, unsigned long, unsigned long, unsigned long, boolean, int, boolean, boolean, struct sec **);






struct internal_syment;
union internal_auxent;


extern boolean bfd_coff_get_syment
  (bfd *, struct symbol_cache_entry *, struct internal_syment *);

extern boolean bfd_coff_get_auxent
  (bfd *, struct symbol_cache_entry *, int, union internal_auxent *);

extern boolean bfd_coff_set_symbol_class
  (bfd *, struct symbol_cache_entry *, unsigned int);

extern boolean bfd_m68k_coff_create_embedded_relocs
  (bfd *, struct bfd_link_info *, struct sec *, struct sec *, char **);



extern boolean bfd_arm_allocate_interworking_sections
  (struct bfd_link_info *);

extern boolean bfd_arm_process_before_allocation
  (bfd *, struct bfd_link_info *, int);

extern boolean bfd_arm_get_bfd_for_interworking
  (bfd *, struct bfd_link_info *);


extern boolean bfd_arm_pe_allocate_interworking_sections
  (struct bfd_link_info *);

extern boolean bfd_arm_pe_process_before_allocation
  (bfd *, struct bfd_link_info *, int);

extern boolean bfd_arm_pe_get_bfd_for_interworking
  (bfd *, struct bfd_link_info *);


extern boolean bfd_elf32_arm_allocate_interworking_sections
  (struct bfd_link_info *);

extern boolean bfd_elf32_arm_process_before_allocation
  (bfd *, struct bfd_link_info *, int);

extern boolean bfd_elf32_arm_get_bfd_for_interworking
  (bfd *, struct bfd_link_info *);


extern void bfd_ticoff_set_section_load_page
  (struct sec *, int);

extern int bfd_ticoff_get_section_load_page
  (struct sec *);


void
bfd_init (void);

bfd *
bfd_openr (const char *filename, const char *target);

bfd *
bfd_fdopenr (const char *filename, const char *target, int fd);

bfd *
bfd_openstreamr (const char *, const char *, void *);

bfd *
bfd_openw (const char *filename, const char *target);

boolean
bfd_close (bfd *abfd);

boolean
bfd_close_all_done (bfd *);

bfd *
bfd_create (const char *filename, bfd *templ);

boolean
bfd_make_writable (bfd *abfd);

boolean
bfd_make_readable (bfd *abfd);
# 967 "bfd.h"
struct bfd_comdat_info
{

  const char *name;





  long symbol;
};

typedef struct sec
{



  const char *name;



  int id;



  int index;



  struct sec *next;





  flagword flags;
# 1183 "bfd.h"
  unsigned int user_set_vma : 1;


  unsigned int reloc_done : 1;


  unsigned int linker_mark : 1;



  unsigned int linker_has_input : 1;


  unsigned int gc_mark : 1;



  unsigned int segment_mark : 1;
# 1211 "bfd.h"
  bfd_vma vma;





  bfd_vma lma;





  bfd_size_type _cooked_size;





  bfd_size_type _raw_size;
# 1239 "bfd.h"
  bfd_vma output_offset;



  struct sec *output_section;




  unsigned int alignment_power;




  struct reloc_cache_entry *relocation;




  struct reloc_cache_entry **orelocation;



  unsigned reloc_count;






  file_ptr filepos;



  file_ptr rel_filepos;



  file_ptr line_filepos;



  void * userdata;



  unsigned char *contents;



  alent *lineno;



  unsigned int lineno_count;



  unsigned int entsize;



  struct bfd_comdat_info *comdat;




  file_ptr moving_line_filepos;



  int target_index;

  void * used_by_bfd;




  struct relent_chain *constructor_chain;



  bfd *owner;


  struct symbol_cache_entry *symbol;
  struct symbol_cache_entry **symbol_ptr_ptr;

  struct bfd_link_order *link_order_head;
  struct bfd_link_order *link_order_tail;
} asection ;
# 1342 "bfd.h"
extern const asection bfd_abs_section;



extern const asection bfd_und_section;



extern const asection bfd_com_section;


extern const asection bfd_ind_section;
# 1363 "bfd.h"
extern const struct symbol_cache_entry * const bfd_abs_symbol;
extern const struct symbol_cache_entry * const bfd_com_symbol;
extern const struct symbol_cache_entry * const bfd_und_symbol;
extern const struct symbol_cache_entry * const bfd_ind_symbol;






asection *
bfd_get_section_by_name (bfd *abfd, const char *name);

char *
bfd_get_unique_section_name (bfd *abfd, const char *templat, int *count);



asection *
bfd_make_section_old_way (bfd *abfd, const char *name);

asection *
bfd_make_section_anyway (bfd *abfd, const char *name);

asection *
bfd_make_section (bfd *, const char *name);

boolean
bfd_set_section_flags (bfd *abfd, asection *sec, flagword flags);

void
bfd_map_over_sections (bfd *abfd, void (*func) (bfd *abfd, asection *sect, void * obj), void * obj);





boolean
bfd_set_section_size (bfd *abfd, asection *sec, bfd_size_type val);

boolean
bfd_set_section_contents (bfd *abfd, asection *section, void * data, file_ptr offset, bfd_size_type count);



boolean
bfd_get_section_contents (bfd *abfd, asection *section, void * location, file_ptr offset, bfd_size_type count);



boolean
bfd_copy_private_section_data (bfd *ibfd, asection *isec, bfd *obfd, asection *osec);





void
_bfd_strip_section_from_output (struct bfd_link_info *info, asection *section);

enum bfd_architecture
{
  bfd_arch_unknown,
  bfd_arch_obscure,
  bfd_arch_m68k,
# 1440 "bfd.h"
  bfd_arch_vax,
  bfd_arch_i960,
# 1459 "bfd.h"
  bfd_arch_a29k,
  bfd_arch_sparc,
# 1476 "bfd.h"
  bfd_arch_mips,
# 1497 "bfd.h"
  bfd_arch_i386,





  bfd_arch_we32k,
  bfd_arch_tahoe,
  bfd_arch_i860,
  bfd_arch_i370,
  bfd_arch_romp,
  bfd_arch_alliant,
  bfd_arch_convex,
  bfd_arch_m88k,
  bfd_arch_pyramid,
  bfd_arch_h8300,



  bfd_arch_pdp11,
  bfd_arch_powerpc,
# 1535 "bfd.h"
  bfd_arch_rs6000,




  bfd_arch_hppa,
  bfd_arch_d10v,



  bfd_arch_d30v,
  bfd_arch_m68hc11,
  bfd_arch_m68hc12,
  bfd_arch_z8k,


  bfd_arch_h8500,
  bfd_arch_sh,







  bfd_arch_alpha,



  bfd_arch_arm,
# 1575 "bfd.h"
  bfd_arch_ns32k,
  bfd_arch_w65,
  bfd_arch_tic30,
  bfd_arch_tic54x,
  bfd_arch_tic80,
  bfd_arch_v850,



  bfd_arch_arc,




  bfd_arch_m32r,


  bfd_arch_mn10200,
  bfd_arch_mn10300,


  bfd_arch_fr30,

  bfd_arch_mcore,
  bfd_arch_ia64,


  bfd_arch_pj,
  bfd_arch_avr,





  bfd_arch_cris,
  bfd_arch_s390,


  bfd_arch_openrisc,
  bfd_arch_mmix,
  bfd_arch_last
  };

typedef struct bfd_arch_info
{
  int bits_per_word;
  int bits_per_address;
  int bits_per_byte;
  enum bfd_architecture arch;
  unsigned long mach;
  const char *arch_name;
  const char *printable_name;
  unsigned int section_align_power;

  boolean the_default;
  const struct bfd_arch_info * (*compatible)
       (const struct bfd_arch_info *a, const struct bfd_arch_info *b);


  boolean (*scan) (const struct bfd_arch_info *, const char *);

  const struct bfd_arch_info *next;
} bfd_arch_info_type;
const char *
bfd_printable_name (bfd *abfd);

const bfd_arch_info_type *
bfd_scan_arch (const char *string);

const char **
bfd_arch_list (void);

const bfd_arch_info_type *
bfd_arch_get_compatible ( const bfd *abfd, const bfd *bbfd);



void
bfd_set_arch_info (bfd *abfd, const bfd_arch_info_type *arg);

enum bfd_architecture
bfd_get_arch (bfd *abfd);

unsigned long
bfd_get_mach (bfd *abfd);

unsigned int
bfd_arch_bits_per_byte (bfd *abfd);

unsigned int
bfd_arch_bits_per_address (bfd *abfd);

const bfd_arch_info_type *
bfd_get_arch_info (bfd *abfd);

const bfd_arch_info_type *
bfd_lookup_arch (enum bfd_architecture arch, unsigned long machine);



const char *
bfd_printable_arch_mach (enum bfd_architecture arch, unsigned long machine);

unsigned int
bfd_octets_per_byte (bfd *abfd);

unsigned int
bfd_arch_mach_octets_per_byte (enum bfd_architecture arch, unsigned long machine);


typedef enum bfd_reloc_status
{

  bfd_reloc_ok,


  bfd_reloc_overflow,


  bfd_reloc_outofrange,


  bfd_reloc_continue,


  bfd_reloc_notsupported,


  bfd_reloc_other,


  bfd_reloc_undefined,





  bfd_reloc_dangerous
 }
 bfd_reloc_status_type;


typedef struct reloc_cache_entry
{

  struct symbol_cache_entry **sym_ptr_ptr;


  bfd_size_type address;


  bfd_vma addend;


  reloc_howto_type *howto;

} arelent;
enum complain_overflow
{

  complain_overflow_dont,



  complain_overflow_bitfield,



  complain_overflow_signed,



  complain_overflow_unsigned
};

struct reloc_howto_struct
{






  unsigned int type;



  unsigned int rightshift;




  int size;



  unsigned int bitsize;





  boolean pc_relative;



  unsigned int bitpos;



  enum complain_overflow complain_on_overflow;





  bfd_reloc_status_type (*special_function)
    (bfd *, arelent *, struct symbol_cache_entry *, void *, asection *, bfd *, char **);



  char *name;
# 1813 "bfd.h"
  boolean partial_inplace;
# 1822 "bfd.h"
  bfd_vma src_mask;





  bfd_vma dst_mask;







  boolean pcrel_offset;
};
# 1862 "bfd.h"
unsigned int
bfd_get_reloc_size (reloc_howto_type *);

typedef struct relent_chain
{
  arelent relent;
  struct relent_chain *next;
} arelent_chain;
bfd_reloc_status_type
bfd_check_overflow (enum complain_overflow how, unsigned int bitsize, unsigned int rightshift, unsigned int addrsize, bfd_vma relocation);





bfd_reloc_status_type
bfd_perform_relocation (bfd *abfd, arelent *reloc_entry, void * data, asection *input_section, bfd *output_bfd, char **error_message);






bfd_reloc_status_type
bfd_install_relocation (bfd *abfd, arelent *reloc_entry, void * data, bfd_vma data_start, asection *input_section, char **error_message);





enum bfd_reloc_code_real {
  _dummy_first_bfd_reloc_code_real,



  BFD_RELOC_64,
  BFD_RELOC_32,
  BFD_RELOC_26,
  BFD_RELOC_24,
  BFD_RELOC_16,
  BFD_RELOC_14,
  BFD_RELOC_8,






  BFD_RELOC_64_PCREL,
  BFD_RELOC_32_PCREL,
  BFD_RELOC_24_PCREL,
  BFD_RELOC_16_PCREL,
  BFD_RELOC_12_PCREL,
  BFD_RELOC_8_PCREL,


  BFD_RELOC_32_GOT_PCREL,
  BFD_RELOC_16_GOT_PCREL,
  BFD_RELOC_8_GOT_PCREL,
  BFD_RELOC_32_GOTOFF,
  BFD_RELOC_16_GOTOFF,
  BFD_RELOC_LO16_GOTOFF,
  BFD_RELOC_HI16_GOTOFF,
  BFD_RELOC_HI16_S_GOTOFF,
  BFD_RELOC_8_GOTOFF,
  BFD_RELOC_64_PLT_PCREL,
  BFD_RELOC_32_PLT_PCREL,
  BFD_RELOC_24_PLT_PCREL,
  BFD_RELOC_16_PLT_PCREL,
  BFD_RELOC_8_PLT_PCREL,
  BFD_RELOC_64_PLTOFF,
  BFD_RELOC_32_PLTOFF,
  BFD_RELOC_16_PLTOFF,
  BFD_RELOC_LO16_PLTOFF,
  BFD_RELOC_HI16_PLTOFF,
  BFD_RELOC_HI16_S_PLTOFF,
  BFD_RELOC_8_PLTOFF,


  BFD_RELOC_68K_GLOB_DAT,
  BFD_RELOC_68K_JMP_SLOT,
  BFD_RELOC_68K_RELATIVE,


  BFD_RELOC_32_BASEREL,
  BFD_RELOC_16_BASEREL,
  BFD_RELOC_LO16_BASEREL,
  BFD_RELOC_HI16_BASEREL,
  BFD_RELOC_HI16_S_BASEREL,
  BFD_RELOC_8_BASEREL,
  BFD_RELOC_RVA,


  BFD_RELOC_8_FFnn,







  BFD_RELOC_32_PCREL_S2,
  BFD_RELOC_16_PCREL_S2,
  BFD_RELOC_23_PCREL_S2,



  BFD_RELOC_HI22,
  BFD_RELOC_LO10,





  BFD_RELOC_GPREL16,
  BFD_RELOC_GPREL32,


  BFD_RELOC_I960_CALLJ,



  BFD_RELOC_NONE,
  BFD_RELOC_SPARC_WDISP22,
  BFD_RELOC_SPARC22,
  BFD_RELOC_SPARC13,
  BFD_RELOC_SPARC_GOT10,
  BFD_RELOC_SPARC_GOT13,
  BFD_RELOC_SPARC_GOT22,
  BFD_RELOC_SPARC_PC10,
  BFD_RELOC_SPARC_PC22,
  BFD_RELOC_SPARC_WPLT30,
  BFD_RELOC_SPARC_COPY,
  BFD_RELOC_SPARC_GLOB_DAT,
  BFD_RELOC_SPARC_JMP_SLOT,
  BFD_RELOC_SPARC_RELATIVE,
  BFD_RELOC_SPARC_UA16,
  BFD_RELOC_SPARC_UA32,
  BFD_RELOC_SPARC_UA64,


  BFD_RELOC_SPARC_BASE13,
  BFD_RELOC_SPARC_BASE22,



  BFD_RELOC_SPARC_10,
  BFD_RELOC_SPARC_11,
  BFD_RELOC_SPARC_OLO10,
  BFD_RELOC_SPARC_HH22,
  BFD_RELOC_SPARC_HM10,
  BFD_RELOC_SPARC_LM22,
  BFD_RELOC_SPARC_PC_HH22,
  BFD_RELOC_SPARC_PC_HM10,
  BFD_RELOC_SPARC_PC_LM22,
  BFD_RELOC_SPARC_WDISP16,
  BFD_RELOC_SPARC_WDISP19,
  BFD_RELOC_SPARC_7,
  BFD_RELOC_SPARC_6,
  BFD_RELOC_SPARC_5,

  BFD_RELOC_SPARC_PLT64,
  BFD_RELOC_SPARC_HIX22,
  BFD_RELOC_SPARC_LOX10,
  BFD_RELOC_SPARC_H44,
  BFD_RELOC_SPARC_M44,
  BFD_RELOC_SPARC_L44,
  BFD_RELOC_SPARC_REGISTER,


  BFD_RELOC_SPARC_REV32,







  BFD_RELOC_ALPHA_GPDISP_HI16,





  BFD_RELOC_ALPHA_GPDISP_LO16,




  BFD_RELOC_ALPHA_GPDISP,
# 2076 "bfd.h"
  BFD_RELOC_ALPHA_LITERAL,
  BFD_RELOC_ALPHA_ELF_LITERAL,
  BFD_RELOC_ALPHA_LITUSE,




  BFD_RELOC_ALPHA_HINT,



  BFD_RELOC_ALPHA_LINKAGE,



  BFD_RELOC_ALPHA_CODEADDR,



  BFD_RELOC_ALPHA_GPREL_HI16,
  BFD_RELOC_ALPHA_GPREL_LO16,



  BFD_RELOC_MIPS_JMP,


  BFD_RELOC_MIPS16_JMP,


  BFD_RELOC_MIPS16_GPREL,


  BFD_RELOC_HI16,





  BFD_RELOC_HI16_S,


  BFD_RELOC_LO16,


  BFD_RELOC_PCREL_HI16_S,


  BFD_RELOC_PCREL_LO16,





  BFD_RELOC_MIPS_LITERAL,


  BFD_RELOC_MIPS_GOT16,
  BFD_RELOC_MIPS_CALL16,

  BFD_RELOC_MIPS_GOT_HI16,
  BFD_RELOC_MIPS_GOT_LO16,
  BFD_RELOC_MIPS_CALL_HI16,
  BFD_RELOC_MIPS_CALL_LO16,
  BFD_RELOC_MIPS_SUB,
  BFD_RELOC_MIPS_GOT_PAGE,
  BFD_RELOC_MIPS_GOT_OFST,
  BFD_RELOC_MIPS_GOT_DISP,
  BFD_RELOC_MIPS_SHIFT5,
  BFD_RELOC_MIPS_SHIFT6,
  BFD_RELOC_MIPS_INSERT_A,
  BFD_RELOC_MIPS_INSERT_B,
  BFD_RELOC_MIPS_DELETE,
  BFD_RELOC_MIPS_HIGHEST,
  BFD_RELOC_MIPS_HIGHER,
  BFD_RELOC_MIPS_SCN_DISP,
  BFD_RELOC_MIPS_REL16,
  BFD_RELOC_MIPS_RELGOT,
  BFD_RELOC_MIPS_JALR,



  BFD_RELOC_386_GOT32,
  BFD_RELOC_386_PLT32,
  BFD_RELOC_386_COPY,
  BFD_RELOC_386_GLOB_DAT,
  BFD_RELOC_386_JUMP_SLOT,
  BFD_RELOC_386_RELATIVE,
  BFD_RELOC_386_GOTOFF,
  BFD_RELOC_386_GOTPC,


  BFD_RELOC_X86_64_GOT32,
  BFD_RELOC_X86_64_PLT32,
  BFD_RELOC_X86_64_COPY,
  BFD_RELOC_X86_64_GLOB_DAT,
  BFD_RELOC_X86_64_JUMP_SLOT,
  BFD_RELOC_X86_64_RELATIVE,
  BFD_RELOC_X86_64_GOTPCREL,
  BFD_RELOC_X86_64_32S,


  BFD_RELOC_NS32K_IMM_8,
  BFD_RELOC_NS32K_IMM_16,
  BFD_RELOC_NS32K_IMM_32,
  BFD_RELOC_NS32K_IMM_8_PCREL,
  BFD_RELOC_NS32K_IMM_16_PCREL,
  BFD_RELOC_NS32K_IMM_32_PCREL,
  BFD_RELOC_NS32K_DISP_8,
  BFD_RELOC_NS32K_DISP_16,
  BFD_RELOC_NS32K_DISP_32,
  BFD_RELOC_NS32K_DISP_8_PCREL,
  BFD_RELOC_NS32K_DISP_16_PCREL,
  BFD_RELOC_NS32K_DISP_32_PCREL,


  BFD_RELOC_PDP11_DISP_8_PCREL,
  BFD_RELOC_PDP11_DISP_6_PCREL,


  BFD_RELOC_PJ_CODE_HI16,
  BFD_RELOC_PJ_CODE_LO16,
  BFD_RELOC_PJ_CODE_DIR16,
  BFD_RELOC_PJ_CODE_DIR32,
  BFD_RELOC_PJ_CODE_REL16,
  BFD_RELOC_PJ_CODE_REL32,


  BFD_RELOC_PPC_B26,
  BFD_RELOC_PPC_BA26,
  BFD_RELOC_PPC_TOC16,
  BFD_RELOC_PPC_B16,
  BFD_RELOC_PPC_B16_BRTAKEN,
  BFD_RELOC_PPC_B16_BRNTAKEN,
  BFD_RELOC_PPC_BA16,
  BFD_RELOC_PPC_BA16_BRTAKEN,
  BFD_RELOC_PPC_BA16_BRNTAKEN,
  BFD_RELOC_PPC_COPY,
  BFD_RELOC_PPC_GLOB_DAT,
  BFD_RELOC_PPC_JMP_SLOT,
  BFD_RELOC_PPC_RELATIVE,
  BFD_RELOC_PPC_LOCAL24PC,
  BFD_RELOC_PPC_EMB_NADDR32,
  BFD_RELOC_PPC_EMB_NADDR16,
  BFD_RELOC_PPC_EMB_NADDR16_LO,
  BFD_RELOC_PPC_EMB_NADDR16_HI,
  BFD_RELOC_PPC_EMB_NADDR16_HA,
  BFD_RELOC_PPC_EMB_SDAI16,
  BFD_RELOC_PPC_EMB_SDA2I16,
  BFD_RELOC_PPC_EMB_SDA2REL,
  BFD_RELOC_PPC_EMB_SDA21,
  BFD_RELOC_PPC_EMB_MRKREF,
  BFD_RELOC_PPC_EMB_RELSEC16,
  BFD_RELOC_PPC_EMB_RELST_LO,
  BFD_RELOC_PPC_EMB_RELST_HI,
  BFD_RELOC_PPC_EMB_RELST_HA,
  BFD_RELOC_PPC_EMB_BIT_FLD,
  BFD_RELOC_PPC_EMB_RELSDA,
  BFD_RELOC_PPC64_HIGHER,
  BFD_RELOC_PPC64_HIGHER_S,
  BFD_RELOC_PPC64_HIGHEST,
  BFD_RELOC_PPC64_HIGHEST_S,
  BFD_RELOC_PPC64_TOC16_LO,
  BFD_RELOC_PPC64_TOC16_HI,
  BFD_RELOC_PPC64_TOC16_HA,
  BFD_RELOC_PPC64_TOC,
  BFD_RELOC_PPC64_PLTGOT16,
  BFD_RELOC_PPC64_PLTGOT16_LO,
  BFD_RELOC_PPC64_PLTGOT16_HI,
  BFD_RELOC_PPC64_PLTGOT16_HA,
  BFD_RELOC_PPC64_ADDR16_DS,
  BFD_RELOC_PPC64_ADDR16_LO_DS,
  BFD_RELOC_PPC64_GOT16_DS,
  BFD_RELOC_PPC64_GOT16_LO_DS,
  BFD_RELOC_PPC64_PLT16_LO_DS,
  BFD_RELOC_PPC64_SECTOFF_DS,
  BFD_RELOC_PPC64_SECTOFF_LO_DS,
  BFD_RELOC_PPC64_TOC16_DS,
  BFD_RELOC_PPC64_TOC16_LO_DS,
  BFD_RELOC_PPC64_PLTGOT16_DS,
  BFD_RELOC_PPC64_PLTGOT16_LO_DS,


  BFD_RELOC_I370_D12,




  BFD_RELOC_CTOR,



  BFD_RELOC_ARM_PCREL_BRANCH,




  BFD_RELOC_ARM_PCREL_BLX,




  BFD_RELOC_THUMB_PCREL_BLX,



  BFD_RELOC_ARM_IMMEDIATE,
  BFD_RELOC_ARM_ADRL_IMMEDIATE,
  BFD_RELOC_ARM_OFFSET_IMM,
  BFD_RELOC_ARM_SHIFT_IMM,
  BFD_RELOC_ARM_SWI,
  BFD_RELOC_ARM_MULTI,
  BFD_RELOC_ARM_CP_OFF_IMM,
  BFD_RELOC_ARM_ADR_IMM,
  BFD_RELOC_ARM_LDR_IMM,
  BFD_RELOC_ARM_LITERAL,
  BFD_RELOC_ARM_IN_POOL,
  BFD_RELOC_ARM_OFFSET_IMM8,
  BFD_RELOC_ARM_HWLITERAL,
  BFD_RELOC_ARM_THUMB_ADD,
  BFD_RELOC_ARM_THUMB_IMM,
  BFD_RELOC_ARM_THUMB_SHIFT,
  BFD_RELOC_ARM_THUMB_OFFSET,
  BFD_RELOC_ARM_GOT12,
  BFD_RELOC_ARM_GOT32,
  BFD_RELOC_ARM_JUMP_SLOT,
  BFD_RELOC_ARM_COPY,
  BFD_RELOC_ARM_GLOB_DAT,
  BFD_RELOC_ARM_PLT32,
  BFD_RELOC_ARM_RELATIVE,
  BFD_RELOC_ARM_GOTOFF,
  BFD_RELOC_ARM_GOTPC,


  BFD_RELOC_SH_PCDISP8BY2,
  BFD_RELOC_SH_PCDISP12BY2,
  BFD_RELOC_SH_IMM4,
  BFD_RELOC_SH_IMM4BY2,
  BFD_RELOC_SH_IMM4BY4,
  BFD_RELOC_SH_IMM8,
  BFD_RELOC_SH_IMM8BY2,
  BFD_RELOC_SH_IMM8BY4,
  BFD_RELOC_SH_PCRELIMM8BY2,
  BFD_RELOC_SH_PCRELIMM8BY4,
  BFD_RELOC_SH_SWITCH16,
  BFD_RELOC_SH_SWITCH32,
  BFD_RELOC_SH_USES,
  BFD_RELOC_SH_COUNT,
  BFD_RELOC_SH_ALIGN,
  BFD_RELOC_SH_CODE,
  BFD_RELOC_SH_DATA,
  BFD_RELOC_SH_LABEL,
  BFD_RELOC_SH_LOOP_START,
  BFD_RELOC_SH_LOOP_END,
  BFD_RELOC_SH_COPY,
  BFD_RELOC_SH_GLOB_DAT,
  BFD_RELOC_SH_JMP_SLOT,
  BFD_RELOC_SH_RELATIVE,
  BFD_RELOC_SH_GOTPC,



  BFD_RELOC_THUMB_PCREL_BRANCH9,
  BFD_RELOC_THUMB_PCREL_BRANCH12,
  BFD_RELOC_THUMB_PCREL_BRANCH23,





  BFD_RELOC_ARC_B22_PCREL,




  BFD_RELOC_ARC_B26,




  BFD_RELOC_D10V_10_PCREL_R,






  BFD_RELOC_D10V_10_PCREL_L,



  BFD_RELOC_D10V_18,



  BFD_RELOC_D10V_18_PCREL,



  BFD_RELOC_D30V_6,



  BFD_RELOC_D30V_9_PCREL,





  BFD_RELOC_D30V_9_PCREL_R,



  BFD_RELOC_D30V_15,



  BFD_RELOC_D30V_15_PCREL,





  BFD_RELOC_D30V_15_PCREL_R,



  BFD_RELOC_D30V_21,



  BFD_RELOC_D30V_21_PCREL,





  BFD_RELOC_D30V_21_PCREL_R,


  BFD_RELOC_D30V_32,


  BFD_RELOC_D30V_32_PCREL,



  BFD_RELOC_M32R_24,


  BFD_RELOC_M32R_10_PCREL,


  BFD_RELOC_M32R_18_PCREL,


  BFD_RELOC_M32R_26_PCREL,



  BFD_RELOC_M32R_HI16_ULO,



  BFD_RELOC_M32R_HI16_SLO,


  BFD_RELOC_M32R_LO16,



  BFD_RELOC_M32R_SDA16,


  BFD_RELOC_V850_9_PCREL,


  BFD_RELOC_V850_22_PCREL,


  BFD_RELOC_V850_SDA_16_16_OFFSET,



  BFD_RELOC_V850_SDA_15_16_OFFSET,


  BFD_RELOC_V850_ZDA_16_16_OFFSET,



  BFD_RELOC_V850_ZDA_15_16_OFFSET,



  BFD_RELOC_V850_TDA_6_8_OFFSET,



  BFD_RELOC_V850_TDA_7_8_OFFSET,


  BFD_RELOC_V850_TDA_7_7_OFFSET,


  BFD_RELOC_V850_TDA_16_16_OFFSET,



  BFD_RELOC_V850_TDA_4_5_OFFSET,


  BFD_RELOC_V850_TDA_4_4_OFFSET,



  BFD_RELOC_V850_SDA_16_16_SPLIT_OFFSET,



  BFD_RELOC_V850_ZDA_16_16_SPLIT_OFFSET,


  BFD_RELOC_V850_CALLT_6_7_OFFSET,


  BFD_RELOC_V850_CALLT_16_16_OFFSET,




  BFD_RELOC_MN10300_32_PCREL,



  BFD_RELOC_MN10300_16_PCREL,




  BFD_RELOC_TIC30_LDP,




  BFD_RELOC_TIC54X_PARTLS7,




  BFD_RELOC_TIC54X_PARTMS9,


  BFD_RELOC_TIC54X_23,




  BFD_RELOC_TIC54X_16_OF_23,




  BFD_RELOC_TIC54X_MS7_OF_23,


  BFD_RELOC_FR30_48,



  BFD_RELOC_FR30_20,



  BFD_RELOC_FR30_6_IN_4,



  BFD_RELOC_FR30_8_IN_8,



  BFD_RELOC_FR30_9_IN_8,



  BFD_RELOC_FR30_10_IN_8,



  BFD_RELOC_FR30_9_PCREL,



  BFD_RELOC_FR30_12_PCREL,


  BFD_RELOC_MCORE_PCREL_IMM8BY4,
  BFD_RELOC_MCORE_PCREL_IMM11BY2,
  BFD_RELOC_MCORE_PCREL_IMM4BY2,
  BFD_RELOC_MCORE_PCREL_32,
  BFD_RELOC_MCORE_PCREL_JSR_IMM11BY2,
  BFD_RELOC_MCORE_RVA,


  BFD_RELOC_MMIX_GETA,
  BFD_RELOC_MMIX_GETA_1,
  BFD_RELOC_MMIX_GETA_2,
  BFD_RELOC_MMIX_GETA_3,


  BFD_RELOC_MMIX_CBRANCH,
  BFD_RELOC_MMIX_CBRANCH_J,
  BFD_RELOC_MMIX_CBRANCH_1,
  BFD_RELOC_MMIX_CBRANCH_2,
  BFD_RELOC_MMIX_CBRANCH_3,


  BFD_RELOC_MMIX_PUSHJ,
  BFD_RELOC_MMIX_PUSHJ_1,
  BFD_RELOC_MMIX_PUSHJ_2,
  BFD_RELOC_MMIX_PUSHJ_3,


  BFD_RELOC_MMIX_JMP,
  BFD_RELOC_MMIX_JMP_1,
  BFD_RELOC_MMIX_JMP_2,
  BFD_RELOC_MMIX_JMP_3,



  BFD_RELOC_MMIX_ADDR19,


  BFD_RELOC_MMIX_ADDR27,



  BFD_RELOC_MMIX_REG_OR_BYTE,



  BFD_RELOC_MMIX_REG,



  BFD_RELOC_MMIX_BASE_PLUS_OFFSET,



  BFD_RELOC_MMIX_LOCAL,



  BFD_RELOC_AVR_7_PCREL,



  BFD_RELOC_AVR_13_PCREL,



  BFD_RELOC_AVR_16_PM,



  BFD_RELOC_AVR_LO8_LDI,



  BFD_RELOC_AVR_HI8_LDI,



  BFD_RELOC_AVR_HH8_LDI,



  BFD_RELOC_AVR_LO8_LDI_NEG,




  BFD_RELOC_AVR_HI8_LDI_NEG,




  BFD_RELOC_AVR_HH8_LDI_NEG,



  BFD_RELOC_AVR_LO8_LDI_PM,



  BFD_RELOC_AVR_HI8_LDI_PM,



  BFD_RELOC_AVR_HH8_LDI_PM,



  BFD_RELOC_AVR_LO8_LDI_PM_NEG,




  BFD_RELOC_AVR_HI8_LDI_PM_NEG,




  BFD_RELOC_AVR_HH8_LDI_PM_NEG,



  BFD_RELOC_AVR_CALL,


  BFD_RELOC_390_12,


  BFD_RELOC_390_GOT12,


  BFD_RELOC_390_PLT32,


  BFD_RELOC_390_COPY,


  BFD_RELOC_390_GLOB_DAT,


  BFD_RELOC_390_JMP_SLOT,


  BFD_RELOC_390_RELATIVE,


  BFD_RELOC_390_GOTPC,


  BFD_RELOC_390_GOT16,


  BFD_RELOC_390_PC16DBL,


  BFD_RELOC_390_PLT16DBL,


  BFD_RELOC_390_PC32DBL,


  BFD_RELOC_390_PLT32DBL,


  BFD_RELOC_390_GOTPCDBL,


  BFD_RELOC_390_GOT64,


  BFD_RELOC_390_PLT64,


  BFD_RELOC_390_GOTENT,
# 2764 "bfd.h"
  BFD_RELOC_VTABLE_INHERIT,
  BFD_RELOC_VTABLE_ENTRY,


  BFD_RELOC_IA64_IMM14,
  BFD_RELOC_IA64_IMM22,
  BFD_RELOC_IA64_IMM64,
  BFD_RELOC_IA64_DIR32MSB,
  BFD_RELOC_IA64_DIR32LSB,
  BFD_RELOC_IA64_DIR64MSB,
  BFD_RELOC_IA64_DIR64LSB,
  BFD_RELOC_IA64_GPREL22,
  BFD_RELOC_IA64_GPREL64I,
  BFD_RELOC_IA64_GPREL32MSB,
  BFD_RELOC_IA64_GPREL32LSB,
  BFD_RELOC_IA64_GPREL64MSB,
  BFD_RELOC_IA64_GPREL64LSB,
  BFD_RELOC_IA64_LTOFF22,
  BFD_RELOC_IA64_LTOFF64I,
  BFD_RELOC_IA64_PLTOFF22,
  BFD_RELOC_IA64_PLTOFF64I,
  BFD_RELOC_IA64_PLTOFF64MSB,
  BFD_RELOC_IA64_PLTOFF64LSB,
  BFD_RELOC_IA64_FPTR64I,
  BFD_RELOC_IA64_FPTR32MSB,
  BFD_RELOC_IA64_FPTR32LSB,
  BFD_RELOC_IA64_FPTR64MSB,
  BFD_RELOC_IA64_FPTR64LSB,
  BFD_RELOC_IA64_PCREL21B,
  BFD_RELOC_IA64_PCREL21BI,
  BFD_RELOC_IA64_PCREL21M,
  BFD_RELOC_IA64_PCREL21F,
  BFD_RELOC_IA64_PCREL22,
  BFD_RELOC_IA64_PCREL60B,
  BFD_RELOC_IA64_PCREL64I,
  BFD_RELOC_IA64_PCREL32MSB,
  BFD_RELOC_IA64_PCREL32LSB,
  BFD_RELOC_IA64_PCREL64MSB,
  BFD_RELOC_IA64_PCREL64LSB,
  BFD_RELOC_IA64_LTOFF_FPTR22,
  BFD_RELOC_IA64_LTOFF_FPTR64I,
  BFD_RELOC_IA64_LTOFF_FPTR32MSB,
  BFD_RELOC_IA64_LTOFF_FPTR32LSB,
  BFD_RELOC_IA64_LTOFF_FPTR64MSB,
  BFD_RELOC_IA64_LTOFF_FPTR64LSB,
  BFD_RELOC_IA64_SEGREL32MSB,
  BFD_RELOC_IA64_SEGREL32LSB,
  BFD_RELOC_IA64_SEGREL64MSB,
  BFD_RELOC_IA64_SEGREL64LSB,
  BFD_RELOC_IA64_SECREL32MSB,
  BFD_RELOC_IA64_SECREL32LSB,
  BFD_RELOC_IA64_SECREL64MSB,
  BFD_RELOC_IA64_SECREL64LSB,
  BFD_RELOC_IA64_REL32MSB,
  BFD_RELOC_IA64_REL32LSB,
  BFD_RELOC_IA64_REL64MSB,
  BFD_RELOC_IA64_REL64LSB,
  BFD_RELOC_IA64_LTV32MSB,
  BFD_RELOC_IA64_LTV32LSB,
  BFD_RELOC_IA64_LTV64MSB,
  BFD_RELOC_IA64_LTV64LSB,
  BFD_RELOC_IA64_IPLTMSB,
  BFD_RELOC_IA64_IPLTLSB,
  BFD_RELOC_IA64_COPY,
  BFD_RELOC_IA64_TPREL22,
  BFD_RELOC_IA64_TPREL64MSB,
  BFD_RELOC_IA64_TPREL64LSB,
  BFD_RELOC_IA64_LTOFF_TP22,
  BFD_RELOC_IA64_LTOFF22X,
  BFD_RELOC_IA64_LDXMOV,



  BFD_RELOC_M68HC11_HI8,



  BFD_RELOC_M68HC11_LO8,



  BFD_RELOC_M68HC11_3B,



  BFD_RELOC_CRIS_BDISP8,
  BFD_RELOC_CRIS_UNSIGNED_5,
  BFD_RELOC_CRIS_SIGNED_6,
  BFD_RELOC_CRIS_UNSIGNED_6,
  BFD_RELOC_CRIS_UNSIGNED_4,


  BFD_RELOC_CRIS_COPY,
  BFD_RELOC_CRIS_GLOB_DAT,
  BFD_RELOC_CRIS_JUMP_SLOT,
  BFD_RELOC_CRIS_RELATIVE,


  BFD_RELOC_CRIS_32_GOT,


  BFD_RELOC_CRIS_16_GOT,


  BFD_RELOC_CRIS_32_GOTPLT,


  BFD_RELOC_CRIS_16_GOTPLT,


  BFD_RELOC_CRIS_32_GOTREL,


  BFD_RELOC_CRIS_32_PLT_GOTREL,


  BFD_RELOC_CRIS_32_PLT_PCREL,


  BFD_RELOC_860_COPY,
  BFD_RELOC_860_GLOB_DAT,
  BFD_RELOC_860_JUMP_SLOT,
  BFD_RELOC_860_RELATIVE,
  BFD_RELOC_860_PC26,
  BFD_RELOC_860_PLT26,
  BFD_RELOC_860_PC16,
  BFD_RELOC_860_LOW0,
  BFD_RELOC_860_SPLIT0,
  BFD_RELOC_860_LOW1,
  BFD_RELOC_860_SPLIT1,
  BFD_RELOC_860_LOW2,
  BFD_RELOC_860_SPLIT2,
  BFD_RELOC_860_LOW3,
  BFD_RELOC_860_LOGOT0,
  BFD_RELOC_860_SPGOT0,
  BFD_RELOC_860_LOGOT1,
  BFD_RELOC_860_SPGOT1,
  BFD_RELOC_860_LOGOTOFF0,
  BFD_RELOC_860_SPGOTOFF0,
  BFD_RELOC_860_LOGOTOFF1,
  BFD_RELOC_860_SPGOTOFF1,
  BFD_RELOC_860_LOGOTOFF2,
  BFD_RELOC_860_LOGOTOFF3,
  BFD_RELOC_860_LOPC,
  BFD_RELOC_860_HIGHADJ,
  BFD_RELOC_860_HAGOT,
  BFD_RELOC_860_HAGOTOFF,
  BFD_RELOC_860_HAPC,
  BFD_RELOC_860_HIGH,
  BFD_RELOC_860_HIGOT,
  BFD_RELOC_860_HIGOTOFF,


  BFD_RELOC_OPENRISC_ABS_26,
  BFD_RELOC_OPENRISC_REL_26,


  BFD_RELOC_H8_DIR16A8,
  BFD_RELOC_H8_DIR16R8,
  BFD_RELOC_H8_DIR24A8,
  BFD_RELOC_H8_DIR24R8,
  BFD_RELOC_H8_DIR32A16,
  BFD_RELOC_UNUSED };
typedef enum bfd_reloc_code_real bfd_reloc_code_real_type;
reloc_howto_type *
bfd_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);

const char *
bfd_get_reloc_code_name (bfd_reloc_code_real_type code);


typedef struct symbol_cache_entry
{
# 2947 "bfd.h"
  struct _bfd *the_bfd;



  const char *name;




  symvalue value;
# 3042 "bfd.h"
  flagword flags;




  struct sec *section;


  union
    {
      void * p;
      bfd_vma i;
    } udata;

} asymbol;


boolean
bfd_is_local_label (bfd *abfd, asymbol *sym);

boolean
bfd_is_local_label_name (bfd *abfd, const char *name);






boolean
bfd_set_symtab (bfd *abfd, asymbol **location, unsigned int count);

void
bfd_print_symbol_vandf (bfd *abfd, void * file, asymbol *symbol);





int
bfd_decode_symclass (asymbol *symbol);

boolean
bfd_is_undefined_symclass (int symclass);

void
bfd_symbol_info (asymbol *symbol, symbol_info *ret);

boolean
bfd_copy_private_symbol_data (bfd *ibfd, asymbol *isym, bfd *obfd, asymbol *osym);




struct _bfd
{

    const char *filename;


    const struct bfd_target *xvec;
# 3110 "bfd.h"
    void * iostream;




    boolean cacheable;





    boolean target_defaulted;




    struct _bfd *lru_prev, *lru_next;




    ufile_ptr where;



    boolean opened_once;




    boolean mtime_set;



    long mtime;



    int ifd;



    bfd_format format;



    enum bfd_direction {no_direction = 0,
                        read_direction = 1,
                        write_direction = 2,
                        both_direction = 3} direction;



    flagword flags;





    ufile_ptr origin;



    boolean output_has_begun;


    struct sec *sections;


    unsigned int section_count;



    bfd_vma start_address;


    unsigned int symcount;


    struct symbol_cache_entry **outsymbols;


    const struct bfd_arch_info *arch_info;


    void * arelt_data;
    struct _bfd *my_archive;
    struct _bfd *next;
    struct _bfd *archive_head;
    boolean has_armap;


    struct _bfd *link_next;



    int archive_pass;



    union
      {
      struct aout_data_struct *aout_data;
      struct artdata *aout_ar_data;
      struct _oasys_data *oasys_obj_data;
      struct _oasys_ar_data *oasys_ar_data;
      struct coff_tdata *coff_obj_data;
      struct pe_tdata *pe_obj_data;
      struct xcoff_tdata *xcoff_obj_data;
      struct ecoff_tdata *ecoff_obj_data;
      struct ieee_data_struct *ieee_data;
      struct ieee_ar_data_struct *ieee_ar_data;
      struct srec_data_struct *srec_data;
      struct ihex_data_struct *ihex_data;
      struct tekhex_data_struct *tekhex_data;
      struct elf_obj_tdata *elf_obj_data;
      struct nlm_obj_tdata *nlm_obj_data;
      struct bout_data_struct *bout_data;
      struct mmo_data_struct *mmo_data;
      struct sun_core_struct *sun_core_data;
      struct sco5_core_struct *sco5_core_data;
      struct trad_core_struct *trad_core_data;
      struct som_data_struct *som_data;
      struct hpux_core_struct *hpux_core_data;
      struct hppabsd_core_struct *hppabsd_core_data;
      struct sgi_core_struct *sgi_core_data;
      struct lynx_core_struct *lynx_core_data;
      struct osf_core_struct *osf_core_data;
      struct cisco_core_struct *cisco_core_data;
      struct versados_data_struct *versados_data;
      struct netbsd_core_struct *netbsd_core_data;
      void * any;
      } tdata;


    void * usrdata;




    void * memory;
};

typedef enum bfd_error
{
  bfd_error_no_error = 0,
  bfd_error_system_call,
  bfd_error_invalid_target,
  bfd_error_wrong_format,
  bfd_error_wrong_object_format,
  bfd_error_invalid_operation,
  bfd_error_no_memory,
  bfd_error_no_symbols,
  bfd_error_no_armap,
  bfd_error_no_more_archived_files,
  bfd_error_malformed_archive,
  bfd_error_file_not_recognized,
  bfd_error_file_ambiguously_recognized,
  bfd_error_no_contents,
  bfd_error_nonrepresentable_section,
  bfd_error_no_debug_section,
  bfd_error_bad_value,
  bfd_error_file_truncated,
  bfd_error_file_too_big,
  bfd_error_invalid_error_code
} bfd_error_type;

bfd_error_type
bfd_get_error (void);

void
bfd_set_error (bfd_error_type error_tag);

const char *
bfd_errmsg (bfd_error_type error_tag);

void
bfd_perror (const char *message);

typedef void (*bfd_error_handler_type) (const char *, ...);

bfd_error_handler_type
bfd_set_error_handler (bfd_error_handler_type);

void
bfd_set_error_program_name (const char *);

bfd_error_handler_type
bfd_get_error_handler (void);

const char *
bfd_archive_filename (bfd *);

long
bfd_get_reloc_upper_bound (bfd *abfd, asection *sect);

long
bfd_canonicalize_reloc (bfd *abfd, asection *sec, arelent **loc, asymbol **syms);




void
bfd_set_reloc (bfd *abfd, asection *sec, arelent **rel, unsigned int count);



boolean
bfd_set_file_flags (bfd *abfd, flagword flags);

int
bfd_get_arch_size (bfd *abfd);

int
bfd_get_sign_extend_vma (bfd *abfd);

boolean
bfd_set_start_address (bfd *abfd, bfd_vma vma);

long
bfd_get_mtime (bfd *abfd);

long
bfd_get_size (bfd *abfd);

unsigned int
bfd_get_gp_size (bfd *abfd);

void
bfd_set_gp_size (bfd *abfd, unsigned int i);

bfd_vma
bfd_scan_vma (const char *string, const char **end, int base);

boolean
bfd_copy_private_bfd_data (bfd *ibfd, bfd *obfd);




boolean
bfd_merge_private_bfd_data (bfd *ibfd, bfd *obfd);




boolean
bfd_set_private_flags (bfd *abfd, flagword flags);
# 3424 "bfd.h"
extern bfd_byte *bfd_get_relocated_section_contents
       (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, boolean, asymbol **);



boolean
bfd_alt_mach_code (bfd *abfd, int index);

symindex
bfd_get_next_mapent (bfd *abfd, symindex previous, carsym **sym);

boolean
bfd_set_archive_head (bfd *output, bfd *new_head);

bfd *
bfd_openr_next_archived_file (bfd *archive, bfd *previous);

const char *
bfd_core_file_failing_command (bfd *abfd);

int
bfd_core_file_failing_signal (bfd *abfd);

boolean
core_file_matches_executable_p (bfd *core_bfd, bfd *exec_bfd);
# 3470 "bfd.h"
enum bfd_flavour {
  bfd_target_unknown_flavour,
  bfd_target_aout_flavour,
  bfd_target_coff_flavour,
  bfd_target_ecoff_flavour,
  bfd_target_xcoff_flavour,
  bfd_target_elf_flavour,
  bfd_target_ieee_flavour,
  bfd_target_nlm_flavour,
  bfd_target_oasys_flavour,
  bfd_target_tekhex_flavour,
  bfd_target_srec_flavour,
  bfd_target_ihex_flavour,
  bfd_target_som_flavour,
  bfd_target_os9k_flavour,
  bfd_target_versados_flavour,
  bfd_target_msdos_flavour,
  bfd_target_ovax_flavour,
  bfd_target_evax_flavour,
  bfd_target_mmo_flavour
};

enum bfd_endian { BFD_ENDIAN_BIG, BFD_ENDIAN_LITTLE, BFD_ENDIAN_UNKNOWN };


typedef struct bfd_link_info _bfd_link_info;

typedef struct bfd_target
{
  char *name;
  enum bfd_flavour flavour;
  enum bfd_endian byteorder;
  enum bfd_endian header_byteorder;
  flagword object_flags;
  flagword section_flags;
  char symbol_leading_char;
  char ar_pad_char;
  unsigned short ar_max_namelen;
  bfd_vma (*bfd_getx64) (const bfd_byte *);
  bfd_signed_vma (*bfd_getx_signed_64) (const bfd_byte *);
  void (*bfd_putx64) (bfd_vma, bfd_byte *);
  bfd_vma (*bfd_getx32) (const bfd_byte *);
  bfd_signed_vma (*bfd_getx_signed_32) (const bfd_byte *);
  void (*bfd_putx32) (bfd_vma, bfd_byte *);
  bfd_vma (*bfd_getx16) (const bfd_byte *);
  bfd_signed_vma (*bfd_getx_signed_16) (const bfd_byte *);
  void (*bfd_putx16) (bfd_vma, bfd_byte *);
  bfd_vma (*bfd_h_getx64) (const bfd_byte *);
  bfd_signed_vma (*bfd_h_getx_signed_64) (const bfd_byte *);
  void (*bfd_h_putx64) (bfd_vma, bfd_byte *);
  bfd_vma (*bfd_h_getx32) (const bfd_byte *);
  bfd_signed_vma (*bfd_h_getx_signed_32) (const bfd_byte *);
  void (*bfd_h_putx32) (bfd_vma, bfd_byte *);
  bfd_vma (*bfd_h_getx16) (const bfd_byte *);
  bfd_signed_vma (*bfd_h_getx_signed_16) (const bfd_byte *);
  void (*bfd_h_putx16) (bfd_vma, bfd_byte *);
  const struct bfd_target *(*_bfd_check_format[bfd_type_end]) (bfd *);
  boolean (*_bfd_set_format[bfd_type_end]) (bfd *);
  boolean (*_bfd_write_contents[bfd_type_end]) (bfd *);
# 3539 "bfd.h"
  boolean (*_close_and_cleanup) (bfd *);

  boolean (*_bfd_free_cached_info) (bfd *);

  boolean (*_new_section_hook) (bfd *, sec_ptr);

  boolean (*_bfd_get_section_contents) (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);

  boolean (*_bfd_get_section_contents_in_window)
    (bfd *, sec_ptr, bfd_window *, file_ptr, bfd_size_type);
# 3560 "bfd.h"
  boolean (*_bfd_copy_private_bfd_data) (bfd *, bfd *);


  boolean (*_bfd_merge_private_bfd_data) (bfd *, bfd *);


  boolean (*_bfd_copy_private_section_data) (bfd *, sec_ptr, bfd *, sec_ptr);



  boolean (*_bfd_copy_private_symbol_data) (bfd *, asymbol *, bfd *, asymbol *);


  boolean (*_bfd_set_private_flags) (bfd *, flagword);


  boolean (*_bfd_print_private_bfd_data) (bfd *, void *);






  char * (*_core_file_failing_command) (bfd *);
  int (*_core_file_failing_signal) (bfd *);
  boolean (*_core_file_matches_executable_p) (bfd *, bfd *);
# 3599 "bfd.h"
  boolean (*_bfd_slurp_armap) (bfd *);
  boolean (*_bfd_slurp_extended_name_table) (bfd *);
  boolean (*_bfd_construct_extended_name_table)
    (bfd *, char **, bfd_size_type *, const char **);
  void (*_bfd_truncate_arname) (bfd *, const char *, char *);
  boolean (*write_armap)
    (bfd *, unsigned int, struct orl *, unsigned int, int);
  void * (*_bfd_read_ar_hdr_fn) (bfd *);
  bfd * (*openr_next_archived_file) (bfd *, bfd *);

  bfd * (*_bfd_get_elt_at_index) (bfd *, symindex);
  int (*_bfd_stat_arch_elt) (bfd *, struct stat *);
  boolean (*_bfd_update_armap_timestamp) (bfd *);
# 3626 "bfd.h"
  long (*_bfd_get_symtab_upper_bound) (bfd *);
  long (*_bfd_canonicalize_symtab) (bfd *, struct symbol_cache_entry **);

  struct symbol_cache_entry *
           (*_bfd_make_empty_symbol) (bfd *);
  void (*_bfd_print_symbol) (bfd *, void *, struct symbol_cache_entry *, bfd_print_symbol_type);



  void (*_bfd_get_symbol_info) (bfd *, struct symbol_cache_entry *, symbol_info *);



  boolean (*_bfd_is_local_label_name) (bfd *, const char *);

  alent * (*_get_lineno) (bfd *, struct symbol_cache_entry *);
  boolean (*_bfd_find_nearest_line)
    (bfd *, struct sec *, struct symbol_cache_entry **, bfd_vma, const char **, const char **, unsigned int *);




  asymbol *(*_bfd_make_debug_symbol) (bfd *, void *, unsigned long size);



  long (*_read_minisymbols) (bfd *, boolean, void * *, unsigned int *);



  asymbol *(*_minisymbol_to_symbol) (bfd *, boolean, const void *, asymbol *);







  long (*_get_reloc_upper_bound) (bfd *, sec_ptr);
  long (*_bfd_canonicalize_reloc) (bfd *, sec_ptr, arelent **, struct symbol_cache_entry **);


  reloc_howto_type *
           (*reloc_type_lookup) (bfd *, bfd_reloc_code_real_type);





  boolean (*_bfd_set_arch_mach) (bfd *, enum bfd_architecture, unsigned long);

  boolean (*_bfd_set_section_contents) (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
# 3691 "bfd.h"
  int (*_bfd_sizeof_headers) (bfd *, boolean);
  bfd_byte *(*_bfd_get_relocated_section_contents)
    (bfd *, struct bfd_link_info *, struct bfd_link_order *, bfd_byte *, boolean, struct symbol_cache_entry **);


  boolean (*_bfd_relax_section)
    (bfd *, struct sec *, struct bfd_link_info *, boolean *);



  struct bfd_link_hash_table *(*_bfd_link_hash_table_create) (bfd *);


  boolean (*_bfd_link_add_symbols) (bfd *, struct bfd_link_info *);



  boolean (*_bfd_final_link) (bfd *, struct bfd_link_info *);


  boolean (*_bfd_link_split_section) (bfd *, struct sec *);


  boolean (*_bfd_gc_sections) (bfd *, struct bfd_link_info *);


  boolean (*_bfd_merge_sections) (bfd *, struct bfd_link_info *);
# 3726 "bfd.h"
  long (*_bfd_get_dynamic_symtab_upper_bound) (bfd *);

  long (*_bfd_canonicalize_dynamic_symtab)
    (bfd *, struct symbol_cache_entry **);

  long (*_bfd_get_dynamic_reloc_upper_bound) (bfd *);

  long (*_bfd_canonicalize_dynamic_reloc)
    (bfd *, arelent **, struct symbol_cache_entry **);


 const struct bfd_target * alternative_target;

 void * backend_data;

} bfd_target;
boolean
bfd_set_default_target (const char *name);

const bfd_target *
bfd_find_target (const char *target_name, bfd *abfd);

const char **
bfd_target_list (void);

const bfd_target *
bfd_search_for_target (int (* search_func) (const bfd_target *, void *), void *);

boolean
bfd_check_format (bfd *abfd, bfd_format format);

boolean
bfd_check_format_matches (bfd *abfd, bfd_format format, char ***matching);

boolean
bfd_set_format (bfd *abfd, bfd_format format);

const char *
bfd_format_string (bfd_format format);
# 68 "elfcode.h" 2
# 1 "sysdep.h" 1
# 27 "sysdep.h"
# 1 "config.h" 1
# 28 "sysdep.h" 2


# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 147 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 3
typedef long int ptrdiff_t;
# 201 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 3
typedef long unsigned int size_t;
# 293 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 3
typedef int wchar_t;
# 31 "sysdep.h" 2


# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 1 3
# 36 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/features.h" 1 3
# 283 "/usr/include/features.h" 3
# 1 "/usr/include/sys/cdefs.h" 1 3
# 284 "/usr/include/features.h" 2 3
# 311 "/usr/include/features.h" 3
# 1 "/usr/include/gnu/stubs.h" 1 3
# 312 "/usr/include/features.h" 2 3
# 37 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3





# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 43 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3

# 1 "/usr/include/bits/types.h" 1 3
# 29 "/usr/include/bits/types.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 30 "/usr/include/bits/types.h" 2 3


typedef unsigned char __u_char;
typedef unsigned short int __u_short;
typedef unsigned int __u_int;
typedef unsigned long int __u_long;
typedef unsigned long int __u_quad_t;
typedef long int __quad_t;
typedef signed char __int8_t;
typedef unsigned char __uint8_t;
typedef signed short int __int16_t;
typedef unsigned short int __uint16_t;
typedef signed int __int32_t;
typedef unsigned int __uint32_t;
typedef signed long int __int64_t;
typedef unsigned long int __uint64_t;
typedef __quad_t *__qaddr_t;

typedef __uint64_t __dev_t;
typedef __uint32_t __uid_t;
typedef __uint32_t __gid_t;
typedef __uint32_t __ino_t;
typedef __uint64_t __ino64_t;
typedef __uint32_t __mode_t;
typedef __uint32_t __nlink_t;
typedef __int64_t __off_t;
typedef __int64_t __off64_t;
typedef __int64_t __loff_t;
typedef __int32_t __pid_t;
typedef __int64_t __ssize_t;
typedef __uint64_t __rlim_t;
typedef __uint64_t __rlim64_t;
typedef __uint32_t __blksize_t;
typedef __uint32_t __blkcnt_t;
typedef __uint64_t __blkcnt64_t;
typedef __int32_t __fsblkcnt_t;
typedef __int64_t __fsblkcnt64_t;
typedef __uint32_t __fsfilcnt_t;
typedef __uint64_t __fsfilcnt64_t;
typedef __uint32_t __id_t;

typedef struct
  {
    int __val[2];
  } __fsid_t;


typedef int __daddr_t;
typedef char *__caddr_t;
typedef long int __time_t;
typedef unsigned int __useconds_t;
typedef long int __suseconds_t;
typedef long int __swblk_t;
typedef long int __clock_t;
typedef int __key_t;


typedef int __clockid_t;


typedef int __timer_t;


typedef int __ipc_pid_t;






typedef long int __t_scalar_t;
typedef unsigned long int __t_uscalar_t;


typedef long int __intptr_t;


typedef unsigned int __socklen_t;




# 1 "/usr/include/bits/pthreadtypes.h" 1 3
# 23 "/usr/include/bits/pthreadtypes.h" 3
# 1 "/usr/include/bits/sched.h" 1 3
# 68 "/usr/include/bits/sched.h" 3
struct __sched_param
  {
    int __sched_priority;
  };
# 24 "/usr/include/bits/pthreadtypes.h" 2 3


struct _pthread_fastlock
{
  long int __status;
  int __spinlock;

};



typedef struct _pthread_descr_struct *_pthread_descr;





typedef struct __pthread_attr_s
{
  int __detachstate;
  int __schedpolicy;
  struct __sched_param __schedparam;
  int __inheritsched;
  int __scope;
  size_t __guardsize;
  int __stackaddr_set;
  void *__stackaddr;
  size_t __stacksize;
} pthread_attr_t;



typedef struct
{
  struct _pthread_fastlock __c_lock;
  _pthread_descr __c_waiting;
} pthread_cond_t;



typedef struct
{
  int __dummy;
} pthread_condattr_t;


typedef unsigned int pthread_key_t;





typedef struct
{
  int __m_reserved;
  int __m_count;
  _pthread_descr __m_owner;
  int __m_kind;
  struct _pthread_fastlock __m_lock;
} pthread_mutex_t;



typedef struct
{
  int __mutexkind;
} pthread_mutexattr_t;



typedef int pthread_once_t;




typedef struct _pthread_rwlock_t
{
  struct _pthread_fastlock __rw_lock;
  int __rw_readers;
  _pthread_descr __rw_writer;
  _pthread_descr __rw_read_waiting;
  _pthread_descr __rw_write_waiting;
  int __rw_kind;
  int __rw_pshared;
} pthread_rwlock_t;



typedef struct
{
  int __lockkind;
  int __pshared;
} pthread_rwlockattr_t;




typedef volatile int pthread_spinlock_t;


typedef struct {
  struct _pthread_fastlock __ba_lock;
  int __ba_required;
  int __ba_present;
  _pthread_descr __ba_waiting;
} pthread_barrier_t;


typedef struct {
  int __pshared;
} pthread_barrierattr_t;





typedef unsigned long int pthread_t;
# 113 "/usr/include/bits/types.h" 2 3
# 45 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3
# 53 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
typedef struct _IO_FILE FILE;
# 63 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
typedef struct _IO_FILE __FILE;
# 73 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/libio.h" 1 3
# 30 "/usr/include/libio.h" 3
# 1 "/usr/include/_G_config.h" 1 3
# 14 "/usr/include/_G_config.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 320 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 3
typedef unsigned int wint_t;
# 15 "/usr/include/_G_config.h" 2 3
# 24 "/usr/include/_G_config.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3

# 1 "/usr/include/bits/wchar.h" 1 3
# 51 "/usr/include/wchar.h" 2 3
# 67 "/usr/include/wchar.h" 3
typedef struct
{
  int __count;
  union
  {
    wint_t __wch;
    char __wchb[4];
  } __value;
} __mbstate_t;
# 25 "/usr/include/_G_config.h" 2 3

typedef struct
{
  __off_t __pos;
  __mbstate_t __state;
} _G_fpos_t;
typedef struct
{
  __off64_t __pos;
  __mbstate_t __state;
} _G_fpos64_t;
# 44 "/usr/include/_G_config.h" 3
# 1 "/usr/include/gconv.h" 1 3
# 28 "/usr/include/gconv.h" 3
# 1 "/usr/include/wchar.h" 1 3
# 48 "/usr/include/wchar.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 49 "/usr/include/wchar.h" 2 3
# 29 "/usr/include/gconv.h" 2 3

# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 31 "/usr/include/gconv.h" 2 3





enum
{
  __GCONV_OK = 0,
  __GCONV_NOCONV,
  __GCONV_NODB,
  __GCONV_NOMEM,

  __GCONV_EMPTY_INPUT,
  __GCONV_FULL_OUTPUT,
  __GCONV_ILLEGAL_INPUT,
  __GCONV_INCOMPLETE_INPUT,

  __GCONV_ILLEGAL_DESCRIPTOR,
  __GCONV_INTERNAL_ERROR
};



enum
{
  __GCONV_IS_LAST = 0x0001,
  __GCONV_IGNORE_ERRORS = 0x0002
};



struct __gconv_step;
struct __gconv_step_data;
struct __gconv_loaded_object;
struct __gconv_trans_data;



typedef int (*__gconv_fct) (struct __gconv_step *, struct __gconv_step_data *,
                            __const unsigned char **, __const unsigned char *,
                            unsigned char **, size_t *, int, int);


typedef int (*__gconv_init_fct) (struct __gconv_step *);
typedef void (*__gconv_end_fct) (struct __gconv_step *);



typedef int (*__gconv_trans_fct) (struct __gconv_step *,
                                  struct __gconv_step_data *, void *,
                                  __const unsigned char *,
                                  __const unsigned char **,
                                  __const unsigned char *, unsigned char **,
                                  size_t *);


typedef int (*__gconv_trans_context_fct) (void *, __const unsigned char *,
                                          __const unsigned char *,
                                          unsigned char *, unsigned char *);


typedef int (*__gconv_trans_query_fct) (__const char *, __const char ***,
                                        size_t *);


typedef int (*__gconv_trans_init_fct) (void **, const char *);
typedef void (*__gconv_trans_end_fct) (void *);

struct __gconv_trans_data
{

  __gconv_trans_fct __trans_fct;
  __gconv_trans_context_fct __trans_context_fct;
  __gconv_trans_end_fct __trans_end_fct;
  void *__data;
  struct __gconv_trans_data *__next;
};



struct __gconv_step
{
  struct __gconv_loaded_object *__shlib_handle;
  __const char *__modname;

  int __counter;

  char *__from_name;
  char *__to_name;

  __gconv_fct __fct;
  __gconv_init_fct __init_fct;
  __gconv_end_fct __end_fct;



  int __min_needed_from;
  int __max_needed_from;
  int __min_needed_to;
  int __max_needed_to;


  int __stateful;

  void *__data;
};



struct __gconv_step_data
{
  unsigned char *__outbuf;
  unsigned char *__outbufend;



  int __flags;



  int __invocation_counter;



  int __internal_use;

  __mbstate_t *__statep;
  __mbstate_t __state;



  struct __gconv_trans_data *__trans;
};



typedef struct __gconv_info
{
  size_t __nsteps;
  struct __gconv_step *__steps;
  __extension__ struct __gconv_step_data __data [];
} *__gconv_t;
# 45 "/usr/include/_G_config.h" 2 3
typedef union
{
  struct __gconv_info __cd;
  struct
  {
    struct __gconv_info __cd;
    struct __gconv_step_data __data;
  } __combined;
} _G_iconv_t;

typedef int _G_int16_t __attribute__ ((__mode__ (__HI__)));
typedef int _G_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int _G_uint16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int _G_uint32_t __attribute__ ((__mode__ (__SI__)));
# 31 "/usr/include/libio.h" 2 3
# 51 "/usr/include/libio.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdarg.h" 1 3
# 43 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdarg.h" 3
typedef __builtin_va_list __gnuc_va_list;
# 52 "/usr/include/libio.h" 2 3
# 158 "/usr/include/libio.h" 3
struct _IO_jump_t; struct _IO_FILE;
# 168 "/usr/include/libio.h" 3
typedef void _IO_lock_t;





struct _IO_marker {
  struct _IO_marker *_next;
  struct _IO_FILE *_sbuf;



  int _pos;
# 191 "/usr/include/libio.h" 3
};


enum __codecvt_result
{
  __codecvt_ok,
  __codecvt_partial,
  __codecvt_error,
  __codecvt_noconv
};
# 259 "/usr/include/libio.h" 3
struct _IO_FILE {
  int _flags;




  char* _IO_read_ptr;
  char* _IO_read_end;
  char* _IO_read_base;
  char* _IO_write_base;
  char* _IO_write_ptr;
  char* _IO_write_end;
  char* _IO_buf_base;
  char* _IO_buf_end;

  char *_IO_save_base;
  char *_IO_backup_base;
  char *_IO_save_end;

  struct _IO_marker *_markers;

  struct _IO_FILE *_chain;

  int _fileno;
  int _blksize;
  __off_t _old_offset;



  unsigned short _cur_column;
  signed char _vtable_offset;
  char _shortbuf[1];



  _IO_lock_t *_lock;
# 303 "/usr/include/libio.h" 3
  __off64_t _offset;





  void *__pad1;
  void *__pad2;

  int _mode;

  char _unused2[15 * sizeof (int) - 2 * sizeof (void *)];

};


typedef struct _IO_FILE _IO_FILE;


struct _IO_FILE_plus;

extern struct _IO_FILE_plus _IO_2_1_stdin_;
extern struct _IO_FILE_plus _IO_2_1_stdout_;
extern struct _IO_FILE_plus _IO_2_1_stderr_;
# 342 "/usr/include/libio.h" 3
typedef __ssize_t __io_read_fn (void *__cookie, char *__buf, size_t __nbytes);







typedef __ssize_t __io_write_fn (void *__cookie, __const char *__buf,
                                 size_t __n);







typedef int __io_seek_fn (void *__cookie, __off64_t *__pos, int __w);


typedef int __io_close_fn (void *__cookie);




typedef __io_read_fn cookie_read_function_t;
typedef __io_write_fn cookie_write_function_t;
typedef __io_seek_fn cookie_seek_function_t;
typedef __io_close_fn cookie_close_function_t;


typedef struct
{
  __io_read_fn *read;
  __io_write_fn *write;
  __io_seek_fn *seek;
  __io_close_fn *close;
} _IO_cookie_io_functions_t;
typedef _IO_cookie_io_functions_t cookie_io_functions_t;

struct _IO_cookie_file;


extern void _IO_cookie_init (struct _IO_cookie_file *__cfile, int __read_write,
                             void *__cookie, _IO_cookie_io_functions_t __fns);







extern int __underflow (_IO_FILE *) ;
extern int __uflow (_IO_FILE *) ;
extern int __overflow (_IO_FILE *, int) ;
extern wint_t __wunderflow (_IO_FILE *) ;
extern wint_t __wuflow (_IO_FILE *) ;
extern wint_t __woverflow (_IO_FILE *, wint_t) ;
# 424 "/usr/include/libio.h" 3
extern int _IO_getc (_IO_FILE *__fp) ;
extern int _IO_putc (int __c, _IO_FILE *__fp) ;
extern int _IO_feof (_IO_FILE *__fp) ;
extern int _IO_ferror (_IO_FILE *__fp) ;

extern int _IO_peekc_locked (_IO_FILE *__fp) ;





extern void _IO_flockfile (_IO_FILE *) ;
extern void _IO_funlockfile (_IO_FILE *) ;
extern int _IO_ftrylockfile (_IO_FILE *) ;
# 454 "/usr/include/libio.h" 3
extern int _IO_vfscanf (_IO_FILE * __restrict, const char * __restrict,
                        __gnuc_va_list, int *__restrict) ;
extern int _IO_vfprintf (_IO_FILE *__restrict, const char *__restrict,
                         __gnuc_va_list) ;
extern __ssize_t _IO_padn (_IO_FILE *, int, __ssize_t) ;
extern size_t _IO_sgetn (_IO_FILE *, void *, size_t) ;

extern __off64_t _IO_seekoff (_IO_FILE *, __off64_t, int, int) ;
extern __off64_t _IO_seekpos (_IO_FILE *, __off64_t, int) ;

extern void _IO_free_backup_area (_IO_FILE *) ;
# 74 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3




typedef __gnuc_va_list __not_va_list__;
# 88 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
typedef _G_fpos_t fpos_t;




typedef _G_fpos64_t fpos64_t;
# 137 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/bits/stdio_lim.h" 1 3
# 138 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3



extern FILE *stdin;
extern FILE *stdout;
extern FILE *stderr;






extern int remove (__const char *__filename) ;

extern int rename (__const char *__old, __const char *__new) ;




extern FILE *tmpfile (void) ;
# 166 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern FILE *tmpfile64 (void) ;


extern char *tmpnam (char *__s) ;




extern char *tmpnam_r (char *__s) ;
# 186 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern char *tempnam (__const char *__dir, __const char *__pfx)
     __attribute__ ((__malloc__));




extern int fclose (FILE *__stream) ;

extern int fflush (FILE *__stream) ;



extern int fflush_unlocked (FILE *__stream) ;




extern int fcloseall (void) ;





extern FILE *fopen (__const char *__restrict __filename,
                    __const char *__restrict __modes) ;

extern FILE *freopen (__const char *__restrict __filename,
                      __const char *__restrict __modes,
                      FILE *__restrict __stream) ;
# 230 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern FILE *fopen64 (__const char *__restrict __filename,
                      __const char *__restrict __modes) ;
extern FILE *freopen64 (__const char *__restrict __filename,
                        __const char *__restrict __modes,
                        FILE *__restrict __stream) ;




extern FILE *fdopen (int __fd, __const char *__modes) ;





extern FILE *fopencookie (void *__restrict __magic_cookie,
                          __const char *__restrict __modes,
                          _IO_cookie_io_functions_t __io_funcs) ;


extern FILE *fmemopen (void *__s, size_t __len, __const char *__modes) ;




extern FILE *open_memstream (char **__restrict __bufloc,
                             size_t *__restrict __sizeloc) ;





extern void setbuf (FILE *__restrict __stream, char *__restrict __buf) ;



extern int setvbuf (FILE *__restrict __stream, char *__restrict __buf,
                    int __modes, size_t __n) ;




extern void setbuffer (FILE *__restrict __stream, char *__restrict __buf,
                       size_t __size) ;


extern void setlinebuf (FILE *__stream) ;




extern int fprintf (FILE *__restrict __stream,
                    __const char *__restrict __format, ...) ;

extern int printf (__const char *__restrict __format, ...) ;

extern int sprintf (char *__restrict __s,
                    __const char *__restrict __format, ...) ;


extern int vfprintf (FILE *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;

extern int vprintf (__const char *__restrict __format, __gnuc_va_list __arg)
     ;

extern int vsprintf (char *__restrict __s, __const char *__restrict __format,
                     __gnuc_va_list __arg) ;



extern int snprintf (char *__restrict __s, size_t __maxlen,
                     __const char *__restrict __format, ...)
     __attribute__ ((__format__ (__printf__, 3, 4)));

extern int vsnprintf (char *__restrict __s, size_t __maxlen,
                      __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 3, 0)));





extern int vasprintf (char **__restrict __ptr, __const char *__restrict __f,
                      __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int __asprintf (char **__restrict __ptr,
                       __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));
extern int asprintf (char **__restrict __ptr,
                     __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));


extern int vdprintf (int __fd, __const char *__restrict __fmt,
                     __gnuc_va_list __arg)
     __attribute__ ((__format__ (__printf__, 2, 0)));
extern int dprintf (int __fd, __const char *__restrict __fmt, ...)
     __attribute__ ((__format__ (__printf__, 2, 3)));




extern int fscanf (FILE *__restrict __stream,
                   __const char *__restrict __format, ...) ;

extern int scanf (__const char *__restrict __format, ...) ;

extern int sscanf (__const char *__restrict __s,
                   __const char *__restrict __format, ...) ;



extern int vfscanf (FILE *__restrict __s, __const char *__restrict __format,
                    __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0)));


extern int vscanf (__const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 1, 0)));


extern int vsscanf (__const char *__restrict __s,
                    __const char *__restrict __format, __gnuc_va_list __arg)
     __attribute__ ((__format__ (__scanf__, 2, 0)));




extern int fgetc (FILE *__stream) ;
extern int getc (FILE *__stream) ;


extern int getchar (void) ;







extern int getc_unlocked (FILE *__stream) ;
extern int getchar_unlocked (void) ;




extern int fgetc_unlocked (FILE *__stream) ;




extern int fputc (int __c, FILE *__stream) ;
extern int putc (int __c, FILE *__stream) ;


extern int putchar (int __c) ;







extern int fputc_unlocked (int __c, FILE *__stream) ;




extern int putc_unlocked (int __c, FILE *__stream) ;
extern int putchar_unlocked (int __c) ;





extern int getw (FILE *__stream) ;


extern int putw (int __w, FILE *__stream) ;




extern char *fgets (char *__restrict __s, int __n, FILE *__restrict __stream)
     ;



extern char *fgets_unlocked (char *__restrict __s, int __n,
                             FILE *__restrict __stream) ;




extern char *gets (char *__s) ;
# 434 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern __ssize_t __getdelim (char **__restrict __lineptr,
                               size_t *__restrict __n, int __delimiter,
                               FILE *__restrict __stream) ;
extern __ssize_t getdelim (char **__restrict __lineptr,
                             size_t *__restrict __n, int __delimiter,
                             FILE *__restrict __stream) ;


extern __ssize_t getline (char **__restrict __lineptr,
                            size_t *__restrict __n,
                            FILE *__restrict __stream) ;




extern int fputs (__const char *__restrict __s, FILE *__restrict __stream)
     ;



extern int fputs_unlocked (__const char *__restrict __s,
                           FILE *__restrict __stream) ;



extern int puts (__const char *__s) ;



extern int ungetc (int __c, FILE *__stream) ;



extern size_t fread (void *__restrict __ptr, size_t __size,
                     size_t __n, FILE *__restrict __stream) ;

extern size_t fwrite (__const void *__restrict __ptr, size_t __size,
                      size_t __n, FILE *__restrict __s) ;



extern size_t fread_unlocked (void *__restrict __ptr, size_t __size,
                              size_t __n, FILE *__restrict __stream) ;
extern size_t fwrite_unlocked (__const void *__restrict __ptr, size_t __size,
                               size_t __n, FILE *__restrict __stream) ;




extern int fseek (FILE *__stream, long int __off, int __whence) ;

extern long int ftell (FILE *__stream) ;

extern void rewind (FILE *__stream) ;
# 497 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern int fseeko (FILE *__stream, __off_t __off, int __whence) ;

extern __off_t ftello (FILE *__stream) ;



extern int fgetpos (FILE *__restrict __stream, fpos_t *__restrict __pos)
     ;

extern int fsetpos (FILE *__stream, __const fpos_t *__pos) ;
# 531 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
extern int fseeko64 (FILE *__stream, __off64_t __off, int __whence) ;
extern __off64_t ftello64 (FILE *__stream) ;
extern int fgetpos64 (FILE *__restrict __stream, fpos64_t *__restrict __pos)
     ;
extern int fsetpos64 (FILE *__stream, __const fpos64_t *__pos) ;



extern void clearerr (FILE *__stream) ;

extern int feof (FILE *__stream) ;

extern int ferror (FILE *__stream) ;



extern void clearerr_unlocked (FILE *__stream) ;
extern int feof_unlocked (FILE *__stream) ;
extern int ferror_unlocked (FILE *__stream) ;




extern void perror (__const char *__s) ;




extern int sys_nerr;
extern __const char *__const sys_errlist[];


extern int _sys_nerr;
extern __const char *__const _sys_errlist[];





extern int fileno (FILE *__stream) ;




extern int fileno_unlocked (FILE *__stream) ;






extern FILE *popen (__const char *__command, __const char *__modes) ;


extern int pclose (FILE *__stream) ;





extern char *ctermid (char *__s) ;





extern char *cuserid (char *__s) ;




struct obstack;


extern int obstack_printf (struct obstack *__restrict __obstack,
                           __const char *__restrict __format, ...) ;
extern int obstack_vprintf (struct obstack *__restrict __obstack,
                            __const char *__restrict __format,
                            __gnuc_va_list __args) ;







extern void flockfile (FILE *__stream) ;



extern int ftrylockfile (FILE *__stream) ;


extern void funlockfile (FILE *__stream) ;
# 638 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 3
# 1 "/usr/include/bits/stdio.h" 1 3
# 39 "/usr/include/bits/stdio.h" 3
extern __inline int
vprintf (__const char *__restrict __fmt, __gnuc_va_list __arg)
{
  return vfprintf (stdout, __fmt, __arg);
}


extern __inline int
getchar (void)
{
  return _IO_getc (stdin);
}




extern __inline int
getc_unlocked (FILE *__fp)
{
  return ((__fp)->_IO_read_ptr >= (__fp)->_IO_read_end ? __uflow (__fp) : *(unsigned char *) (__fp)->_IO_read_ptr++);
}


extern __inline int
getchar_unlocked (void)
{
  return ((stdin)->_IO_read_ptr >= (stdin)->_IO_read_end ? __uflow (stdin) : *(unsigned char *) (stdin)->_IO_read_ptr++);
}




extern __inline int
putchar (int __c)
{
  return _IO_putc (__c, stdout);
}




extern __inline int
fputc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}





extern __inline int
putc_unlocked (int __c, FILE *__stream)
{
  return (((__stream)->_IO_write_ptr >= (__stream)->_IO_write_end) ? __overflow (__stream, (unsigned char) (__c)) : (unsigned char) (*(__stream)->_IO_write_ptr++ = (__c)));
}


extern __inline int
putchar_unlocked (int __c)
{
  return (((stdout)->_IO_write_ptr >= (stdout)->_IO_write_end) ? __overflow (stdout, (unsigned char) (__c)) : (unsigned char) (*(stdout)->_IO_write_ptr++ = (__c)));
}





extern __inline __ssize_t
getline (char **__lineptr, size_t *__n, FILE *__stream)
{
  return __getdelim (__lineptr, __n, '\n', __stream);
}





extern __inline int
feof_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x10) != 0);
}


extern __inline int
ferror_unlocked (FILE *__stream)
{
  return (((__stream)->_flags & 0x20) != 0);
}
# 639 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdio.h" 2 3



# 34 "sysdep.h" 2
# 1 "/usr/include/sys/types.h" 1 3
# 28 "/usr/include/sys/types.h" 3





typedef __u_char u_char;
typedef __u_short u_short;
typedef __u_int u_int;
typedef __u_long u_long;
typedef __quad_t quad_t;
typedef __u_quad_t u_quad_t;
typedef __fsid_t fsid_t;


typedef __loff_t loff_t;



typedef __ino_t ino_t;






typedef __ino64_t ino64_t;




typedef __dev_t dev_t;




typedef __gid_t gid_t;




typedef __mode_t mode_t;




typedef __nlink_t nlink_t;




typedef __uid_t uid_t;





typedef __off_t off_t;






typedef __off64_t off64_t;




typedef __pid_t pid_t;




typedef __id_t id_t;




typedef __ssize_t ssize_t;




typedef __daddr_t daddr_t;
typedef __caddr_t caddr_t;



typedef __key_t key_t;
# 126 "/usr/include/sys/types.h" 3
# 1 "/usr/include/time.h" 1 3
# 59 "/usr/include/time.h" 3
typedef __clock_t clock_t;
# 70 "/usr/include/time.h" 3
typedef __time_t time_t;
# 82 "/usr/include/time.h" 3
typedef __clockid_t clockid_t;
# 94 "/usr/include/time.h" 3
typedef __timer_t timer_t;
# 127 "/usr/include/sys/types.h" 2 3



typedef __useconds_t useconds_t;



typedef __suseconds_t suseconds_t;





# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 141 "/usr/include/sys/types.h" 2 3



typedef unsigned long int ulong;
typedef unsigned short int ushort;
typedef unsigned int uint;
# 184 "/usr/include/sys/types.h" 3
typedef int int8_t __attribute__ ((__mode__ (__QI__)));
typedef int int16_t __attribute__ ((__mode__ (__HI__)));
typedef int int32_t __attribute__ ((__mode__ (__SI__)));
typedef int int64_t __attribute__ ((__mode__ (__DI__)));


typedef unsigned int u_int8_t __attribute__ ((__mode__ (__QI__)));
typedef unsigned int u_int16_t __attribute__ ((__mode__ (__HI__)));
typedef unsigned int u_int32_t __attribute__ ((__mode__ (__SI__)));
typedef unsigned int u_int64_t __attribute__ ((__mode__ (__DI__)));

typedef int register_t __attribute__ ((__mode__ (__word__)));
# 206 "/usr/include/sys/types.h" 3
# 1 "/usr/include/endian.h" 1 3
# 37 "/usr/include/endian.h" 3
# 1 "/usr/include/bits/endian.h" 1 3
# 38 "/usr/include/endian.h" 2 3
# 207 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/select.h" 1 3
# 31 "/usr/include/sys/select.h" 3
# 1 "/usr/include/bits/select.h" 1 3
# 32 "/usr/include/sys/select.h" 2 3


# 1 "/usr/include/bits/sigset.h" 1 3
# 23 "/usr/include/bits/sigset.h" 3
typedef int __sig_atomic_t;




typedef struct
  {
    unsigned long int __val[(1024 / (8 * sizeof (unsigned long int)))];
  } __sigset_t;
# 35 "/usr/include/sys/select.h" 2 3



typedef __sigset_t sigset_t;




# 1 "/usr/include/time.h" 1 3
# 106 "/usr/include/time.h" 3
struct timespec
  {
    long int tv_sec;
    long int tv_nsec;
  };
# 44 "/usr/include/sys/select.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 63 "/usr/include/bits/time.h" 3
struct timeval
  {
    __time_t tv_sec;
    __suseconds_t tv_usec;
  };
# 46 "/usr/include/sys/select.h" 2 3



typedef long int __fd_mask;







typedef struct
  {



    __fd_mask fds_bits[1024 / (8 * sizeof (__fd_mask))];





  } fd_set;






typedef __fd_mask fd_mask;
# 89 "/usr/include/sys/select.h" 3







extern int select (int __nfds, fd_set *__restrict __readfds,
                   fd_set *__restrict __writefds,
                   fd_set *__restrict __exceptfds,
                   struct timeval *__restrict __timeout) ;





extern int pselect (int __nfds, fd_set *__restrict __readfds,
                    fd_set *__restrict __writefds,
                    fd_set *__restrict __exceptfds,
                    const struct timespec *__restrict __timeout,
                    const __sigset_t *__restrict __sigmask) ;



# 210 "/usr/include/sys/types.h" 2 3


# 1 "/usr/include/sys/sysmacros.h" 1 3
# 213 "/usr/include/sys/types.h" 2 3




typedef __blksize_t blksize_t;






typedef __blkcnt_t blkcnt_t;



typedef __fsblkcnt_t fsblkcnt_t;



typedef __fsfilcnt_t fsfilcnt_t;
# 251 "/usr/include/sys/types.h" 3
typedef __blkcnt64_t blkcnt64_t;
typedef __fsblkcnt64_t fsblkcnt64_t;
typedef __fsfilcnt64_t fsfilcnt64_t;



# 35 "sysdep.h" 2
# 1 "/usr/include/sys/stat.h" 1 3
# 32 "/usr/include/sys/stat.h" 3
# 1 "/usr/include/time.h" 1 3
# 33 "/usr/include/sys/stat.h" 2 3
# 96 "/usr/include/sys/stat.h" 3


# 1 "/usr/include/bits/stat.h" 1 3
# 32 "/usr/include/bits/stat.h" 3
struct stat
  {
    __dev_t st_dev;



    __ino_t st_ino;
    int __pad1;

    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __off_t st_size;
    __time_t st_atime;
    __time_t st_mtime;
    __time_t st_ctime;



    __blkcnt_t st_blocks;
    int __pad2;

    __blksize_t st_blksize;
    unsigned int st_flags;
    unsigned int st_gen;
    int __pad3;
    long __unused[4];
  };



struct stat64
  {
    __dev_t st_dev;
    __ino64_t st_ino;
    __mode_t st_mode;
    __nlink_t st_nlink;
    __uid_t st_uid;
    __gid_t st_gid;
    __dev_t st_rdev;
    __off_t st_size;
    __time_t st_atime;
    __time_t st_mtime;
    __time_t st_ctime;
    __blkcnt64_t st_blocks;
    __blksize_t st_blksize;
    unsigned int st_flags;
    unsigned int st_gen;
    int __pad3;
    long __unused[4];
  };
# 99 "/usr/include/sys/stat.h" 2 3
# 200 "/usr/include/sys/stat.h" 3
extern int stat (__const char *__restrict __file,
                 struct stat *__restrict __buf) ;



extern int fstat (int __fd, struct stat *__buf) ;
# 219 "/usr/include/sys/stat.h" 3
extern int stat64 (__const char *__restrict __file,
                   struct stat64 *__restrict __buf) ;
extern int fstat64 (int __fd, struct stat64 *__buf) ;






extern int lstat (__const char *__restrict __file,
                  struct stat *__restrict __buf) ;
# 241 "/usr/include/sys/stat.h" 3
extern int lstat64 (__const char *__restrict __file,
                    struct stat64 *__restrict __buf) ;






extern int chmod (__const char *__file, __mode_t __mode) ;



extern int fchmod (int __fd, __mode_t __mode) ;





extern __mode_t umask (__mode_t __mask) ;




extern __mode_t getumask (void) ;



extern int mkdir (__const char *__path, __mode_t __mode) ;





extern int mknod (__const char *__path, __mode_t __mode, __dev_t __dev)
     ;




extern int mkfifo (__const char *__path, __mode_t __mode) ;
# 306 "/usr/include/sys/stat.h" 3
extern int __fxstat (int __ver, int __fildes, struct stat *__stat_buf) ;
extern int __xstat (int __ver, __const char *__filename,
                    struct stat *__stat_buf) ;
extern int __lxstat (int __ver, __const char *__filename,
                     struct stat *__stat_buf) ;
# 330 "/usr/include/sys/stat.h" 3
extern int __fxstat64 (int __ver, int __fildes, struct stat64 *__stat_buf)
     ;
extern int __xstat64 (int __ver, __const char *__filename,
                      struct stat64 *__stat_buf) ;
extern int __lxstat64 (int __ver, __const char *__filename,
                       struct stat64 *__stat_buf) ;

extern int __xmknod (int __ver, __const char *__path, __mode_t __mode,
                     __dev_t *__dev) ;




extern __inline__ int stat (__const char *__path,
                            struct stat *__statbuf)
{
  return __xstat (2, __path, __statbuf);
}


extern __inline__ int lstat (__const char *__path,
                             struct stat *__statbuf)
{
  return __lxstat (2, __path, __statbuf);
}


extern __inline__ int fstat (int __fd, struct stat *__statbuf)
{
  return __fxstat (2, __fd, __statbuf);
}


extern __inline__ int mknod (__const char *__path, __mode_t __mode,
                             __dev_t __dev)
{
  return __xmknod (0, __path, __mode, &__dev);
}





extern __inline__ int stat64 (__const char *__path,
                              struct stat64 *__statbuf)
{
  return __xstat64 (2, __path, __statbuf);
}


extern __inline__ int lstat64 (__const char *__path,
                               struct stat64 *__statbuf)
{
  return __lxstat64 (2, __path, __statbuf);
}


extern __inline__ int fstat64 (int __fd, struct stat64 *__statbuf)
{
  return __fxstat64 (2, __fd, __statbuf);
}





# 36 "sysdep.h" 2

# 1 "/usr/include/errno.h" 1 3
# 32 "/usr/include/errno.h" 3




# 1 "/usr/include/bits/errno.h" 1 3
# 25 "/usr/include/bits/errno.h" 3
# 1 "/usr/include/linux/errno.h" 1 3



# 1 "/usr/include/asm/errno.h" 1 3
# 5 "/usr/include/linux/errno.h" 2 3
# 26 "/usr/include/bits/errno.h" 2 3
# 36 "/usr/include/bits/errno.h" 3
extern int errno;


extern int *__errno_location (void) __attribute__ ((__const__));
# 37 "/usr/include/errno.h" 2 3
# 55 "/usr/include/errno.h" 3
extern char *program_invocation_name, *program_invocation_short_name;




# 69 "/usr/include/errno.h" 3
typedef int error_t;
# 38 "sysdep.h" 2





# 1 "/usr/include/string.h" 1 3
# 28 "/usr/include/string.h" 3





# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 34 "/usr/include/string.h" 2 3



extern void *memcpy (void *__restrict __dest,
                     __const void *__restrict __src, size_t __n) ;


extern void *memmove (void *__dest, __const void *__src, size_t __n)
     ;





extern void *memccpy (void *__restrict __dest, __const void *__restrict __src,
                      int __c, size_t __n)
     ;




extern void *memset (void *__s, int __c, size_t __n) ;


extern int memcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__pure__));


extern void *memchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__pure__));




extern void *rawmemchr (__const void *__s, int __c) __attribute__ ((__pure__));


extern void *memrchr (__const void *__s, int __c, size_t __n)
      __attribute__ ((__pure__));




extern char *strcpy (char *__restrict __dest, __const char *__restrict __src)
     ;

extern char *strncpy (char *__restrict __dest,
                      __const char *__restrict __src, size_t __n) ;


extern char *strcat (char *__restrict __dest, __const char *__restrict __src)
     ;

extern char *strncat (char *__restrict __dest, __const char *__restrict __src,
                      size_t __n) ;


extern int strcmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));

extern int strncmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__pure__));


extern int strcoll (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));

extern size_t strxfrm (char *__restrict __dest,
                       __const char *__restrict __src, size_t __n) ;





# 1 "/usr/include/xlocale.h" 1 3
# 28 "/usr/include/xlocale.h" 3
typedef struct __locale_struct
{

  struct locale_data *__locales[13];


  const unsigned short int *__ctype_b;
  const int *__ctype_tolower;
  const int *__ctype_toupper;
} *__locale_t;
# 109 "/usr/include/string.h" 2 3


extern int __strcoll_l (__const char *__s1, __const char *__s2, __locale_t __l)
     __attribute__ ((__pure__));

extern size_t __strxfrm_l (char *__dest, __const char *__src, size_t __n,
                           __locale_t __l) ;




extern char *strdup (__const char *__s) __attribute__ ((__malloc__));






extern char *strndup (__const char *__string, size_t __n)
     __attribute__ ((__malloc__));
# 155 "/usr/include/string.h" 3
extern char *strchr (__const char *__s, int __c) __attribute__ ((__pure__));

extern char *strrchr (__const char *__s, int __c) __attribute__ ((__pure__));




extern char *strchrnul (__const char *__s, int __c) __attribute__ ((__pure__));




extern size_t strcspn (__const char *__s, __const char *__reject)
     __attribute__ ((__pure__));


extern size_t strspn (__const char *__s, __const char *__accept)
     __attribute__ ((__pure__));

extern char *strpbrk (__const char *__s, __const char *__accept)
     __attribute__ ((__pure__));

extern char *strstr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__pure__));



extern char *strcasestr (__const char *__haystack, __const char *__needle)
     __attribute__ ((__pure__));



extern char *strtok (char *__restrict __s, __const char *__restrict __delim)
     ;



extern char *__strtok_r (char *__restrict __s,
                         __const char *__restrict __delim,
                         char **__restrict __save_ptr) ;

extern char *strtok_r (char *__restrict __s, __const char *__restrict __delim,
                       char **__restrict __save_ptr) ;






extern void *memmem (__const void *__haystack, size_t __haystacklen,
                     __const void *__needle, size_t __needlelen)
     __attribute__ ((__pure__));



extern void *__mempcpy (void *__restrict __dest,
                        __const void *__restrict __src, size_t __n) ;
extern void *mempcpy (void *__restrict __dest,
                      __const void *__restrict __src, size_t __n) ;




extern size_t strlen (__const char *__s) __attribute__ ((__pure__));




extern size_t strnlen (__const char *__string, size_t __maxlen)
     __attribute__ ((__pure__));




extern char *strerror (int __errnum) ;



extern char *strerror_r (int __errnum, char *__buf, size_t __buflen) ;




extern void __bzero (void *__s, size_t __n) ;



extern void bcopy (__const void *__src, void *__dest, size_t __n) ;


extern void bzero (void *__s, size_t __n) ;


extern int bcmp (__const void *__s1, __const void *__s2, size_t __n)
     __attribute__ ((__pure__));


extern char *index (__const char *__s, int __c) __attribute__ ((__pure__));


extern char *rindex (__const char *__s, int __c) __attribute__ ((__pure__));



extern int ffs (int __i) __attribute__ ((__const__));




extern int ffsl (long int __l) __attribute__ ((__const__));

__extension__ extern int ffsll (long long int __ll)
     __attribute__ ((__const__));




extern int strcasecmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));


extern int strncasecmp (__const char *__s1, __const char *__s2, size_t __n)
     __attribute__ ((__pure__));





extern int __strcasecmp_l (__const char *__s1, __const char *__s2,
                           __locale_t __loc) __attribute__ ((__pure__));

extern int __strncasecmp_l (__const char *__s1, __const char *__s2,
                            size_t __n, __locale_t __loc)
     __attribute__ ((__pure__));





extern char *strsep (char **__restrict __stringp,
                     __const char *__restrict __delim) ;




extern int strverscmp (__const char *__s1, __const char *__s2)
     __attribute__ ((__pure__));


extern char *strsignal (int __sig) ;


extern char *__stpcpy (char *__restrict __dest, __const char *__restrict __src)
     ;
extern char *stpcpy (char *__restrict __dest, __const char *__restrict __src)
     ;



extern char *__stpncpy (char *__restrict __dest,
                        __const char *__restrict __src, size_t __n) ;
extern char *stpncpy (char *__restrict __dest,
                      __const char *__restrict __src, size_t __n) ;


extern char *strfry (char *__string) ;


extern void *memfrob (void *__s, size_t __n) ;






extern char *basename (__const char *__filename) ;
# 356 "/usr/include/string.h" 3
# 1 "/usr/include/bits/string.h" 1 3
# 357 "/usr/include/string.h" 2 3


# 1 "/usr/include/bits/string2.h" 1 3
# 80 "/usr/include/bits/string2.h" 3
typedef struct { unsigned char __arr[2]; } __STRING2_COPY_ARR2 __attribute__ ((packed));
typedef struct { unsigned char __arr[3]; } __STRING2_COPY_ARR3 __attribute__ ((packed));
typedef struct { unsigned char __arr[4]; } __STRING2_COPY_ARR4 __attribute__ ((packed));
typedef struct { unsigned char __arr[5]; } __STRING2_COPY_ARR5 __attribute__ ((packed));
typedef struct { unsigned char __arr[6]; } __STRING2_COPY_ARR6 __attribute__ ((packed));
typedef struct { unsigned char __arr[7]; } __STRING2_COPY_ARR7 __attribute__ ((packed));
typedef struct { unsigned char __arr[8]; } __STRING2_COPY_ARR8 __attribute__ ((packed));
# 311 "/usr/include/bits/string2.h" 3
extern __inline void *__mempcpy_small (void *, char, __STRING2_COPY_ARR2,
                                       __STRING2_COPY_ARR3,
                                       __STRING2_COPY_ARR4,
                                       __STRING2_COPY_ARR5,
                                       __STRING2_COPY_ARR6,
                                       __STRING2_COPY_ARR7,
                                       __STRING2_COPY_ARR8, size_t);
extern __inline void *
__mempcpy_small (void *__dest, char __src1,
                 __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
                 __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
                 __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
                 __STRING2_COPY_ARR8 __src8, size_t __srclen)
{
  union {
    char __c;
    __STRING2_COPY_ARR2 __sca2;
    __STRING2_COPY_ARR3 __sca3;
    __STRING2_COPY_ARR4 __sca4;
    __STRING2_COPY_ARR5 __sca5;
    __STRING2_COPY_ARR6 __sca6;
    __STRING2_COPY_ARR7 __sca7;
    __STRING2_COPY_ARR8 __sca8;
  } *__u = __dest;
  switch ((unsigned int) __srclen)
    {
    case 1:
      __u->__c = __src1;
      break;
    case 2:
      __extension__ __u->__sca2 = __src2;
      break;
    case 3:
      __extension__ __u->__sca3 = __src3;
      break;
    case 4:
      __extension__ __u->__sca4 = __src4;
      break;
    case 5:
      __extension__ __u->__sca5 = __src5;
      break;
    case 6:
      __extension__ __u->__sca6 = __src6;
      break;
    case 7:
      __extension__ __u->__sca7 = __src7;
      break;
    case 8:
      __extension__ __u->__sca8 = __src8;
      break;
    }
  return __extension__ ((void *) __u + __srclen);
}







extern void *__rawmemchr (const void *__s, int __c);
# 477 "/usr/include/bits/string2.h" 3
extern __inline char *__strcpy_small (char *, __STRING2_COPY_ARR2,
                                      __STRING2_COPY_ARR3,
                                      __STRING2_COPY_ARR4,
                                      __STRING2_COPY_ARR5,
                                      __STRING2_COPY_ARR6,
                                      __STRING2_COPY_ARR7,
                                      __STRING2_COPY_ARR8, size_t);
extern __inline char *
__strcpy_small (char *__dest,
                __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
                __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
                __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
                __STRING2_COPY_ARR8 __src8, size_t __srclen)
{
  union {
    char __c;
    __STRING2_COPY_ARR2 __sca2;
    __STRING2_COPY_ARR3 __sca3;
    __STRING2_COPY_ARR4 __sca4;
    __STRING2_COPY_ARR5 __sca5;
    __STRING2_COPY_ARR6 __sca6;
    __STRING2_COPY_ARR7 __sca7;
    __STRING2_COPY_ARR8 __sca8;
  } *__u = (void *) __dest;
  switch ((unsigned int) __srclen)
    {
    case 1:
      __u->__c = '\0';
      break;
    case 2:
      __extension__ __u->__sca2 = __src2;
      break;
    case 3:
      __extension__ __u->__sca3 = __src3;
      break;
    case 4:
      __extension__ __u->__sca4 = __src4;
      break;
    case 5:
      __extension__ __u->__sca5 = __src5;
      break;
    case 6:
      __extension__ __u->__sca6 = __src6;
      break;
    case 7:
      __extension__ __u->__sca7 = __src7;
      break;
    case 8:
      __extension__ __u->__sca8 = __src8;
      break;
  }
  return __dest;
}
# 641 "/usr/include/bits/string2.h" 3
extern __inline char *__stpcpy_small (char *, __STRING2_COPY_ARR2,
                                      __STRING2_COPY_ARR3,
                                      __STRING2_COPY_ARR4,
                                      __STRING2_COPY_ARR5,
                                      __STRING2_COPY_ARR6,
                                      __STRING2_COPY_ARR7,
                                      __STRING2_COPY_ARR8, size_t);
extern __inline char *
__stpcpy_small (char *__dest,
                __STRING2_COPY_ARR2 __src2, __STRING2_COPY_ARR3 __src3,
                __STRING2_COPY_ARR4 __src4, __STRING2_COPY_ARR5 __src5,
                __STRING2_COPY_ARR6 __src6, __STRING2_COPY_ARR7 __src7,
                __STRING2_COPY_ARR8 __src8, size_t __srclen)
{
  union {
    char __c;
    __STRING2_COPY_ARR2 __sca2;
    __STRING2_COPY_ARR3 __sca3;
    __STRING2_COPY_ARR4 __sca4;
    __STRING2_COPY_ARR5 __sca5;
    __STRING2_COPY_ARR6 __sca6;
    __STRING2_COPY_ARR7 __sca7;
    __STRING2_COPY_ARR8 __sca8;
  } *__u = (void *) __dest;
  switch ((unsigned int) __srclen)
    {
    case 1:
      __u->__c = '\0';
      break;
    case 2:
      __extension__ __u->__sca2 = __src2;
      break;
    case 3:
      __extension__ __u->__sca3 = __src3;
      break;
    case 4:
      __extension__ __u->__sca4 = __src4;
      break;
    case 5:
      __extension__ __u->__sca5 = __src5;
      break;
    case 6:
      __extension__ __u->__sca6 = __src6;
      break;
    case 7:
      __extension__ __u->__sca7 = __src7;
      break;
    case 8:
      __extension__ __u->__sca8 = __src8;
      break;
  }
  return __dest + __srclen - 1;
}
# 873 "/usr/include/bits/string2.h" 3
extern __inline size_t __strcspn_c1 (__const char *__s, char __reject);
extern __inline size_t
__strcspn_c1 (__const char *__s, char __reject)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c2 (__const char *__s, char __reject1,
                                     char __reject2);
extern __inline size_t
__strcspn_c2 (__const char *__s, char __reject1, char __reject2)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2)
    ++__result;
  return __result;
}

extern __inline size_t __strcspn_c3 (__const char *__s, char __reject1,
                                     char __reject2, char __reject3);
extern __inline size_t
__strcspn_c3 (__const char *__s, char __reject1, char __reject2,
              char __reject3)
{
  register size_t __result = 0;
  while (__s[__result] != '\0' && __s[__result] != __reject1
         && __s[__result] != __reject2 && __s[__result] != __reject3)
    ++__result;
  return __result;
}
# 928 "/usr/include/bits/string2.h" 3
extern __inline size_t __strspn_c1 (__const char *__s, char __accept);
extern __inline size_t
__strspn_c1 (__const char *__s, char __accept)
{
  register size_t __result = 0;

  while (__s[__result] == __accept)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c2 (__const char *__s, char __accept1,
                                    char __accept2);
extern __inline size_t
__strspn_c2 (__const char *__s, char __accept1, char __accept2)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2)
    ++__result;
  return __result;
}

extern __inline size_t __strspn_c3 (__const char *__s, char __accept1,
                                    char __accept2, char __accept3);
extern __inline size_t
__strspn_c3 (__const char *__s, char __accept1, char __accept2, char __accept3)
{
  register size_t __result = 0;

  while (__s[__result] == __accept1 || __s[__result] == __accept2
         || __s[__result] == __accept3)
    ++__result;
  return __result;
}
# 983 "/usr/include/bits/string2.h" 3
extern __inline char *__strpbrk_c2 (__const char *__s, int __accept1,
                                     int __accept2);
extern __inline char *
__strpbrk_c2 (__const char *__s, int __accept1, int __accept2)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}

extern __inline char *__strpbrk_c3 (__const char *__s, int __accept1,
                                     int __accept2, int __accept3);
extern __inline char *
__strpbrk_c3 (__const char *__s, int __accept1, int __accept2,
              int __accept3)
{

  while (*__s != '\0' && *__s != __accept1 && *__s != __accept2
         && *__s != __accept3)
    ++__s;
  return *__s == '\0' ? ((void *)0) : (char *) (size_t) __s;
}
# 1026 "/usr/include/bits/string2.h" 3
extern __inline size_t
strnlen (__const char *__string, size_t __maxlen)
{
  __const char *__end = (__const char *) memchr (__string, '\0', __maxlen);
  return __end ? (size_t) (__end - __string) : __maxlen;
}
# 1045 "/usr/include/bits/string2.h" 3
extern __inline char *__strtok_r_1c (char *__s, char __sep, char **__nextp);
extern __inline char *
__strtok_r_1c (char *__s, char __sep, char **__nextp)
{
  char *__result;
  if (__s == ((void *)0))
    __s = *__nextp;
  while (*__s == __sep)
    ++__s;
  if (*__s == '\0')
    __result = ((void *)0);
  else
    {
      __result = __s;
      while (*__s != '\0' && *__s != __sep)
        ++__s;
      if (*__s == '\0')
        *__nextp = __s;
      else
        {
          *__s = '\0';
          *__nextp = __s + 1;
        }
    }
  return __result;
}
# 1095 "/usr/include/bits/string2.h" 3
extern __inline char *__strsep_1c (char **__s, char __reject);
extern __inline char *
__strsep_1c (char **__s, char __reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject)
    *(*__s)++ = '\0';
  else
    if ((*__s = (__extension__ (__builtin_constant_p (__reject) && (__reject) == '\0' ? (char *) __rawmemchr (__retval, __reject) : strchr (__retval, __reject)))) != ((void *)0))
      *(*__s)++ = '\0';
    else
      *__s = ((void *)0);
  return __retval;
}

extern __inline char *__strsep_2c (char **__s, char __reject1, char __reject2);
extern __inline char *
__strsep_2c (char **__s, char __reject1, char __reject2)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_3c (char **__s, char __reject1, char __reject2,
                                   char __reject3);
extern __inline char *
__strsep_3c (char **__s, char __reject1, char __reject2, char __reject3)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return *__s = ((void *)0);
  if (*__retval == __reject1 || *__retval == __reject2
      || *__retval == __reject3)
    *(*__s)++ = '\0';
  else
    {
      register char *__cp = __retval;
      while (*__cp != '\0' && *__cp != __reject1 && *__cp != __reject2
             && *__cp != __reject3)
        ++__cp;
      if (*__cp != '\0')
        {
          *__s = __cp;
          *(*__s)++ = '\0';
        }
      else
        *__s = ((void *)0);
    }
  return __retval;
}

extern __inline char *__strsep_g (char **__s, __const char *__reject);
extern __inline char *
__strsep_g (char **__s, __const char *__reject)
{
  register char *__retval = *__s;
  if (__retval == ((void *)0))
    return ((void *)0);
  if ((*__s = __extension__ ({ char __a0, __a1, __a2; (__builtin_constant_p (__reject) && ((size_t)(const void *)((__reject) + 1) - (size_t)(const void *)(__reject) == 1) ? ((__a0 = ((__const char *) (__reject))[0], __a0 == '\0') ? ((void) (__retval), ((void *)0)) : ((__a1 = ((__const char *) (__reject))[1], __a1 == '\0') ? (__extension__ (__builtin_constant_p (__a0) && (__a0) == '\0' ? (char *) __rawmemchr (__retval, __a0) : strchr (__retval, __a0))) : ((__a2 = ((__const char *) (__reject))[2], __a2 == '\0') ? __strpbrk_c2 (__retval, __a0, __a1) : (((__const char *) (__reject))[3] == '\0' ? __strpbrk_c3 (__retval, __a0, __a1, __a2) : strpbrk (__retval, __reject))))) : strpbrk (__retval, __reject)); })) != ((void *)0))
    *(*__s)++ = '\0';
  return __retval;
}
# 1188 "/usr/include/bits/string2.h" 3
# 1 "/usr/include/stdlib.h" 1 3
# 33 "/usr/include/stdlib.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3


# 528 "/usr/include/stdlib.h" 3
extern void *malloc (size_t __size) __attribute__ ((__malloc__));

extern void *calloc (size_t __nmemb, size_t __size)
     __attribute__ ((__malloc__));
# 865 "/usr/include/stdlib.h" 3

# 1189 "/usr/include/bits/string2.h" 2 3




extern char *__strdup (__const char *__string) __attribute__ ((__malloc__));
# 1212 "/usr/include/bits/string2.h" 3
extern char *__strndup (__const char *__string, size_t __n)
     __attribute__ ((__malloc__));
# 360 "/usr/include/string.h" 2 3




# 44 "sysdep.h" 2
# 54 "sysdep.h"
# 1 "/usr/include/stdlib.h" 1 3
# 33 "/usr/include/stdlib.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 34 "/usr/include/stdlib.h" 2 3








# 1 "/usr/include/bits/waitflags.h" 1 3
# 43 "/usr/include/stdlib.h" 2 3
# 1 "/usr/include/bits/waitstatus.h" 1 3
# 65 "/usr/include/bits/waitstatus.h" 3
union wait
  {
    int w_status;
    struct
      {

        unsigned int __w_termsig:7;
        unsigned int __w_coredump:1;
        unsigned int __w_retcode:8;
        unsigned int:16;







      } __wait_terminated;
    struct
      {

        unsigned int __w_stopval:8;
        unsigned int __w_stopsig:8;
        unsigned int:16;






      } __wait_stopped;
  };
# 44 "/usr/include/stdlib.h" 2 3
# 68 "/usr/include/stdlib.h" 3
typedef union
  {
    union wait *__uptr;
    int *__iptr;
  } __WAIT_STATUS __attribute__ ((__transparent_union__));
# 94 "/usr/include/stdlib.h" 3
typedef struct
  {
    int quot;
    int rem;
  } div_t;



typedef struct
  {
    long int quot;
    long int rem;
  } ldiv_t;





__extension__ typedef struct
  {
    long long int quot;
    long long int rem;
  } lldiv_t;
# 133 "/usr/include/stdlib.h" 3
extern size_t __ctype_get_mb_cur_max (void) ;



extern double atof (__const char *__nptr) __attribute__ ((__pure__));

extern int atoi (__const char *__nptr) __attribute__ ((__pure__));

extern long int atol (__const char *__nptr) __attribute__ ((__pure__));



__extension__ extern long long int atoll (__const char *__nptr)
     __attribute__ ((__pure__));



extern double strtod (__const char *__restrict __nptr,
                      char **__restrict __endptr) ;



extern float strtof (__const char *__restrict __nptr,
                     char **__restrict __endptr) ;

extern long double strtold (__const char *__restrict __nptr,
                            char **__restrict __endptr) ;



extern long int strtol (__const char *__restrict __nptr,
                        char **__restrict __endptr, int __base) ;

extern unsigned long int strtoul (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base)
     ;



__extension__
extern long long int strtoq (__const char *__restrict __nptr,
                             char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtouq (__const char *__restrict __nptr,
                                       char **__restrict __endptr, int __base)
     ;






__extension__
extern long long int strtoll (__const char *__restrict __nptr,
                              char **__restrict __endptr, int __base) ;

__extension__
extern unsigned long long int strtoull (__const char *__restrict __nptr,
                                        char **__restrict __endptr, int __base)
     ;
# 215 "/usr/include/stdlib.h" 3
extern long int __strtol_l (__const char *__restrict __nptr,
                            char **__restrict __endptr, int __base,
                            __locale_t __loc) ;

extern unsigned long int __strtoul_l (__const char *__restrict __nptr,
                                      char **__restrict __endptr,
                                      int __base, __locale_t __loc) ;

__extension__
extern long long int __strtoll_l (__const char *__restrict __nptr,
                                  char **__restrict __endptr, int __base,
                                  __locale_t __loc) ;

__extension__
extern unsigned long long int __strtoull_l (__const char *__restrict __nptr,
                                            char **__restrict __endptr,
                                            int __base, __locale_t __loc)
     ;

extern double __strtod_l (__const char *__restrict __nptr,
                          char **__restrict __endptr, __locale_t __loc)
     ;

extern float __strtof_l (__const char *__restrict __nptr,
                         char **__restrict __endptr, __locale_t __loc) ;

extern long double __strtold_l (__const char *__restrict __nptr,
                                char **__restrict __endptr,
                                __locale_t __loc) ;






extern double __strtod_internal (__const char *__restrict __nptr,
                                 char **__restrict __endptr, int __group)
     ;
extern float __strtof_internal (__const char *__restrict __nptr,
                                char **__restrict __endptr, int __group)
     ;
extern long double __strtold_internal (__const char *__restrict __nptr,
                                       char **__restrict __endptr,
                                       int __group) ;

extern long int __strtol_internal (__const char *__restrict __nptr,
                                   char **__restrict __endptr,
                                   int __base, int __group) ;



extern unsigned long int __strtoul_internal (__const char *__restrict __nptr,
                                             char **__restrict __endptr,
                                             int __base, int __group) ;




__extension__
extern long long int __strtoll_internal (__const char *__restrict __nptr,
                                         char **__restrict __endptr,
                                         int __base, int __group) ;



__extension__
extern unsigned long long int __strtoull_internal (__const char *
                                                   __restrict __nptr,
                                                   char **__restrict __endptr,
                                                   int __base, int __group)
     ;
# 294 "/usr/include/stdlib.h" 3
extern __inline double
strtod (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtod_internal (__nptr, __endptr, 0);
}
extern __inline long int
strtol (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtol_internal (__nptr, __endptr, __base, 0);
}
extern __inline unsigned long int
strtoul (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoul_internal (__nptr, __endptr, __base, 0);
}


extern __inline float
strtof (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtof_internal (__nptr, __endptr, 0);
}
extern __inline long double
strtold (__const char *__restrict __nptr, char **__restrict __endptr)
{
  return __strtold_internal (__nptr, __endptr, 0);
}



__extension__ extern __inline long long int
strtoq (__const char *__restrict __nptr, char **__restrict __endptr,
        int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtouq (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}



__extension__ extern __inline long long int
strtoll (__const char *__restrict __nptr, char **__restrict __endptr,
         int __base)
{
  return __strtoll_internal (__nptr, __endptr, __base, 0);
}
__extension__ extern __inline unsigned long long int
strtoull (__const char * __restrict __nptr, char **__restrict __endptr,
          int __base)
{
  return __strtoull_internal (__nptr, __endptr, __base, 0);
}


extern __inline double
atof (__const char *__nptr)
{
  return strtod (__nptr, (char **) ((void *)0));
}
extern __inline int
atoi (__const char *__nptr)
{
  return (int) strtol (__nptr, (char **) ((void *)0), 10);
}
extern __inline long int
atol (__const char *__nptr)
{
  return strtol (__nptr, (char **) ((void *)0), 10);
}


__extension__ extern __inline long long int
atoll (__const char *__nptr)
{
  return strtoll (__nptr, (char **) ((void *)0), 10);
}
# 385 "/usr/include/stdlib.h" 3
extern char *l64a (long int __n) ;


extern long int a64l (__const char *__s) __attribute__ ((__pure__));
# 398 "/usr/include/stdlib.h" 3
extern long int random (void) ;


extern void srandom (unsigned int __seed) ;





extern char *initstate (unsigned int __seed, char *__statebuf,
                        size_t __statelen) ;



extern char *setstate (char *__statebuf) ;







struct random_data
  {
    int32_t *fptr;
    int32_t *rptr;
    int32_t *state;
    int rand_type;
    int rand_deg;
    int rand_sep;
    int32_t *end_ptr;
  };

extern int random_r (struct random_data *__restrict __buf,
                     int32_t *__restrict __result) ;

extern int srandom_r (unsigned int __seed, struct random_data *__buf) ;

extern int initstate_r (unsigned int __seed, char *__restrict __statebuf,
                        size_t __statelen,
                        struct random_data *__restrict __buf) ;

extern int setstate_r (char *__restrict __statebuf,
                       struct random_data *__restrict __buf) ;





extern int rand (void) ;

extern void srand (unsigned int __seed) ;



extern int rand_r (unsigned int *__seed) ;







extern double drand48 (void) ;
extern double erand48 (unsigned short int __xsubi[3]) ;


extern long int lrand48 (void) ;
extern long int nrand48 (unsigned short int __xsubi[3]) ;


extern long int mrand48 (void) ;
extern long int jrand48 (unsigned short int __xsubi[3]) ;


extern void srand48 (long int __seedval) ;
extern unsigned short int *seed48 (unsigned short int __seed16v[3]) ;
extern void lcong48 (unsigned short int __param[7]) ;





struct drand48_data
  {
    unsigned short int __x[3];
    unsigned short int __old_x[3];
    unsigned short int __c;
    unsigned short int __init;
    unsigned long long int __a;
  };


extern int drand48_r (struct drand48_data *__restrict __buffer,
                      double *__restrict __result) ;
extern int erand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      double *__restrict __result) ;


extern int lrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;
extern int nrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;


extern int mrand48_r (struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;
extern int jrand48_r (unsigned short int __xsubi[3],
                      struct drand48_data *__restrict __buffer,
                      long int *__restrict __result) ;


extern int srand48_r (long int __seedval, struct drand48_data *__buffer)
     ;

extern int seed48_r (unsigned short int __seed16v[3],
                     struct drand48_data *__buffer) ;

extern int lcong48_r (unsigned short int __param[7],
                      struct drand48_data *__buffer) ;
# 537 "/usr/include/stdlib.h" 3
extern void *realloc (void *__ptr, size_t __size) __attribute__ ((__malloc__));

extern void free (void *__ptr) ;



extern void cfree (void *__ptr) ;



# 1 "/usr/include/alloca.h" 1 3
# 25 "/usr/include/alloca.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 26 "/usr/include/alloca.h" 2 3







extern void *alloca (size_t __size) ;






# 548 "/usr/include/stdlib.h" 2 3




extern void *valloc (size_t __size) __attribute__ ((__malloc__));




extern int posix_memalign (void **__memptr, size_t __alignment, size_t __size)
     __attribute__ ((__malloc__));



extern void abort (void) __attribute__ ((__noreturn__));



extern int atexit (void (*__func) (void)) ;




extern int on_exit (void (*__func) (int __status, void *__arg), void *__arg)
     ;





extern void exit (int __status) __attribute__ ((__noreturn__));




extern void _Exit (int __status) __attribute__ ((__noreturn__));




extern char *getenv (__const char *__name) ;



extern char *__secure_getenv (__const char *__name) ;





extern int putenv (char *__string) ;





extern int setenv (__const char *__name, __const char *__value, int __replace)
     ;


extern int unsetenv (__const char *__name) ;






extern int clearenv (void) ;
# 624 "/usr/include/stdlib.h" 3
extern char *mktemp (char *__template) ;







extern int mkstemp (char *__template) ;
# 641 "/usr/include/stdlib.h" 3
extern int mkstemp64 (char *__template) ;
# 651 "/usr/include/stdlib.h" 3
extern char *mkdtemp (char *__template) ;




extern int system (__const char *__command) ;






extern char *canonicalize_file_name (__const char *__name) ;
# 673 "/usr/include/stdlib.h" 3
extern char *realpath (__const char *__restrict __name,
                       char *__restrict __resolved) ;






typedef int (*__compar_fn_t) (__const void *, __const void *);


typedef __compar_fn_t comparison_fn_t;





extern void *bsearch (__const void *__key, __const void *__base,
                      size_t __nmemb, size_t __size, __compar_fn_t __compar);



extern void qsort (void *__base, size_t __nmemb, size_t __size,
                   __compar_fn_t __compar);



extern int abs (int __x) __attribute__ ((__const__));
extern long int labs (long int __x) __attribute__ ((__const__));

__extension__ extern long long int llabs (long long int __x)
     __attribute__ ((__const__));






extern div_t div (int __numer, int __denom)
     __attribute__ ((__const__));
extern ldiv_t ldiv (long int __numer, long int __denom)
     __attribute__ ((__const__));

__extension__ extern lldiv_t lldiv (long long int __numer,
                                    long long int __denom)
     __attribute__ ((__const__));
# 729 "/usr/include/stdlib.h" 3
extern char *ecvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) ;




extern char *fcvt (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign) ;




extern char *gcvt (double __value, int __ndigit, char *__buf) ;




extern char *qecvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) ;
extern char *qfcvt (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign) ;
extern char *qgcvt (long double __value, int __ndigit, char *__buf) ;




extern int ecvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) ;
extern int fcvt_r (double __value, int __ndigit, int *__restrict __decpt,
                   int *__restrict __sign, char *__restrict __buf,
                   size_t __len) ;

extern int qecvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) ;
extern int qfcvt_r (long double __value, int __ndigit,
                    int *__restrict __decpt, int *__restrict __sign,
                    char *__restrict __buf, size_t __len) ;






extern int mblen (__const char *__s, size_t __n) ;


extern int mbtowc (wchar_t *__restrict __pwc,
                   __const char *__restrict __s, size_t __n) ;


extern int wctomb (char *__s, wchar_t __wchar) ;



extern size_t mbstowcs (wchar_t *__restrict __pwcs,
                        __const char *__restrict __s, size_t __n) ;

extern size_t wcstombs (char *__restrict __s,
                        __const wchar_t *__restrict __pwcs, size_t __n)
     ;







extern int rpmatch (__const char *__response) ;
# 809 "/usr/include/stdlib.h" 3
extern int getsubopt (char **__restrict __optionp,
                      char *__const *__restrict __tokens,
                      char **__restrict __valuep) ;





extern void setkey (__const char *__key) ;







extern int posix_openpt (int __oflag) ;







extern int grantpt (int __fd) ;



extern int unlockpt (int __fd) ;




extern char *ptsname (int __fd) ;






extern int ptsname_r (int __fd, char *__buf, size_t __buflen) ;


extern int getpt (void) ;






extern int getloadavg (double __loadavg[], int __nelem) ;






# 55 "sysdep.h" 2



# 1 "/usr/include/sys/time.h" 1 3
# 26 "/usr/include/sys/time.h" 3
# 1 "/usr/include/time.h" 1 3
# 27 "/usr/include/sys/time.h" 2 3

# 1 "/usr/include/bits/time.h" 1 3
# 29 "/usr/include/sys/time.h" 2 3
# 38 "/usr/include/sys/time.h" 3

# 56 "/usr/include/sys/time.h" 3
struct timezone
  {
    int tz_minuteswest;
    int tz_dsttime;
  };

typedef struct timezone *__restrict __timezone_ptr_t;
# 72 "/usr/include/sys/time.h" 3
extern int gettimeofday (struct timeval *__restrict __tv,
                         __timezone_ptr_t __tz) ;




extern int settimeofday (__const struct timeval *__tv,
                         __const struct timezone *__tz) ;





extern int adjtime (__const struct timeval *__delta,
                    struct timeval *__olddelta) ;




enum __itimer_which
  {

    ITIMER_REAL = 0,


    ITIMER_VIRTUAL = 1,



    ITIMER_PROF = 2

  };



struct itimerval
  {

    struct timeval it_interval;

    struct timeval it_value;
  };


typedef enum __itimer_which __itimer_which_t;






extern int getitimer (__itimer_which_t __which,
                      struct itimerval *__value) ;




extern int setitimer (__itimer_which_t __which,
                      __const struct itimerval *__restrict __new,
                      struct itimerval *__restrict __old) ;



extern int utimes (__const char *__file, __const struct timeval __tvp[2])
     ;
# 169 "/usr/include/sys/time.h" 3

# 59 "sysdep.h" 2
# 1 "/usr/include/time.h" 1 3
# 30 "/usr/include/time.h" 3








# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 39 "/usr/include/time.h" 2 3



# 1 "/usr/include/bits/time.h" 1 3
# 43 "/usr/include/time.h" 2 3
# 118 "/usr/include/time.h" 3
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;


  long int tm_gmtoff;
  __const char *tm_zone;




};




struct itimerspec
  {
    struct timespec it_interval;
    struct timespec it_value;
  };


struct sigevent;
# 163 "/usr/include/time.h" 3
extern clock_t clock (void) ;


extern time_t time (time_t *__timer) ;


extern double difftime (time_t __time1, time_t __time0)
     __attribute__ ((__const__));


extern time_t mktime (struct tm *__tp) ;





extern size_t strftime (char *__restrict __s, size_t __maxsize,
                        __const char *__restrict __format,
                        __const struct tm *__restrict __tp) ;




extern char *strptime (__const char *__restrict __s,
                       __const char *__restrict __fmt, struct tm *__tp)
     ;





extern struct tm *gmtime (__const time_t *__timer) ;



extern struct tm *localtime (__const time_t *__timer) ;




extern struct tm *gmtime_r (__const time_t *__restrict __timer,
                            struct tm *__restrict __tp) ;



extern struct tm *localtime_r (__const time_t *__restrict __timer,
                               struct tm *__restrict __tp) ;




extern char *asctime (__const struct tm *__tp) ;


extern char *ctime (__const time_t *__timer) ;






extern char *asctime_r (__const struct tm *__restrict __tp,
                        char *__restrict __buf) ;


extern char *ctime_r (__const time_t *__restrict __timer,
                      char *__restrict __buf) ;




extern char *__tzname[2];
extern int __daylight;
extern long int __timezone;




extern char *tzname[2];



extern void tzset (void) ;



extern int daylight;
extern long int timezone;





extern int stime (__const time_t *__when) ;
# 271 "/usr/include/time.h" 3
extern time_t timegm (struct tm *__tp) ;


extern time_t timelocal (struct tm *__tp) ;


extern int dysize (int __year) __attribute__ ((__const__));





extern int nanosleep (__const struct timespec *__requested_time,
                      struct timespec *__remaining) ;



extern int clock_getres (clockid_t __clock_id, struct timespec *__res) ;


extern int clock_gettime (clockid_t __clock_id, struct timespec *__tp) ;


extern int clock_settime (clockid_t __clock_id, __const struct timespec *__tp)
     ;



extern int clock_nanosleep (clockid_t __clock_id, int __flags,
                            __const struct timespec *__req,
                            struct timespec *__rem) ;


extern int clock_getcpuclockid (pid_t __pid, clockid_t *__clock_id) ;




extern int timer_create (clockid_t __clock_id,
                         struct sigevent *__restrict __evp,
                         timer_t *__restrict __timerid) ;


extern int timer_delete (timer_t __timerid) ;


extern int timer_settime (timer_t __timerid, int __flags,
                          __const struct itimerspec *__restrict __value,
                          struct itimerspec *__restrict __ovalue) ;


extern int timer_gettime (timer_t __timerid, struct itimerspec *__value)
     ;


extern int timer_getoverrun (timer_t __timerid) ;
# 342 "/usr/include/time.h" 3
extern int getdate_err;





extern struct tm *getdate (__const char *__string) ;
# 357 "/usr/include/time.h" 3
extern int getdate_r (__const char *__restrict __string,
                      struct tm *__restrict __resbufp) ;




# 60 "sysdep.h" 2
# 69 "sysdep.h"
# 1 "/usr/include/unistd.h" 1 3
# 28 "/usr/include/unistd.h" 3

# 175 "/usr/include/unistd.h" 3
# 1 "/usr/include/bits/posix_opt.h" 1 3
# 176 "/usr/include/unistd.h" 2 3



# 1 "/usr/include/bits/environments.h" 1 3
# 23 "/usr/include/bits/environments.h" 3
# 1 "/usr/include/bits/wordsize.h" 1 3
# 24 "/usr/include/bits/environments.h" 2 3
# 180 "/usr/include/unistd.h" 2 3
# 199 "/usr/include/unistd.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 200 "/usr/include/unistd.h" 2 3
# 240 "/usr/include/unistd.h" 3
typedef __intptr_t intptr_t;






typedef __socklen_t socklen_t;
# 260 "/usr/include/unistd.h" 3
extern int access (__const char *__name, int __type) ;




extern int euidaccess (__const char *__name, int __type) ;
# 290 "/usr/include/unistd.h" 3
extern __off_t lseek (int __fd, __off_t __offset, int __whence) ;
# 302 "/usr/include/unistd.h" 3
extern __off64_t lseek64 (int __fd, __off64_t __offset, int __whence) ;



extern int close (int __fd) ;



extern ssize_t read (int __fd, void *__buf, size_t __nbytes) ;


extern ssize_t write (int __fd, __const void *__buf, size_t __n) ;



extern ssize_t pread (int __fd, void *__buf, size_t __nbytes, __off_t __offset)
     ;
extern ssize_t pwrite (int __fd, __const void *__buf, size_t __n,
                       __off_t __offset) ;
# 340 "/usr/include/unistd.h" 3
extern ssize_t pread64 (int __fd, void *__buf, size_t __nbytes,
                        __off64_t __offset) ;


extern ssize_t pwrite64 (int __fd, __const void *__buf, size_t __n,
                         __off64_t __offset) ;







extern int pipe (int __pipedes[2]) ;
# 362 "/usr/include/unistd.h" 3
extern unsigned int alarm (unsigned int __seconds) ;
# 371 "/usr/include/unistd.h" 3
extern unsigned int sleep (unsigned int __seconds) ;






extern __useconds_t ualarm (__useconds_t __value, __useconds_t __interval)
     ;



extern int usleep (__useconds_t __useconds) ;





extern int pause (void) ;



extern int chown (__const char *__file, __uid_t __owner, __gid_t __group)
     ;



extern int fchown (int __fd, __uid_t __owner, __gid_t __group) ;




extern int lchown (__const char *__file, __uid_t __owner, __gid_t __group)
     ;




extern int chdir (__const char *__path) ;



extern int fchdir (int __fd) ;
# 423 "/usr/include/unistd.h" 3
extern char *getcwd (char *__buf, size_t __size) ;





extern char *get_current_dir_name (void) ;






extern char *getwd (char *__buf) ;




extern int dup (int __fd) ;


extern int dup2 (int __fd, int __fd2) ;


extern char **__environ;

extern char **environ;





extern int execve (__const char *__path, char *__const __argv[],
                   char *__const __envp[]) ;




extern int fexecve (int __fd, char *__const __argv[], char *__const __envp[])
     ;




extern int execv (__const char *__path, char *__const __argv[]) ;



extern int execle (__const char *__path, __const char *__arg, ...) ;



extern int execl (__const char *__path, __const char *__arg, ...) ;



extern int execvp (__const char *__file, char *__const __argv[]) ;




extern int execlp (__const char *__file, __const char *__arg, ...) ;




extern int nice (int __inc) ;




extern void _exit (int __status) __attribute__ ((__noreturn__));





# 1 "/usr/include/bits/confname.h" 1 3
# 25 "/usr/include/bits/confname.h" 3
enum
  {
    _PC_LINK_MAX,

    _PC_MAX_CANON,

    _PC_MAX_INPUT,

    _PC_NAME_MAX,

    _PC_PATH_MAX,

    _PC_PIPE_BUF,

    _PC_CHOWN_RESTRICTED,

    _PC_NO_TRUNC,

    _PC_VDISABLE,

    _PC_SYNC_IO,

    _PC_ASYNC_IO,

    _PC_PRIO_IO,

    _PC_SOCK_MAXBUF,

    _PC_FILESIZEBITS,

    _PC_REC_INCR_XFER_SIZE,

    _PC_REC_MAX_XFER_SIZE,

    _PC_REC_MIN_XFER_SIZE,

    _PC_REC_XFER_ALIGN,

    _PC_ALLOC_SIZE_MIN,

    _PC_SYMLINK_MAX

  };


enum
  {
    _SC_ARG_MAX,

    _SC_CHILD_MAX,

    _SC_CLK_TCK,

    _SC_NGROUPS_MAX,

    _SC_OPEN_MAX,

    _SC_STREAM_MAX,

    _SC_TZNAME_MAX,

    _SC_JOB_CONTROL,

    _SC_SAVED_IDS,

    _SC_REALTIME_SIGNALS,

    _SC_PRIORITY_SCHEDULING,

    _SC_TIMERS,

    _SC_ASYNCHRONOUS_IO,

    _SC_PRIORITIZED_IO,

    _SC_SYNCHRONIZED_IO,

    _SC_FSYNC,

    _SC_MAPPED_FILES,

    _SC_MEMLOCK,

    _SC_MEMLOCK_RANGE,

    _SC_MEMORY_PROTECTION,

    _SC_MESSAGE_PASSING,

    _SC_SEMAPHORES,

    _SC_SHARED_MEMORY_OBJECTS,

    _SC_AIO_LISTIO_MAX,

    _SC_AIO_MAX,

    _SC_AIO_PRIO_DELTA_MAX,

    _SC_DELAYTIMER_MAX,

    _SC_MQ_OPEN_MAX,

    _SC_MQ_PRIO_MAX,

    _SC_VERSION,

    _SC_PAGESIZE,


    _SC_RTSIG_MAX,

    _SC_SEM_NSEMS_MAX,

    _SC_SEM_VALUE_MAX,

    _SC_SIGQUEUE_MAX,

    _SC_TIMER_MAX,




    _SC_BC_BASE_MAX,

    _SC_BC_DIM_MAX,

    _SC_BC_SCALE_MAX,

    _SC_BC_STRING_MAX,

    _SC_COLL_WEIGHTS_MAX,

    _SC_EQUIV_CLASS_MAX,

    _SC_EXPR_NEST_MAX,

    _SC_LINE_MAX,

    _SC_RE_DUP_MAX,

    _SC_CHARCLASS_NAME_MAX,


    _SC_2_VERSION,

    _SC_2_C_BIND,

    _SC_2_C_DEV,

    _SC_2_FORT_DEV,

    _SC_2_FORT_RUN,

    _SC_2_SW_DEV,

    _SC_2_LOCALEDEF,


    _SC_PII,

    _SC_PII_XTI,

    _SC_PII_SOCKET,

    _SC_PII_INTERNET,

    _SC_PII_OSI,

    _SC_POLL,

    _SC_SELECT,

    _SC_UIO_MAXIOV,

    _SC_IOV_MAX = _SC_UIO_MAXIOV,

    _SC_PII_INTERNET_STREAM,

    _SC_PII_INTERNET_DGRAM,

    _SC_PII_OSI_COTS,

    _SC_PII_OSI_CLTS,

    _SC_PII_OSI_M,

    _SC_T_IOV_MAX,



    _SC_THREADS,

    _SC_THREAD_SAFE_FUNCTIONS,

    _SC_GETGR_R_SIZE_MAX,

    _SC_GETPW_R_SIZE_MAX,

    _SC_LOGIN_NAME_MAX,

    _SC_TTY_NAME_MAX,

    _SC_THREAD_DESTRUCTOR_ITERATIONS,

    _SC_THREAD_KEYS_MAX,

    _SC_THREAD_STACK_MIN,

    _SC_THREAD_THREADS_MAX,

    _SC_THREAD_ATTR_STACKADDR,

    _SC_THREAD_ATTR_STACKSIZE,

    _SC_THREAD_PRIORITY_SCHEDULING,

    _SC_THREAD_PRIO_INHERIT,

    _SC_THREAD_PRIO_PROTECT,

    _SC_THREAD_PROCESS_SHARED,


    _SC_NPROCESSORS_CONF,

    _SC_NPROCESSORS_ONLN,

    _SC_PHYS_PAGES,

    _SC_AVPHYS_PAGES,

    _SC_ATEXIT_MAX,

    _SC_PASS_MAX,


    _SC_XOPEN_VERSION,

    _SC_XOPEN_XCU_VERSION,

    _SC_XOPEN_UNIX,

    _SC_XOPEN_CRYPT,

    _SC_XOPEN_ENH_I18N,

    _SC_XOPEN_SHM,


    _SC_2_CHAR_TERM,

    _SC_2_C_VERSION,

    _SC_2_UPE,


    _SC_XOPEN_XPG2,

    _SC_XOPEN_XPG3,

    _SC_XOPEN_XPG4,


    _SC_CHAR_BIT,

    _SC_CHAR_MAX,

    _SC_CHAR_MIN,

    _SC_INT_MAX,

    _SC_INT_MIN,

    _SC_LONG_BIT,

    _SC_WORD_BIT,

    _SC_MB_LEN_MAX,

    _SC_NZERO,

    _SC_SSIZE_MAX,

    _SC_SCHAR_MAX,

    _SC_SCHAR_MIN,

    _SC_SHRT_MAX,

    _SC_SHRT_MIN,

    _SC_UCHAR_MAX,

    _SC_UINT_MAX,

    _SC_ULONG_MAX,

    _SC_USHRT_MAX,


    _SC_NL_ARGMAX,

    _SC_NL_LANGMAX,

    _SC_NL_MSGMAX,

    _SC_NL_NMAX,

    _SC_NL_SETMAX,

    _SC_NL_TEXTMAX,


    _SC_XBS5_ILP32_OFF32,

    _SC_XBS5_ILP32_OFFBIG,

    _SC_XBS5_LP64_OFF64,

    _SC_XBS5_LPBIG_OFFBIG,


    _SC_XOPEN_LEGACY,

    _SC_XOPEN_REALTIME,

    _SC_XOPEN_REALTIME_THREADS,


    _SC_ADVISORY_INFO,

    _SC_BARRIERS,

    _SC_BASE,

    _SC_C_LANG_SUPPORT,

    _SC_C_LANG_SUPPORT_R,

    _SC_CLOCK_SELECTION,

    _SC_CPUTIME,

    _SC_THREAD_CPUTIME,

    _SC_DEVICE_IO,

    _SC_DEVICE_SPECIFIC,

    _SC_DEVICE_SPECIFIC_R,

    _SC_FD_MGMT,

    _SC_FIFO,

    _SC_PIPE,

    _SC_FILE_ATTRIBUTES,

    _SC_FILE_LOCKING,

    _SC_FILE_SYSTEM,

    _SC_MONOTONIC_CLOCK,

    _SC_MULTI_PROCESS,

    _SC_SINGLE_PROCESS,

    _SC_NETWORKING,

    _SC_READER_WRITER_LOCKS,

    _SC_SPIN_LOCKS,

    _SC_REGEXP,

    _SC_REGEX_VERSION,

    _SC_SHELL,

    _SC_SIGNALS,

    _SC_SPAWN,

    _SC_SPORADIC_SERVER,

    _SC_THREAD_SPORADIC_SERVER,

    _SC_SYSTEM_DATABASE,

    _SC_SYSTEM_DATABASE_R,

    _SC_TIMEOUTS,

    _SC_TYPED_MEMORY_OBJECTS,

    _SC_USER_GROUPS,

    _SC_USER_GROUPS_R,

    _SC_2_PBS,

    _SC_2_PBS_ACCOUNTING,

    _SC_2_PBS_LOCATE,

    _SC_2_PBS_MESSAGE,

    _SC_2_PBS_TRACK,

    _SC_SYMLOOP_MAX,

    _SC_STREAMS,

    _SC_2_PBS_CHECKPOINT,


    _SC_V6_ILP32_OFF32,

    _SC_V6_ILP32_OFFBIG,

    _SC_V6_LP64_OFF64,

    _SC_V6_LPBIG_OFFBIG,


    _SC_HOST_NAME_MAX,

    _SC_TRACE,

    _SC_TRACE_EVENT_FILTER,

    _SC_TRACE_INHERIT,

    _SC_TRACE_LOG

  };





enum
  {
    _CS_PATH,




    _CS_LFS_CFLAGS = 1000,

    _CS_LFS_LDFLAGS,

    _CS_LFS_LIBS,

    _CS_LFS_LINTFLAGS,

    _CS_LFS64_CFLAGS,

    _CS_LFS64_LDFLAGS,

    _CS_LFS64_LIBS,

    _CS_LFS64_LINTFLAGS,




    _CS_XBS5_ILP32_OFF32_CFLAGS = 1100,

    _CS_XBS5_ILP32_OFF32_LDFLAGS,

    _CS_XBS5_ILP32_OFF32_LIBS,

    _CS_XBS5_ILP32_OFF32_LINTFLAGS,

    _CS_XBS5_ILP32_OFFBIG_CFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LDFLAGS,

    _CS_XBS5_ILP32_OFFBIG_LIBS,

    _CS_XBS5_ILP32_OFFBIG_LINTFLAGS,

    _CS_XBS5_LP64_OFF64_CFLAGS,

    _CS_XBS5_LP64_OFF64_LDFLAGS,

    _CS_XBS5_LP64_OFF64_LIBS,

    _CS_XBS5_LP64_OFF64_LINTFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_CFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LDFLAGS,

    _CS_XBS5_LPBIG_OFFBIG_LIBS,

    _CS_XBS5_LPBIG_OFFBIG_LINTFLAGS,



    _CS_POSIX_V6_ILP32_OFF32_CFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFF32_LIBS,

    _CS_POSIX_V6_ILP32_OFF32_LINTFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_CFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_ILP32_OFFBIG_LIBS,

    _CS_POSIX_V6_ILP32_OFFBIG_LINTFLAGS,

    _CS_POSIX_V6_LP64_OFF64_CFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LDFLAGS,

    _CS_POSIX_V6_LP64_OFF64_LIBS,

    _CS_POSIX_V6_LP64_OFF64_LINTFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_CFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LDFLAGS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LIBS,

    _CS_POSIX_V6_LPBIG_OFFBIG_LINTFLAGS,



    _CS_V6_WIDTH_RESTRICTED_ENVS,

  };
# 501 "/usr/include/unistd.h" 2 3


extern long int pathconf (__const char *__path, int __name) ;


extern long int fpathconf (int __fd, int __name) ;


extern long int sysconf (int __name) __attribute__ ((__const__));



extern size_t confstr (int __name, char *__buf, size_t __len) ;




extern __pid_t getpid (void) ;


extern __pid_t getppid (void) ;




extern __pid_t getpgrp (void) ;
# 536 "/usr/include/unistd.h" 3
extern __pid_t __getpgid (__pid_t __pid) ;

extern __pid_t getpgid (__pid_t __pid) ;






extern int setpgid (__pid_t __pid, __pid_t __pgid) ;
# 562 "/usr/include/unistd.h" 3
extern int setpgrp (void) ;
# 580 "/usr/include/unistd.h" 3
extern __pid_t setsid (void) ;



extern __pid_t getsid (__pid_t __pid) ;



extern __uid_t getuid (void) ;


extern __uid_t geteuid (void) ;


extern __gid_t getgid (void) ;


extern __gid_t getegid (void) ;




extern int getgroups (int __size, __gid_t __list[]) ;



extern int group_member (__gid_t __gid) ;






extern int setuid (__uid_t __uid) ;




extern int setreuid (__uid_t __ruid, __uid_t __euid) ;




extern int seteuid (__uid_t __uid) ;






extern int setgid (__gid_t __gid) ;




extern int setregid (__gid_t __rgid, __gid_t __egid) ;




extern int setegid (__gid_t __gid) ;






extern __pid_t fork (void) ;






extern __pid_t vfork (void) ;





extern char *ttyname (int __fd) ;



extern int ttyname_r (int __fd, char *__buf, size_t __buflen) ;



extern int isatty (int __fd) ;





extern int ttyslot (void) ;




extern int link (__const char *__from, __const char *__to) ;



extern int symlink (__const char *__from, __const char *__to) ;




extern int readlink (__const char *__restrict __path, char *__restrict __buf,
                     size_t __len) ;



extern int unlink (__const char *__name) ;


extern int rmdir (__const char *__path) ;



extern __pid_t tcgetpgrp (int __fd) ;


extern int tcsetpgrp (int __fd, __pid_t __pgrp_id) ;



extern char *getlogin (void) ;




extern int getlogin_r (char *__name, size_t __name_len) ;




extern int setlogin (__const char *__name) ;
# 726 "/usr/include/unistd.h" 3
# 1 "../include/getopt.h" 1 3
# 36 "../include/getopt.h" 3
extern char *optarg;
# 50 "../include/getopt.h" 3
extern int optind;




extern int opterr;



extern int optopt;
# 82 "../include/getopt.h" 3
struct option
{

  const char *name;





  int has_arg;
  int *flag;
  int val;
};
# 112 "../include/getopt.h" 3
extern int getopt (int argc, char *const *argv, const char *shortopts);





extern int getopt_long (int argc, char *const *argv, const char *shortopts,
                        const struct option *longopts, int *longind);
extern int getopt_long_only (int argc, char *const *argv,
                             const char *shortopts,
                             const struct option *longopts, int *longind);


extern int _getopt_internal (int argc, char *const *argv,
                             const char *shortopts,
                             const struct option *longopts, int *longind,
                             int long_only);
# 727 "/usr/include/unistd.h" 2 3







extern int gethostname (char *__name, size_t __len) ;






extern int sethostname (__const char *__name, size_t __len) ;



extern int sethostid (long int __id) ;





extern int getdomainname (char *__name, size_t __len) ;
extern int setdomainname (__const char *__name, size_t __len) ;





extern int vhangup (void) ;


extern int revoke (__const char *__file) ;







extern int profil (unsigned short int *__sample_buffer, size_t __size,
                   size_t __offset, unsigned int __scale) ;





extern int acct (__const char *__name) ;



extern char *getusershell (void) ;
extern void endusershell (void) ;
extern void setusershell (void) ;





extern int daemon (int __nochdir, int __noclose) ;






extern int chroot (__const char *__path) ;



extern char *getpass (__const char *__prompt) ;





extern int fsync (int __fd) ;






extern long int gethostid (void) ;


extern void sync (void) ;




extern int getpagesize (void) __attribute__ ((__const__));




extern int truncate (__const char *__file, __off_t __length) ;
# 836 "/usr/include/unistd.h" 3
extern int truncate64 (__const char *__file, __off64_t __length) ;




extern int ftruncate (int __fd, __off_t __length) ;
# 851 "/usr/include/unistd.h" 3
extern int ftruncate64 (int __fd, __off64_t __length) ;





extern int getdtablesize (void) ;
# 866 "/usr/include/unistd.h" 3
extern int brk (void *__addr) ;





extern void *sbrk (intptr_t __delta) ;
# 887 "/usr/include/unistd.h" 3
extern long int syscall (long int __sysno, ...) ;
# 907 "/usr/include/unistd.h" 3
extern int lockf (int __fd, int __cmd, __off_t __len) ;
# 917 "/usr/include/unistd.h" 3
extern int lockf64 (int __fd, int __cmd, __off64_t __len) ;
# 938 "/usr/include/unistd.h" 3
extern int fdatasync (int __fildes) ;







extern char *crypt (__const char *__key, __const char *__salt) ;



extern void encrypt (char *__block, int __edflag) ;






extern void swab (__const void *__restrict __from, void *__restrict __to,
                  ssize_t __n) ;







extern char *ctermid (char *__s) ;
# 983 "/usr/include/unistd.h" 3
extern int pthread_atfork (void (*__prepare) (void),
                           void (*__parent) (void),
                           void (*__child) (void)) ;



# 70 "sysdep.h" 2





# 1 "../include/fopen-same.h" 1
# 76 "sysdep.h" 2



# 1 "/usr/include/fcntl.h" 1 3
# 29 "/usr/include/fcntl.h" 3




# 1 "/usr/include/bits/fcntl.h" 1 3
# 134 "/usr/include/bits/fcntl.h" 3
struct flock
  {
    short int l_type;
    short int l_whence;
    __off_t l_start;
    __off_t l_len;
    __pid_t l_pid;
  };


struct flock64
  {
    short int l_type;
    short int l_whence;
    __off64_t l_start;
    __off64_t l_len;
    __pid_t l_pid;
  };
# 34 "/usr/include/fcntl.h" 2 3
# 60 "/usr/include/fcntl.h" 3
extern int fcntl (int __fd, int __cmd, ...) ;





extern int open (__const char *__file, int __oflag, ...) ;
# 76 "/usr/include/fcntl.h" 3
extern int open64 (__const char *__file, int __oflag, ...) ;






extern int creat (__const char *__file, __mode_t __mode) ;
# 93 "/usr/include/fcntl.h" 3
extern int creat64 (__const char *__file, __mode_t __mode) ;
# 130 "/usr/include/fcntl.h" 3
extern int posix_fadvise (int __fd, __off_t __offset, size_t __len,
                          int __advise) ;
# 142 "/usr/include/fcntl.h" 3
extern int posix_fadvise64 (int __fd, __off64_t __offset, size_t __len,
                            int __advise) ;





extern int posix_fallocate (int __fd, __off_t __offset, size_t __len) ;
# 160 "/usr/include/fcntl.h" 3
extern int posix_fallocate64 (int __fd, __off64_t __offset, size_t __len)
     ;




# 80 "sysdep.h" 2
# 106 "sysdep.h"
# 1 "../include/filenames.h" 1
# 107 "sysdep.h" 2
# 135 "sysdep.h"
# 1 "/usr/include/libintl.h" 1 3
# 29 "/usr/include/libintl.h" 3





extern char *gettext (__const char *__msgid) ;



extern char *dgettext (__const char *__domainname, __const char *__msgid)
     ;
extern char *__dgettext (__const char *__domainname, __const char *__msgid)
     __attribute__ ((__format_arg__ (2)));



extern char *dcgettext (__const char *__domainname,
                        __const char *__msgid, int __category) ;
extern char *__dcgettext (__const char *__domainname,
                          __const char *__msgid, int __category)
     __attribute__ ((__format_arg__ (2)));




extern char *ngettext (__const char *__msgid1, __const char *__msgid2,
                       unsigned long int __n)
     __attribute__ ((__format_arg__ (1)));



extern char *dngettext (__const char *__domainname, __const char *__msgid1,
                        __const char *__msgid2, unsigned long int __n)
     __attribute__ ((__format_arg__ (2)));



extern char *dcngettext (__const char *__domainname, __const char *__msgid1,
                         __const char *__msgid2, unsigned long int __n,
                         int __category)
     __attribute__ ((__format_arg__ (2)));





extern char *textdomain (__const char *__domainname) ;



extern char *bindtextdomain (__const char *__domainname,
                             __const char *__dirname) ;



extern char *bind_textdomain_codeset (__const char *__domainname,
                                      __const char *__codeset) ;







# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 94 "/usr/include/libintl.h" 2 3


# 1 "/usr/include/locale.h" 1 3
# 29 "/usr/include/locale.h" 3
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 30 "/usr/include/locale.h" 2 3
# 1 "/usr/include/bits/locale.h" 1 3
# 27 "/usr/include/bits/locale.h" 3
enum
{
  __LC_CTYPE = 0,
  __LC_NUMERIC = 1,
  __LC_TIME = 2,
  __LC_COLLATE = 3,
  __LC_MONETARY = 4,
  __LC_MESSAGES = 5,
  __LC_ALL = 6,
  __LC_PAPER = 7,
  __LC_NAME = 8,
  __LC_ADDRESS = 9,
  __LC_TELEPHONE = 10,
  __LC_MEASUREMENT = 11,
  __LC_IDENTIFICATION = 12
};
# 31 "/usr/include/locale.h" 2 3


# 52 "/usr/include/locale.h" 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;


  char int_p_cs_precedes;

  char int_p_sep_by_space;

  char int_n_cs_precedes;

  char int_n_sep_by_space;






  char int_p_sign_posn;
  char int_n_sign_posn;
# 119 "/usr/include/locale.h" 3
};



extern char *setlocale (int __category, __const char *__locale) ;


extern struct lconv *localeconv (void) ;
# 149 "/usr/include/locale.h" 3
extern __locale_t __newlocale (int __category_mask, __const char *__locale,
                               __locale_t __base) ;



extern __locale_t __duplocale (__locale_t __dataset) ;



extern void __freelocale (__locale_t __dataset) ;



# 97 "/usr/include/libintl.h" 2 3
# 114 "/usr/include/libintl.h" 3

# 136 "sysdep.h" 2
# 69 "elfcode.h" 2
# 1 "../include/libiberty.h" 1
# 46 "../include/libiberty.h"
# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stddef.h" 1 3
# 47 "../include/libiberty.h" 2

# 1 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdarg.h" 1 3
# 110 "/usr/lib/gcc-lib/alpha-unknown-linux-gnu/3.1/include/stdarg.h" 3
typedef __gnuc_va_list va_list;
# 49 "../include/libiberty.h" 2





extern char **buildargv (const char *) __attribute__ ((__malloc__));



extern void freeargv (char **);




extern char **dupargv (char **) __attribute__ ((__malloc__));
# 77 "../include/libiberty.h"
extern char *basename (const char *);
# 86 "../include/libiberty.h"
extern const char *lbasename (const char *);





extern char *concat (const char *, ...) __attribute__ ((__malloc__));
# 101 "../include/libiberty.h"
extern char *reconcat (char *, const char *, ...) __attribute__ ((__malloc__));





extern unsigned long concat_length (const char *, ...);






extern char *concat_copy (char *, const char *, ...);






extern char *concat_copy2 (const char *, ...);



extern char *libiberty_concat_ptr;
# 137 "../include/libiberty.h"
extern int fdmatch (int fd1, int fd2);




extern char * getpwd (void);



extern long get_run_time (void);



extern char *choose_temp_base (void) __attribute__ ((__malloc__));



extern char *make_temp_file (const char *) __attribute__ ((__malloc__));



extern const char *spaces (int count);




extern int errno_max (void);




extern const char *strerrno (int);



extern int strtoerrno (const char *);



extern char *xstrerror (int);




extern int signo_max (void);
# 193 "../include/libiberty.h"
extern const char *strsigno (int);



extern int strtosigno (const char *);



extern int xatexit (void (*fn) (void));



extern void xexit (int status) __attribute__ ((__noreturn__));



extern void xmalloc_set_program_name (const char *);


extern void xmalloc_failed (size_t) __attribute__ ((__noreturn__));





extern void * xmalloc (size_t) __attribute__ ((__malloc__));





extern void * xrealloc (void *, size_t);




extern void * xcalloc (size_t, size_t) __attribute__ ((__malloc__));



extern char *xstrdup (const char *) __attribute__ ((__malloc__));



extern void * xmemdup (const void *, size_t, size_t) __attribute__ ((__malloc__));





extern const char _hex_value[256];
extern void hex_init (void);
# 260 "../include/libiberty.h"
extern int pexecute (const char *, char * const *, const char *, const char *, char **, char **, int);




extern int pwait (int, int *, int);




extern int asprintf (char **, const char *, ...) __attribute__ ((__format__ (__printf__, 2, 3)));




extern int vasprintf (char **, const char *, va_list)
  __attribute__ ((__format__ (__printf__, 2, 0)));
# 286 "../include/libiberty.h"
extern void * C_alloca (size_t);
# 70 "elfcode.h" 2
# 1 "../include/bfdlink.h" 1
# 26 "../include/bfdlink.h"
enum bfd_link_strip
{
  strip_none,
  strip_debugger,
  strip_some,
  strip_all
};



enum bfd_link_discard
{
  discard_sec_merge,

  discard_none,
  discard_l,
  discard_all
};




enum bfd_link_hash_table_type
  {
    bfd_link_generic_hash_table,
    bfd_link_elf_hash_table
  };




enum bfd_link_hash_type
{
  bfd_link_hash_new,
  bfd_link_hash_undefined,
  bfd_link_hash_undefweak,
  bfd_link_hash_defined,
  bfd_link_hash_defweak,
  bfd_link_hash_common,
  bfd_link_hash_indirect,
  bfd_link_hash_warning
};




struct bfd_link_hash_entry
{

  struct bfd_hash_entry root;

  enum bfd_link_hash_type type;
# 97 "../include/bfdlink.h"
  struct bfd_link_hash_entry *next;

  union
    {


      struct
        {
          bfd *abfd;
        } undef;

      struct
        {
          bfd_vma value;
          asection *section;
        } def;

      struct
        {
          struct bfd_link_hash_entry *link;
          const char *warning;
        } i;

      struct
        {
# 131 "../include/bfdlink.h"
          bfd_size_type size;
          struct bfd_link_hash_common_entry
            {
              unsigned int alignment_power;
              asection *section;
            } *p;
        } c;
    } u;
};




struct bfd_link_hash_table
{

  struct bfd_hash_table table;




  const bfd_target *creator;


  struct bfd_link_hash_entry *undefs;

  struct bfd_link_hash_entry *undefs_tail;

  enum bfd_link_hash_table_type type;
};




extern struct bfd_link_hash_entry *bfd_link_hash_lookup
  (struct bfd_link_hash_table *, const char *, boolean create, boolean copy, boolean follow);






extern struct bfd_link_hash_entry *bfd_wrapped_link_hash_lookup
  (bfd *, struct bfd_link_info *, const char *, boolean, boolean, boolean);



extern void bfd_link_hash_traverse
  (struct bfd_link_hash_table *, boolean (*) (struct bfd_link_hash_entry *, void *), void *);




extern void bfd_link_add_undef
  (struct bfd_link_hash_table *, struct bfd_link_hash_entry *);




struct bfd_link_info
{

  const struct bfd_link_callbacks *callbacks;

  boolean relocateable;

  boolean emitrelocations;


  boolean task_link;

  boolean shared;

  boolean symbolic;


  boolean export_dynamic;

  boolean static_link;




  boolean traditional_format;


  boolean optimize;


  boolean no_undefined;
# 233 "../include/bfdlink.h"
  boolean allow_shlib_undefined;

  enum bfd_link_strip strip;

  enum bfd_link_discard discard;


  boolean keep_memory;


  bfd *input_bfds;





  asection *create_object_symbols_section;

  struct bfd_link_hash_table *hash;


  struct bfd_hash_table *keep_hash;


  boolean notice_all;



  struct bfd_hash_table *notice_hash;


  struct bfd_hash_table *wrap_hash;

  void * base_file;




  int mpc860c0;



  const char *init_function;


  const char *fini_function;


  boolean new_dtags;


  bfd_vma flags;


  bfd_vma flags_1;



  boolean pei386_auto_import;



  boolean combreloc;



  boolean nocopyreloc;


  unsigned int spare_dynamic_tags;
};
# 312 "../include/bfdlink.h"
struct bfd_link_callbacks
{




  boolean (*add_archive_element) (struct bfd_link_info *, bfd *abfd, const char *name);
# 327 "../include/bfdlink.h"
  boolean (*multiple_definition) (struct bfd_link_info *, const char *name, bfd *obfd, asection *osec, bfd_vma oval, bfd *nbfd, asection *nsec, bfd_vma nval);
# 346 "../include/bfdlink.h"
  boolean (*multiple_common) (struct bfd_link_info *, const char *name, bfd *obfd, enum bfd_link_hash_type otype, bfd_vma osize, bfd *nbfd, enum bfd_link_hash_type ntype, bfd_vma nsize);
# 360 "../include/bfdlink.h"
  boolean (*add_to_set) (struct bfd_link_info *, struct bfd_link_hash_entry *entry, bfd_reloc_code_real_type reloc, bfd *abfd, asection *sec, bfd_vma value);
# 370 "../include/bfdlink.h"
  boolean (*constructor) (struct bfd_link_info *, boolean constructor, const char *name, bfd *abfd, asection *sec, bfd_vma value);
# 381 "../include/bfdlink.h"
  boolean (*warning) (struct bfd_link_info *, const char *warning, const char *symbol, bfd *abfd, asection *section, bfd_vma address);
# 390 "../include/bfdlink.h"
  boolean (*undefined_symbol) (struct bfd_link_info *, const char *name, bfd *abfd, asection *section, bfd_vma address, boolean fatal);
# 402 "../include/bfdlink.h"
  boolean (*reloc_overflow) (struct bfd_link_info *, const char *name, const char *reloc_name, bfd_vma addend, bfd *abfd, asection *section, bfd_vma address);
# 414 "../include/bfdlink.h"
  boolean (*reloc_dangerous) (struct bfd_link_info *, const char *message, bfd *abfd, asection *section, bfd_vma address);
# 424 "../include/bfdlink.h"
  boolean (*unattached_reloc) (struct bfd_link_info *, const char *name, bfd *abfd, asection *section, bfd_vma address);







  boolean (*notice) (struct bfd_link_info *, const char *name, bfd *abfd, asection *section, bfd_vma address);

};






enum bfd_link_order_type
{
  bfd_undefined_link_order,
  bfd_indirect_link_order,
  bfd_fill_link_order,
  bfd_data_link_order,
  bfd_section_reloc_link_order,
  bfd_symbol_reloc_link_order
};




struct bfd_link_order
{

  struct bfd_link_order *next;

  enum bfd_link_order_type type;

  bfd_vma offset;

  bfd_size_type size;

  union
    {
      struct
        {






          asection *section;
        } indirect;
      struct
        {

          unsigned int value;
        } fill;
      struct
        {


          bfd_byte *contents;
        } data;
      struct
        {



          struct bfd_link_order_reloc *p;
        } reloc;
    } u;
};
# 510 "../include/bfdlink.h"
struct bfd_link_order_reloc
{

  bfd_reloc_code_real_type reloc;

  union
    {



      asection *section;


      const char *name;
    } u;






  bfd_vma addend;
};


extern struct bfd_link_order *bfd_new_link_order (bfd *, asection *);
# 544 "../include/bfdlink.h"
struct bfd_elf_version_expr
{

  struct bfd_elf_version_expr *next;

  const char *pattern;

  int (*match) (struct bfd_elf_version_expr *, const char *);
};



struct bfd_elf_version_deps
{

  struct bfd_elf_version_deps *next;

  struct bfd_elf_version_tree *version_needed;
};



struct bfd_elf_version_tree
{

  struct bfd_elf_version_tree *next;

  const char *name;

  unsigned int vernum;

  struct bfd_elf_version_expr *globals;

  struct bfd_elf_version_expr *locals;

  struct bfd_elf_version_deps *deps;

  unsigned int name_indx;

  int used;
};
# 71 "elfcode.h" 2
# 1 "libbfd.h" 1
# 49 "libbfd.h"
struct bfd_in_memory
{

  bfd_size_type size;

  bfd_byte *buffer;
};




struct artdata {
  file_ptr first_file_filepos;

  struct ar_cache *cache;
  bfd *archive_head;
  carsym *symdefs;
  symindex symdef_count;
  char *extended_names;

  long armap_timestamp;





  file_ptr armap_datepos;

  void * tdata;
};




struct areltdata {
  char * arch_header;
  unsigned int parsed_size;
  char *filename;
};



extern void * bfd_malloc (bfd_size_type);
extern void * bfd_realloc (void *, bfd_size_type);
extern void * bfd_zmalloc (bfd_size_type);

extern bfd_error_handler_type _bfd_error_handler;



extern void * bfd_alloc (bfd *, bfd_size_type);
extern void * bfd_zalloc (bfd *, bfd_size_type);
extern void bfd_release (bfd *, void *);

bfd * _bfd_create_empty_archive_element_shell (bfd *obfd);
bfd * _bfd_look_for_bfd_in_cache (bfd *, file_ptr);
boolean _bfd_add_bfd_to_archive_cache (bfd *, file_ptr, bfd *);
boolean _bfd_generic_mkarchive (bfd *abfd);
const bfd_target *bfd_generic_archive_p (bfd *abfd);
boolean bfd_slurp_armap (bfd *abfd);
boolean bfd_slurp_bsd_armap_f2 (bfd *abfd);


boolean _bfd_slurp_extended_name_table (bfd *abfd);
extern boolean _bfd_construct_extended_name_table
  (bfd *, boolean, char **, bfd_size_type *);
boolean _bfd_write_archive_contents (bfd *abfd);
boolean _bfd_compute_and_write_armap (bfd *, unsigned int elength);
bfd *_bfd_get_elt_at_filepos (bfd *archive, file_ptr filepos);
extern bfd *_bfd_generic_get_elt_at_index (bfd *, symindex);
bfd * _bfd_new_bfd (void);

boolean bfd_false (bfd *ignore);
boolean bfd_true (bfd *ignore);
void * bfd_nullvoidptr (bfd *ignore);
int bfd_0 (bfd *ignore);
unsigned int bfd_0u (bfd *ignore);
long bfd_0l (bfd *ignore);
long _bfd_n1 (bfd *ignore);
void bfd_void (bfd *ignore);

bfd *_bfd_new_bfd_contained_in (bfd *);
const bfd_target *_bfd_dummy_target (bfd *abfd);

void bfd_dont_truncate_arname (bfd *abfd, const char *filename, char *hdr);

void bfd_bsd_truncate_arname (bfd *abfd, const char *filename, char *hdr);

void bfd_gnu_truncate_arname (bfd *abfd, const char *filename, char *hdr);


boolean bsd_write_armap (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count, int stridx);


boolean coff_write_armap (bfd *arch, unsigned int elength, struct orl *map, unsigned int orl_count, int stridx);


extern void * _bfd_generic_read_ar_hdr (bfd *);

extern void * _bfd_generic_read_ar_hdr_mag (bfd *, const char *);

bfd * bfd_generic_openr_next_archived_file (bfd *archive, bfd *last_file);


int bfd_generic_stat_arch_elt (bfd *, struct stat *);
# 165 "libbfd.h"
extern boolean _bfd_generic_get_section_contents
  (bfd *, asection *, void *, file_ptr, bfd_size_type);
extern boolean _bfd_generic_get_section_contents_in_window
  (bfd *, asection *, bfd_window *, file_ptr, bfd_size_type);
# 189 "libbfd.h"
extern char *_bfd_nocore_core_file_failing_command (bfd *);
extern int _bfd_nocore_core_file_failing_signal (bfd *);
extern boolean _bfd_nocore_core_file_matches_executable_p
  (bfd *, bfd *);
# 222 "libbfd.h"
extern boolean _bfd_archive_bsd_construct_extended_name_table
  (bfd *, char **, bfd_size_type *, const char **);
# 232 "libbfd.h"
extern boolean _bfd_archive_bsd_update_armap_timestamp (bfd *);







extern boolean _bfd_archive_coff_construct_extended_name_table
  (bfd *, char **, bfd_size_type *, const char **);
# 306 "libbfd.h"
extern boolean _bfd_generic_set_section_contents
  (bfd *, asection *, void *, file_ptr, bfd_size_type);
# 352 "libbfd.h"
extern boolean bfd_generic_is_local_label_name (bfd *, const char *);


extern long _bfd_generic_read_minisymbols
  (bfd *, boolean, void * *, unsigned int *);
extern asymbol *_bfd_generic_minisymbol_to_symbol
  (bfd *, boolean, const void *, asymbol *);


extern boolean _bfd_stab_section_find_nearest_line
  (bfd *, asymbol **, asection *, bfd_vma, boolean *, const char **, const char **, unsigned int *, void * *);



extern boolean _bfd_dwarf1_find_nearest_line
  (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **, unsigned int *);



extern boolean _bfd_dwarf2_find_nearest_line
  (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **, unsigned int *, unsigned int, void * *);




extern struct bfd_hash_entry *_bfd_link_hash_newfunc
  (struct bfd_hash_entry *entry, struct bfd_hash_table *table, const char *string);




extern boolean _bfd_link_hash_table_init
  (struct bfd_link_hash_table *, bfd *, struct bfd_hash_entry *(*) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *));





extern struct bfd_link_hash_table *_bfd_generic_link_hash_table_create
  (bfd *);


extern boolean _bfd_generic_link_add_symbols
  (bfd *, struct bfd_link_info *);




extern boolean _bfd_generic_link_add_symbols_collect
  (bfd *, struct bfd_link_info *);


extern boolean _bfd_generic_link_add_archive_symbols
  (bfd *, struct bfd_link_info *, boolean (*checkfn) (bfd *, struct bfd_link_info *, boolean *));





typedef struct bfd_link_hash_entry _bfd_link_hash_entry;


extern boolean _bfd_generic_link_add_one_symbol
  (struct bfd_link_info *, bfd *, const char *name, flagword, asection *, bfd_vma, const char *, boolean copy, boolean constructor, struct bfd_link_hash_entry **);




extern boolean _bfd_generic_final_link
  (bfd *, struct bfd_link_info *);

extern boolean _bfd_generic_link_split_section
  (bfd *, struct sec *);


extern boolean _bfd_generic_reloc_link_order
  (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);



extern boolean _bfd_default_link_order
  (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);



extern unsigned int _bfd_count_link_order_relocs
  (struct bfd_link_order *);


extern bfd_reloc_status_type _bfd_final_link_relocate
  (reloc_howto_type *, bfd *, asection *, bfd_byte *, bfd_vma, bfd_vma, bfd_vma);



extern bfd_reloc_status_type _bfd_relocate_contents
  (reloc_howto_type *, bfd *, bfd_vma, bfd_byte *);



extern boolean _bfd_link_section_stabs
  (bfd *, void * *, asection *, asection *, void * *);


extern boolean _bfd_discard_section_stabs
  (bfd *, asection *, void *, boolean (*) (bfd_vma, void *), void *);




extern boolean _bfd_write_section_stabs
  (bfd *, void * *, asection *, void * *, bfd_byte *);



extern boolean _bfd_write_stab_strings (bfd *, void * *);




extern bfd_vma _bfd_stab_section_offset
  (bfd *, void * *, asection *, void * *, bfd_vma);



extern boolean _bfd_merge_section
  (bfd *, void * *, asection *, void * *);



extern boolean _bfd_merge_sections
  (bfd *, void *);



extern boolean _bfd_write_merged_section
  (bfd *, asection *, void *);



extern bfd_vma _bfd_merged_section_offset
  (bfd *, asection **, void *, bfd_vma, bfd_vma);


extern struct bfd_strtab_hash *_bfd_stringtab_init (void);


extern struct bfd_strtab_hash *_bfd_xcoff_stringtab_init (void);


extern void _bfd_stringtab_free (struct bfd_strtab_hash *);


extern bfd_size_type _bfd_stringtab_size (struct bfd_strtab_hash *);


extern bfd_size_type _bfd_stringtab_add
  (struct bfd_strtab_hash *, const char *, boolean hash, boolean copy);



extern boolean _bfd_stringtab_emit (bfd *, struct bfd_strtab_hash *);


extern boolean _bfd_generic_verify_endian_match (bfd *, bfd *);
# 529 "libbfd.h"
void bfd_assert (const char*,int);







extern void _bfd_abort (const char *, int, const char *)
     __attribute__ ((__noreturn__));
# 548 "libbfd.h"
FILE * bfd_cache_lookup_worker (bfd *);

extern bfd *bfd_last_cache;



extern const bfd_target * const *bfd_target_vector;
extern const bfd_target *bfd_default_vector[];





struct ecoff_find_line;


extern boolean _bfd_ecoff_locate_line
  (bfd *, asection *, bfd_vma, struct ecoff_debug_info * const, const struct ecoff_debug_swap * const, struct ecoff_find_line *, const char **, const char **, unsigned int *);


extern boolean _bfd_ecoff_get_accumulated_pdr (void *, bfd_byte *);
extern boolean _bfd_ecoff_get_accumulated_sym (void *, bfd_byte *);
extern boolean _bfd_ecoff_get_accumulated_ss (void *, bfd_byte *);

extern bfd_vma _bfd_get_gp_value (bfd *);
extern void _bfd_set_gp_value (bfd *, bfd_vma);




extern boolean _bfd_sh_align_load_span
  (bfd *, asection *, bfd_byte *, boolean (*) (bfd *, asection *, void *, bfd_byte *, bfd_vma), void *, bfd_vma **, bfd_vma *, bfd_vma, bfd_vma, boolean *);





void
bfd_write_bigendian_4byte_int (bfd *, unsigned int);

unsigned int
bfd_log2 (bfd_vma x);


extern bfd *bfd_last_cache;





boolean
bfd_cache_init (bfd *abfd);

boolean
bfd_cache_close (bfd *abfd);

FILE*
bfd_open_file (bfd *abfd);

FILE *
bfd_cache_lookup_worker (bfd *abfd);
# 1148 "libbfd.h"
reloc_howto_type *
bfd_default_reloc_type_lookup (bfd *abfd, bfd_reloc_code_real_type code);

boolean
bfd_generic_relax_section (bfd *abfd, asection *section, struct bfd_link_info *, boolean *);




boolean
bfd_generic_gc_sections (bfd *, struct bfd_link_info *);

boolean
bfd_generic_merge_sections (bfd *, struct bfd_link_info *);

bfd_byte *
bfd_generic_get_relocated_section_contents (bfd *abfd, struct bfd_link_info *link_info, struct bfd_link_order *link_order, bfd_byte *data, boolean relocateable, asymbol **symbols);






extern const bfd_arch_info_type bfd_default_arch_struct;
boolean
bfd_default_set_arch_mach (bfd *abfd, enum bfd_architecture arch, unsigned long mach);



const bfd_arch_info_type *
bfd_default_compatible (const bfd_arch_info_type *a, const bfd_arch_info_type *b);


boolean
bfd_default_scan (const struct bfd_arch_info *info, const char *string);

struct elf_internal_shdr *
bfd_elf_find_section (bfd *abfd, char *name);
# 72 "elfcode.h" 2
# 1 "elf-bfd.h" 1
# 25 "elf-bfd.h"
# 1 "../include/elf/common.h" 1
# 26 "elf-bfd.h" 2
# 1 "../include/elf/internal.h" 1
# 44 "../include/elf/internal.h"
typedef struct elf_internal_ehdr {
  unsigned char e_ident[16];
  bfd_vma e_entry;
  bfd_size_type e_phoff;
  bfd_size_type e_shoff;
  unsigned long e_version;
  unsigned long e_flags;
  unsigned short e_type;
  unsigned short e_machine;
  unsigned short e_ehsize;
  unsigned short e_phentsize;
  unsigned short e_phnum;
  unsigned short e_shentsize;
  unsigned short e_shnum;
  unsigned short e_shstrndx;
} Elf_Internal_Ehdr;
# 68 "../include/elf/internal.h"
struct elf_internal_phdr {
  unsigned long p_type;
  unsigned long p_flags;
  bfd_vma p_offset;
  bfd_vma p_vaddr;
  bfd_vma p_paddr;
  bfd_vma p_filesz;
  bfd_vma p_memsz;
  bfd_vma p_align;
};

typedef struct elf_internal_phdr Elf_Internal_Phdr;







typedef struct elf_internal_shdr {
  unsigned int sh_name;
  unsigned int sh_type;
  bfd_vma sh_flags;
  bfd_vma sh_addr;
  bfd_size_type sh_size;
  bfd_size_type sh_entsize;
  unsigned long sh_link;
  unsigned long sh_info;
  file_ptr sh_offset;
  unsigned int sh_addralign;


  asection * bfd_section;
  unsigned char *contents;
} Elf_Internal_Shdr;
# 111 "../include/elf/internal.h"
struct elf_internal_sym {
  bfd_vma st_value;
  bfd_vma st_size;
  unsigned long st_name;
  unsigned char st_info;
  unsigned char st_other;
  unsigned short st_shndx;
};

typedef struct elf_internal_sym Elf_Internal_Sym;
# 129 "../include/elf/internal.h"
typedef struct elf_internal_note {
  unsigned long namesz;
  unsigned long descsz;
  unsigned long type;
  char * namedata;
  char * descdata;
  bfd_vma descpos;
} Elf_Internal_Note;





typedef struct elf_internal_rel {
  bfd_vma r_offset;

  bfd_vma r_info;
} Elf_Internal_Rel;






typedef struct elf_internal_rela {
  bfd_vma r_offset;
  bfd_vma r_info;
  bfd_vma r_addend;
} Elf_Internal_Rela;
# 166 "../include/elf/internal.h"
typedef struct elf_internal_dyn {

  bfd_vma d_tag;
  union {

    bfd_vma d_val;
    bfd_vma d_ptr;
  } d_un;
} Elf_Internal_Dyn;
# 183 "../include/elf/internal.h"
typedef struct elf_internal_verdef {
  unsigned short vd_version;
  unsigned short vd_flags;
  unsigned short vd_ndx;
  unsigned short vd_cnt;
  unsigned long vd_hash;
  unsigned long vd_aux;
  unsigned long vd_next;



  bfd *vd_bfd;
  const char *vd_nodename;
  struct elf_internal_verdef *vd_nextdef;
  struct elf_internal_verdaux *vd_auxptr;
  unsigned int vd_exp_refno;
} Elf_Internal_Verdef;



typedef struct elf_internal_verdaux {
  unsigned long vda_name;
  unsigned long vda_next;



  const char *vda_nodename;
  struct elf_internal_verdaux *vda_nextptr;
} Elf_Internal_Verdaux;



typedef struct elf_internal_verneed {
  unsigned short vn_version;
  unsigned short vn_cnt;
  unsigned long vn_file;
  unsigned long vn_aux;
  unsigned long vn_next;



  bfd *vn_bfd;
  const char *vn_filename;
  struct elf_internal_vernaux *vn_auxptr;
  struct elf_internal_verneed *vn_nextref;
} Elf_Internal_Verneed;



typedef struct elf_internal_vernaux {
  unsigned long vna_hash;
  unsigned short vna_flags;
  unsigned short vna_other;
  unsigned long vna_name;
  unsigned long vna_next;



  const char *vna_nodename;
  struct elf_internal_vernaux *vna_nextptr;
} Elf_Internal_Vernaux;




typedef struct elf_internal_versym {
  unsigned short vs_vers;
} Elf_Internal_Versym;


typedef struct
{
  unsigned short int si_boundto;
  unsigned short int si_flags;
} Elf_Internal_Syminfo;
# 287 "../include/elf/internal.h"
struct elf_segment_map
{

  struct elf_segment_map *next;

  unsigned long p_type;

  unsigned long p_flags;

  bfd_vma p_paddr;


  unsigned int p_flags_valid : 1;


  unsigned int p_paddr_valid : 1;

  unsigned int includes_filehdr : 1;

  unsigned int includes_phdrs : 1;

  unsigned int count;

  asection *sections[1];
};
# 27 "elf-bfd.h" 2
# 1 "../include/elf/external.h" 1
# 40 "../include/elf/external.h"
typedef struct {
  unsigned char e_ident[16];
  unsigned char e_type[2];
  unsigned char e_machine[2];
  unsigned char e_version[4];
  unsigned char e_entry[4];
  unsigned char e_phoff[4];
  unsigned char e_shoff[4];
  unsigned char e_flags[4];
  unsigned char e_ehsize[2];
  unsigned char e_phentsize[2];
  unsigned char e_phnum[2];
  unsigned char e_shentsize[2];
  unsigned char e_shnum[2];
  unsigned char e_shstrndx[2];
} Elf32_External_Ehdr;

typedef struct {
  unsigned char e_ident[16];
  unsigned char e_type[2];
  unsigned char e_machine[2];
  unsigned char e_version[4];
  unsigned char e_entry[8];
  unsigned char e_phoff[8];
  unsigned char e_shoff[8];
  unsigned char e_flags[4];
  unsigned char e_ehsize[2];
  unsigned char e_phentsize[2];
  unsigned char e_phnum[2];
  unsigned char e_shentsize[2];
  unsigned char e_shnum[2];
  unsigned char e_shstrndx[2];
} Elf64_External_Ehdr;



typedef struct {
  unsigned char p_type[4];
  unsigned char p_offset[4];
  unsigned char p_vaddr[4];
  unsigned char p_paddr[4];
  unsigned char p_filesz[4];
  unsigned char p_memsz[4];
  unsigned char p_flags[4];
  unsigned char p_align[4];
} Elf32_External_Phdr;

typedef struct {
  unsigned char p_type[4];
  unsigned char p_flags[4];
  unsigned char p_offset[8];
  unsigned char p_vaddr[8];
  unsigned char p_paddr[8];
  unsigned char p_filesz[8];
  unsigned char p_memsz[8];
  unsigned char p_align[8];
} Elf64_External_Phdr;



typedef struct {
  unsigned char sh_name[4];
  unsigned char sh_type[4];
  unsigned char sh_flags[4];
  unsigned char sh_addr[4];
  unsigned char sh_offset[4];
  unsigned char sh_size[4];
  unsigned char sh_link[4];
  unsigned char sh_info[4];
  unsigned char sh_addralign[4];
  unsigned char sh_entsize[4];
} Elf32_External_Shdr;

typedef struct {
  unsigned char sh_name[4];
  unsigned char sh_type[4];
  unsigned char sh_flags[8];
  unsigned char sh_addr[8];
  unsigned char sh_offset[8];
  unsigned char sh_size[8];
  unsigned char sh_link[4];
  unsigned char sh_info[4];
  unsigned char sh_addralign[8];
  unsigned char sh_entsize[8];
} Elf64_External_Shdr;



typedef struct {
  unsigned char st_name[4];
  unsigned char st_value[4];
  unsigned char st_size[4];
  unsigned char st_info[1];
  unsigned char st_other[1];
  unsigned char st_shndx[2];
} Elf32_External_Sym;

typedef struct {
  unsigned char st_name[4];
  unsigned char st_info[1];
  unsigned char st_other[1];
  unsigned char st_shndx[2];
  unsigned char st_value[8];
  unsigned char st_size[8];
} Elf64_External_Sym;



typedef struct {
  unsigned char namesz[4];
  unsigned char descsz[4];
  unsigned char type[4];
  char name[1];
} Elf_External_Note;


typedef struct {
  unsigned char r_offset[4];
  unsigned char r_info[4];
} Elf32_External_Rel;

typedef struct {
  unsigned char r_offset[4];
  unsigned char r_info[4];
  unsigned char r_addend[4];
} Elf32_External_Rela;

typedef struct {
  unsigned char r_offset[8];
  unsigned char r_info[8];
} Elf64_External_Rel;

typedef struct {
  unsigned char r_offset[8];
  unsigned char r_info[8];
  unsigned char r_addend[8];
} Elf64_External_Rela;



typedef struct {
  unsigned char d_tag[4];
  union {
    unsigned char d_val[4];
    unsigned char d_ptr[4];
  } d_un;
} Elf32_External_Dyn;

typedef struct {
  unsigned char d_tag[8];
  union {
    unsigned char d_val[8];
    unsigned char d_ptr[8];
  } d_un;
} Elf64_External_Dyn;







typedef struct {
  unsigned char vd_version[2];
  unsigned char vd_flags[2];
  unsigned char vd_ndx[2];
  unsigned char vd_cnt[2];
  unsigned char vd_hash[4];
  unsigned char vd_aux[4];
  unsigned char vd_next[4];
} Elf_External_Verdef;



typedef struct {
  unsigned char vda_name[4];
  unsigned char vda_next[4];
} Elf_External_Verdaux;



typedef struct {
  unsigned char vn_version[2];
  unsigned char vn_cnt[2];
  unsigned char vn_file[4];
  unsigned char vn_aux[4];
  unsigned char vn_next[4];
} Elf_External_Verneed;



typedef struct {
  unsigned char vna_hash[4];
  unsigned char vna_flags[2];
  unsigned char vna_other[2];
  unsigned char vna_name[4];
  unsigned char vna_next[4];
} Elf_External_Vernaux;




typedef struct {
  unsigned char vs_vers[2];
}

  __attribute__ ((packed))

  Elf_External_Versym;


typedef struct
{
  unsigned char si_boundto[2];
  unsigned char si_flags[2];
} Elf_External_Syminfo;
# 28 "elf-bfd.h" 2
# 60 "elf-bfd.h"
typedef struct
{

  asymbol symbol;

  Elf_Internal_Sym internal_elf_sym;

  union
    {
      unsigned int hppa_arg_reloc;
      void * mips_extr;
      void * any;
    }
  tc_data;




  unsigned short version;

} elf_symbol_type;

struct elf_strtab_hash;



struct elf_link_hash_entry
{
  struct bfd_link_hash_entry root;



  long indx;
# 106 "elf-bfd.h"
  long dynindx;


  unsigned long dynstr_index;


  unsigned long elf_hash_value;




  struct elf_link_hash_entry *weakdef;




  struct elf_linker_section_pointers *linker_section_pointer;


  union
  {



    Elf_Internal_Verdef *verdef;



    struct bfd_elf_version_tree *vertree;
  } verinfo;





  size_t vtable_entries_size;
  boolean *vtable_entries_used;


  struct elf_link_hash_entry *vtable_parent;
# 154 "elf-bfd.h"
  union
    {
      bfd_signed_vma refcount;
      bfd_vma offset;
    } got;


  union
    {
      bfd_signed_vma refcount;
      bfd_vma offset;
    } plt;


  bfd_size_type size;


  char type;


  unsigned char other;


  unsigned short elf_link_hash_flags;
# 205 "elf-bfd.h"
};



struct elf_link_local_dynamic_entry
{
  struct elf_link_local_dynamic_entry *next;


  bfd *input_bfd;


  long input_indx;


  long dynindx;


  Elf_Internal_Sym isym;
};

struct elf_link_loaded_list
{
  struct elf_link_loaded_list *next;
  bfd *abfd;
};



struct elf_link_hash_table
{
  struct bfd_link_hash_table root;



  boolean dynamic_sections_created;




  bfd *dynobj;





  bfd_signed_vma init_refcount;



  bfd_size_type dynsymcount;



  struct elf_strtab_hash *dynstr;



  bfd_size_type bucketcount;



  struct bfd_link_needed_list *needed;


  struct elf_link_hash_entry *hgot;


  void * stab_info;


  void * merge_info;


  struct elf_link_local_dynamic_entry *dynlocal;



  struct bfd_link_needed_list *runpath;

  struct elf_link_loaded_list *loaded;
};
# 314 "elf-bfd.h"
struct sym_sec_cache
{
  bfd *abfd;
  unsigned long indx[32];
  asection *sec[32];
};



struct elf_size_info {
  unsigned char sizeof_ehdr, sizeof_phdr, sizeof_shdr;
  unsigned char sizeof_rel, sizeof_rela, sizeof_sym, sizeof_dyn, sizeof_note;


  unsigned char sizeof_hash_entry;



  unsigned char int_rels_per_ext_rel;

  unsigned char arch_size, file_align;
  unsigned char elfclass, ev_current;
  int (*write_out_phdrs)
    (bfd *, const Elf_Internal_Phdr *, unsigned int);
  boolean (*write_shdrs_and_ehdr)
    (bfd *);
  void (*write_relocs)
    (bfd *, asection *, void *);
  void (*swap_symbol_out)
    (bfd *, const Elf_Internal_Sym *, void *);
  boolean (*slurp_reloc_table)
    (bfd *, asection *, asymbol **, boolean);
  long (*slurp_symbol_table)
    (bfd *, asymbol **, boolean);
  void (*swap_dyn_in)
    (bfd *, const void *, Elf_Internal_Dyn *);
  void (*swap_dyn_out)
    (bfd *, const Elf_Internal_Dyn *, void *);





  void (*swap_reloc_in)
    (bfd *, const bfd_byte *, Elf_Internal_Rel *);



  void (*swap_reloc_out)
    (bfd *, const Elf_Internal_Rel *, bfd_byte *);





  void (*swap_reloca_in)
    (bfd *, const bfd_byte *, Elf_Internal_Rela *);



  void (*swap_reloca_out)
    (bfd *, const Elf_Internal_Rela *, bfd_byte *);

};







enum elf_reloc_type_class {
  reloc_class_normal,
  reloc_class_relative,
  reloc_class_plt,
  reloc_class_copy
};

struct elf_reloc_cookie
{
  Elf_Internal_Rela *rels, *rel, *relend;
  void *locsyms;
  bfd *abfd;
  size_t locsymcount;
  size_t extsymoff;
  struct elf_link_hash_entry **sym_hashes;
  boolean bad_symtab;
};

struct elf_backend_data
{

  enum bfd_architecture arch;


  int elf_machine_code;


  bfd_vma maxpagesize;



  void (*elf_info_to_howto)
    (bfd *, arelent *, Elf_Internal_Rela *);



  void (*elf_info_to_howto_rel)
    (bfd *, arelent *, Elf_Internal_Rel *);






  boolean (*elf_backend_sym_is_global)
    (bfd *, asymbol *);
# 441 "elf-bfd.h"
  boolean (*elf_backend_object_p)
    (bfd *);




  void (*elf_backend_symbol_processing)
    (bfd *, asymbol *);



  boolean (*elf_backend_symbol_table_processing)
    (bfd *, elf_symbol_type *, unsigned int);



  int (*elf_backend_get_symbol_type)
    ( Elf_Internal_Sym *, int);





  boolean (*elf_backend_section_processing)
    (bfd *, Elf_Internal_Shdr *);



  boolean (*elf_backend_section_from_shdr)
    (bfd *, Elf_Internal_Shdr *, char *);



  boolean (*elf_backend_section_flags)
    (flagword *, Elf_Internal_Shdr *);



  boolean (*elf_backend_section_from_phdr)
    (bfd *, Elf_Internal_Phdr *, int);




  boolean (*elf_backend_fake_sections)
    (bfd *, Elf_Internal_Shdr *, asection *);





  boolean (*elf_backend_section_from_bfd_section)
    (bfd *, Elf_Internal_Shdr *, asection *, int *retval);
# 503 "elf-bfd.h"
  boolean (*elf_add_symbol_hook)
    (bfd *abfd, struct bfd_link_info *info, const Elf_Internal_Sym *, const char **name, flagword *flags, asection **sec, bfd_vma *value);





  boolean (*elf_backend_link_output_symbol_hook)
    (bfd *, struct bfd_link_info *info, const char *, Elf_Internal_Sym *, asection *);
# 522 "elf-bfd.h"
  boolean (*elf_backend_create_dynamic_sections)
    (bfd *abfd, struct bfd_link_info *info);
# 535 "elf-bfd.h"
  boolean (*check_relocs)
    (bfd *abfd, struct bfd_link_info *info, asection *o, const Elf_Internal_Rela *relocs);
# 551 "elf-bfd.h"
  boolean (*elf_backend_adjust_dynamic_symbol)
    (struct bfd_link_info *info, struct elf_link_hash_entry *h);





  boolean (*elf_backend_always_size_sections)
    (bfd *output_bfd, struct bfd_link_info *info);
# 571 "elf-bfd.h"
  boolean (*elf_backend_size_dynamic_sections)
    (bfd *output_bfd, struct bfd_link_info *info);
# 602 "elf-bfd.h"
  boolean (*elf_backend_relocate_section)
    (bfd *output_bfd, struct bfd_link_info *info, bfd *input_bfd, asection *input_section, bfd_byte *contents, Elf_Internal_Rela *relocs, Elf_Internal_Sym *local_syms, asection **local_sections);
# 615 "elf-bfd.h"
  boolean (*elf_backend_finish_dynamic_symbol)
    (bfd *output_bfd, struct bfd_link_info *info, struct elf_link_hash_entry *h, Elf_Internal_Sym *sym);






  boolean (*elf_backend_finish_dynamic_sections)
    (bfd *output_bfd, struct bfd_link_info *info);



  void (*elf_backend_begin_write_processing)
    (bfd *, struct bfd_link_info *);




  void (*elf_backend_final_write_processing)
    (bfd *, boolean linker);




  int (*elf_backend_additional_program_headers)
    (bfd *);



  boolean (*elf_backend_modify_segment_map)
    (bfd *);




  asection * (*gc_mark_hook)
    (bfd *abfd, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *h, Elf_Internal_Sym *);





  boolean (*gc_sweep_hook)
    (bfd *abfd, struct bfd_link_info *info, asection *o, const Elf_Internal_Rela *relocs);





  void (*elf_backend_post_process_headers)
    (bfd *, struct bfd_link_info *);




  const char *(*elf_backend_print_symbol_all)
    (bfd *, void *, asymbol *);





  boolean (*elf_backend_output_arch_syms)
    (bfd *, struct bfd_link_info *, void *, boolean (*) (void *, const char *, Elf_Internal_Sym *, asection *));







  void (*elf_backend_copy_indirect_symbol)
    (struct elf_link_hash_entry *, struct elf_link_hash_entry *);



  void (*elf_backend_hide_symbol)
    (struct bfd_link_info *, struct elf_link_hash_entry *);



  void (*elf_backend_emit_relocs)
    (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *);



  unsigned int (*elf_backend_count_relocs)
    (asection *, Elf_Internal_Rela *);



  boolean (*elf_backend_grok_prstatus)
    (bfd *, Elf_Internal_Note *);



  boolean (*elf_backend_grok_psinfo)
    (bfd *, Elf_Internal_Note *);


  void (* elf_backend_sprintf_vma)
    (bfd *, char *, bfd_vma);
  void (* elf_backend_fprintf_vma)
    (bfd *, void *, bfd_vma);


  enum elf_reloc_type_class (*elf_backend_reloc_type_class)
    (const Elf_Internal_Rela *);



  boolean (*elf_backend_discard_info)
    (bfd *, struct elf_reloc_cookie *, struct bfd_link_info *);



  boolean (*elf_backend_ignore_discarded_relocs)
    (asection *);



  boolean (*elf_backend_write_section)
    (bfd *, asection *, bfd_byte *);



  const struct ecoff_debug_swap *elf_backend_ecoff_debug_swap;


  int elf_machine_alt1;
  int elf_machine_alt2;

  const struct elf_size_info *s;



  bfd_vma got_symbol_offset;



  bfd_vma got_header_size;
  bfd_vma plt_header_size;





  unsigned collect : 1;





  unsigned type_change_ok : 1;




  unsigned may_use_rel_p : 1;




  unsigned may_use_rela_p : 1;






  unsigned default_use_rela_p : 1;



  unsigned sign_extend_vma : 1;

  unsigned want_got_plt : 1;
  unsigned plt_readonly : 1;
  unsigned want_plt_sym : 1;
  unsigned plt_not_loaded : 1;
  unsigned plt_alignment : 4;
  unsigned can_gc_sections : 1;
  unsigned can_refcount : 1;
  unsigned want_got_sym : 1;
  unsigned want_dynbss : 1;
};




struct bfd_elf_section_data
{

  Elf_Internal_Shdr this_hdr;



  Elf_Internal_Shdr rel_hdr;



  Elf_Internal_Shdr *rel_hdr2;


  unsigned int rel_count;


  unsigned int rel_count2;



  void * local_dynrel;


  asection *sreloc;



  int this_idx;



  int rel_idx;



  int rel_idx2;



  struct elf_link_hash_entry **rel_hashes;




  Elf_Internal_Rela *relocs;





  long dynindx;


  void * stab_info;


  void * merge_info;


  const char *group_name;



  asection *next_in_group;


  void * tdata;


  unsigned int use_rela_p:1;
};
# 887 "elf-bfd.h"
typedef enum elf_linker_section_enum
{
  LINKER_SECTION_UNKNOWN,
  LINKER_SECTION_GOT,
  LINKER_SECTION_PLT,
  LINKER_SECTION_SDATA,
  LINKER_SECTION_SDATA2,
  LINKER_SECTION_MAX
} elf_linker_section_enum_t;



typedef struct elf_linker_section
{
  char *name;
  char *rel_name;
  char *bss_name;
  char *sym_name;
  asection *section;
  asection *bss_section;
  asection *rel_section;
  struct elf_link_hash_entry *sym_hash;
  bfd_vma initial_size;
  bfd_vma sym_offset;
  bfd_vma hole_size;
  bfd_vma hole_offset;
  bfd_vma max_hole_offset;
  elf_linker_section_enum_t which;
  boolean hole_written_p;
  unsigned int alignment;
  flagword flags;
} elf_linker_section_t;




typedef struct elf_linker_section_pointers
{
  struct elf_linker_section_pointers *next;
  bfd_vma offset;
  bfd_vma addend;
  elf_linker_section_enum_t which;
  boolean written_address_p;
} elf_linker_section_pointers_t;




struct elf_obj_tdata
{
  Elf_Internal_Ehdr elf_header[1];
  Elf_Internal_Shdr **elf_sect_ptr;
  Elf_Internal_Phdr *phdr;
  struct elf_segment_map *segment_map;
  struct elf_strtab_hash *strtab_ptr;
  int num_locals;
  int num_globals;
  int num_section_syms;
  asymbol **section_syms;
  Elf_Internal_Shdr symtab_hdr;
  Elf_Internal_Shdr shstrtab_hdr;
  Elf_Internal_Shdr strtab_hdr;
  Elf_Internal_Shdr dynsymtab_hdr;
  Elf_Internal_Shdr dynstrtab_hdr;
  Elf_Internal_Shdr dynversym_hdr;
  Elf_Internal_Shdr dynverref_hdr;
  Elf_Internal_Shdr dynverdef_hdr;
  unsigned int symtab_section, shstrtab_section;
  unsigned int strtab_section, dynsymtab_section;
  unsigned int dynversym_section, dynverdef_section, dynverref_section;
  file_ptr next_file_pos;






  bfd_vma gp;
  unsigned int gp_size;

  Elf_Internal_Shdr **group_sect_ptr;
  int num_group;


  int core_signal;
  int core_pid;
  int core_lwpid;
  char* core_program;
  char* core_command;



  boolean linker;




  struct elf_link_hash_entry **sym_hashes;
# 993 "elf-bfd.h"
  union
    {
      bfd_signed_vma *refcounts;
      bfd_vma *offsets;
    } local_got;



  elf_linker_section_pointers_t **linker_section_pointers;
# 1011 "elf-bfd.h"
  const char *dt_name;







  const char *dt_soname;






  boolean bad_symtab;


  bfd_size_type program_header_size;


  void * line_info;





  struct mips_elf_find_line *find_line_info;


  struct dwarf1_debug *dwarf1_find_line_info;


  void * dwarf2_find_line_info;




  asection **local_stubs;


  boolean flags_init;


  unsigned int cverdefs;


  unsigned int cverrefs;


  Elf_Internal_Verdef *verdef;


  Elf_Internal_Verneed *verref;


  struct elf_linker_section *linker_section[ (int)LINKER_SECTION_MAX ];



  asymbol *elf_data_symbol;
  asymbol *elf_text_symbol;
  asection *elf_data_section;
  asection *elf_text_section;
};
# 1104 "elf-bfd.h"
extern void _bfd_elf_swap_verdef_in
  (bfd *, const Elf_External_Verdef *, Elf_Internal_Verdef *);
extern void _bfd_elf_swap_verdef_out
  (bfd *, const Elf_Internal_Verdef *, Elf_External_Verdef *);
extern void _bfd_elf_swap_verdaux_in
  (bfd *, const Elf_External_Verdaux *, Elf_Internal_Verdaux *);
extern void _bfd_elf_swap_verdaux_out
  (bfd *, const Elf_Internal_Verdaux *, Elf_External_Verdaux *);
extern void _bfd_elf_swap_verneed_in
  (bfd *, const Elf_External_Verneed *, Elf_Internal_Verneed *);
extern void _bfd_elf_swap_verneed_out
  (bfd *, const Elf_Internal_Verneed *, Elf_External_Verneed *);
extern void _bfd_elf_swap_vernaux_in
  (bfd *, const Elf_External_Vernaux *, Elf_Internal_Vernaux *);
extern void _bfd_elf_swap_vernaux_out
  (bfd *, const Elf_Internal_Vernaux *, Elf_External_Vernaux *);
extern void _bfd_elf_swap_versym_in
  (bfd *, const Elf_External_Versym *, Elf_Internal_Versym *);
extern void _bfd_elf_swap_versym_out
  (bfd *, const Elf_Internal_Versym *, Elf_External_Versym *);

extern int _bfd_elf_section_from_bfd_section
  (bfd *, asection *);
extern char *bfd_elf_string_from_elf_section
  (bfd *, unsigned, unsigned);
extern char *bfd_elf_get_str_section
  (bfd *, unsigned);

extern boolean _bfd_elf_print_private_bfd_data
  (bfd *, void *);
extern void bfd_elf_print_symbol
  (bfd *, void *, asymbol *, bfd_print_symbol_type);
# 1144 "elf-bfd.h"
extern void _bfd_elf_sprintf_vma
  (bfd *, char *, bfd_vma);
extern void _bfd_elf_fprintf_vma
  (bfd *, void *, bfd_vma);

extern enum elf_reloc_type_class _bfd_elf_reloc_type_class
  (const Elf_Internal_Rela *);

extern unsigned long bfd_elf_hash
  (const char *);

extern bfd_reloc_status_type bfd_elf_generic_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern boolean bfd_elf_mkobject
  (bfd *);
extern boolean bfd_elf_mkcorefile
  (bfd *);
extern Elf_Internal_Shdr *bfd_elf_find_section
  (bfd *, char *);
extern boolean _bfd_elf_make_section_from_shdr
  (bfd *, Elf_Internal_Shdr *, const char *);
extern boolean _bfd_elf_make_section_from_phdr
  (bfd *, Elf_Internal_Phdr *, int, const char *);
extern struct bfd_hash_entry *_bfd_elf_link_hash_newfunc
  (struct bfd_hash_entry *, struct bfd_hash_table *, const char *);
extern struct bfd_link_hash_table *_bfd_elf_link_hash_table_create
  (bfd *);
extern void _bfd_elf_link_hash_copy_indirect
  (struct elf_link_hash_entry *, struct elf_link_hash_entry *);
extern void _bfd_elf_link_hash_hide_symbol
  (struct bfd_link_info *, struct elf_link_hash_entry *);
extern boolean _bfd_elf_link_hash_table_init
  (struct elf_link_hash_table *, bfd *, struct bfd_hash_entry *(*) (struct bfd_hash_entry *, struct bfd_hash_table *, const char *));



extern boolean _bfd_elf_slurp_version_tables
  (bfd *);

extern boolean _bfd_elf_merge_sections
  (bfd *, struct bfd_link_info *);

extern boolean _bfd_elf_copy_private_symbol_data
  (bfd *, asymbol *, bfd *, asymbol *);
extern boolean _bfd_elf_copy_private_section_data
  (bfd *, asection *, bfd *, asection *);
extern boolean _bfd_elf_write_object_contents
  (bfd *);
extern boolean _bfd_elf_write_corefile_contents
  (bfd *);
extern boolean _bfd_elf_set_section_contents
  (bfd *, sec_ptr, void *, file_ptr, bfd_size_type);
extern long _bfd_elf_get_symtab_upper_bound
  (bfd *);
extern long _bfd_elf_get_symtab
  (bfd *, asymbol **);
extern long _bfd_elf_get_dynamic_symtab_upper_bound
  (bfd *);
extern long _bfd_elf_canonicalize_dynamic_symtab
  (bfd *, asymbol **);
extern long _bfd_elf_get_reloc_upper_bound
  (bfd *, sec_ptr);
extern long _bfd_elf_canonicalize_reloc
  (bfd *, sec_ptr, arelent **, asymbol **);
extern long _bfd_elf_get_dynamic_reloc_upper_bound
  (bfd *);
extern long _bfd_elf_canonicalize_dynamic_reloc
  (bfd *, arelent **, asymbol **);
extern asymbol *_bfd_elf_make_empty_symbol
  (bfd *);
extern void _bfd_elf_get_symbol_info
  (bfd *, asymbol *, symbol_info *);
extern boolean _bfd_elf_is_local_label_name
  (bfd *, const char *);
extern alent *_bfd_elf_get_lineno
  (bfd *, asymbol *);
extern boolean _bfd_elf_set_arch_mach
  (bfd *, enum bfd_architecture, unsigned long);
extern boolean _bfd_elf_find_nearest_line
  (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **, unsigned int *);



extern int _bfd_elf_sizeof_headers
  (bfd *, boolean);
extern boolean _bfd_elf_new_section_hook
  (bfd *, asection *);
extern boolean _bfd_elf_init_reloc_shdr
  (bfd *, Elf_Internal_Shdr *, asection *, boolean);


extern void _bfd_elf_no_info_to_howto
  (bfd *, arelent *, Elf_Internal_Rela *);

extern boolean bfd_section_from_shdr
  (bfd *, unsigned int shindex);
extern boolean bfd_section_from_phdr
  (bfd *, Elf_Internal_Phdr *, int);

extern int _bfd_elf_symbol_from_bfd_symbol
  (bfd *, asymbol **);

extern asection *bfd_section_from_r_symndx
  (bfd *, struct sym_sec_cache *, asection *, unsigned long);
extern asection *bfd_section_from_elf_index
  (bfd *, unsigned int);
extern boolean _bfd_elf_create_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern struct bfd_strtab_hash *_bfd_elf_stringtab_init
  (void);

extern struct elf_strtab_hash * _bfd_elf_strtab_init
  (void);
extern void _bfd_elf_strtab_free
  (struct elf_strtab_hash *);
extern bfd_size_type _bfd_elf_strtab_add
  (struct elf_strtab_hash *, const char *, boolean);
extern void _bfd_elf_strtab_addref
  (struct elf_strtab_hash *, bfd_size_type);
extern void _bfd_elf_strtab_delref
  (struct elf_strtab_hash *, bfd_size_type);
extern void _bfd_elf_strtab_clear_all_refs
  (struct elf_strtab_hash *);
extern bfd_size_type _bfd_elf_strtab_size
  (struct elf_strtab_hash *);
extern bfd_size_type _bfd_elf_strtab_offset
  (struct elf_strtab_hash *, bfd_size_type);
extern boolean _bfd_elf_strtab_emit
  (bfd *, struct elf_strtab_hash *);
extern void _bfd_elf_strtab_finalize
  (struct elf_strtab_hash *);

extern boolean _bfd_elf_link_record_dynamic_symbol
  (struct bfd_link_info *, struct elf_link_hash_entry *);
extern long _bfd_elf_link_lookup_local_dynindx
  (struct bfd_link_info *, bfd *, long);
extern boolean _bfd_elf_compute_section_file_positions
  (bfd *, struct bfd_link_info *);
extern void _bfd_elf_assign_file_positions_for_relocs
  (bfd *);
extern file_ptr _bfd_elf_assign_file_position_for_section
  (Elf_Internal_Shdr *, file_ptr, boolean);

extern boolean _bfd_elf_validate_reloc
  (bfd *, arelent *);

extern boolean _bfd_elf_create_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf_create_got_section
  (bfd *, struct bfd_link_info *);
extern unsigned long _bfd_elf_link_renumber_dynsyms
  (bfd *, struct bfd_link_info *);

extern boolean _bfd_elfcore_make_pseudosection
  (bfd *, char *, size_t, ufile_ptr);
extern char *_bfd_elfcore_strndup
  (bfd *, char *, size_t);

extern elf_linker_section_t *_bfd_elf_create_linker_section
  (bfd *, struct bfd_link_info *, enum elf_linker_section_enum, elf_linker_section_t *);


extern elf_linker_section_pointers_t *_bfd_elf_find_pointer_linker_section
  (elf_linker_section_pointers_t *, bfd_vma, elf_linker_section_enum_t);


extern boolean bfd_elf32_create_pointer_linker_section
  (bfd *, struct bfd_link_info *, elf_linker_section_t *, struct elf_link_hash_entry *, const Elf_Internal_Rela *);


extern bfd_vma bfd_elf32_finish_pointer_linker_section
  (bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *, struct elf_link_hash_entry *, bfd_vma, const Elf_Internal_Rela *, int);



extern boolean bfd_elf64_create_pointer_linker_section
  (bfd *, struct bfd_link_info *, elf_linker_section_t *, struct elf_link_hash_entry *, const Elf_Internal_Rela *);


extern bfd_vma bfd_elf64_finish_pointer_linker_section
  (bfd *, bfd *, struct bfd_link_info *, elf_linker_section_t *, struct elf_link_hash_entry *, bfd_vma, const Elf_Internal_Rela *, int);



extern boolean _bfd_elf_make_linker_section_rela
  (bfd *, elf_linker_section_t *, int);

extern const bfd_target *bfd_elf32_object_p
  (bfd *);
extern const bfd_target *bfd_elf32_core_file_p
  (bfd *);
extern char *bfd_elf32_core_file_failing_command
  (bfd *);
extern int bfd_elf32_core_file_failing_signal
  (bfd *);
extern boolean bfd_elf32_core_file_matches_executable_p
  (bfd *, bfd *);

extern boolean bfd_elf32_bfd_link_add_symbols
  (bfd *, struct bfd_link_info *);
extern boolean bfd_elf32_bfd_final_link
  (bfd *, struct bfd_link_info *);

extern void bfd_elf32_swap_symbol_in
  (bfd *, const Elf32_External_Sym *, Elf_Internal_Sym *);
extern void bfd_elf32_swap_symbol_out
  (bfd *, const Elf_Internal_Sym *, void *);
extern void bfd_elf32_swap_reloc_in
  (bfd *, const Elf32_External_Rel *, Elf_Internal_Rel *);
extern void bfd_elf32_swap_reloc_out
  (bfd *, const Elf_Internal_Rel *, Elf32_External_Rel *);
extern void bfd_elf32_swap_reloca_in
  (bfd *, const Elf32_External_Rela *, Elf_Internal_Rela *);
extern void bfd_elf32_swap_reloca_out
  (bfd *, const Elf_Internal_Rela *, Elf32_External_Rela *);
extern void bfd_elf32_swap_phdr_in
  (bfd *, const Elf32_External_Phdr *, Elf_Internal_Phdr *);
extern void bfd_elf32_swap_phdr_out
  (bfd *, const Elf_Internal_Phdr *, Elf32_External_Phdr *);
extern void bfd_elf32_swap_dyn_in
  (bfd *, const void *, Elf_Internal_Dyn *);
extern void bfd_elf32_swap_dyn_out
  (bfd *, const Elf_Internal_Dyn *, void *);
extern long bfd_elf32_slurp_symbol_table
  (bfd *, asymbol **, boolean);
extern boolean bfd_elf32_write_shdrs_and_ehdr
  (bfd *);
extern int bfd_elf32_write_out_phdrs
  (bfd *, const Elf_Internal_Phdr *, unsigned int);
extern void bfd_elf32_write_relocs
  (bfd *, asection *, void *);
extern boolean bfd_elf32_slurp_reloc_table
  (bfd *, asection *, asymbol **, boolean);
extern boolean bfd_elf32_add_dynamic_entry
  (struct bfd_link_info *, bfd_vma, bfd_vma);
extern boolean bfd_elf32_link_create_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern Elf_Internal_Rela *_bfd_elf32_link_read_relocs
  (bfd *, asection *, void *, Elf_Internal_Rela *, boolean);

extern const bfd_target *bfd_elf64_object_p
  (bfd *);
extern const bfd_target *bfd_elf64_core_file_p
  (bfd *);
extern char *bfd_elf64_core_file_failing_command
  (bfd *);
extern int bfd_elf64_core_file_failing_signal
  (bfd *);
extern boolean bfd_elf64_core_file_matches_executable_p
  (bfd *, bfd *);
extern boolean bfd_elf64_bfd_link_add_symbols
  (bfd *, struct bfd_link_info *);
extern boolean bfd_elf64_bfd_final_link
  (bfd *, struct bfd_link_info *);

extern void bfd_elf64_swap_symbol_in
  (bfd *, const Elf64_External_Sym *, Elf_Internal_Sym *);
extern void bfd_elf64_swap_symbol_out
  (bfd *, const Elf_Internal_Sym *, void *);
extern void bfd_elf64_swap_reloc_in
  (bfd *, const Elf64_External_Rel *, Elf_Internal_Rel *);
extern void bfd_elf64_swap_reloc_out
  (bfd *, const Elf_Internal_Rel *, Elf64_External_Rel *);
extern void bfd_elf64_swap_reloca_in
  (bfd *, const Elf64_External_Rela *, Elf_Internal_Rela *);
extern void bfd_elf64_swap_reloca_out
  (bfd *, const Elf_Internal_Rela *, Elf64_External_Rela *);
extern void bfd_elf64_swap_phdr_in
  (bfd *, const Elf64_External_Phdr *, Elf_Internal_Phdr *);
extern void bfd_elf64_swap_phdr_out
  (bfd *, const Elf_Internal_Phdr *, Elf64_External_Phdr *);
extern void bfd_elf64_swap_dyn_in
  (bfd *, const void *, Elf_Internal_Dyn *);
extern void bfd_elf64_swap_dyn_out
  (bfd *, const Elf_Internal_Dyn *, void *);
extern long bfd_elf64_slurp_symbol_table
  (bfd *, asymbol **, boolean);
extern boolean bfd_elf64_write_shdrs_and_ehdr
  (bfd *);
extern int bfd_elf64_write_out_phdrs
  (bfd *, const Elf_Internal_Phdr *, unsigned int);
extern void bfd_elf64_write_relocs
  (bfd *, asection *, void *);
extern boolean bfd_elf64_slurp_reloc_table
  (bfd *, asection *, asymbol **, boolean);
extern boolean bfd_elf64_add_dynamic_entry
  (struct bfd_link_info *, bfd_vma, bfd_vma);
extern boolean bfd_elf64_link_create_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern Elf_Internal_Rela *_bfd_elf64_link_read_relocs
  (bfd *, asection *, void *, Elf_Internal_Rela *, boolean);






extern boolean _bfd_elf32_link_record_local_dynamic_symbol
  (struct bfd_link_info *, bfd *, long);
extern boolean _bfd_elf64_link_record_local_dynamic_symbol
  (struct bfd_link_info *, bfd *, long);

extern boolean _bfd_elf_close_and_cleanup
  (bfd *);
extern bfd_reloc_status_type _bfd_elf_rel_vtable_reloc_fn
  (bfd *, arelent *, struct symbol_cache_entry *, void *, asection *, bfd *, char **);


extern boolean _bfd_elf32_gc_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf32_gc_common_finalize_got_offsets
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf32_gc_common_final_link
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf32_gc_record_vtinherit
  (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
extern boolean _bfd_elf32_gc_record_vtentry
  (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);

extern boolean _bfd_elf64_gc_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf64_gc_common_finalize_got_offsets
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf64_gc_common_final_link
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_elf64_gc_record_vtinherit
  (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);
extern boolean _bfd_elf64_gc_record_vtentry
  (bfd *, asection *, struct elf_link_hash_entry *, bfd_vma);

extern boolean _bfd_elf32_reloc_symbol_deleted_p
  (bfd_vma, void *);
extern boolean _bfd_elf64_reloc_symbol_deleted_p
  (bfd_vma, void *);



extern boolean _bfd_mips_elf_object_p
  (bfd *);
extern boolean _bfd_mips_elf_section_from_shdr
  (bfd *, Elf_Internal_Shdr *, char *);
extern boolean _bfd_mips_elf_fake_sections
  (bfd *, Elf_Internal_Shdr *, asection *);
extern boolean _bfd_mips_elf_section_from_bfd_section
  (bfd *, Elf_Internal_Shdr *, asection *, int *);
extern boolean _bfd_mips_elf_section_processing
  (bfd *, Elf_Internal_Shdr *);
extern void _bfd_mips_elf_symbol_processing
  (bfd *, asymbol *);
extern boolean _bfd_mips_elf_read_ecoff_info
  (bfd *, asection *, struct ecoff_debug_info *);
extern void _bfd_mips_elf_final_write_processing
  (bfd *, boolean);
extern bfd_reloc_status_type _bfd_mips_elf_hi16_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern bfd_reloc_status_type _bfd_mips_elf_lo16_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern bfd_reloc_status_type _bfd_mips_elf_gprel16_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern bfd_reloc_status_type _bfd_mips_elf_got16_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern bfd_reloc_status_type _bfd_mips_elf_gprel32_reloc
  (bfd *, arelent *, asymbol *, void *, asection *, bfd *, char **);
extern boolean _bfd_mips_elf_set_private_flags
  (bfd *, flagword);
extern boolean _bfd_mips_elf_copy_private_bfd_data
  (bfd *, bfd *);
extern boolean _bfd_mips_elf_merge_private_bfd_data
  (bfd *, bfd *);
extern boolean _bfd_mips_elf_find_nearest_line
  (bfd *, asection *, asymbol **, bfd_vma, const char **, const char **, unsigned int *);

extern boolean _bfd_mips_elf_set_section_contents
  (bfd *, asection *, void *, file_ptr, bfd_size_type);
extern boolean _bfd_mips_elf_create_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_mips_elf_add_symbol_hook
  (bfd *, struct bfd_link_info *, const Elf_Internal_Sym *, const char **, flagword *, asection **, bfd_vma *);

extern boolean _bfd_mips_elf_adjust_dynamic_symbol
  (struct bfd_link_info *, struct elf_link_hash_entry *);
extern boolean _bfd_mips_elf_finish_dynamic_symbol
  (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, Elf_Internal_Sym *);

extern boolean _bfd_mips_elf_finish_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern asection * _bfd_mips_elf_gc_mark_hook
  (bfd *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *);

extern boolean _bfd_mips_elf_gc_sweep_hook
  (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);

extern boolean _bfd_mips_elf_always_size_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_mips_elf_size_dynamic_sections
  (bfd *, struct bfd_link_info *);
extern boolean _bfd_mips_elf_check_relocs
  (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);

extern struct bfd_link_hash_table *_bfd_mips_elf_link_hash_table_create
  (bfd *);
extern boolean _bfd_mips_elf_print_private_bfd_data
  (bfd *, void *);
extern boolean _bfd_mips_elf_link_output_symbol_hook
  (bfd *, struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection *);

extern boolean _bfd_mips_elf_final_link
  (bfd *, struct bfd_link_info *);
extern int _bfd_mips_elf_additional_program_headers
  (bfd *);
extern boolean _bfd_mips_elf_modify_segment_map
  (bfd *);
extern boolean _bfd_mips_elf_relocate_section
  (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);




extern boolean _sh_elf_set_mach_from_flags
  (bfd *);
# 73 "elfcode.h" 2
# 160 "elfcode.h"
static void elf_swap_ehdr_in
  (bfd *, const Elf64_External_Ehdr *, Elf_Internal_Ehdr *);
static void elf_swap_ehdr_out
  (bfd *, const Elf_Internal_Ehdr *, Elf64_External_Ehdr *);
static void elf_swap_shdr_in
  (bfd *, const Elf64_External_Shdr *, Elf_Internal_Shdr *);
static void elf_swap_shdr_out
  (bfd *, const Elf_Internal_Shdr *, Elf64_External_Shdr *);





static boolean elf_slurp_reloc_table_from_section
  (bfd *, asection *, Elf_Internal_Shdr *, bfd_size_type, arelent *, asymbol **, boolean);


static boolean elf_file_p (Elf64_External_Ehdr *);
# 205 "elfcode.h"
void
bfd_elf64_swap_symbol_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Sym *src;
     Elf_Internal_Sym *dst;
{
  int signed_vma = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->sign_extend_vma;

  dst->st_name = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->st_name)));
  if (signed_vma)
    dst->st_value = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->st_value)));
  else
    dst->st_value = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->st_value)));
  dst->st_size = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->st_size)));
  dst->st_info = (*(unsigned char *) (src->st_info) & 0xff);
  dst->st_other = (*(unsigned char *) (src->st_other) & 0xff);
  dst->st_shndx = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->st_shndx)));
}




void
bfd_elf64_swap_symbol_out (abfd, src, cdst)
     bfd *abfd;
     const Elf_Internal_Sym *src;
     void * cdst;
{
  Elf64_External_Sym *dst = (Elf64_External_Sym *) cdst;
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->st_name), (bfd_byte *) (dst->st_name)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->st_value), (bfd_byte *) (dst->st_value)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->st_size), (bfd_byte *) (dst->st_size)));
  ((void) (*((unsigned char *) (dst->st_info)) = (unsigned char) (src->st_info)));
  ((void) (*((unsigned char *) (dst->st_other)) = (unsigned char) (src->st_other)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->st_shndx), (bfd_byte *) (dst->st_shndx)));
}




static void
elf_swap_ehdr_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Ehdr *src;
     Elf_Internal_Ehdr *dst;
{
  int signed_vma = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->sign_extend_vma;
  memcpy (dst->e_ident, src->e_ident, 16);
  dst->e_type = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_type)));
  dst->e_machine = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_machine)));
  dst->e_version = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->e_version)));
  if (signed_vma)
    dst->e_entry = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->e_entry)));
  else
    dst->e_entry = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->e_entry)));
  dst->e_phoff = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->e_phoff)));
  dst->e_shoff = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->e_shoff)));
  dst->e_flags = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->e_flags)));
  dst->e_ehsize = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_ehsize)));
  dst->e_phentsize = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_phentsize)));
  dst->e_phnum = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_phnum)));
  dst->e_shentsize = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_shentsize)));
  dst->e_shnum = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_shnum)));
  dst->e_shstrndx = ((*(((abfd))->xvec->bfd_h_getx16)) ((bfd_byte *) (src->e_shstrndx)));
}




static void
elf_swap_ehdr_out (abfd, src, dst)
     bfd *abfd;
     const Elf_Internal_Ehdr *src;
     Elf64_External_Ehdr *dst;
{
  int signed_vma = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->sign_extend_vma;
  memcpy (dst->e_ident, src->e_ident, 16);

  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_type), (bfd_byte *) (dst->e_type)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_machine), (bfd_byte *) (dst->e_machine)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->e_version), (bfd_byte *) (dst->e_version)));
  if (signed_vma)
    ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->e_entry), (bfd_byte *) (dst->e_entry)));
  else
    ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->e_entry), (bfd_byte *) (dst->e_entry)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->e_phoff), (bfd_byte *) (dst->e_phoff)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->e_shoff), (bfd_byte *) (dst->e_shoff)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->e_flags), (bfd_byte *) (dst->e_flags)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_ehsize), (bfd_byte *) (dst->e_ehsize)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_phentsize), (bfd_byte *) (dst->e_phentsize)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_phnum), (bfd_byte *) (dst->e_phnum)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_shentsize), (bfd_byte *) (dst->e_shentsize)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_shnum), (bfd_byte *) (dst->e_shnum)));
  ((*(((abfd))->xvec->bfd_h_putx16)) ((bfd_vma) (src->e_shstrndx), (bfd_byte *) (dst->e_shstrndx)));
}




static void
elf_swap_shdr_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Shdr *src;
     Elf_Internal_Shdr *dst;
{
  int signed_vma = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->sign_extend_vma;

  dst->sh_name = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->sh_name)));
  dst->sh_type = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->sh_type)));
  dst->sh_flags = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_flags)));
  if (signed_vma)
    dst->sh_addr = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->sh_addr)));
  else
    dst->sh_addr = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_addr)));
  dst->sh_offset = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_offset)));
  dst->sh_size = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_size)));
  dst->sh_link = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->sh_link)));
  dst->sh_info = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->sh_info)));
  dst->sh_addralign = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_addralign)));
  dst->sh_entsize = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->sh_entsize)));
  dst->bfd_section = ((void *)0);
  dst->contents = ((void *)0);
}




static void
elf_swap_shdr_out (abfd, src, dst)
     bfd *abfd;
     const Elf_Internal_Shdr *src;
     Elf64_External_Shdr *dst;
{

  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->sh_name), (bfd_byte *) (dst->sh_name)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->sh_type), (bfd_byte *) (dst->sh_type)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_flags), (bfd_byte *) (dst->sh_flags)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_addr), (bfd_byte *) (dst->sh_addr)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_offset), (bfd_byte *) (dst->sh_offset)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_size), (bfd_byte *) (dst->sh_size)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->sh_link), (bfd_byte *) (dst->sh_link)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->sh_info), (bfd_byte *) (dst->sh_info)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_addralign), (bfd_byte *) (dst->sh_addralign)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->sh_entsize), (bfd_byte *) (dst->sh_entsize)));
}




void
bfd_elf64_swap_phdr_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Phdr *src;
     Elf_Internal_Phdr *dst;
{
  int signed_vma = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->sign_extend_vma;

  dst->p_type = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->p_type)));
  dst->p_flags = ((*(((abfd))->xvec->bfd_h_getx32)) ((bfd_byte *) (src->p_flags)));
  dst->p_offset = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_offset)));
  if (signed_vma)
    {
      dst->p_vaddr = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->p_vaddr)));
      dst->p_paddr = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->p_paddr)));
    }
  else
    {
      dst->p_vaddr = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_vaddr)));
      dst->p_paddr = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_paddr)));
    }
  dst->p_filesz = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_filesz)));
  dst->p_memsz = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_memsz)));
  dst->p_align = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->p_align)));
}

void
bfd_elf64_swap_phdr_out (abfd, src, dst)
     bfd *abfd;
     const Elf_Internal_Phdr *src;
     Elf64_External_Phdr *dst;
{

  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->p_type), (bfd_byte *) (dst->p_type)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_offset), (bfd_byte *) (dst->p_offset)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_vaddr), (bfd_byte *) (dst->p_vaddr)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_paddr), (bfd_byte *) (dst->p_paddr)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_filesz), (bfd_byte *) (dst->p_filesz)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_memsz), (bfd_byte *) (dst->p_memsz)));
  ((*(((abfd))->xvec->bfd_h_putx32)) ((bfd_vma) (src->p_flags), (bfd_byte *) (dst->p_flags)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->p_align), (bfd_byte *) (dst->p_align)));
}


__inline__ void
bfd_elf64_swap_reloc_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Rel *src;
     Elf_Internal_Rel *dst;
{
  dst->r_offset = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->r_offset)));
  dst->r_info = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->r_info)));
}

__inline__ void
bfd_elf64_swap_reloca_in (abfd, src, dst)
     bfd *abfd;
     const Elf64_External_Rela *src;
     Elf_Internal_Rela *dst;
{
  dst->r_offset = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->r_offset)));
  dst->r_info = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->r_info)));
  dst->r_addend = ((*(((abfd))->xvec->bfd_h_getx_signed_64)) ((bfd_byte *) (src->r_addend)));
}


__inline__ void
bfd_elf64_swap_reloc_out (abfd, src, dst)
     bfd *abfd;
     const Elf_Internal_Rel *src;
     Elf64_External_Rel *dst;
{
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->r_offset), (bfd_byte *) (dst->r_offset)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->r_info), (bfd_byte *) (dst->r_info)));
}

__inline__ void
bfd_elf64_swap_reloca_out (abfd, src, dst)
     bfd *abfd;
     const Elf_Internal_Rela *src;
     Elf64_External_Rela *dst;
{
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->r_offset), (bfd_byte *) (dst->r_offset)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->r_info), (bfd_byte *) (dst->r_info)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->r_addend), (bfd_byte *) (dst->r_addend)));
}

__inline__ void
bfd_elf64_swap_dyn_in (abfd, p, dst)
     bfd *abfd;
     const void * p;
     Elf_Internal_Dyn *dst;
{
  const Elf64_External_Dyn *src = (const Elf64_External_Dyn *) p;

  dst->d_tag = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->d_tag)));
  dst->d_un.d_val = ((*(((abfd))->xvec->bfd_h_getx64)) ((bfd_byte *) (src->d_un.d_val)));
}

__inline__ void
bfd_elf64_swap_dyn_out (abfd, src, p)
     bfd *abfd;
     const Elf_Internal_Dyn *src;
     void * p;
{
  Elf64_External_Dyn *dst = (Elf64_External_Dyn *) p;

  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->d_tag), (bfd_byte *) (dst->d_tag)));
  ((*(((abfd))->xvec->bfd_h_putx64)) ((bfd_vma) (src->d_un.d_val), (bfd_byte *) (dst->d_un.d_val)));
}
# 472 "elfcode.h"
static __inline__ boolean
elf_file_p (x_ehdrp)
     Elf64_External_Ehdr *x_ehdrp;
{
  return ((x_ehdrp->e_ident[0] == 0x7F)
          && (x_ehdrp->e_ident[1] == 'E')
          && (x_ehdrp->e_ident[2] == 'L')
          && (x_ehdrp->e_ident[3] == 'F'));
}
# 490 "elfcode.h"
const bfd_target *
bfd_elf64_object_p (abfd)
     bfd *abfd;
{
  Elf64_External_Ehdr x_ehdr;
  Elf_Internal_Ehdr *i_ehdrp;
  Elf64_External_Shdr x_shdr;
  Elf_Internal_Shdr *i_shdrp = ((void *)0);
  unsigned int shindex;
  char *shstrtab;
  struct elf_backend_data *ebd;
  struct elf_obj_tdata *preserved_tdata = ((abfd) -> tdata.elf_obj_data);
  struct sec *preserved_sections = abfd->sections;
  unsigned int preserved_section_count = abfd->section_count;
  enum bfd_architecture previous_arch = bfd_get_arch (abfd);
  unsigned long previous_mach = bfd_get_mach (abfd);
  struct elf_obj_tdata *new_tdata = ((void *)0);
  asection *s;
  bfd_size_type amt;



  abfd->sections = ((void *)0);
  abfd->section_count = 0;



  if (bfd_bread ((void *) & x_ehdr, (bfd_size_type) sizeof (x_ehdr), abfd)
      != sizeof (x_ehdr))
    {
      if (bfd_get_error () != bfd_error_system_call)
        goto got_wrong_format_error;
      else
        goto got_no_match;
    }







  if ((elf_file_p (&x_ehdr) == false) ||
      (x_ehdr.e_ident[6] != 1) ||
      (x_ehdr.e_ident[4] != 2))
    goto got_wrong_format_error;


  switch (x_ehdr.e_ident[5])
    {
    case 2:
      if (! ((abfd)->xvec->header_byteorder == BFD_ENDIAN_BIG))
        goto got_wrong_format_error;
      break;
    case 1:
      if (! ((abfd)->xvec->header_byteorder == BFD_ENDIAN_LITTLE))
        goto got_wrong_format_error;
      break;
    case 0:
    default:
      goto got_wrong_format_error;
    }




  amt = sizeof (struct elf_obj_tdata);
  new_tdata = (struct elf_obj_tdata *) bfd_zalloc (abfd, amt);
  if (new_tdata == ((void *)0))
    goto got_no_match;
  ((abfd) -> tdata.elf_obj_data) = new_tdata;


  i_ehdrp = (((abfd) -> tdata.elf_obj_data) -> elf_header);
  elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);





  if (i_ehdrp->e_type == 4)
    goto got_wrong_format_error;



  if (i_ehdrp->e_shoff == 0 && i_ehdrp->e_type == 1)
    goto got_wrong_format_error;




  if (i_ehdrp->e_shentsize != sizeof (x_shdr) && i_ehdrp->e_shnum != 0)
    goto got_wrong_format_error;

  ebd = ((struct elf_backend_data *) (abfd)->xvec->backend_data);



  if (ebd->elf_machine_code != i_ehdrp->e_machine
      && (ebd->elf_machine_alt1 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt1)
      && (ebd->elf_machine_alt2 == 0 || i_ehdrp->e_machine != ebd->elf_machine_alt2))
    {
      const bfd_target * const *target_ptr;

      if (ebd->elf_machine_code != 0)
        goto got_wrong_format_error;



      for (target_ptr = bfd_target_vector; *target_ptr != ((void *)0); target_ptr++)
        {
          struct elf_backend_data *back;

          if ((*target_ptr)->flavour != bfd_target_elf_flavour)
            continue;
          back = (struct elf_backend_data *) (*target_ptr)->backend_data;
          if (back->elf_machine_code == i_ehdrp->e_machine
              || (back->elf_machine_alt1 != 0
                  && back->elf_machine_alt1 == i_ehdrp->e_machine)
              || (back->elf_machine_alt2 != 0
                  && back->elf_machine_alt2 == i_ehdrp->e_machine))
            {


              goto got_wrong_format_error;
            }
        }
    }

  if (i_ehdrp->e_type == 2)
    abfd->flags |= 0x02;
  else if (i_ehdrp->e_type == 3)
    abfd->flags |= 0x40;

  if (i_ehdrp->e_phnum > 0)
    abfd->flags |= 0x100;

  if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
    {

      if (ebd->elf_machine_code != 0)
        goto got_no_match;
    }


  bfd_set_start_address (abfd, i_ehdrp->e_entry);




  if (i_ehdrp->e_shnum != 0)
    {
      amt = sizeof (*i_shdrp) * i_ehdrp->e_shnum;
      i_shdrp = (Elf_Internal_Shdr *) bfd_alloc (abfd, amt);
      amt = sizeof (i_shdrp) * i_ehdrp->e_shnum;
      (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr) = (Elf_Internal_Shdr **) bfd_alloc (abfd, amt);
      if (!i_shdrp || !(((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr))
        goto got_no_match;
      if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, 0) != 0)
        goto got_no_match;
    }
  for (shindex = 0; shindex < i_ehdrp->e_shnum; shindex++)
    {
      if (bfd_bread ((void *) & x_shdr, (bfd_size_type) sizeof x_shdr, abfd)
          != sizeof (x_shdr))
        goto got_no_match;
      elf_swap_shdr_in (abfd, &x_shdr, i_shdrp + shindex);
      (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr)[shindex] = i_shdrp + shindex;



      if (i_shdrp[shindex].sh_size != 0
          && (i_shdrp[shindex].sh_flags & (1 << 1)) != 0
          && i_shdrp[shindex].sh_type != 8
          && (((i_shdrp[shindex].sh_addr - i_shdrp[shindex].sh_offset)
               % ebd->maxpagesize)
              != 0))
        abfd->flags &= ~0x100;
    }
  if (i_ehdrp->e_shstrndx)
    {
      if (! bfd_section_from_shdr (abfd, i_ehdrp->e_shstrndx))
        goto got_no_match;
    }


  if (i_ehdrp->e_phnum == 0)
    ((abfd) -> tdata.elf_obj_data)->phdr = ((void *)0);
  else
    {
      Elf_Internal_Phdr *i_phdr;
      unsigned int i;

      amt = i_ehdrp->e_phnum * sizeof (Elf_Internal_Phdr);
      ((abfd) -> tdata.elf_obj_data)->phdr = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
      if (((abfd) -> tdata.elf_obj_data)->phdr == ((void *)0))
        goto got_no_match;
      if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, 0) != 0)
        goto got_no_match;
      i_phdr = ((abfd) -> tdata.elf_obj_data)->phdr;
      for (i = 0; i < i_ehdrp->e_phnum; i++, i_phdr++)
        {
          Elf64_External_Phdr x_phdr;

          if (bfd_bread ((void *) &x_phdr, (bfd_size_type) sizeof x_phdr, abfd)
              != sizeof x_phdr)
            goto got_no_match;
          bfd_elf64_swap_phdr_in (abfd, &x_phdr, i_phdr);
        }
    }







  if (i_ehdrp->e_shstrndx != 0)
    {
      shstrtab = bfd_elf_get_str_section (abfd, i_ehdrp->e_shstrndx);
      if (!shstrtab)
        goto got_no_match;





      for (shindex = 1; shindex < i_ehdrp->e_shnum; shindex++)
        {
          if (! bfd_section_from_shdr (abfd, shindex))
            goto got_no_match;
        }
    }



  if (ebd->elf_backend_object_p)
    {
      if ((*ebd->elf_backend_object_p) (abfd) == false)
        goto got_wrong_format_error;
    }



  for (s = abfd->sections; s != ((void *)0); s = s->next)
    {
      if ((((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_type == 9
           || ((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_type == 4)
          && ((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_info > 0)
        {
          unsigned long targ_index;
          asection *targ_sec;

          targ_index = ((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_info;
          targ_sec = bfd_section_from_elf_index (abfd, targ_index);
          if (targ_sec != ((void *)0)
              && (targ_sec->flags & 0x10000) != 0)
            s->flags |= 0x10000;
        }
    }

  return (abfd->xvec);

 got_wrong_format_error:
# 763 "elfcode.h"
  bfd_default_set_arch_mach (abfd, previous_arch, previous_mach);
  bfd_set_error (bfd_error_wrong_format);
 got_no_match:
  if (new_tdata != ((void *)0)
      && new_tdata->elf_sect_ptr != ((void *)0))
    bfd_release (abfd, new_tdata->elf_sect_ptr);
  if (i_shdrp != ((void *)0))
    bfd_release (abfd, i_shdrp);
  if (new_tdata != ((void *)0))
    bfd_release (abfd, new_tdata);
  ((abfd) -> tdata.elf_obj_data) = preserved_tdata;
  abfd->sections = preserved_sections;
  abfd->section_count = preserved_section_count;
  return (((void *)0));
}





void
bfd_elf64_write_relocs (abfd, sec, data)
     bfd *abfd;
     asection *sec;
     void * data;
{
  boolean *failedp = (boolean *) data;
  Elf_Internal_Shdr *rela_hdr;
  Elf64_External_Rela *outbound_relocas;
  Elf64_External_Rel *outbound_relocs;
  unsigned int idx;
  int use_rela_p;
  asymbol *last_sym = 0;
  int last_sym_idx = 0;


  if (*failedp)
    return;

  if ((sec->flags & 0x004) == 0)
    return;





  if (sec->reloc_count == 0)
    return;

  rela_hdr = &((struct bfd_elf_section_data*)sec->used_by_bfd)->rel_hdr;

  rela_hdr->sh_size = rela_hdr->sh_entsize * sec->reloc_count;
  rela_hdr->contents = (void *) bfd_alloc (abfd, rela_hdr->sh_size);
  if (rela_hdr->contents == ((void *)0))
    {
      *failedp = true;
      return;
    }


  if (rela_hdr->sh_type == 4)
    use_rela_p = true;
  else if (rela_hdr->sh_type == 9)
    use_rela_p = false;
  else


    _bfd_abort ("elfcode.h", 830, __PRETTY_FUNCTION__);


  if (use_rela_p)
    {
      outbound_relocas = (Elf64_External_Rela *) rela_hdr->contents;

      for (idx = 0; idx < sec->reloc_count; idx++)
        {
          Elf_Internal_Rela dst_rela;
          Elf64_External_Rela *src_rela;
          arelent *ptr;
          asymbol *sym;
          int n;

          ptr = sec->orelocation[idx];
          src_rela = outbound_relocas + idx;




          if ((abfd->flags & (0x02 | 0x40)) == 0)
            dst_rela.r_offset = ptr->address;
          else
            dst_rela.r_offset = ptr->address + sec->vma;

          sym = *ptr->sym_ptr_ptr;
          if (sym == last_sym)
            n = last_sym_idx;
          else if (((sym->section) == ((asection *) &bfd_abs_section)) && sym->value == 0)
            n = 0;
          else
            {
              last_sym = sym;
              n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
              if (n < 0)
                {
                  *failedp = true;
                  return;
                }
              last_sym_idx = n;
            }

          if ((*ptr->sym_ptr_ptr)->the_bfd != ((void *)0)
              && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
              && ! _bfd_elf_validate_reloc (abfd, ptr))
            {
              *failedp = true;
              return;
            }

          dst_rela.r_info = (((bfd_vma) (n) << 32) + (bfd_vma) (ptr->howto->type));

          dst_rela.r_addend = ptr->addend;
          bfd_elf64_swap_reloca_out (abfd, &dst_rela, src_rela);
        }
    }
  else

    {
      outbound_relocs = (Elf64_External_Rel *) rela_hdr->contents;

      for (idx = 0; idx < sec->reloc_count; idx++)
        {
          Elf_Internal_Rel dst_rel;
          Elf64_External_Rel *src_rel;
          arelent *ptr;
          int n;
          asymbol *sym;

          ptr = sec->orelocation[idx];
          sym = *ptr->sym_ptr_ptr;
          src_rel = outbound_relocs + idx;




          if ((abfd->flags & (0x02 | 0x40)) == 0)
            dst_rel.r_offset = ptr->address;
          else
            dst_rel.r_offset = ptr->address + sec->vma;

          if (sym == last_sym)
            n = last_sym_idx;
          else if (((sym->section) == ((asection *) &bfd_abs_section)) && sym->value == 0)
            n = 0;
          else
            {
              last_sym = sym;
              n = _bfd_elf_symbol_from_bfd_symbol (abfd, &sym);
              if (n < 0)
                {
                  *failedp = true;
                  return;
                }
              last_sym_idx = n;
            }

          if ((*ptr->sym_ptr_ptr)->the_bfd != ((void *)0)
              && (*ptr->sym_ptr_ptr)->the_bfd->xvec != abfd->xvec
              && ! _bfd_elf_validate_reloc (abfd, ptr))
            {
              *failedp = true;
              return;
            }

          dst_rel.r_info = (((bfd_vma) (n) << 32) + (bfd_vma) (ptr->howto->type));

          bfd_elf64_swap_reloc_out (abfd, &dst_rel, src_rel);
        }
    }
}



int
bfd_elf64_write_out_phdrs (abfd, phdr, count)
     bfd *abfd;
     const Elf_Internal_Phdr *phdr;
     unsigned int count;
{
  while (count--)
    {
      Elf64_External_Phdr extphdr;
      bfd_elf64_swap_phdr_out (abfd, phdr, &extphdr);
      if (bfd_bwrite (&extphdr, (bfd_size_type) sizeof (Elf64_External_Phdr),
                     abfd) != sizeof (Elf64_External_Phdr))
        return -1;
      phdr++;
    }
  return 0;
}



boolean
bfd_elf64_write_shdrs_and_ehdr (abfd)
     bfd *abfd;
{
  Elf64_External_Ehdr x_ehdr;
  Elf_Internal_Ehdr *i_ehdrp;
  Elf64_External_Shdr *x_shdrp;
  Elf_Internal_Shdr **i_shdrp;
  unsigned int count;
  bfd_size_type amt;

  i_ehdrp = (((abfd) -> tdata.elf_obj_data) -> elf_header);
  i_shdrp = (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr);






  elf_swap_ehdr_out (abfd, i_ehdrp, &x_ehdr);
  amt = sizeof (x_ehdr);
  if (bfd_seek (abfd, (file_ptr) 0, 0) != 0
      || bfd_bwrite ((void *) & x_ehdr, amt, abfd) != amt)
    return false;


  amt = sizeof (*x_shdrp) * i_ehdrp->e_shnum;
  x_shdrp = (Elf64_External_Shdr *) bfd_alloc (abfd, amt);
  if (!x_shdrp)
    return false;

  for (count = 0; count < i_ehdrp->e_shnum; count++)
    {



      elf_swap_shdr_out (abfd, i_shdrp[count], x_shdrp + count);
    }
  amt = i_ehdrp->e_shnum;
  amt *= sizeof (*x_shdrp);
  if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_shoff, 0) != 0
      || bfd_bwrite ((void *) x_shdrp, amt, abfd) != amt)
    return false;



  return true;
}

long
bfd_elf64_slurp_symbol_table (abfd, symptrs, dynamic)
     bfd *abfd;
     asymbol **symptrs;
     boolean dynamic;
{
  Elf_Internal_Shdr *hdr;
  Elf_Internal_Shdr *verhdr;
  unsigned long symcount;
  elf_symbol_type *sym;
  elf_symbol_type *symbase;
  Elf_Internal_Sym i_sym;
  Elf64_External_Sym *x_symp = ((void *)0);
  Elf_External_Versym *x_versymp = ((void *)0);
  bfd_size_type amt;
# 1040 "elfcode.h"
  if (! dynamic)
    {
      hdr = &((abfd) -> tdata.elf_obj_data)->symtab_hdr;
      verhdr = ((void *)0);
    }
  else
    {
      hdr = &((abfd) -> tdata.elf_obj_data)->dynsymtab_hdr;
      if ((((abfd) -> tdata.elf_obj_data) -> dynversym_section) == 0)
        verhdr = ((void *)0);
      else
        verhdr = &((abfd) -> tdata.elf_obj_data)->dynversym_hdr;
      if ((((abfd) -> tdata.elf_obj_data)->dynverdef_section != 0
           && ((abfd) -> tdata.elf_obj_data)->verdef == ((void *)0))
          || (((abfd) -> tdata.elf_obj_data)->dynverref_section != 0
              && ((abfd) -> tdata.elf_obj_data)->verref == ((void *)0)))
        {
          if (! _bfd_elf_slurp_version_tables (abfd))
            return -1;
        }
    }

  if (bfd_seek (abfd, hdr->sh_offset, 0) != 0)
    return -1;

  symcount = hdr->sh_size / sizeof (Elf64_External_Sym);

  if (symcount == 0)
    sym = symbase = ((void *)0);
  else
    {
      unsigned long i;

      if (bfd_seek (abfd, hdr->sh_offset, 0) != 0)
        return -1;

      amt = symcount;
      amt *= sizeof (elf_symbol_type);
      symbase = (elf_symbol_type *) bfd_zalloc (abfd, amt);
      if (symbase == (elf_symbol_type *) ((void *)0))
        return -1;
      sym = symbase;


      amt = symcount;
      amt *= sizeof (Elf64_External_Sym);
      x_symp = (Elf64_External_Sym *) bfd_malloc (amt);
      if (x_symp == ((void *)0) && symcount != 0)
        goto error_return;

      if (bfd_bread ((void *) x_symp, amt, abfd) != amt)
        goto error_return;



      if (verhdr != ((void *)0)
          && verhdr->sh_size / sizeof (Elf_External_Versym) != symcount)
        {
          (*_bfd_error_handler)
            (dcgettext ("bfd", "%s: version count (%ld) does not match symbol count (%ld)", __LC_MESSAGES),
             abfd->filename,
             (long) (verhdr->sh_size / sizeof (Elf_External_Versym)),
             symcount);



          verhdr = ((void *)0);
        }

      if (verhdr != ((void *)0))
        {
          if (bfd_seek (abfd, verhdr->sh_offset, 0) != 0)
            goto error_return;

          x_versymp = (Elf_External_Versym *) bfd_malloc (verhdr->sh_size);
          if (x_versymp == ((void *)0) && verhdr->sh_size != 0)
            goto error_return;

          if (bfd_bread ((void *) x_versymp, verhdr->sh_size, abfd)
              != verhdr->sh_size)
            goto error_return;
        }


      for (i = 1; i < symcount; i++)
        {
          bfd_elf64_swap_symbol_in (abfd, x_symp + i, &i_sym);
          memcpy (&sym->internal_elf_sym, &i_sym, sizeof (Elf_Internal_Sym));



          sym->symbol.the_bfd = abfd;

          sym->symbol.name = bfd_elf_string_from_elf_section (abfd,
                                                              hdr->sh_link,
                                                              i_sym.st_name);

          sym->symbol.value = i_sym.st_value;

          if (i_sym.st_shndx > 0 && i_sym.st_shndx < 0xFF00)
            {
              sym->symbol.section = bfd_section_from_elf_index (abfd,
                                                            i_sym.st_shndx);
              if (sym->symbol.section == ((void *)0))
                {



                  sym->symbol.section = ((asection *) &bfd_abs_section);
                }
            }
          else if (i_sym.st_shndx == 0xFFF1)
            {
              sym->symbol.section = ((asection *) &bfd_abs_section);
            }
          else if (i_sym.st_shndx == 0xFFF2)
            {
              sym->symbol.section = ((asection *) &bfd_com_section);




              sym->symbol.value = i_sym.st_size;
            }
          else if (i_sym.st_shndx == 0)
            {
              sym->symbol.section = ((asection *) &bfd_und_section);
            }
          else
            sym->symbol.section = ((asection *) &bfd_abs_section);



          if ((abfd->flags & (0x02 | 0x40)) != 0)
            sym->symbol.value -= sym->symbol.section->vma;

          switch ((((unsigned int)(i_sym.st_info)) >> 4))
            {
            case 0:
              sym->symbol.flags |= 0x01;
              break;
            case 1:
              if (i_sym.st_shndx != 0
                  && i_sym.st_shndx != 0xFFF2)
                sym->symbol.flags |= 0x02;
              break;
            case 2:
              sym->symbol.flags |= 0x80;
              break;
            }

          switch (((i_sym.st_info) & 0xF))
            {
            case 3:
              sym->symbol.flags |= 0x100 | 0x08;
              break;
            case 4:
              sym->symbol.flags |= 0x4000 | 0x08;
              break;
            case 2:
              sym->symbol.flags |= 0x10;
              break;
            case 1:
              sym->symbol.flags |= 0x10000;
              break;
            }

          if (dynamic)
            sym->symbol.flags |= 0x8000;

          if (x_versymp != ((void *)0))
            {
              Elf_Internal_Versym iversym;

              _bfd_elf_swap_versym_in (abfd, x_versymp + i, &iversym);
              sym->version = iversym.vs_vers;
            }


          {
            struct elf_backend_data *ebd = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
            if (ebd->elf_backend_symbol_processing)
              (*ebd->elf_backend_symbol_processing) (abfd, &sym->symbol);
          }

          sym++;
        }
    }


  {
    struct elf_backend_data *ebd = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
    if (ebd->elf_backend_symbol_table_processing)
      (*ebd->elf_backend_symbol_table_processing) (abfd, symbase, symcount);
  }



  symcount = sym - symbase;


  if (symptrs)
    {
      long l = symcount;

      sym = symbase;
      while (l-- > 0)
        {
          *symptrs++ = &sym->symbol;
          sym++;
        }
      *symptrs = 0;
    }

  if (x_versymp != ((void *)0))
    free (x_versymp);
  if (x_symp != ((void *)0))
    free (x_symp);
  return symcount;
error_return:
  if (x_versymp != ((void *)0))
    free (x_versymp);
  if (x_symp != ((void *)0))
    free (x_symp);
  return -1;
}




static boolean
elf_slurp_reloc_table_from_section (abfd, asect, rel_hdr, reloc_count,
                                    relents, symbols, dynamic)
     bfd *abfd;
     asection *asect;
     Elf_Internal_Shdr *rel_hdr;
     bfd_size_type reloc_count;
     arelent *relents;
     asymbol **symbols;
     boolean dynamic;
{
  struct elf_backend_data * const ebd = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  void * allocated = ((void *)0);
  bfd_byte *native_relocs;
  arelent *relent;
  unsigned int i;
  int entsize;

  allocated = (void *) bfd_malloc (rel_hdr->sh_size);
  if (allocated == ((void *)0))
    goto error_return;

  if (bfd_seek (abfd, rel_hdr->sh_offset, 0) != 0
      || (bfd_bread (allocated, rel_hdr->sh_size, abfd)
          != rel_hdr->sh_size))
    goto error_return;

  native_relocs = (bfd_byte *) allocated;

  entsize = rel_hdr->sh_entsize;
  { if (!(entsize == sizeof (Elf64_External_Rel) || entsize == sizeof (Elf64_External_Rela))) bfd_assert("elfcode.h",1301); };


  for (i = 0, relent = relents;
       i < reloc_count;
       i++, relent++, native_relocs += entsize)
    {
      Elf_Internal_Rela rela;
      Elf_Internal_Rel rel;

      if (entsize == sizeof (Elf64_External_Rela))
        bfd_elf64_swap_reloca_in (abfd, (Elf64_External_Rela *) native_relocs, &rela);
      else
        {
          bfd_elf64_swap_reloc_in (abfd, (Elf64_External_Rel *) native_relocs, &rel);
          rela.r_offset = rel.r_offset;
          rela.r_info = rel.r_info;
          rela.r_addend = 0;
        }





      if ((abfd->flags & (0x02 | 0x40)) == 0 || dynamic)
        relent->address = rela.r_offset;
      else
        relent->address = rela.r_offset - asect->vma;

      if (((rela.r_info) >> 32) == 0)
        relent->sym_ptr_ptr = ((asection *) &bfd_abs_section)->symbol_ptr_ptr;
      else
        {
          asymbol **ps, *s;

          ps = symbols + ((rela.r_info) >> 32) - 1;
          s = *ps;


          if ((s->flags & 0x100) == 0)
            relent->sym_ptr_ptr = ps;
          else
            relent->sym_ptr_ptr = s->section->symbol_ptr_ptr;
        }

      relent->addend = rela.r_addend;

      if (entsize == sizeof (Elf64_External_Rela))
        (*ebd->elf_info_to_howto) (abfd, relent, &rela);
      else
        (*ebd->elf_info_to_howto_rel) (abfd, relent, &rel);
    }

  if (allocated != ((void *)0))
    free (allocated);

  return true;

 error_return:
  if (allocated != ((void *)0))
    free (allocated);
  return false;
}



boolean
bfd_elf64_slurp_reloc_table (abfd, asect, symbols, dynamic)
     bfd *abfd;
     asection *asect;
     asymbol **symbols;
     boolean dynamic;
{
  struct bfd_elf_section_data * const d = ((struct bfd_elf_section_data*)asect->used_by_bfd);
  Elf_Internal_Shdr *rel_hdr;
  Elf_Internal_Shdr *rel_hdr2;
  bfd_size_type reloc_count;
  bfd_size_type reloc_count2;
  arelent *relents;
  bfd_size_type amt;

  if (asect->relocation != ((void *)0))
    return true;

  if (! dynamic)
    {
      if ((asect->flags & 0x004) == 0
          || asect->reloc_count == 0)
        return true;

      rel_hdr = &d->rel_hdr;
      reloc_count = ((rel_hdr)->sh_size / (rel_hdr)->sh_entsize);
      rel_hdr2 = d->rel_hdr2;
      reloc_count2 = (rel_hdr2 ? ((rel_hdr2)->sh_size / (rel_hdr2)->sh_entsize) : 0);

      { if (!(asect->reloc_count == reloc_count + reloc_count2)) bfd_assert("elfcode.h",1395); };
      { if (!(asect->rel_filepos == rel_hdr->sh_offset || (rel_hdr2 && asect->rel_filepos == rel_hdr2->sh_offset))) bfd_assert("elfcode.h",1397); };


    }
  else
    {




      if (asect->_raw_size == 0)
        return true;

      rel_hdr = &d->this_hdr;
      reloc_count = ((rel_hdr)->sh_size / (rel_hdr)->sh_entsize);
      rel_hdr2 = ((void *)0);
      reloc_count2 = 0;
    }

  amt = (reloc_count + reloc_count2) * sizeof (arelent);
  relents = (arelent *) bfd_alloc (abfd, amt);
  if (relents == ((void *)0))
    return false;

  if (!elf_slurp_reloc_table_from_section (abfd, asect,
                                           rel_hdr, reloc_count,
                                           relents,
                                           symbols, dynamic))
    return false;

  if (rel_hdr2
      && !elf_slurp_reloc_table_from_section (abfd, asect,
                                              rel_hdr2, reloc_count2,
                                              relents + reloc_count,
                                              symbols, dynamic))
    return false;

  asect->relocation = relents;
  return true;
}
# 1552 "elfcode.h"
# 1 "elfcore.h" 1
# 21 "elfcore.h"
char*
bfd_elf64_core_file_failing_command (abfd)
     bfd *abfd;
{
  return ((abfd) -> tdata.elf_obj_data)->core_command;
}

int
bfd_elf64_core_file_failing_signal (abfd)
     bfd *abfd;
{
  return ((abfd) -> tdata.elf_obj_data)->core_signal;
}

boolean
bfd_elf64_core_file_matches_executable_p (core_bfd, exec_bfd)
     bfd *core_bfd;
     bfd *exec_bfd;
{
  char* corename;



  if (core_bfd->xvec != exec_bfd->xvec)
    {
      bfd_set_error (bfd_error_system_call);
      return false;
    }



  corename = ((core_bfd) -> tdata.elf_obj_data)->core_program;
  if (corename != ((void *)0))
    {
      const char* execname = strrchr (exec_bfd->filename, '/');
      execname = execname ? execname + 1 : exec_bfd->filename;

      if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (execname) && __builtin_constant_p (corename) && (__s1_len = strlen (execname), __s2_len = strlen (corename), (!((size_t)(const void *)((execname) + 1) - (size_t)(const void *)(execname) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((corename) + 1) - (size_t)(const void *)(corename) == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (execname), (__const char *) (corename), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (execname) && ((size_t)(const void *)((execname) + 1) - (size_t)(const void *)(execname) == 1) && (__s1_len = strlen (execname), __s1_len < 4) ? (__builtin_constant_p (corename) && ((size_t)(const void *)((corename) + 1) - (size_t)(const void *)(corename) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (execname))[0] - ((__const unsigned char *) (__const char *)(corename))[0]); if (__s1_len > 0 && __result!
 == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[1] - ((__const unsigned char *) (__const char *) (corename))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[2] - ((__const unsigned char *) (__const char *) (corename))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (execname))[3] - ((__const unsigned char *) (__const char *) (corename))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (corename); register int __result = (((__const unsigned char *) (__const char *) (execname))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (!
((__const unsigned char *) (__const char *) (execname))[3] - !
__s2[3]); } } __result; }))) : (__builtin_constant_p (corename) && ((size_t)(const void *)((corename) + 1) - (size_t)(const void *)(corename) == 1) && (__s2_len = strlen (corename), __s2_len < 4) ? (__builtin_constant_p (execname) && ((size_t)(const void *)((execname) + 1) - (size_t)(const void *)(execname) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (execname))[0] - ((__const unsigned char *) (__const char *)(corename))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[1] - ((__const unsigned char *) (__const char *) (corename))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (execname))[2] - ((__const unsigned char *) (__const char *) (corename))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (execname))[3] - ((__const unsigned char *) (__const char *) (corename))[3]!
); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (execname); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (corename))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (corename))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (corename))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (corename))[3]); } } __result; }))) : strcmp (execname, corename)))); }) != 0)
        return false;
    }

  return true;
}
# 78 "elfcore.h"
const bfd_target *
bfd_elf64_core_file_p (abfd)
     bfd *abfd;
{
  Elf64_External_Ehdr x_ehdr;
  Elf_Internal_Ehdr *i_ehdrp;
  Elf_Internal_Phdr *i_phdrp = ((void *)0);
  unsigned int phindex;
  struct elf_backend_data *ebd;
  struct elf_obj_tdata *preserved_tdata = ((abfd) -> tdata.elf_obj_data);
  struct sec *preserved_sections = abfd->sections;
  unsigned int preserved_section_count = abfd->section_count;
  enum bfd_architecture previous_arch = bfd_get_arch (abfd);
  unsigned long previous_mach = bfd_get_mach (abfd);
  struct elf_obj_tdata *new_tdata = ((void *)0);
  bfd_size_type amt;



  abfd->sections = ((void *)0);
  abfd->section_count = 0;


  if (bfd_bread ((void *) &x_ehdr, (bfd_size_type) sizeof (x_ehdr), abfd)
      != sizeof (x_ehdr))
    {
      if (bfd_get_error () != bfd_error_system_call)
        bfd_set_error (bfd_error_wrong_format);
      return ((void *)0);
    }


  if (elf_file_p (&x_ehdr) == false)
    goto wrong;




  if (x_ehdr.e_ident[4] != 2)
    goto wrong;


  switch (x_ehdr.e_ident[5])
    {
    case 2:
      if (! ((abfd)->xvec->byteorder == BFD_ENDIAN_BIG))
        goto wrong;
      break;
    case 1:
      if (! ((abfd)->xvec->byteorder == BFD_ENDIAN_LITTLE))
        goto wrong;
      break;
    default:
      goto wrong;
    }


  amt = sizeof (struct elf_obj_tdata);
  new_tdata = (struct elf_obj_tdata *) bfd_zalloc (abfd, amt);
  if (new_tdata == ((void *)0))
    return ((void *)0);
  ((abfd) -> tdata.elf_obj_data) = new_tdata;


  i_ehdrp = (((abfd) -> tdata.elf_obj_data) -> elf_header);
  elf_swap_ehdr_in (abfd, &x_ehdr, i_ehdrp);





  ebd = ((struct elf_backend_data *) (abfd)->xvec->backend_data);




  if (ebd->elf_machine_code != i_ehdrp->e_machine
      && (ebd->elf_machine_alt1 == 0
          || i_ehdrp->e_machine != ebd->elf_machine_alt1)
      && (ebd->elf_machine_alt2 == 0
          || i_ehdrp->e_machine != ebd->elf_machine_alt2))
    {
      const bfd_target * const *target_ptr;

      if (ebd->elf_machine_code != 0)
        goto wrong;




      for (target_ptr = bfd_target_vector; *target_ptr != ((void *)0); target_ptr++)
        {
          struct elf_backend_data *back;

          if ((*target_ptr)->flavour != bfd_target_elf_flavour)
            continue;
          back = (struct elf_backend_data *) (*target_ptr)->backend_data;
          if (back->elf_machine_code == i_ehdrp->e_machine)
            {


              goto wrong;
            }
        }
    }



  if (i_ehdrp->e_phoff == 0 || i_ehdrp->e_type != 4)
    goto wrong;



  if (i_ehdrp->e_phentsize != sizeof (Elf64_External_Phdr))
    goto wrong;


  if (bfd_seek (abfd, (file_ptr) i_ehdrp->e_phoff, 0) != 0)
    goto wrong;


  amt = sizeof (*i_phdrp) * i_ehdrp->e_phnum;
  i_phdrp = (Elf_Internal_Phdr *) bfd_alloc (abfd, amt);
  if (!i_phdrp)
    goto fail;

  ((abfd) -> tdata.elf_obj_data)->phdr = i_phdrp;


  for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
    {
      Elf64_External_Phdr x_phdr;
      if (bfd_bread ((void *) &x_phdr, (bfd_size_type) sizeof (x_phdr), abfd)
          != sizeof (x_phdr))
        goto fail;

      bfd_elf64_swap_phdr_in (abfd, &x_phdr, i_phdrp + phindex);
    }


  for (phindex = 0; phindex < i_ehdrp->e_phnum; ++phindex)
    {
      if (! bfd_section_from_phdr (abfd, i_phdrp + phindex, (int) phindex))
        goto fail;
    }


  if (! bfd_default_set_arch_mach (abfd, ebd->arch, 0))
    {

      if (ebd->elf_machine_code != 0)
        goto fail;
    }


  ((abfd)->start_address) = i_ehdrp->e_entry;



  if (ebd->elf_backend_object_p)
    {
      if ((*ebd->elf_backend_object_p) (abfd) == false)
        goto wrong;
    }

  return abfd->xvec;

wrong:
# 255 "elfcore.h"
  bfd_default_set_arch_mach (abfd, previous_arch, previous_mach);
  bfd_set_error (bfd_error_wrong_format);
fail:
  if (i_phdrp != ((void *)0))
    bfd_release (abfd, i_phdrp);
  if (new_tdata != ((void *)0))
    bfd_release (abfd, new_tdata);
  ((abfd) -> tdata.elf_obj_data) = preserved_tdata;
  abfd->sections = preserved_sections;
  abfd->section_count = preserved_section_count;
  return ((void *)0);
}
# 1553 "elfcode.h" 2
# 1 "elflink.h" 1
# 26 "elflink.h"
struct elf_info_failed
{
  boolean failed;
  struct bfd_link_info *info;
  struct bfd_elf_version_tree *verdefs;
};

static boolean is_global_data_symbol_definition
  (bfd *, Elf_Internal_Sym *);
static boolean elf_link_is_defined_archive_symbol
  (bfd *, carsym *);
static boolean elf_link_add_object_symbols
  (bfd *, struct bfd_link_info *);
static boolean elf_link_add_archive_symbols
  (bfd *, struct bfd_link_info *);
static boolean elf_merge_symbol
  (bfd *, struct bfd_link_info *, const char *, Elf_Internal_Sym *, asection **, bfd_vma *, struct elf_link_hash_entry **, boolean *, boolean *, boolean *, boolean);



static boolean elf_add_default_symbol
  (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, const char *, Elf_Internal_Sym *, asection **, bfd_vma *, boolean *, boolean, boolean);


static boolean elf_export_symbol
  (struct elf_link_hash_entry *, void *);
static boolean elf_finalize_dynstr
  (bfd *, struct bfd_link_info *);
static boolean elf_fix_symbol_flags
  (struct elf_link_hash_entry *, struct elf_info_failed *);
static boolean elf_adjust_dynamic_symbol
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_find_version_dependencies
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_find_version_dependencies
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_assign_sym_version
  (struct elf_link_hash_entry *, void *);
static boolean elf_collect_hash_codes
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_read_relocs_from_section
  (bfd *, Elf_Internal_Shdr *, void *, Elf_Internal_Rela *);
static size_t compute_bucket_count
  (struct bfd_link_info *);
static void elf_link_output_relocs
  (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *);
static boolean elf_link_size_reloc_section
  (bfd *, Elf_Internal_Shdr *, asection *);
static void elf_link_adjust_relocs
  (bfd *, Elf_Internal_Shdr *, unsigned int, struct elf_link_hash_entry **);

static int elf_link_sort_cmp1
  (const void *, const void *);
static int elf_link_sort_cmp2
  (const void *, const void *);
static size_t elf_link_sort_relocs
  (bfd *, struct bfd_link_info *, asection **);
static boolean elf_section_ignore_discarded_relocs
  (asection *);
static boolean elf_link_check_versioned_symbol
  (struct bfd_link_info *, struct elf_link_hash_entry *);

static boolean
elf_link_check_versioned_symbol (info, h)
     struct bfd_link_info *info;
     struct elf_link_hash_entry *h;
{
  boolean found = false;
  bfd *undef_bfd = h->root.u.undef.abfd;
  struct elf_link_loaded_list *loaded;
  Elf64_External_Sym *buf = ((void *)0);
  Elf_External_Versym *extversym = ((void *)0);

  if ((undef_bfd->flags & 0x40) == 0
      || info->hash->creator->flavour != bfd_target_elf_flavour)
    return false;

  for (loaded = ((struct elf_link_hash_table *) ((info)->hash))->loaded;
       loaded != ((void *)0) && !found;
       loaded = loaded->next)
    {
      bfd *input;
      Elf_Internal_Shdr *hdr;
      bfd_size_type symcount;
      bfd_size_type extsymcount;
      bfd_size_type extsymoff;
      Elf_Internal_Shdr *versymhdr;
      Elf_External_Versym *ever;
      Elf64_External_Sym *esym;
      Elf64_External_Sym *esymend;
      bfd_size_type count;
      file_ptr pos;

      input = loaded->abfd;


      if (input == undef_bfd
          || (input->flags & 0x40) == 0
          || (((input) -> tdata.elf_obj_data) -> dynversym_section) == 0)
        continue;

      hdr = &((input) -> tdata.elf_obj_data)->dynsymtab_hdr;

      symcount = hdr->sh_size / sizeof (Elf64_External_Sym);
      if ((((input) -> tdata.elf_obj_data) -> bad_symtab))
        {
          extsymcount = symcount;
          extsymoff = 0;
        }
      else
        {
          extsymcount = symcount - hdr->sh_info;
          extsymoff = hdr->sh_info;
        }

      if (extsymcount == 0)
        continue;

      buf = ((Elf64_External_Sym *)
             bfd_malloc (extsymcount * sizeof (Elf64_External_Sym)));
      if (buf == ((void *)0))
        goto no_memory;


      pos = hdr->sh_offset + extsymoff * sizeof (Elf64_External_Sym);
      count = extsymcount * sizeof (Elf64_External_Sym);
      if (bfd_seek (input, pos, 0) != 0
         || bfd_bread ((void *) buf, count, input) != count)
        goto error_return;


      versymhdr = &((input) -> tdata.elf_obj_data)->dynversym_hdr;
      extversym =
        (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
      if (extversym == ((void *)0))
        goto no_memory;

      if (bfd_seek (input, versymhdr->sh_offset, 0) != 0
          || bfd_bread ((void *) extversym, versymhdr->sh_size, input)
             != versymhdr->sh_size)
        goto error_return;

      ever = extversym + extsymoff;
      esymend = buf + extsymcount;
      for (esym = buf; esym < esymend; esym++, ever++)
        {
          const char *name;
          Elf_Internal_Sym sym;
          Elf_Internal_Versym iver;

          bfd_elf64_swap_symbol_in (input, esym, &sym);
          if ((((unsigned int)(sym.st_info)) >> 4) == 0
              || sym.st_shndx == 0)
            continue;

          name = bfd_elf_string_from_elf_section (input,
                                                  hdr->sh_link,
                                                  sym.st_name);
          if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p (h->root.root.string) && (__s1_len = strlen (name), __s2_len = strlen (h->root.root.string), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((h->root.root.string) + 1) - (size_t)(const void *)(h->root.root.string) == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (name), (__const char *) (h->root.root.string), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p (h->root.root.string) && ((size_t)(const void *)((h->root.root.string) + 1) - (size_t)(const void *)(h->root.root.string) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const !
char *)(h->root.root.string))[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (h->root.root.string))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (h->root.root.string))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (h->root.root.string))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (h->root.root.string); register int __result = (((__const unsigned char *) (__const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__c!
onst char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __res!
ult == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (h->root.root.string) && ((size_t)(const void *)((h->root.root.string) + 1) - (size_t)(const void *)(h->root.root.string) == 1) && (__s2_len = strlen (h->root.root.string), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const char *)(h->root.root.string))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (h->root.root.string))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (h->root.root.string))[2]); if (__s2_len > 2 && __result == 0)!
 __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (h->root.root.string))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (h->root.root.string))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (h->root.root.string))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (h->root.root.string))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (h->root.root.string))[3]); } } __result; }))) : strcmp (name, h->root.root.string)))); }) != 0)
            continue;

          _bfd_elf_swap_versym_in (input, ever, &iver);



          if ((iver.vs_vers & 0x8000) == 0)
            {
              (*_bfd_error_handler)
                (dcgettext ("bfd", "%s: defined in %s", __LC_MESSAGES), name,
                 ((char *) (input)->filename));
              bfd_set_error (bfd_error_bad_value);
              goto error_return;
            }

          if ((iver.vs_vers & 0x7fff) == 2)
            {


              found = true;
              break;
            }
        }

      free (buf);
      free (extversym);
    }

  return found;

no_memory:
  bfd_set_error (bfd_error_no_memory);
error_return:
  if (buf != ((void *)0))
    free (buf);
  if (extversym != ((void *)0))
    free (extversym);
  return found;
}




boolean
bfd_elf64_bfd_link_add_symbols (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  switch (((abfd)->format))
    {
    case bfd_object:
      return elf_link_add_object_symbols (abfd, info);
    case bfd_archive:
      return elf_link_add_archive_symbols (abfd, info);
    default:
      bfd_set_error (bfd_error_wrong_format);
      return false;
    }
}


static boolean
is_global_data_symbol_definition (abfd, sym)
     bfd * abfd __attribute__ ((__unused__));
     Elf_Internal_Sym * sym;
{

  if ((((unsigned int)(sym->st_info)) >> 4) != 1
      && (((unsigned int)(sym->st_info)) >> 4) < 10)
    return false;


  if (((sym->st_info) & 0xF) == 2)
    return false;


  if (sym->st_shndx == 0)
    return false;



  if (sym->st_shndx == 0xFFF2)
    return false;



  if (sym->st_shndx >= 0xFF00 && sym->st_shndx < 0xFFF1)







    return false;

  return true;
}




static boolean
elf_link_is_defined_archive_symbol (abfd, symdef)
     bfd * abfd;
     carsym * symdef;
{
  Elf_Internal_Shdr * hdr;
  Elf64_External_Sym * esym;
  Elf64_External_Sym * esymend;
  Elf64_External_Sym * buf = ((void *)0);
  bfd_size_type symcount;
  bfd_size_type extsymcount;
  bfd_size_type extsymoff;
  boolean result = false;
  file_ptr pos;
  bfd_size_type amt;

  abfd = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
  if (abfd == (bfd *) ((void *)0))
    return false;

  if (! bfd_check_format (abfd, bfd_object))
    return false;





  if (abfd->archive_pass)
    return false;


  if ((abfd->flags & 0x40) == 0 || (((abfd) -> tdata.elf_obj_data) -> dynsymtab_section) == 0)
    hdr = &((abfd) -> tdata.elf_obj_data)->symtab_hdr;
  else
    hdr = &((abfd) -> tdata.elf_obj_data)->dynsymtab_hdr;

  symcount = hdr->sh_size / sizeof (Elf64_External_Sym);



  if ((((abfd) -> tdata.elf_obj_data) -> bad_symtab))
    {
      extsymcount = symcount;
      extsymoff = 0;
    }
  else
    {
      extsymcount = symcount - hdr->sh_info;
      extsymoff = hdr->sh_info;
    }

  amt = extsymcount * sizeof (Elf64_External_Sym);
  buf = (Elf64_External_Sym *) bfd_malloc (amt);
  if (buf == ((void *)0) && extsymcount != 0)
    return false;



  pos = hdr->sh_offset + extsymoff * sizeof (Elf64_External_Sym);
  if (bfd_seek (abfd, pos, 0) != 0
      || bfd_bread ((void *) buf, amt, abfd) != amt)
    {
      free (buf);
      return false;
    }


  esymend = buf + extsymcount;
  for (esym = buf;
       esym < esymend;
       esym++)
    {
      Elf_Internal_Sym sym;
      const char * name;

      bfd_elf64_swap_symbol_in (abfd, esym, & sym);

      name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
      if (name == (const char *) ((void *)0))
        break;

      if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p (symdef->name) && (__s1_len = strlen (name), __s2_len = strlen (symdef->name), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((symdef->name) + 1) - (size_t)(const void *)(symdef->name) == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (name), (__const char *) (symdef->name), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p (symdef->name) && ((size_t)(const void *)((symdef->name) + 1) - (size_t)(const void *)(symdef->name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const char *)(symdef->name))[0]); if (__s1_len > 0 && __result == !
0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (symdef->name))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (symdef->name))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (symdef->name))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (symdef->name); register int __result = (((__const unsigned char *) (__const char *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const un!
signed char *) (__const char *) (name))[3] - __s2[3]); } } __!
result; }))) : (__builtin_constant_p (symdef->name) && ((size_t)(const void *)((symdef->name) + 1) - (size_t)(const void *)(symdef->name) == 1) && (__s2_len = strlen (symdef->name), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const char *)(symdef->name))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (symdef->name))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (symdef->name))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (symdef->name))[3]); } } __res!
ult; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (symdef->name))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (symdef->name))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (symdef->name))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (symdef->name))[3]); } } __result; }))) : strcmp (name, symdef->name)))); }) == 0)
        {
          result = is_global_data_symbol_definition (abfd, & sym);
          break;
        }
    }

  free (buf);

  return result;
}
# 405 "elflink.h"
static boolean
elf_link_add_archive_symbols (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  symindex c;
  boolean *defined = ((void *)0);
  boolean *included = ((void *)0);
  carsym *symdefs;
  boolean loop;
  bfd_size_type amt;

  if (! ((abfd)->has_armap))
    {

      if (bfd_openr_next_archived_file (abfd, (bfd *) ((void *)0)) == ((void *)0))
        return true;
      bfd_set_error (bfd_error_no_armap);
      return false;
    }




  c = ((abfd)->tdata.aout_ar_data)->symdef_count;
  if (c == 0)
    return true;
  amt = c;
  amt *= sizeof (boolean);
  defined = (boolean *) bfd_malloc (amt);
  included = (boolean *) bfd_malloc (amt);
  if (defined == (boolean *) ((void *)0) || included == (boolean *) ((void *)0))
    goto error_return;
  (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (defined); __builtin_memset (__s, '\0', (size_t) amt); __s; }) : memset (defined, 0, (size_t) amt)));
  (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (included); __builtin_memset (__s, '\0', (size_t) amt); __s; }) : memset (included, 0, (size_t) amt)));

  symdefs = ((abfd)->tdata.aout_ar_data)->symdefs;

  do
    {
      file_ptr last;
      symindex i;
      carsym *symdef;
      carsym *symdefend;

      loop = false;
      last = -1;

      symdef = symdefs;
      symdefend = symdef + c;
      for (i = 0; symdef < symdefend; symdef++, i++)
        {
          struct elf_link_hash_entry *h;
          bfd *element;
          struct bfd_link_hash_entry *undefs_tail;
          symindex mark;

          if (defined[i] || included[i])
            continue;
          if (symdef->file_offset == last)
            {
              included[i] = true;
              continue;
            }

          h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (symdef->name), (false), (false), (false)));


          if (h == ((void *)0))
            {
              char *p, *copy;







              p = (__extension__ (__builtin_constant_p ('@') && ('@') == '\0' ? (char *) __rawmemchr (symdef->name, '@') : strchr (symdef->name, '@')));
              if (p == ((void *)0) || p[1] != '@')
                continue;


              copy = bfd_alloc (abfd, strlen (symdef->name));
              if (copy == ((void *)0))
                goto error_return;
              memcpy (copy, symdef->name,
                      (size_t) (p - symdef->name + 1));
              (__extension__ (__builtin_constant_p (&symdef->name [p - symdef->name + 2]) ? (((size_t)(const void *)((&symdef->name [p - symdef->name + 2]) + 1) - (size_t)(const void *)(&symdef->name [p - symdef->name + 2]) == 1) && strlen (&symdef->name [p - symdef->name + 2]) + 1 <= 8 ? __strcpy_small (&copy [p - symdef->name + 1], __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], ((__const char *) (&symdef->name [p - symdef->name + 2]))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], ((__const char *) (&symdef->name [p - symdef->name + 2]))[1], ((__const char *) (&symdef->name [p - symdef->name + 2]))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], ((__const char *) (&sy!
mdef->name [p - symdef->name + 2]))[1], ((__const char *) (&symdef->name [p - symdef->name + 2]))[2], ((__const char *) (&symdef->name [p - symdef->name + 2]))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], ((__const char *) (&symdef->name [p - symdef->name + 2]))[1], ((__const char *) (&symdef->name [p - symdef->name + 2]))[2], ((__const char *) (&symdef->name [p - symdef->name + 2]))[3], ((__const char *) (&symdef->name [p - symdef->name + 2]))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (&symdef->name [p - symdef->name + 2]))[0], ((__const char *) (&symdef->name [p - symdef->name + 2]))[1], ((__const char *) (&symdef->name [p - symdef->name + 2]))[2], ((__const char *) (&symdef->name [p - symdef->name + 2]))[3], ((__const char *) (&symdef->name [p - symdef->name + 2]))[4], ((__const char *) (&symdef->name [p - symdef->name + 2]))[5], '\0' } }), __extension__ ((__STRING2_CO!
PY_ARR8) { { ((__const char *) (&symdef->name [p - symdef->na!
me + 2]))[0], ((__const char *) (&symdef->name [p - symdef->name + 2]))[1], ((__const char *) (&symdef->name [p - symdef->name + 2]))[2], ((__const char *) (&symdef->name [p - symdef->name + 2]))[3], ((__const char *) (&symdef->name [p - symdef->name + 2]))[4], ((__const char *) (&symdef->name [p - symdef->name + 2]))[5], ((__const char *) (&symdef->name [p - symdef->name + 2]))[6], '\0' } }), strlen (&symdef->name [p - symdef->name + 2]) + 1) : (char *) memcpy (&copy [p - symdef->name + 1], &symdef->name [p - symdef->name + 2], strlen (&symdef->name [p - symdef->name + 2]) + 1)) : strcpy (&copy [p - symdef->name + 1], &symdef->name [p - symdef->name + 2])));


              h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (copy), (false), (false), (false)));


              if (h == ((void *)0))
                {



                  copy[p - symdef->name] = '\0';
                  h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (copy), (false), (false), (false)));

                }

              bfd_release (abfd, copy);
            }

          if (h == ((void *)0))
            continue;

          if (h->root.type == bfd_link_hash_common)
            {
# 529 "elflink.h"
              if (! elf_link_is_defined_archive_symbol (abfd, symdef))
                continue;
            }
          else if (h->root.type != bfd_link_hash_undefined)
            {
              if (h->root.type != bfd_link_hash_undefweak)
                defined[i] = true;
              continue;
            }


          element = _bfd_get_elt_at_filepos (abfd, symdef->file_offset);
          if (element == (bfd *) ((void *)0))
            goto error_return;

          if (! bfd_check_format (element, bfd_object))
            goto error_return;




          if (element->archive_pass != 0)
            {
              bfd_set_error (bfd_error_bad_value);
              goto error_return;
            }
          element->archive_pass = 1;

          undefs_tail = info->hash->undefs_tail;

          if (! (*info->callbacks->add_archive_element) (info, element,
                                                         symdef->name))
            goto error_return;
          if (! elf_link_add_object_symbols (element, info))
            goto error_return;
# 572 "elflink.h"
          if (undefs_tail != info->hash->undefs_tail)
            loop = true;



          mark = i;
          do
            {
              included[mark] = true;
              if (mark == 0)
                break;
              --mark;
            }
          while (symdefs[mark].file_offset == symdef->file_offset);



          last = symdef->file_offset;
        }
    }
  while (loop);

  free (defined);
  free (included);

  return true;

 error_return:
  if (defined != (boolean *) ((void *)0))
    free (defined);
  if (included != (boolean *) ((void *)0))
    free (included);
  return false;
}
# 619 "elflink.h"
static boolean
elf_merge_symbol (abfd, info, name, sym, psec, pvalue, sym_hash,
                  override, type_change_ok, size_change_ok, dt_needed)
     bfd *abfd;
     struct bfd_link_info *info;
     const char *name;
     Elf_Internal_Sym *sym;
     asection **psec;
     bfd_vma *pvalue;
     struct elf_link_hash_entry **sym_hash;
     boolean *override;
     boolean *type_change_ok;
     boolean *size_change_ok;
     boolean dt_needed;
{
  asection *sec;
  struct elf_link_hash_entry *h;
  int bind;
  bfd *oldbfd;
  boolean newdyn, olddyn, olddef, newdef, newdyncommon, olddyncommon;

  *override = false;

  sec = *psec;
  bind = (((unsigned int)(sym->st_info)) >> 4);

  if (! ((sec) == ((asection *) &bfd_und_section)))
    h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (name), (true), (false), (false)));
  else
    h = ((struct elf_link_hash_entry *)
         bfd_wrapped_link_hash_lookup (abfd, info, name, true, false, false));
  if (h == ((void *)0))
    return false;
  *sym_hash = h;



  if (info->hash->creator != abfd->xvec)
    return true;



  while (h->root.type == bfd_link_hash_indirect
         || h->root.type == bfd_link_hash_warning)
    h = (struct elf_link_hash_entry *) h->root.u.i.link;





  if (h->root.type == bfd_link_hash_new)
    {
      h->elf_link_hash_flags &=~ 0400;
      return true;
    }



  switch (h->root.type)
    {
    default:
      oldbfd = ((void *)0);
      break;

    case bfd_link_hash_undefined:
    case bfd_link_hash_undefweak:
      oldbfd = h->root.u.undef.abfd;
      break;

    case bfd_link_hash_defined:
    case bfd_link_hash_defweak:
      oldbfd = h->root.u.def.section->owner;
      break;

    case bfd_link_hash_common:
      oldbfd = h->root.u.c.p->section->owner;
      break;
    }







  if (abfd == oldbfd
      && ((abfd->flags & 0x40) == 0
          || (h->elf_link_hash_flags & 02) == 0))
    return true;




  if ((abfd->flags & 0x40) != 0)
    newdyn = true;
  else
    newdyn = false;

  if (oldbfd != ((void *)0))
    olddyn = (oldbfd->flags & 0x40) != 0;
  else
    {
      asection *hsec;



      switch (h->root.type)
        {
        default:
          hsec = ((void *)0);
          break;

        case bfd_link_hash_defined:
        case bfd_link_hash_defweak:
          hsec = h->root.u.def.section;
          break;

        case bfd_link_hash_common:
          hsec = h->root.u.c.p->section;
          break;
        }

      if (hsec == ((void *)0))
        olddyn = false;
      else
        olddyn = (hsec->symbol->flags & 0x8000) != 0;
    }




  if (((sec) == ((asection *) &bfd_und_section)) || (((sec)->flags & 0x8000) != 0))
    newdef = false;
  else
    newdef = true;

  if (h->root.type == bfd_link_hash_undefined
      || h->root.type == bfd_link_hash_undefweak
      || h->root.type == bfd_link_hash_common)
    olddef = false;
  else
    olddef = true;
# 785 "elflink.h"
  if (newdyn
      && newdef
      && (sec->flags & 0x001) != 0
      && (sec->flags & 0x002) == 0
      && sym->st_size > 0
      && bind != 2
      && ((sym->st_info) & 0xF) != 2)
    newdyncommon = true;
  else
    newdyncommon = false;

  if (olddyn
      && olddef
      && h->root.type == bfd_link_hash_defined
      && (h->elf_link_hash_flags & 010) != 0
      && (h->root.u.def.section->flags & 0x001) != 0
      && (h->root.u.def.section->flags & 0x002) == 0
      && h->size > 0
      && h->type != 2)
    olddyncommon = true;
  else
    olddyncommon = false;






  if ((! dt_needed && h->root.type == bfd_link_hash_defweak)
      || h->root.type == bfd_link_hash_undefweak
      || bind == 2)
    *type_change_ok = true;




  if (*type_change_ok
      || h->root.type == bfd_link_hash_undefined)
    *size_change_ok = true;





  if (olddyncommon
      && newdyncommon
      && sym->st_size != h->size)
    {






      if (! ((*info->callbacks->multiple_common)
             (info, h->root.root.string, oldbfd, bfd_link_hash_common,
              h->size, abfd, bfd_link_hash_common, sym->st_size)))
        return false;

      if (sym->st_size > h->size)
        h->size = sym->st_size;

      *size_change_ok = true;
    }
# 869 "elflink.h"
  if (newdyn
      && newdef
      && (olddef
          || (h->root.type == bfd_link_hash_common
              && (bind == 2
                  || ((sym->st_info) & 0xF) == 2)))
      && (h->root.type != bfd_link_hash_defweak
          || dt_needed
          || bind == 2))
    {
      *override = true;
      newdef = false;
      newdyncommon = false;

      *psec = sec = ((asection *) &bfd_und_section);
      *size_change_ok = true;







      if (h->root.type == bfd_link_hash_common)
        *type_change_ok = true;
    }







  if (newdyncommon
      && h->root.type == bfd_link_hash_common)
    {
      *override = true;
      newdef = false;
      newdyncommon = false;
      *pvalue = sym->st_size;
      *psec = sec = ((asection *) &bfd_com_section);
      *size_change_ok = true;
    }
# 926 "elflink.h"
  if (! newdyn
      && (newdef
          || ((((sec)->flags & 0x8000) != 0)
              && (h->root.type == bfd_link_hash_defweak
                  || h->type == 2)))
      && olddyn
      && olddef
      && (h->elf_link_hash_flags & 010) != 0
      && (bind != 2
          || h->root.type == bfd_link_hash_defweak))
    {




      h->root.type = bfd_link_hash_undefined;
      h->root.u.undef.abfd = h->root.u.def.section->owner;
      *size_change_ok = true;

      olddef = false;
      olddyncommon = false;




      if ((((sec)->flags & 0x8000) != 0))
        *type_change_ok = true;





      h->verinfo.vertree = ((void *)0);







      *sym_hash = h;
    }







  if (! newdyn
      && (((sec)->flags & 0x8000) != 0)
      && olddyncommon)
    {



      if (! ((*info->callbacks->multiple_common)
             (info, h->root.root.string, oldbfd, bfd_link_hash_common,
              h->size, abfd, bfd_link_hash_common, sym->st_size)))
        return false;




      if (h->size > *pvalue)
        *pvalue = h->size;





      olddef = false;
      olddyncommon = false;

      h->root.type = bfd_link_hash_undefined;
      h->root.u.undef.abfd = h->root.u.def.section->owner;

      *size_change_ok = true;
      *type_change_ok = true;

      h->verinfo.vertree = ((void *)0);
    }






  if (olddef
      && ! dt_needed
      && h->root.type == bfd_link_hash_defweak
      && newdef
      && newdyn
      && bind != 2)
    {



      if ((h->elf_link_hash_flags & 02) != 0)
        h->elf_link_hash_flags |= 01;
      else if ((h->elf_link_hash_flags & 010) != 0)
        h->elf_link_hash_flags |= 04;
      h->elf_link_hash_flags &= ~ (02
                                   | 010);





      *sym_hash = h;
    }






  if (olddef
      && olddyn
      && h->root.type != bfd_link_hash_defweak
      && newdef
      && ! newdyn
      && bind == 2)
    *override = true;

  return true;
}







static boolean
elf_add_default_symbol (abfd, info, h, name, sym, sec, value,
                        dynsym, override, dt_needed)
     bfd *abfd;
     struct bfd_link_info *info;
     struct elf_link_hash_entry *h;
     const char *name;
     Elf_Internal_Sym *sym;
     asection **sec;
     bfd_vma *value;
     boolean *dynsym;
     boolean override;
     boolean dt_needed;
{
  boolean type_change_ok;
  boolean size_change_ok;
  char *shortname;
  struct elf_link_hash_entry *hi;
  struct elf_backend_data *bed;
  boolean collect;
  boolean dynamic;
  char *p;





  p = (__extension__ (__builtin_constant_p ('@') && ('@') == '\0' ? (char *) __rawmemchr (name, '@') : strchr (name, '@')));
  if (p == ((void *)0) || p[1] != '@')
    return true;

  if (override)
    {


      hi = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (name), (true), (false), (false)));

      { if (!(hi != ((void *)0))) bfd_assert("elflink.h",1097); };
      if (hi == h)
        return true;
      while (hi->root.type == bfd_link_hash_indirect
             || hi->root.type == bfd_link_hash_warning)
        {
          hi = (struct elf_link_hash_entry *) hi->root.u.i.link;
          if (hi == h)
            return true;
        }
    }

  bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  collect = bed->collect;
  dynamic = (abfd->flags & 0x40) != 0;

  shortname = bfd_hash_allocate (&info->hash->table,
                                 (size_t) (p - name + 1));
  if (shortname == ((void *)0))
    return false;
  (__extension__ (__builtin_constant_p (name) && __builtin_constant_p ((size_t) (p - name)) ? (strlen (name) + 1 >= ((size_t) ((size_t) (p - name))) ? (char *) memcpy (shortname, name, (size_t) (p - name)) : strncpy (shortname, name, (size_t) (p - name))) : strncpy (shortname, name, (size_t) (p - name))));
  shortname [p - name] = '\0';





  type_change_ok = false;
  size_change_ok = false;
  if (! elf_merge_symbol (abfd, info, shortname, sym, sec, value,
                          &hi, &override, &type_change_ok,
                          &size_change_ok, dt_needed))
    return false;

  if (! override)
    {
      if (! (_bfd_generic_link_add_one_symbol
             (info, abfd, shortname, 0x2000, ((asection *) &bfd_ind_section),
              (bfd_vma) 0, name, false, collect,
              (struct bfd_link_hash_entry **) &hi)))
        return false;
    }
  else
    {
# 1159 "elflink.h"
      while (hi->root.type == bfd_link_hash_indirect
             || hi->root.type == bfd_link_hash_warning)
        hi = (struct elf_link_hash_entry *) hi->root.u.i.link;

      h->root.type = bfd_link_hash_indirect;
      h->root.u.i.link = (struct bfd_link_hash_entry *) hi;
      if (h->elf_link_hash_flags & 010)
        {
          h->elf_link_hash_flags &=~ 010;
          hi->elf_link_hash_flags |= 04;
          if (hi->elf_link_hash_flags
              & (01
                 | 02))
            {
              if (! _bfd_elf_link_record_dynamic_symbol (info, hi))
                return false;
            }
        }



      hi = h;
    }





  if (hi->root.type == bfd_link_hash_indirect)
    {
      struct elf_link_hash_entry *ht;



      { if (!((hi->elf_link_hash_flags & (010 | 02)) == 0)) bfd_assert("elflink.h",1195); };



      ht = (struct elf_link_hash_entry *) hi->root.u.i.link;
      (*bed->elf_backend_copy_indirect_symbol) (ht, hi);



      if (! *dynsym)
        {
          if (! dynamic)
            {
              if (info->shared
                  || ((hi->elf_link_hash_flags
                       & 04) != 0))
                *dynsym = true;
            }
          else
            {
              if ((hi->elf_link_hash_flags
                   & 01) != 0)
                *dynsym = true;
            }
        }
    }




  shortname = bfd_hash_allocate (&info->hash->table, strlen (name));
  if (shortname == ((void *)0))
    return false;
  (__extension__ (__builtin_constant_p (name) && __builtin_constant_p ((size_t) (p - name)) ? (strlen (name) + 1 >= ((size_t) ((size_t) (p - name))) ? (char *) memcpy (shortname, name, (size_t) (p - name)) : strncpy (shortname, name, (size_t) (p - name))) : strncpy (shortname, name, (size_t) (p - name))));
  (__extension__ (__builtin_constant_p (p + 1) ? (((size_t)(const void *)((p + 1) + 1) - (size_t)(const void *)(p + 1) == 1) && strlen (p + 1) + 1 <= 8 ? __strcpy_small (shortname + (p - name), __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (p + 1))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (p + 1))[0], ((__const char *) (p + 1))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (p + 1))[0], ((__const char *) (p + 1))[1], ((__const char *) (p + 1))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (p + 1))[0], ((__const char *) (p + 1))[1], ((__const char *) (p + 1))[2], ((__const char *) (p + 1))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (p + 1))[0], ((__const char *) (p + 1))[1], ((__const char *) (p + 1))[2], ((__const char *) (p + 1))[3], ((__const char *) (p + 1))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (p + 1))[0]!
, ((__const char *) (p + 1))[1], ((__const char *) (p + 1))[2], ((__const char *) (p + 1))[3], ((__const char *) (p + 1))[4], ((__const char *) (p + 1))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (p + 1))[0], ((__const char *) (p + 1))[1], ((__const char *) (p + 1))[2], ((__const char *) (p + 1))[3], ((__const char *) (p + 1))[4], ((__const char *) (p + 1))[5], ((__const char *) (p + 1))[6], '\0' } }), strlen (p + 1) + 1) : (char *) memcpy (shortname + (p - name), p + 1, strlen (p + 1) + 1)) : strcpy (shortname + (p - name), p + 1)));


  type_change_ok = false;
  size_change_ok = false;
  if (! elf_merge_symbol (abfd, info, shortname, sym, sec, value,
                          &hi, &override, &type_change_ok,
                          &size_change_ok, dt_needed))
    return false;

  if (override)
    {


      (*_bfd_error_handler)
        (dcgettext ("bfd", "%s: warning: unexpected redefinition of `%s'", __LC_MESSAGES),
         bfd_archive_filename (abfd), shortname);
    }
  else
    {
      if (! (_bfd_generic_link_add_one_symbol
             (info, abfd, shortname, 0x2000,
              ((asection *) &bfd_ind_section), (bfd_vma) 0, name, false,
              collect, (struct bfd_link_hash_entry **) &hi)))
        return false;





      if (hi->root.type == bfd_link_hash_indirect)
        {


          { if (!((hi->elf_link_hash_flags & (010 | 02)) == 0)) bfd_assert("elflink.h",1263); };



          (*bed->elf_backend_copy_indirect_symbol) (h, hi);



          if (! *dynsym)
            {
              if (! dynamic)
                {
                  if (info->shared
                      || ((hi->elf_link_hash_flags
                           & 04) != 0))
                    *dynsym = true;
                }
              else
                {
                  if ((hi->elf_link_hash_flags
                       & 01) != 0)
                    *dynsym = true;
                }
            }
        }
    }

  return true;
}



static boolean
elf_link_add_object_symbols (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  boolean (*add_symbol_hook) (bfd *, struct bfd_link_info *, const Elf_Internal_Sym *, const char **, flagword *, asection **, bfd_vma *);



  boolean (*check_relocs) (bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *);

  boolean collect;
  Elf_Internal_Shdr *hdr;
  bfd_size_type symcount;
  bfd_size_type extsymcount;
  bfd_size_type extsymoff;
  Elf64_External_Sym *buf = ((void *)0);
  struct elf_link_hash_entry **sym_hash;
  boolean dynamic;
  Elf_External_Versym *extversym = ((void *)0);
  Elf_External_Versym *ever;
  Elf64_External_Dyn *dynbuf = ((void *)0);
  struct elf_link_hash_entry *weaks;
  Elf64_External_Sym *esym;
  Elf64_External_Sym *esymend;
  struct elf_backend_data *bed;
  boolean dt_needed;
  struct elf_link_hash_table * hash_table;
  file_ptr pos;
  bfd_size_type amt;

  hash_table = ((struct elf_link_hash_table *) ((info)->hash));

  bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  add_symbol_hook = bed->elf_add_symbol_hook;
  collect = bed->collect;

  if ((abfd->flags & 0x40) == 0)
    dynamic = false;
  else
    {
      dynamic = true;




      if (info->relocateable || info->hash->creator != abfd->xvec)
        {
          bfd_set_error (bfd_error_invalid_operation);
          goto error_return;
        }
    }





  if (! info->shared)
    {
      asection *s;

      for (s = abfd->sections; s != ((void *)0); s = s->next)
        {
          const char *name;

          name = ((s)->name + 0);
          if ((__extension__ (__builtin_constant_p (sizeof ".gnu.warning." - 1) && ((__builtin_constant_p (name) && strlen (name) < ((size_t) (sizeof ".gnu.warning." - 1))) || (__builtin_constant_p (".gnu.warning.") && strlen (".gnu.warning.") < ((size_t) (sizeof ".gnu.warning." - 1)))) ? __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (name) && __builtin_constant_p (".gnu.warning.") && (__s1_len = strlen (name), __s2_len = strlen (".gnu.warning."), (!((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".gnu.warning.") + 1) - (size_t)(const void *)(".gnu.warning.") == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (name), (__const char *) (".gnu.warning."), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && (__s1_len = strlen (name), __s1_len < 4) ? (__builtin_constant_p (".gnu.war!
ning.") && ((size_t)(const void *)((".gnu.warning.") + 1) - (size_t)(const void *)(".gnu.warning.") == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const char *)(".gnu.warning."))[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (".gnu.warning."); register int __result = (((__const unsigned char *) (__const cha!
r *) (name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0!
) { __result = (((__const unsigned char *) (__const char *) (name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (".gnu.warning.") && ((size_t)(const void *)((".gnu.warning.") + 1) - (size_t)(const void *)(".gnu.warning.") == 1) && (__s2_len = strlen (".gnu.warning."), __s2_len < 4) ? (__builtin_constant_p (name) && ((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (name))[0] - ((__const unsigned char *) (__const char *)(".gnu.warning."))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[1] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[1]); if (__s2_len!
 > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (name))[2] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (name))[3] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (".gnu.warning."))[3]); } } __result; }))) : strcmp (name, ".gnu.warning.")))); !
}) : strncmp (name, ".gnu.warning.", sizeof ".gnu.warning." -!
 1))) == 0)
            {
              char *msg;
              bfd_size_type sz;

              name += sizeof ".gnu.warning." - 1;
# 1375 "elflink.h"
              if (dynamic && abfd->xvec == info->hash->creator)
                {
                  struct elf_link_hash_entry *h;

                  h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(hash_table)->root, (name), (false), (false), (true)));



                  if (h != ((void *)0)
                      && (h->root.type == bfd_link_hash_defined
                          || h->root.type == bfd_link_hash_defweak))
                    {



                      s->_raw_size = 0;
                      continue;
                    }
                }

              sz = (((s)->reloc_done ? (_bfd_abort ("elflink.h", 1395, __PRETTY_FUNCTION__), (bfd_size_type) 1) : (s)->_raw_size));
              msg = (char *) bfd_alloc (abfd, sz + 1);
              if (msg == ((void *)0))
                goto error_return;

              if (! bfd_get_section_contents (abfd, s, msg, (file_ptr) 0, sz))
                goto error_return;

              msg[sz] = '\0';

              if (! (_bfd_generic_link_add_one_symbol
                     (info, abfd, name, 0x1000, s, (bfd_vma) 0, msg,
                      false, collect, (struct bfd_link_hash_entry **) ((void *)0))))
                goto error_return;

              if (! info->relocateable)
                {


                  s->_raw_size = 0;
                }
            }
        }
    }






  if (! dynamic || (((abfd) -> tdata.elf_obj_data) -> dynsymtab_section) == 0)
    hdr = &((abfd) -> tdata.elf_obj_data)->symtab_hdr;
  else
    hdr = &((abfd) -> tdata.elf_obj_data)->dynsymtab_hdr;

  if (dynamic)
    {


      if (! _bfd_elf_slurp_version_tables (abfd))
        goto error_return;



      if ((((abfd) -> tdata.elf_obj_data) -> dynversym_section) != 0)
        {
          Elf_Internal_Shdr *versymhdr;

          versymhdr = &((abfd) -> tdata.elf_obj_data)->dynversym_hdr;
          extversym = (Elf_External_Versym *) bfd_malloc (versymhdr->sh_size);
          if (extversym == ((void *)0))
            goto error_return;
          amt = versymhdr->sh_size;
          if (bfd_seek (abfd, versymhdr->sh_offset, 0) != 0
              || bfd_bread ((void *) extversym, amt, abfd) != amt)
            goto error_return;
        }
    }

  symcount = hdr->sh_size / sizeof (Elf64_External_Sym);




  if ((((abfd) -> tdata.elf_obj_data) -> bad_symtab))
    {
      extsymcount = symcount;
      extsymoff = 0;
    }
  else
    {
      extsymcount = symcount - hdr->sh_info;
      extsymoff = hdr->sh_info;
    }

  amt = extsymcount * sizeof (Elf64_External_Sym);
  buf = (Elf64_External_Sym *) bfd_malloc (amt);
  if (buf == ((void *)0) && extsymcount != 0)
    goto error_return;



  amt = extsymcount * sizeof (struct elf_link_hash_entry *);
  sym_hash = (struct elf_link_hash_entry **) bfd_alloc (abfd, amt);
  if (sym_hash == ((void *)0))
    goto error_return;
  (((abfd) -> tdata.elf_obj_data) -> sym_hashes) = sym_hash;

  dt_needed = false;

  if (! dynamic)
    {





      if (info->shared
          && ((info)->hash->type == bfd_link_elf_hash_table)
          && ! hash_table->dynamic_sections_created
          && abfd->xvec == info->hash->creator)
        {
          if (! bfd_elf64_link_create_dynamic_sections (abfd, info))
            goto error_return;
        }
    }
  else if (! ((info)->hash->type == bfd_link_elf_hash_table))
    goto error_return;
  else
    {
      asection *s;
      boolean add_needed;
      const char *name;
      bfd_size_type oldsize;
      bfd_size_type strindex;
# 1518 "elflink.h"
      add_needed = true;
      name = ((char *) (abfd)->filename);
      if ((((abfd) -> tdata.elf_obj_data) -> dt_name) != ((void *)0))
        {
          name = (((abfd) -> tdata.elf_obj_data) -> dt_name);
          if (*name == '\0')
            {
              if ((((abfd) -> tdata.elf_obj_data) -> dt_soname) != ((void *)0))
                dt_needed = true;

              add_needed = false;
            }
        }
      s = bfd_get_section_by_name (abfd, ".dynamic");
      if (s != ((void *)0))
        {
          Elf64_External_Dyn *extdyn;
          Elf64_External_Dyn *extdynend;
          int elfsec;
          unsigned long shlink;
          int rpath;
          int runpath;

          dynbuf = (Elf64_External_Dyn *) bfd_malloc (s->_raw_size);
          if (dynbuf == ((void *)0))
            goto error_return;

          if (! bfd_get_section_contents (abfd, s, (void *) dynbuf,
                                          (file_ptr) 0, s->_raw_size))
            goto error_return;

          elfsec = _bfd_elf_section_from_bfd_section (abfd, s);
          if (elfsec == -1)
            goto error_return;
          shlink = (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr)[elfsec]->sh_link;

          {





            Elf_Internal_Shdr *shdr = (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr)[shlink];
            if (shdr->sh_type != 3)
              {
                asection *ds = bfd_get_section_by_name (abfd, ".dynsym");
                int elfdsec = _bfd_elf_section_from_bfd_section (abfd, ds);
                if (elfdsec == -1)
                  goto error_return;
                shlink = (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr)[elfdsec]->sh_link;
              }
          }

          extdyn = dynbuf;
          extdynend = extdyn + s->_raw_size / sizeof (Elf64_External_Dyn);
          rpath = 0;
          runpath = 0;
          for (; extdyn < extdynend; extdyn++)
            {
              Elf_Internal_Dyn dyn;

              bfd_elf64_swap_dyn_in (abfd, extdyn, &dyn);
              if (dyn.d_tag == 14)
                {
                  unsigned int tagv = dyn.d_un.d_val;
                  name = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
                  if (name == ((void *)0))
                    goto error_return;
                }
              if (dyn.d_tag == 1)
                {
                  struct bfd_link_needed_list *n, **pn;
                  char *fnm, *anm;
                  unsigned int tagv = dyn.d_un.d_val;

                  amt = sizeof (struct bfd_link_needed_list);
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
                  if (n == ((void *)0) || fnm == ((void *)0))
                    goto error_return;
                  anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
                  if (anm == ((void *)0))
                    goto error_return;
                  (__extension__ (__builtin_constant_p (fnm) ? (((size_t)(const void *)((fnm) + 1) - (size_t)(const void *)(fnm) == 1) && strlen (fnm) + 1 <= 8 ? __strcpy_small (anm, __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (fnm))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const ch!
ar *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], ((__const char *) (fnm))[6], '\0' } }), strlen (fnm) + 1) : (char *) memcpy (anm, fnm, strlen (fnm) + 1)) : strcpy (anm, fnm)));
                  n->name = anm;
                  n->by = abfd;
                  n->next = ((void *)0);
                  for (pn = & hash_table->needed;
                       *pn != ((void *)0);
                       pn = &(*pn)->next)
                    ;
                  *pn = n;
                }
              if (dyn.d_tag == 29)
                {
                  struct bfd_link_needed_list *n, **pn;
                  char *fnm, *anm;
                  unsigned int tagv = dyn.d_un.d_val;





                  if (rpath && hash_table->runpath)
                    hash_table->runpath = ((void *)0);

                  amt = sizeof (struct bfd_link_needed_list);
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
                  if (n == ((void *)0) || fnm == ((void *)0))
                    goto error_return;
                  anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
                  if (anm == ((void *)0))
                    goto error_return;
                  (__extension__ (__builtin_constant_p (fnm) ? (((size_t)(const void *)((fnm) + 1) - (size_t)(const void *)(fnm) == 1) && strlen (fnm) + 1 <= 8 ? __strcpy_small (anm, __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (fnm))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const ch!
ar *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], ((__const char *) (fnm))[6], '\0' } }), strlen (fnm) + 1) : (char *) memcpy (anm, fnm, strlen (fnm) + 1)) : strcpy (anm, fnm)));
                  n->name = anm;
                  n->by = abfd;
                  n->next = ((void *)0);
                  for (pn = & hash_table->runpath;
                       *pn != ((void *)0);
                       pn = &(*pn)->next)
                    ;
                  *pn = n;
                  runpath = 1;
                  rpath = 0;
                }

              if (!runpath && dyn.d_tag == 15)
                {
                  struct bfd_link_needed_list *n, **pn;
                  char *fnm, *anm;
                  unsigned int tagv = dyn.d_un.d_val;

                  amt = sizeof (struct bfd_link_needed_list);
                  n = (struct bfd_link_needed_list *) bfd_alloc (abfd, amt);
                  fnm = bfd_elf_string_from_elf_section (abfd, shlink, tagv);
                  if (n == ((void *)0) || fnm == ((void *)0))
                    goto error_return;
                  anm = bfd_alloc (abfd, (bfd_size_type) strlen (fnm) + 1);
                  if (anm == ((void *)0))
                    goto error_return;
                  (__extension__ (__builtin_constant_p (fnm) ? (((size_t)(const void *)((fnm) + 1) - (size_t)(const void *)(fnm) == 1) && strlen (fnm) + 1 <= 8 ? __strcpy_small (anm, __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (fnm))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const ch!
ar *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (fnm))[0], ((__const char *) (fnm))[1], ((__const char *) (fnm))[2], ((__const char *) (fnm))[3], ((__const char *) (fnm))[4], ((__const char *) (fnm))[5], ((__const char *) (fnm))[6], '\0' } }), strlen (fnm) + 1) : (char *) memcpy (anm, fnm, strlen (fnm) + 1)) : strcpy (anm, fnm)));
                  n->name = anm;
                  n->by = abfd;
                  n->next = ((void *)0);
                  for (pn = & hash_table->runpath;
                       *pn != ((void *)0);
                       pn = &(*pn)->next)
                    ;
                  *pn = n;
                  rpath = 1;
                }
            }

          free (dynbuf);
          dynbuf = ((void *)0);
        }
# 1683 "elflink.h"
      abfd->sections = ((void *)0);
      abfd->section_count = 0;



      if (! hash_table->dynamic_sections_created)
        if (! bfd_elf64_link_create_dynamic_sections (abfd, info))
          goto error_return;

      if (add_needed)
        {

          oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
          strindex = _bfd_elf_strtab_add (hash_table->dynstr, name, false);
          if (strindex == (bfd_size_type) -1)
            goto error_return;

          if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
            {
              asection *sdyn;
              Elf64_External_Dyn *dyncon, *dynconend;






              sdyn = bfd_get_section_by_name (hash_table->dynobj, ".dynamic");
              { if (!(sdyn != ((void *)0))) bfd_assert("elflink.h",1711); };

              dyncon = (Elf64_External_Dyn *) sdyn->contents;
              dynconend = (Elf64_External_Dyn *) (sdyn->contents +
                                                sdyn->_raw_size);
              for (; dyncon < dynconend; dyncon++)
                {
                  Elf_Internal_Dyn dyn;

                  bfd_elf64_swap_dyn_in (hash_table->dynobj, dyncon, & dyn);
                  if (dyn.d_tag == 1
                      && dyn.d_un.d_val == strindex)
                    {
                      if (buf != ((void *)0))
                        free (buf);
                      if (extversym != ((void *)0))
                        free (extversym);
                      _bfd_elf_strtab_delref (hash_table->dynstr, strindex);
                      return true;
                    }
                }
            }

          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 1, strindex))
            goto error_return;
        }



      if (*name == '\0')
        name = basename (((char *) (abfd)->filename));
      (((abfd) -> tdata.elf_obj_data) -> dt_name) = name;
    }

  pos = hdr->sh_offset + extsymoff * sizeof (Elf64_External_Sym);
  amt = extsymcount * sizeof (Elf64_External_Sym);
  if (bfd_seek (abfd, pos, 0) != 0
      || bfd_bread ((void *) buf, amt, abfd) != amt)
    goto error_return;

  weaks = ((void *)0);

  ever = extversym != ((void *)0) ? extversym + extsymoff : ((void *)0);
  esymend = buf + extsymcount;
  for (esym = buf;
       esym < esymend;
       esym++, sym_hash++, ever = (ever != ((void *)0) ? ever + 1 : ((void *)0)))
    {
      Elf_Internal_Sym sym;
      int bind;
      bfd_vma value;
      asection *sec;
      flagword flags;
      const char *name;
      struct elf_link_hash_entry *h;
      boolean definition;
      boolean size_change_ok, type_change_ok;
      boolean new_weakdef;
      unsigned int old_alignment;
      boolean override;

      override = false;

      bfd_elf64_swap_symbol_in (abfd, esym, &sym);

      flags = 0x00;
      sec = ((void *)0);
      value = sym.st_value;
      *sym_hash = ((void *)0);

      bind = (((unsigned int)(sym.st_info)) >> 4);
      if (bind == 0)
        {




          continue;
        }
      else if (bind == 1)
        {
          if (sym.st_shndx != 0
              && sym.st_shndx != 0xFFF2)
            flags = 0x02;
        }
      else if (bind == 2)
        flags = 0x80;
      else
        {

        }

      if (sym.st_shndx == 0)
        sec = ((asection *) &bfd_und_section);
      else if (sym.st_shndx > 0 && sym.st_shndx < 0xFF00)
        {
          sec = bfd_section_from_elf_index (abfd, sym.st_shndx);
          if (sec == ((void *)0))
            sec = ((asection *) &bfd_abs_section);
          else if ((abfd->flags & (0x02 | 0x40)) != 0)
            value -= sec->vma;
        }
      else if (sym.st_shndx == 0xFFF1)
        sec = ((asection *) &bfd_abs_section);
      else if (sym.st_shndx == 0xFFF2)
        {
          sec = ((asection *) &bfd_com_section);


          value = sym.st_size;
        }
      else
        {

        }

      name = bfd_elf_string_from_elf_section (abfd, hdr->sh_link, sym.st_name);
      if (name == (const char *) ((void *)0))
        goto error_return;

      if (add_symbol_hook)
        {
          if (! (*add_symbol_hook) (abfd, info, &sym, &name, &flags, &sec,
                                    &value))
            goto error_return;



          if (name == (const char *) ((void *)0))
            continue;
        }


      if (sec == (asection *) ((void *)0))
        {
          bfd_set_error (bfd_error_bad_value);
          goto error_return;
        }

      if (((sec) == ((asection *) &bfd_und_section))
          || (((sec)->flags & 0x8000) != 0))
        definition = false;
      else
        definition = true;

      size_change_ok = false;
      type_change_ok = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->type_change_ok;
      old_alignment = 0;
      if (info->hash->creator->flavour == bfd_target_elf_flavour)
        {
          Elf_Internal_Versym iver;
          unsigned int vernum = 0;

          if (ever != ((void *)0))
            {
              _bfd_elf_swap_versym_in (abfd, ever, &iver);
              vernum = iver.vs_vers & 0x7fff;






              if ((iver.vs_vers & 0x8000) != 0
                  || (vernum > 1 && ! ((sec) == ((asection *) &bfd_abs_section))))
                {
                  const char *verstr;
                  unsigned int namelen;
                  bfd_size_type newlen;
                  char *newname, *p;

                  if (sym.st_shndx != 0)
                    {
                      if (vernum > ((abfd) -> tdata.elf_obj_data)->dynverdef_hdr.sh_info)
                        {
                          (*_bfd_error_handler)
                            (dcgettext ("bfd", "%s: %s: invalid version %u (max %d)", __LC_MESSAGES),
                             bfd_archive_filename (abfd), name, vernum,
                             ((abfd) -> tdata.elf_obj_data)->dynverdef_hdr.sh_info);
                          bfd_set_error (bfd_error_bad_value);
                          goto error_return;
                        }
                      else if (vernum > 1)
                        verstr =
                          ((abfd) -> tdata.elf_obj_data)->verdef[vernum - 1].vd_nodename;
                      else
                        verstr = "";
                    }
                  else
                    {




                      Elf_Internal_Verneed *t;

                      verstr = ((void *)0);
                      for (t = ((abfd) -> tdata.elf_obj_data)->verref;
                           t != ((void *)0);
                           t = t->vn_nextref)
                        {
                          Elf_Internal_Vernaux *a;

                          for (a = t->vn_auxptr; a != ((void *)0); a = a->vna_nextptr)
                            {
                              if (a->vna_other == vernum)
                                {
                                  verstr = a->vna_nodename;
                                  break;
                                }
                            }
                          if (a != ((void *)0))
                            break;
                        }
                      if (verstr == ((void *)0))
                        {
                          (*_bfd_error_handler)
                            (dcgettext ("bfd", "%s: %s: invalid needed version %d", __LC_MESSAGES),
                             bfd_archive_filename (abfd), name, vernum);
                          bfd_set_error (bfd_error_bad_value);
                          goto error_return;
                        }
                    }

                  namelen = strlen (name);
                  newlen = namelen + strlen (verstr) + 2;
                  if ((iver.vs_vers & 0x8000) == 0)
                    ++newlen;

                  newname = (char *) bfd_alloc (abfd, newlen);
                  if (newname == ((void *)0))
                    goto error_return;
                  (__extension__ (__builtin_constant_p (name) ? (((size_t)(const void *)((name) + 1) - (size_t)(const void *)(name) == 1) && strlen (name) + 1 <= 8 ? __strcpy_small (newname, __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (name))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (name))[0], ((__const char *) (name))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (name))[0], ((__const char *) (name))[1], ((__const char *) (name))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (name))[0], ((__const char *) (name))[1], ((__const char *) (name))[2], ((__const char *) (name))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (name))[0], ((__const char *) (name))[1], ((__const char *) (name))[2], ((__const char *) (name))[3], ((__const char *) (name))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char *) (name))[0], ((__const char *)!
 (name))[1], ((__const char *) (name))[2], ((__const char *) (name))[3], ((__const char *) (name))[4], ((__const char *) (name))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (name))[0], ((__const char *) (name))[1], ((__const char *) (name))[2], ((__const char *) (name))[3], ((__const char *) (name))[4], ((__const char *) (name))[5], ((__const char *) (name))[6], '\0' } }), strlen (name) + 1) : (char *) memcpy (newname, name, strlen (name) + 1)) : strcpy (newname, name)));
                  p = newname + namelen;
                  *p++ = '@';



                  if ((iver.vs_vers & 0x8000) == 0
                      && sym.st_shndx != 0)
                    *p++ = '@';
                  (__extension__ (__builtin_constant_p (verstr) ? (((size_t)(const void *)((verstr) + 1) - (size_t)(const void *)(verstr) == 1) && strlen (verstr) + 1 <= 8 ? __strcpy_small (p, __extension__ ((__STRING2_COPY_ARR2) { { ((__const char *) (verstr))[0], '\0' } }), __extension__ ((__STRING2_COPY_ARR3) { { ((__const char *) (verstr))[0], ((__const char *) (verstr))[1], '\0' } }), __extension__ ((__STRING2_COPY_ARR4) { { ((__const char *) (verstr))[0], ((__const char *) (verstr))[1], ((__const char *) (verstr))[2], '\0' } }), __extension__ ((__STRING2_COPY_ARR5) { { ((__const char *) (verstr))[0], ((__const char *) (verstr))[1], ((__const char *) (verstr))[2], ((__const char *) (verstr))[3], '\0' } }), __extension__ ((__STRING2_COPY_ARR6) { { ((__const char *) (verstr))[0], ((__const char *) (verstr))[1], ((__const char *) (verstr))[2], ((__const char *) (verstr))[3], ((__const char *) (verstr))[4], '\0' } }), __extension__ ((__STRING2_COPY_ARR7) { { ((__const char !
*) (verstr))[0], ((__const char *) (verstr))[1], ((__const char *) (verstr))[2], ((__const char *) (verstr))[3], ((__const char *) (verstr))[4], ((__const char *) (verstr))[5], '\0' } }), __extension__ ((__STRING2_COPY_ARR8) { { ((__const char *) (verstr))[0], ((__const char *) (verstr))[1], ((__const char *) (verstr))[2], ((__const char *) (verstr))[3], ((__const char *) (verstr))[4], ((__const char *) (verstr))[5], ((__const char *) (verstr))[6], '\0' } }), strlen (verstr) + 1) : (char *) memcpy (p, verstr, strlen (verstr) + 1)) : strcpy (p, verstr)));

                  name = newname;
                }
            }

          if (! elf_merge_symbol (abfd, info, name, &sym, &sec, &value,
                                  sym_hash, &override, &type_change_ok,
                                  &size_change_ok, dt_needed))
            goto error_return;

          if (override)
            definition = false;

          h = *sym_hash;
          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;






          if (h->root.type == bfd_link_hash_common)
            old_alignment = h->root.u.c.p->alignment_power;

          if (((abfd) -> tdata.elf_obj_data)->verdef != ((void *)0)
              && ! override
              && vernum > 1
              && definition)
            h->verinfo.verdef = &((abfd) -> tdata.elf_obj_data)->verdef[vernum - 1];
        }

      if (! (_bfd_generic_link_add_one_symbol
             (info, abfd, name, flags, sec, value, (const char *) ((void *)0),
              false, collect, (struct bfd_link_hash_entry **) sym_hash)))
        goto error_return;

      h = *sym_hash;
      while (h->root.type == bfd_link_hash_indirect
             || h->root.type == bfd_link_hash_warning)
        h = (struct elf_link_hash_entry *) h->root.u.i.link;
      *sym_hash = h;

      new_weakdef = false;
      if (dynamic
          && definition
          && (flags & 0x80) != 0
          && ((sym.st_info) & 0xF) != 2
          && info->hash->creator->flavour == bfd_target_elf_flavour
          && h->weakdef == ((void *)0))
        {
# 2017 "elflink.h"
          h->weakdef = weaks;
          weaks = h;
          new_weakdef = true;
        }


      if (sym.st_shndx == 0xFFF2
          && h->root.type == bfd_link_hash_common)
        {
          unsigned int align;

          align = bfd_log2 (sym.st_value);
          if (align > old_alignment


              || (sym.st_value == 1 && old_alignment == 0))
            h->root.u.c.p->alignment_power = align;
        }

      if (info->hash->creator->flavour == bfd_target_elf_flavour)
        {
          int old_flags;
          boolean dynsym;
          int new_flag;


          if (sym.st_size != 0
              && (definition || h->size == 0))
            {
              if (h->size != 0 && h->size != sym.st_size && ! size_change_ok)
                (*_bfd_error_handler)
                  (dcgettext ("bfd", "Warning: size of symbol `%s' changed from %lu to %lu in %s", __LC_MESSAGES),
                   name, (unsigned long) h->size, (unsigned long) sym.st_size,
                   bfd_archive_filename (abfd));

              h->size = sym.st_size;
            }






          if (h->root.type == bfd_link_hash_common)
            h->size = h->root.u.c.size;

          if (((sym.st_info) & 0xF) != 0
              && (definition || h->type == 0))
            {
              if (h->type != 0
                  && h->type != ((sym.st_info) & 0xF)
                  && ! type_change_ok)
                (*_bfd_error_handler)
                  (dcgettext ("bfd", "Warning: type of symbol `%s' changed from %d to %d in %s", __LC_MESSAGES),
                   name, h->type, ((sym.st_info) & 0xF),
                   bfd_archive_filename (abfd));

              h->type = ((sym.st_info) & 0xF);
            }



          if (sym.st_other != 0)
            {

              unsigned char hvis = ((h->other) & 0x3);
              unsigned char symvis = ((sym.st_other) & 0x3);

              if (symvis && (hvis > symvis || hvis == 0))
                h->other = sym.st_other;




              if (!symvis && !hvis
                  && (definition || h->other == 0))
                h->other = sym.st_other;
            }






          old_flags = h->elf_link_hash_flags;
          dynsym = false;
          if (! dynamic)
            {
              if (! definition)
                {
                  new_flag = 01;
                  if (bind != 2)
                    new_flag |= 020;
                }
              else
                new_flag = 02;
              if (info->shared
                  || (old_flags & (010
                                   | 04)) != 0)
                dynsym = true;
            }
          else
            {
              if (! definition)
                new_flag = 04;
              else
                new_flag = 010;
              if ((old_flags & (02
                                | 01)) != 0
                  || (h->weakdef != ((void *)0)
                      && ! new_weakdef
                      && h->weakdef->dynindx != -1))
                dynsym = true;
            }

          h->elf_link_hash_flags |= new_flag;



          if (definition || h->root.type == bfd_link_hash_common)
            if (! elf_add_default_symbol (abfd, info, h, name, &sym,
                                          &sec, &value, &dynsym,
                                          override, dt_needed))
              goto error_return;

          if (dynsym && h->dynindx == -1)
            {
              if (! _bfd_elf_link_record_dynamic_symbol (info, h))
                goto error_return;
              if (h->weakdef != ((void *)0)
                  && ! new_weakdef
                  && h->weakdef->dynindx == -1)
                {
                  if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
                    goto error_return;
                }
            }
          else if (dynsym && h->dynindx != -1)



            switch (((h->other) & 0x3))
              {
              case 1:
              case 2:
                h->elf_link_hash_flags |= 02000;
                (*bed->elf_backend_hide_symbol) (info, h);
                _bfd_elf_strtab_delref (hash_table->dynstr,
                                        h->dynstr_index);
                break;
              }

          if (dt_needed && definition
              && (h->elf_link_hash_flags
                  & 01) != 0)
            {
              bfd_size_type oldsize;
              bfd_size_type strindex;

              if (! ((info)->hash->type == bfd_link_elf_hash_table))
                goto error_return;





              dt_needed = false;
              oldsize = _bfd_elf_strtab_size (hash_table->dynstr);
              strindex = _bfd_elf_strtab_add (hash_table->dynstr,
                                              (((abfd) -> tdata.elf_obj_data) -> dt_soname), false);
              if (strindex == (bfd_size_type) -1)
                goto error_return;

              if (oldsize == _bfd_elf_strtab_size (hash_table->dynstr))
                {
                  asection *sdyn;
                  Elf64_External_Dyn *dyncon, *dynconend;

                  sdyn = bfd_get_section_by_name (hash_table->dynobj,
                                                  ".dynamic");
                  { if (!(sdyn != ((void *)0))) bfd_assert("elflink.h",2197); };

                  dyncon = (Elf64_External_Dyn *) sdyn->contents;
                  dynconend = (Elf64_External_Dyn *) (sdyn->contents +
                                                    sdyn->_raw_size);
                  for (; dyncon < dynconend; dyncon++)
                    {
                      Elf_Internal_Dyn dyn;

                      bfd_elf64_swap_dyn_in (hash_table->dynobj,
                                       dyncon, &dyn);
                      { if (!(dyn.d_tag != 1 || dyn.d_un.d_val != strindex)) bfd_assert("elflink.h",2209); };

                    }
                }

              if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 1, strindex))
                goto error_return;
            }
        }
    }
# 2232 "elflink.h"
  while (weaks != ((void *)0))
    {
      struct elf_link_hash_entry *hlook;
      asection *slook;
      bfd_vma vlook;
      struct elf_link_hash_entry **hpp;
      struct elf_link_hash_entry **hppend;

      hlook = weaks;
      weaks = hlook->weakdef;
      hlook->weakdef = ((void *)0);

      { if (!(hlook->root.type == bfd_link_hash_defined || hlook->root.type == bfd_link_hash_defweak || hlook->root.type == bfd_link_hash_common || hlook->root.type == bfd_link_hash_indirect)) bfd_assert("elflink.h",2247); };



      slook = hlook->root.u.def.section;
      vlook = hlook->root.u.def.value;

      hpp = (((abfd) -> tdata.elf_obj_data) -> sym_hashes);
      hppend = hpp + extsymcount;
      for (; hpp < hppend; hpp++)
        {
          struct elf_link_hash_entry *h;

          h = *hpp;
          if (h != ((void *)0) && h != hlook
              && h->root.type == bfd_link_hash_defined
              && h->root.u.def.section == slook
              && h->root.u.def.value == vlook)
            {
              hlook->weakdef = h;




              if (hlook->dynindx != -1
                  && h->dynindx == -1)
                {
                  if (! _bfd_elf_link_record_dynamic_symbol (info, h))
                    goto error_return;
                }






              if (h->dynindx != -1
                  && hlook->dynindx == -1)
                {
                  if (! _bfd_elf_link_record_dynamic_symbol (info, hlook))
                    goto error_return;
                }

              break;
            }
        }
    }

  if (buf != ((void *)0))
    {
      free (buf);
      buf = ((void *)0);
    }

  if (extversym != ((void *)0))
    {
      free (extversym);
      extversym = ((void *)0);
    }
# 2321 "elflink.h"
  check_relocs = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->check_relocs;
  if (! dynamic
      && abfd->xvec == info->hash->creator
      && check_relocs != ((void *)0))
    {
      asection *o;

      for (o = abfd->sections; o != ((void *)0); o = o->next)
        {
          Elf_Internal_Rela *internal_relocs;
          boolean ok;

          if ((o->flags & 0x004) == 0
              || o->reloc_count == 0
              || ((info->strip == strip_all || info->strip == strip_debugger)
                  && (o->flags & 0x10000) != 0)
              || ((o->output_section) == ((asection *) &bfd_abs_section)))
            continue;

          internal_relocs = (_bfd_elf64_link_read_relocs
                             (abfd, o, (void *) ((void *)0),
                              (Elf_Internal_Rela *) ((void *)0),
                              info->keep_memory));
          if (internal_relocs == ((void *)0))
            goto error_return;

          ok = (*check_relocs) (abfd, info, o, internal_relocs);

          if (! info->keep_memory)
            free (internal_relocs);

          if (! ok)
            goto error_return;
        }
    }



  if (! dynamic
      && ! info->relocateable
      && ! info->traditional_format
      && info->hash->creator->flavour == bfd_target_elf_flavour
      && ((info)->hash->type == bfd_link_elf_hash_table)
      && (info->strip != strip_all && info->strip != strip_debugger))
    {
      asection *stab, *stabstr;

      stab = bfd_get_section_by_name (abfd, ".stab");
      if (stab != ((void *)0))
        {
          stabstr = bfd_get_section_by_name (abfd, ".stabstr");

          if (stabstr != ((void *)0))
            {
              struct bfd_elf_section_data *secdata;

              secdata = ((struct bfd_elf_section_data*)stab->used_by_bfd);
              if (! _bfd_link_section_stabs (abfd,
                                             & hash_table->stab_info,
                                             stab, stabstr,
                                             &secdata->stab_info))
                goto error_return;
            }
        }
    }

  if (! info->relocateable && ! dynamic
      && ((info)->hash->type == bfd_link_elf_hash_table))
    {
      asection *s;

      for (s = abfd->sections; s != ((void *)0); s = s->next)
        if ((s->flags & 0x20000000)
            && ! _bfd_merge_section (abfd, & hash_table->merge_info, s,
                                     & ((struct bfd_elf_section_data*)s->used_by_bfd)->merge_info))
          goto error_return;
    }

  if (((info)->hash->type == bfd_link_elf_hash_table))
    {

      struct elf_link_loaded_list *n, **pn;

      n = (struct elf_link_loaded_list *)
          bfd_alloc (abfd, sizeof (struct elf_link_loaded_list));
      if (n == ((void *)0))
        goto error_return;
      n->next = ((void *)0);
      n->abfd = abfd;
      for (pn = &hash_table->loaded; *pn != ((void *)0); pn = &(*pn)->next)
        ;
      *pn = n;
    }

  return true;

 error_return:
  if (buf != ((void *)0))
    free (buf);
  if (dynbuf != ((void *)0))
    free (dynbuf);
  if (extversym != ((void *)0))
    free (extversym);
  return false;
}
# 2434 "elflink.h"
boolean
bfd_elf64_link_create_dynamic_sections (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  flagword flags;
  register asection *s;
  struct elf_link_hash_entry *h;
  struct elf_backend_data *bed;

  if (! ((info)->hash->type == bfd_link_elf_hash_table))
    return false;

  if (((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created)
    return true;


  if (((struct elf_link_hash_table *) ((info)->hash))->dynobj == ((void *)0))
    ((struct elf_link_hash_table *) ((info)->hash))->dynobj = abfd;
  else
    abfd = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;



  flags = (0x001 | 0x002 | 0x200
           | 0x20000 | 0x800000);



  if (! info->shared)
    {
      s = bfd_make_section (abfd, ".interp");
      if (s == ((void *)0)
          || ! bfd_set_section_flags (abfd, s, flags | 0x010))
        return false;
    }



  s = bfd_make_section (abfd, ".gnu.version_d");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010)
      || ! (((s)->alignment_power = (3)),true))
    return false;

  s = bfd_make_section (abfd, ".gnu.version");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010)
      || ! (((s)->alignment_power = (1)),true))
    return false;

  s = bfd_make_section (abfd, ".gnu.version_r");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010)
      || ! (((s)->alignment_power = (3)),true))
    return false;

  s = bfd_make_section (abfd, ".dynsym");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010)
      || ! (((s)->alignment_power = (3)),true))
    return false;

  s = bfd_make_section (abfd, ".dynstr");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010))
    return false;


  if (((struct elf_link_hash_table *) ((info)->hash))->dynstr == ((void *)0))
    {
      ((struct elf_link_hash_table *) ((info)->hash))->dynstr = _bfd_elf_strtab_init ();
      if (((struct elf_link_hash_table *) ((info)->hash))->dynstr == ((void *)0))
        return false;
    }

  s = bfd_make_section (abfd, ".dynamic");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags)
      || ! (((s)->alignment_power = (3)),true))
    return false;
# 2524 "elflink.h"
  h = ((void *)0);
  if (! (_bfd_generic_link_add_one_symbol
         (info, abfd, "_DYNAMIC", 0x02, s, (bfd_vma) 0,
          (const char *) ((void *)0), false, ((struct elf_backend_data *) (abfd)->xvec->backend_data)->collect,
          (struct bfd_link_hash_entry **) &h)))
    return false;
  h->elf_link_hash_flags |= 02;
  h->type = 1;

  if (info->shared
      && ! _bfd_elf_link_record_dynamic_symbol (info, h))
    return false;

  bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);

  s = bfd_make_section (abfd, ".hash");
  if (s == ((void *)0)
      || ! bfd_set_section_flags (abfd, s, flags | 0x010)
      || ! (((s)->alignment_power = (3)),true))
    return false;
  ((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_entsize = bed->s->sizeof_hash_entry;




  if (! (*bed->elf_backend_create_dynamic_sections) (abfd, info))
    return false;

  ((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created = true;

  return true;
}



boolean
bfd_elf64_add_dynamic_entry (info, tag, val)
     struct bfd_link_info *info;
     bfd_vma tag;
     bfd_vma val;
{
  Elf_Internal_Dyn dyn;
  bfd *dynobj;
  asection *s;
  bfd_size_type newsize;
  bfd_byte *newcontents;

  if (! ((info)->hash->type == bfd_link_elf_hash_table))
    return false;

  dynobj = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;

  s = bfd_get_section_by_name (dynobj, ".dynamic");
  { if (!(s != ((void *)0))) bfd_assert("elflink.h",2577); };

  newsize = s->_raw_size + sizeof (Elf64_External_Dyn);
  newcontents = (bfd_byte *) bfd_realloc (s->contents, newsize);
  if (newcontents == ((void *)0))
    return false;

  dyn.d_tag = tag;
  dyn.d_un.d_val = val;
  bfd_elf64_swap_dyn_out (dynobj, &dyn,
                    (Elf64_External_Dyn *) (newcontents + s->_raw_size));

  s->_raw_size = newsize;
  s->contents = newcontents;

  return true;
}



boolean
_bfd_elf64_link_record_local_dynamic_symbol (info, input_bfd, input_indx)
     struct bfd_link_info *info;
     bfd *input_bfd;
     long input_indx;
{
  struct elf_link_local_dynamic_entry *entry;
  struct elf_link_hash_table *eht;
  struct elf_strtab_hash *dynstr;
  Elf64_External_Sym esym;
  unsigned long dynstr_index;
  char *name;
  file_ptr pos;
  bfd_size_type amt;

  if (! ((info)->hash->type == bfd_link_elf_hash_table))
    return false;


  for (entry = ((struct elf_link_hash_table *) ((info)->hash))->dynlocal; entry ; entry = entry->next)
    if (entry->input_bfd == input_bfd && entry->input_indx == input_indx)
      return true;

  entry = (struct elf_link_local_dynamic_entry *)
    bfd_alloc (input_bfd, (bfd_size_type) sizeof (*entry));
  if (entry == ((void *)0))
    return false;


  amt = sizeof (Elf64_External_Sym);
  pos = ((input_bfd) -> tdata.elf_obj_data)->symtab_hdr.sh_offset + input_indx * amt;
  if (bfd_seek (input_bfd, pos, 0) != 0
      || bfd_bread (&esym, amt, input_bfd) != amt)
    return false;
  bfd_elf64_swap_symbol_in (input_bfd, &esym, &entry->isym);

  name = (bfd_elf_string_from_elf_section
          (input_bfd, ((input_bfd) -> tdata.elf_obj_data)->symtab_hdr.sh_link,
           entry->isym.st_name));

  dynstr = ((struct elf_link_hash_table *) ((info)->hash))->dynstr;
  if (dynstr == ((void *)0))
    {

      ((struct elf_link_hash_table *) ((info)->hash))->dynstr = dynstr = _bfd_elf_strtab_init ();
      if (dynstr == ((void *)0))
        return false;
    }

  dynstr_index = _bfd_elf_strtab_add (dynstr, name, false);
  if (dynstr_index == (unsigned long) -1)
    return false;
  entry->isym.st_name = dynstr_index;

  eht = ((struct elf_link_hash_table *) ((info)->hash));

  entry->next = eht->dynlocal;
  eht->dynlocal = entry;
  entry->input_bfd = input_bfd;
  entry->input_indx = input_indx;
  eht->dynsymcount++;


  entry->isym.st_info
    = (((0) << 4) + ((((entry->isym.st_info) & 0xF)) & 0xF));



  return true;
}
# 2677 "elflink.h"
static boolean
elf_link_read_relocs_from_section (abfd, shdr, external_relocs,
                                   internal_relocs)
     bfd *abfd;
     Elf_Internal_Shdr *shdr;
     void * external_relocs;
     Elf_Internal_Rela *internal_relocs;
{
  struct elf_backend_data *bed;
  bfd_size_type amt;


  if (!shdr)
    return true;


  if (bfd_seek (abfd, shdr->sh_offset, 0) != 0)
    return false;


  if (bfd_bread (external_relocs, shdr->sh_size, abfd) != shdr->sh_size)
    return false;

  bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);


  if (shdr->sh_entsize == sizeof (Elf64_External_Rel))
    {
      Elf64_External_Rel *erel;
      Elf64_External_Rel *erelend;
      Elf_Internal_Rela *irela;
      Elf_Internal_Rel *irel;

      erel = (Elf64_External_Rel *) external_relocs;
      erelend = erel + ((shdr)->sh_size / (shdr)->sh_entsize);
      irela = internal_relocs;
      amt = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel);
      irel = bfd_alloc (abfd, amt);
      for (; erel < erelend; erel++, irela += bed->s->int_rels_per_ext_rel)
        {
          unsigned int i;

          if (bed->s->swap_reloc_in)
            (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, irel);
          else
            bfd_elf64_swap_reloc_in (abfd, erel, irel);

          for (i = 0; i < bed->s->int_rels_per_ext_rel; ++i)
            {
              irela[i].r_offset = irel[i].r_offset;
              irela[i].r_info = irel[i].r_info;
              irela[i].r_addend = 0;
            }
        }
    }
  else
    {
      Elf64_External_Rela *erela;
      Elf64_External_Rela *erelaend;
      Elf_Internal_Rela *irela;

      { if (!(shdr->sh_entsize == sizeof (Elf64_External_Rela))) bfd_assert("elflink.h",2738); };

      erela = (Elf64_External_Rela *) external_relocs;
      erelaend = erela + ((shdr)->sh_size / (shdr)->sh_entsize);
      irela = internal_relocs;
      for (; erela < erelaend; erela++, irela += bed->s->int_rels_per_ext_rel)
        {
          if (bed->s->swap_reloca_in)
            (*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, irela);
          else
            bfd_elf64_swap_reloca_in (abfd, erela, irela);
        }
    }

  return true;
}
# 2765 "elflink.h"
Elf_Internal_Rela *
_bfd_elf64_link_read_relocs (abfd, o, external_relocs, internal_relocs,
                                 keep_memory)
     bfd *abfd;
     asection *o;
     void * external_relocs;
     Elf_Internal_Rela *internal_relocs;
     boolean keep_memory;
{
  Elf_Internal_Shdr *rel_hdr;
  void * alloc1 = ((void *)0);
  Elf_Internal_Rela *alloc2 = ((void *)0);
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);

  if (((struct bfd_elf_section_data*)o->used_by_bfd)->relocs != ((void *)0))
    return ((struct bfd_elf_section_data*)o->used_by_bfd)->relocs;

  if (o->reloc_count == 0)
    return ((void *)0);

  rel_hdr = &((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr;

  if (internal_relocs == ((void *)0))
    {
      bfd_size_type size;

      size = o->reloc_count;
      size *= bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
      if (keep_memory)
        internal_relocs = (Elf_Internal_Rela *) bfd_alloc (abfd, size);
      else
        internal_relocs = alloc2 = (Elf_Internal_Rela *) bfd_malloc (size);
      if (internal_relocs == ((void *)0))
        goto error_return;
    }

  if (external_relocs == ((void *)0))
    {
      bfd_size_type size = rel_hdr->sh_size;

      if (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2)
        size += ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2->sh_size;
      alloc1 = (void *) bfd_malloc (size);
      if (alloc1 == ((void *)0))
        goto error_return;
      external_relocs = alloc1;
    }

  if (!elf_link_read_relocs_from_section (abfd, rel_hdr,
                                          external_relocs,
                                          internal_relocs))
    goto error_return;
  if (!elf_link_read_relocs_from_section
      (abfd,
       ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2,
       ((bfd_byte *) external_relocs) + rel_hdr->sh_size,
       internal_relocs + (((rel_hdr)->sh_size / (rel_hdr)->sh_entsize)
                          * bed->s->int_rels_per_ext_rel)))
    goto error_return;


  if (keep_memory)
    ((struct bfd_elf_section_data*)o->used_by_bfd)->relocs = internal_relocs;

  if (alloc1 != ((void *)0))
    free (alloc1);




  return internal_relocs;

 error_return:
  if (alloc1 != ((void *)0))
    free (alloc1);
  if (alloc2 != ((void *)0))
    free (alloc2);
  return ((void *)0);
}




boolean
bfd_elf64_record_link_assignment (output_bfd, info, name, provide)
     bfd *output_bfd __attribute__ ((__unused__));
     struct bfd_link_info *info;
     const char *name;
     boolean provide;
{
  struct elf_link_hash_entry *h;

  if (info->hash->creator->flavour != bfd_target_elf_flavour)
    return true;

  h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (name), (true), (true), (false)));
  if (h == ((void *)0))
    return false;

  if (h->root.type == bfd_link_hash_new)
    h->elf_link_hash_flags &= ~0400;





  if (provide
      && (h->elf_link_hash_flags & 010) != 0
      && (h->elf_link_hash_flags & 02) == 0)
    h->root.type = bfd_link_hash_undefined;





  if (!provide
      && (h->elf_link_hash_flags & 010) != 0
      && (h->elf_link_hash_flags & 02) == 0)
    h->verinfo.verdef = ((void *)0);

  h->elf_link_hash_flags |= 02;


  if (h->type == 0)
    h->type = 1;

  if (((h->elf_link_hash_flags & (010
                                  | 04)) != 0
       || info->shared)
      && h->dynindx == -1)
    {
      if (! _bfd_elf_link_record_dynamic_symbol (info, h))
        return false;




      if (h->weakdef != ((void *)0)
          && h->weakdef->dynindx == -1)
        {
          if (! _bfd_elf_link_record_dynamic_symbol (info, h->weakdef))
            return false;
        }
    }

  return true;
}




struct elf_assign_sym_version_info
{

  bfd *output_bfd;

  struct bfd_link_info *info;

  struct bfd_elf_version_tree *verdefs;

  boolean failed;
};




struct elf_find_verdep_info
{

  bfd *output_bfd;

  struct bfd_link_info *info;

  unsigned int vers;

  boolean failed;
};







static const size_t elf_buckets[] =
{
  1, 3, 17, 37, 67, 97, 131, 197, 263, 521, 1031, 2053, 4099, 8209,
  16411, 32771, 0
};
# 2963 "elflink.h"
static size_t
compute_bucket_count (info)
     struct bfd_link_info *info;
{
  size_t dynsymcount = ((struct elf_link_hash_table *) ((info)->hash))->dynsymcount;
  size_t best_size = 0;
  unsigned long int *hashcodes;
  unsigned long int *hashcodesp;
  unsigned long int i;
  bfd_size_type amt;




  amt = dynsymcount;
  amt *= sizeof (unsigned long int);
  hashcodes = (unsigned long int *) bfd_malloc (amt);
  if (hashcodes == ((void *)0))
    return 0;
  hashcodesp = hashcodes;


  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_collect_hash_codes), (&hashcodesp)));






  if (info->optimize == true)
    {
      unsigned long int nsyms = hashcodesp - hashcodes;
      size_t minsize;
      size_t maxsize;
      unsigned long best_chlen = ~((unsigned long) 0);
      unsigned long int *counts ;




      minsize = nsyms / 4;
      if (minsize == 0)
        minsize = 1;
      best_size = maxsize = nsyms * 2;



      amt = maxsize;
      amt *= sizeof (unsigned long int);
      counts = (unsigned long int *) bfd_malloc (amt);
      if (counts == ((void *)0))
        {
          free (hashcodes);
          return 0;
        }




      for (i = minsize; i < maxsize; ++i)
        {

          unsigned long max;
          unsigned long int j;
          unsigned long int fact;

          (__extension__ (__builtin_constant_p ('\0') && ('\0') == '\0' ? ({ void *__s = (counts); __builtin_memset (__s, '\0', i * sizeof (unsigned long int)); __s; }) : memset (counts, '\0', i * sizeof (unsigned long int))));


          for (j = 0; j < nsyms; ++j)
            ++counts[hashcodes[j] % i];
# 3046 "elflink.h"
          max = (2 + nsyms) * (64 / 8);





          for (j = 0; j < i; ++j)
            max += counts[j] * counts[j];


          fact = i / ((4096) / (64 / 8)) + 1;
          max *= fact * fact;
# 3072 "elflink.h"
          if (max < best_chlen)
            {
              best_chlen = max;
              best_size = i;
            }
        }

      free (counts);
    }
  else

    {



      for (i = 0; elf_buckets[i] != 0; i++)
        {
          best_size = elf_buckets[i];
          if (dynsymcount < elf_buckets[i + 1])
            break;
        }
    }


  free (hashcodes);

  return best_size;
}






boolean
bfd_elf64_size_dynamic_sections (output_bfd, soname, rpath,
                                     filter_shlib,
                                     auxiliary_filters, info, sinterpptr,
                                     verdefs)
     bfd *output_bfd;
     const char *soname;
     const char *rpath;
     const char *filter_shlib;
     const char * const *auxiliary_filters;
     struct bfd_link_info *info;
     asection **sinterpptr;
     struct bfd_elf_version_tree *verdefs;
{
  bfd_size_type soname_indx;
  bfd *dynobj;
  struct elf_backend_data *bed;
  struct elf_assign_sym_version_info asvinfo;

  *sinterpptr = ((void *)0);

  soname_indx = (bfd_size_type) -1;

  if (info->hash->creator->flavour != bfd_target_elf_flavour)
    return true;

  if (! ((info)->hash->type == bfd_link_elf_hash_table))
    return false;



  ((struct elf_link_hash_table *) ((info)->hash))->init_refcount = -1;



  bed = ((struct elf_backend_data *) (output_bfd)->xvec->backend_data);
  if (bed->elf_backend_always_size_sections
      && ! (*bed->elf_backend_always_size_sections) (output_bfd, info))
    return false;

  dynobj = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;



  if (dynobj == ((void *)0))
    return true;

  if (((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created)
    {
      struct elf_info_failed eif;
      struct elf_link_hash_entry *h;
      asection *dynstr;

      *sinterpptr = bfd_get_section_by_name (dynobj, ".interp");
      { if (!(*sinterpptr != ((void *)0) || info->shared)) bfd_assert("elflink.h",3160); };

      if (soname != ((void *)0))
        {
          soname_indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                             soname, true);
          if (soname_indx == (bfd_size_type) -1
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 14,
                                          soname_indx))
            return false;
        }

      if (info->symbolic)
        {
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 16,
                                       (bfd_vma) 0))
            return false;
          info->flags |= (1 << 1);
        }

      if (rpath != ((void *)0))
        {
          bfd_size_type indx;

          indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr, rpath,
                                      true);
          if (info->new_dtags)
            _bfd_elf_strtab_addref (((struct elf_link_hash_table *) ((info)->hash))->dynstr, indx);
          if (indx == (bfd_size_type) -1
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 15, indx)
              || (info->new_dtags
                  && ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 29,
                                              indx)))
            return false;
        }

      if (filter_shlib != ((void *)0))
        {
          bfd_size_type indx;

          indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                      filter_shlib, true);
          if (indx == (bfd_size_type) -1
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x7fffffff, indx))
            return false;
        }

      if (auxiliary_filters != ((void *)0))
        {
          const char * const *p;

          for (p = auxiliary_filters; *p != ((void *)0); p++)
            {
              bfd_size_type indx;

              indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                          *p, true);
              if (indx == (bfd_size_type) -1
                  || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x7ffffffd,
                                              indx))
                return false;
            }
        }

      eif.info = info;
      eif.verdefs = verdefs;
      eif.failed = false;



      if (info->export_dynamic)
        {
          (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_export_symbol), ((void *) &eif)));

          if (eif.failed)
            return false;
        }


      asvinfo.output_bfd = output_bfd;
      asvinfo.info = info;
      asvinfo.verdefs = verdefs;
      asvinfo.failed = false;

      (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_link_assign_sym_version), ((void *) &asvinfo)));


      if (asvinfo.failed)
        return false;



      (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_adjust_dynamic_symbol), ((void *) &eif)));


      if (eif.failed)
        return false;







      h = (info->init_function
           ? ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (info->init_function), (false), (false), (false)))


           : ((void *)0));
      if (h != ((void *)0)
          && (h->elf_link_hash_flags & (01
                                        | 02)) != 0)
        {
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 12, (bfd_vma) 0))
            return false;
        }
      h = (info->fini_function
           ? ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (info->fini_function), (false), (false), (false)))


           : ((void *)0));
      if (h != ((void *)0)
          && (h->elf_link_hash_flags & (01
                                        | 02)) != 0)
        {
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 13, (bfd_vma) 0))
            return false;
        }

      dynstr = bfd_get_section_by_name (dynobj, ".dynstr");




      if (dynstr != ((void *)0) && dynstr->output_section != ((asection *) &bfd_abs_section))
        {
          bfd_size_type strsize;

          strsize = _bfd_elf_strtab_size (((struct elf_link_hash_table *) ((info)->hash))->dynstr);
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 4, (bfd_vma) 0)
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 5, (bfd_vma) 0)
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 6, (bfd_vma) 0)
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 10, strsize)
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 11,
                                          (bfd_vma) sizeof (Elf64_External_Sym)))
            return false;
        }
    }



  if (bed->elf_backend_size_dynamic_sections
      && ! (*bed->elf_backend_size_dynamic_sections) (output_bfd, info))
    return false;

  if (((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created)
    {
      bfd_size_type dynsymcount;
      asection *s;
      size_t bucketcount = 0;
      size_t hash_entry_size;
      unsigned int dtagcount;


      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3325); };



      verdefs = asvinfo.verdefs;

      if (verdefs == ((void *)0))
        _bfd_strip_section_from_output (info, s);
      else
        {
          unsigned int cdefs;
          bfd_size_type size;
          struct bfd_elf_version_tree *t;
          bfd_byte *p;
          Elf_Internal_Verdef def;
          Elf_Internal_Verdaux defaux;

          cdefs = 0;
          size = 0;


          size += sizeof (Elf_External_Verdef);
          size += sizeof (Elf_External_Verdaux);
          ++cdefs;

          for (t = verdefs; t != ((void *)0); t = t->next)
            {
              struct bfd_elf_version_deps *n;

              size += sizeof (Elf_External_Verdef);
              size += sizeof (Elf_External_Verdaux);
              ++cdefs;

              for (n = t->deps; n != ((void *)0); n = n->next)
                size += sizeof (Elf_External_Verdaux);
            }

          s->_raw_size = size;
          s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
          if (s->contents == ((void *)0) && s->_raw_size != 0)
            return false;



          p = s->contents;

          def.vd_version = 1;
          def.vd_flags = 0x1;
          def.vd_ndx = 1;
          def.vd_cnt = 1;
          def.vd_aux = sizeof (Elf_External_Verdef);
          def.vd_next = (sizeof (Elf_External_Verdef)
                         + sizeof (Elf_External_Verdaux));

          if (soname_indx != (bfd_size_type) -1)
            {
              _bfd_elf_strtab_addref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                      soname_indx);
              def.vd_hash = bfd_elf_hash (soname);
              defaux.vda_name = soname_indx;
            }
          else
            {
              const char *name;
              bfd_size_type indx;

              name = basename (output_bfd->filename);
              def.vd_hash = bfd_elf_hash (name);
              indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                          name, false);
              if (indx == (bfd_size_type) -1)
                return false;
              defaux.vda_name = indx;
            }
          defaux.vda_next = 0;

          _bfd_elf_swap_verdef_out (output_bfd, &def,
                                    (Elf_External_Verdef *) p);
          p += sizeof (Elf_External_Verdef);
          _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
                                     (Elf_External_Verdaux *) p);
          p += sizeof (Elf_External_Verdaux);

          for (t = verdefs; t != ((void *)0); t = t->next)
            {
              unsigned int cdeps;
              struct bfd_elf_version_deps *n;
              struct elf_link_hash_entry *h;

              cdeps = 0;
              for (n = t->deps; n != ((void *)0); n = n->next)
                ++cdeps;


              h = ((void *)0);
              if (! (_bfd_generic_link_add_one_symbol
                     (info, dynobj, t->name, 0x02, ((asection *) &bfd_abs_section),
                      (bfd_vma) 0, (const char *) ((void *)0), false,
                      ((struct elf_backend_data *) (dynobj)->xvec->backend_data)->collect,
                      (struct bfd_link_hash_entry **) &h)))
                return false;
              h->elf_link_hash_flags &= ~ 0400;
              h->elf_link_hash_flags |= 02;
              h->type = 1;
              h->verinfo.vertree = t;

              if (! _bfd_elf_link_record_dynamic_symbol (info, h))
                return false;

              def.vd_version = 1;
              def.vd_flags = 0;
              if (t->globals == ((void *)0) && t->locals == ((void *)0) && ! t->used)
                def.vd_flags |= 0x2;
              def.vd_ndx = t->vernum + 1;
              def.vd_cnt = cdeps + 1;
              def.vd_hash = bfd_elf_hash (t->name);
              def.vd_aux = sizeof (Elf_External_Verdef);
              if (t->next != ((void *)0))
                def.vd_next = (sizeof (Elf_External_Verdef)
                               + (cdeps + 1) * sizeof (Elf_External_Verdaux));
              else
                def.vd_next = 0;

              _bfd_elf_swap_verdef_out (output_bfd, &def,
                                        (Elf_External_Verdef *) p);
              p += sizeof (Elf_External_Verdef);

              defaux.vda_name = h->dynstr_index;
              _bfd_elf_strtab_addref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                      h->dynstr_index);
              if (t->deps == ((void *)0))
                defaux.vda_next = 0;
              else
                defaux.vda_next = sizeof (Elf_External_Verdaux);
              t->name_indx = defaux.vda_name;

              _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
                                         (Elf_External_Verdaux *) p);
              p += sizeof (Elf_External_Verdaux);

              for (n = t->deps; n != ((void *)0); n = n->next)
                {
                  if (n->version_needed == ((void *)0))
                    {


                      defaux.vda_name = 0;
                    }
                  else
                    {
                      defaux.vda_name = n->version_needed->name_indx;
                      _bfd_elf_strtab_addref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                              defaux.vda_name);
                    }
                  if (n->next == ((void *)0))
                    defaux.vda_next = 0;
                  else
                    defaux.vda_next = sizeof (Elf_External_Verdaux);

                  _bfd_elf_swap_verdaux_out (output_bfd, &defaux,
                                             (Elf_External_Verdaux *) p);
                  p += sizeof (Elf_External_Verdaux);
                }
            }

          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6ffffffc, (bfd_vma) 0)
              || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6ffffffd,
                                          (bfd_vma) cdefs))
            return false;

          ((output_bfd) -> tdata.elf_obj_data)->cverdefs = cdefs;
        }

      if (info->new_dtags && info->flags)
        {
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 30, info->flags))
            return false;
        }

      if (info->flags_1)
        {
          if (! info->shared)
            info->flags_1 &= ~ (0x00000020
                                | 0x00000008
                                | 0x00000040);
          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6ffffffb,
                                       info->flags_1))
            return false;
        }



      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3518); };
      {
        struct elf_find_verdep_info sinfo;

        sinfo.output_bfd = output_bfd;
        sinfo.info = info;
        sinfo.vers = ((output_bfd) -> tdata.elf_obj_data)->cverdefs;
        if (sinfo.vers == 0)
          sinfo.vers = 1;
        sinfo.failed = false;

        (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_link_find_version_dependencies), ((void *) &sinfo)));



        if (((output_bfd) -> tdata.elf_obj_data)->verref == ((void *)0))
          _bfd_strip_section_from_output (info, s);
        else
          {
            Elf_Internal_Verneed *t;
            unsigned int size;
            unsigned int crefs;
            bfd_byte *p;


            size = 0;
            crefs = 0;
            for (t = ((output_bfd) -> tdata.elf_obj_data)->verref;
                 t != ((void *)0);
                 t = t->vn_nextref)
              {
                Elf_Internal_Vernaux *a;

                size += sizeof (Elf_External_Verneed);
                ++crefs;
                for (a = t->vn_auxptr; a != ((void *)0); a = a->vna_nextptr)
                  size += sizeof (Elf_External_Vernaux);
              }

            s->_raw_size = size;
            s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
            if (s->contents == ((void *)0))
              return false;

            p = s->contents;
            for (t = ((output_bfd) -> tdata.elf_obj_data)->verref;
                 t != ((void *)0);
                 t = t->vn_nextref)
              {
                unsigned int caux;
                Elf_Internal_Vernaux *a;
                bfd_size_type indx;

                caux = 0;
                for (a = t->vn_auxptr; a != ((void *)0); a = a->vna_nextptr)
                  ++caux;

                t->vn_version = 1;
                t->vn_cnt = caux;
                indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                            (((t->vn_bfd) -> tdata.elf_obj_data) -> dt_name) != ((void *)0)
                                            ? (((t->vn_bfd) -> tdata.elf_obj_data) -> dt_name)
                                            : basename (t->vn_bfd->filename),
                                            false);
                if (indx == (bfd_size_type) -1)
                  return false;
                t->vn_file = indx;
                t->vn_aux = sizeof (Elf_External_Verneed);
                if (t->vn_nextref == ((void *)0))
                  t->vn_next = 0;
                else
                  t->vn_next = (sizeof (Elf_External_Verneed)
                                + caux * sizeof (Elf_External_Vernaux));

                _bfd_elf_swap_verneed_out (output_bfd, t,
                                           (Elf_External_Verneed *) p);
                p += sizeof (Elf_External_Verneed);

                for (a = t->vn_auxptr; a != ((void *)0); a = a->vna_nextptr)
                  {
                    a->vna_hash = bfd_elf_hash (a->vna_nodename);
                    indx = _bfd_elf_strtab_add (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                                a->vna_nodename, false);
                    if (indx == (bfd_size_type) -1)
                      return false;
                    a->vna_name = indx;
                    if (a->vna_nextptr == ((void *)0))
                      a->vna_next = 0;
                    else
                      a->vna_next = sizeof (Elf_External_Vernaux);

                    _bfd_elf_swap_vernaux_out (output_bfd, a,
                                               (Elf_External_Vernaux *) p);
                    p += sizeof (Elf_External_Vernaux);
                  }
              }

            if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6ffffffe,
                                         (bfd_vma) 0)
                || ! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6fffffff,
                                            (bfd_vma) crefs))
              return false;

            ((output_bfd) -> tdata.elf_obj_data)->cverrefs = crefs;
          }
      }






      dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);


      s = bfd_get_section_by_name (dynobj, ".gnu.version");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3634); };
      if (dynsymcount == 0
          || (verdefs == ((void *)0) && ((output_bfd) -> tdata.elf_obj_data)->verref == ((void *)0)))
        {
          _bfd_strip_section_from_output (info, s);


          dynsymcount = _bfd_elf_link_renumber_dynsyms (output_bfd, info);
        }
      else
        {
          s->_raw_size = dynsymcount * sizeof (Elf_External_Versym);
          s->contents = (bfd_byte *) bfd_zalloc (output_bfd, s->_raw_size);
          if (s->contents == ((void *)0))
            return false;

          if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0x6ffffff0, (bfd_vma) 0))
            return false;
        }







      s = bfd_get_section_by_name (dynobj, ".dynsym");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3661); };
      s->_raw_size = dynsymcount * sizeof (Elf64_External_Sym);
      s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
      if (s->contents == ((void *)0) && s->_raw_size != 0)
        return false;

      if (dynsymcount != 0)
        {
          Elf_Internal_Sym isym;


          isym.st_value = 0;
          isym.st_size = 0;
          isym.st_name = 0;
          isym.st_info = 0;
          isym.st_other = 0;
          isym.st_shndx = 0;
          bfd_elf64_swap_symbol_out (output_bfd, &isym,
                               (void *) (Elf64_External_Sym *) s->contents);
        }



      bucketcount = compute_bucket_count (info);

      s = bfd_get_section_by_name (dynobj, ".hash");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3687); };
      hash_entry_size = ((struct bfd_elf_section_data*)s->used_by_bfd)->this_hdr.sh_entsize;
      s->_raw_size = ((2 + bucketcount + dynsymcount) * hash_entry_size);
      s->contents = (bfd_byte *) bfd_alloc (output_bfd, s->_raw_size);
      if (s->contents == ((void *)0))
        return false;
      (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (s->contents); __builtin_memset (__s, '\0', (size_t) s->_raw_size); __s; }) : memset (s->contents, 0, (size_t) s->_raw_size)));

      ( (8 * hash_entry_size) == 8 ? ((void) (*((unsigned char *) (s->contents)) = (unsigned char) ((bfd_vma) bucketcount))) : (8 * hash_entry_size) == 16 ? ((*((output_bfd)->xvec->bfd_putx16)) (((bfd_vma) bucketcount),(s->contents))) : (8 * hash_entry_size) == 32 ? ((*((output_bfd)->xvec->bfd_putx32)) (((bfd_vma) bucketcount),(s->contents))) : (8 * hash_entry_size) == 64 ? ((*((output_bfd)->xvec->bfd_putx64)) (((bfd_vma) bucketcount), (s->contents))) : (_bfd_abort ("elflink.h", 3696, __PRETTY_FUNCTION__), (void) 0));

      ( (8 * hash_entry_size) == 8 ? ((void) (*((unsigned char *) (s->contents + hash_entry_size)) = (unsigned char) ((bfd_vma) dynsymcount))) : (8 * hash_entry_size) == 16 ? ((*((output_bfd)->xvec->bfd_putx16)) (((bfd_vma) dynsymcount),(s->contents + hash_entry_size))) : (8 * hash_entry_size) == 32 ? ((*((output_bfd)->xvec->bfd_putx32)) (((bfd_vma) dynsymcount),(s->contents + hash_entry_size))) : (8 * hash_entry_size) == 64 ? ((*((output_bfd)->xvec->bfd_putx64)) (((bfd_vma) dynsymcount), (s->contents + hash_entry_size))) : (_bfd_abort ("elflink.h", 3698, __PRETTY_FUNCTION__), (void) 0));


      ((struct elf_link_hash_table *) ((info)->hash))->bucketcount = bucketcount;

      s = bfd_get_section_by_name (dynobj, ".dynstr");
      { if (!(s != ((void *)0))) bfd_assert("elflink.h",3703); };

      elf_finalize_dynstr (output_bfd, info);

      s->_raw_size = _bfd_elf_strtab_size (((struct elf_link_hash_table *) ((info)->hash))->dynstr);

      for (dtagcount = 0; dtagcount <= info->spare_dynamic_tags; ++dtagcount)
        if (! bfd_elf64_add_dynamic_entry (info, (bfd_vma) 0, (bfd_vma) 0))
          return false;
    }

  return true;
}




static boolean elf_adjust_dynstr_offsets
(struct elf_link_hash_entry *, void *);

static boolean
elf_adjust_dynstr_offsets (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_strtab_hash *dynstr = (struct elf_strtab_hash *) data;

  if (h->dynindx != -1)
    h->dynstr_index = _bfd_elf_strtab_offset (dynstr, h->dynstr_index);
  return true;
}




static boolean
elf_finalize_dynstr (output_bfd, info)
     bfd *output_bfd;
     struct bfd_link_info *info;
{
  struct elf_link_local_dynamic_entry *entry;
  struct elf_strtab_hash *dynstr = ((struct elf_link_hash_table *) ((info)->hash))->dynstr;
  bfd *dynobj = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;
  asection *sdyn;
  bfd_size_type size;
  Elf64_External_Dyn *dyncon, *dynconend;

  _bfd_elf_strtab_finalize (dynstr);
  size = _bfd_elf_strtab_size (dynstr);


  sdyn = bfd_get_section_by_name (dynobj, ".dynamic");
  { if (!(sdyn != ((void *)0))) bfd_assert("elflink.h",3755); };

  dyncon = (Elf64_External_Dyn *) sdyn->contents;
  dynconend = (Elf64_External_Dyn *) (sdyn->contents +
                                    sdyn->_raw_size);
  for (; dyncon < dynconend; dyncon++)
    {
      Elf_Internal_Dyn dyn;

      bfd_elf64_swap_dyn_in (dynobj, dyncon, & dyn);
      switch (dyn.d_tag)
        {
        case 10:
          dyn.d_un.d_val = size;
          bfd_elf64_swap_dyn_out (dynobj, & dyn, dyncon);
          break;
        case 1:
        case 14:
        case 15:
        case 29:
        case 0x7fffffff:
        case 0x7ffffffd:
          dyn.d_un.d_val = _bfd_elf_strtab_offset (dynstr, dyn.d_un.d_val);
          bfd_elf64_swap_dyn_out (dynobj, & dyn, dyncon);
          break;
        default:
          break;
        }
    }


  for (entry = ((struct elf_link_hash_table *) ((info)->hash))->dynlocal; entry ; entry = entry->next)
    entry->isym.st_name = _bfd_elf_strtab_offset (dynstr,
                                                  entry->isym.st_name);


  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_adjust_dynstr_offsets), (dynstr)));



  if (((output_bfd) -> tdata.elf_obj_data)->cverdefs)
    {
      asection *s;
      bfd_byte *p;
      bfd_size_type i;
      Elf_Internal_Verdef def;
      Elf_Internal_Verdaux defaux;

      s = bfd_get_section_by_name (dynobj, ".gnu.version_d");
      p = (bfd_byte *) s->contents;
      do
        {
          _bfd_elf_swap_verdef_in (output_bfd, (Elf_External_Verdef *) p,
                                   &def);
          p += sizeof (Elf_External_Verdef);
          for (i = 0; i < def.vd_cnt; ++i)
            {
              _bfd_elf_swap_verdaux_in (output_bfd,
                                        (Elf_External_Verdaux *) p, &defaux);
              defaux.vda_name = _bfd_elf_strtab_offset (dynstr,
                                                        defaux.vda_name);
              _bfd_elf_swap_verdaux_out (output_bfd,
                                         &defaux, (Elf_External_Verdaux *) p);
              p += sizeof (Elf_External_Verdaux);
            }
        }
      while (def.vd_next);
    }


  if (((output_bfd) -> tdata.elf_obj_data)->verref)
    {
      asection *s;
      bfd_byte *p;
      bfd_size_type i;
      Elf_Internal_Verneed need;
      Elf_Internal_Vernaux needaux;

      s = bfd_get_section_by_name (dynobj, ".gnu.version_r");
      p = (bfd_byte *) s->contents;
      do
        {
          _bfd_elf_swap_verneed_in (output_bfd, (Elf_External_Verneed *) p,
                                    &need);
          need.vn_file = _bfd_elf_strtab_offset (dynstr, need.vn_file);
          _bfd_elf_swap_verneed_out (output_bfd, &need,
                                     (Elf_External_Verneed *) p);
          p += sizeof (Elf_External_Verneed);
          for (i = 0; i < need.vn_cnt; ++i)
            {
              _bfd_elf_swap_vernaux_in (output_bfd,
                                        (Elf_External_Vernaux *) p, &needaux);
              needaux.vna_name = _bfd_elf_strtab_offset (dynstr,
                                                         needaux.vna_name);
              _bfd_elf_swap_vernaux_out (output_bfd,
                                         &needaux,
                                         (Elf_External_Vernaux *) p);
              p += sizeof (Elf_External_Vernaux);
            }
        }
      while (need.vn_next);
    }

  return true;
}







static boolean
elf_fix_symbol_flags (h, eif)
     struct elf_link_hash_entry *h;
     struct elf_info_failed *eif;
{




  if ((h->elf_link_hash_flags & 0400) != 0)
    {
      while (h->root.type == bfd_link_hash_indirect)
        h = (struct elf_link_hash_entry *) h->root.u.i.link;

      if (h->root.type != bfd_link_hash_defined
          && h->root.type != bfd_link_hash_defweak)
        h->elf_link_hash_flags |= (01
                                   | 020);
      else
        {
          if (h->root.u.def.section->owner != ((void *)0)
              && (((h->root.u.def.section->owner)->xvec->flavour)
                  == bfd_target_elf_flavour))
            h->elf_link_hash_flags |= (01
                                       | 020);
          else
            h->elf_link_hash_flags |= 02;
        }

      if (h->dynindx == -1
          && ((h->elf_link_hash_flags & 010) != 0
              || (h->elf_link_hash_flags & 04) != 0))
        {
          if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
            {
              eif->failed = true;
              return false;
            }
        }
    }
  else
    {






      if ((h->root.type == bfd_link_hash_defined
           || h->root.type == bfd_link_hash_defweak)
          && (h->elf_link_hash_flags & 02) == 0
          && (h->root.u.def.section->owner != ((void *)0)
              ? (((h->root.u.def.section->owner)->xvec->flavour)
                 != bfd_target_elf_flavour)
              : (((h->root.u.def.section) == ((asection *) &bfd_abs_section))
                 && (h->elf_link_hash_flags
                     & 010) == 0)))
        h->elf_link_hash_flags |= 02;
    }






  if (h->root.type == bfd_link_hash_defined
      && (h->elf_link_hash_flags & 02) == 0
      && (h->elf_link_hash_flags & 01) != 0
      && (h->elf_link_hash_flags & 010) == 0
      && (h->root.u.def.section->owner->flags & 0x40) == 0)
    h->elf_link_hash_flags |= 02;
# 3947 "elflink.h"
  if ((h->elf_link_hash_flags & 0200) != 0
      && eif->info->shared
      && ((eif->info)->hash->type == bfd_link_elf_hash_table)
      && (eif->info->symbolic
          || ((h->other) & 0x3) == 1
          || ((h->other) & 0x3) == 2)
      && (h->elf_link_hash_flags & 02) != 0)
    {
      struct elf_backend_data *bed;

      bed = ((struct elf_backend_data *) (((struct elf_link_hash_table *) ((eif->info)->hash))->dynobj)->xvec->backend_data);
      if (((h->other) & 0x3) == 1
          || ((h->other) & 0x3) == 2)
        {
          h->elf_link_hash_flags |= 02000;
          _bfd_elf_strtab_delref (((struct elf_link_hash_table *) ((eif->info)->hash))->dynstr,
                                  h->dynstr_index);
        }
      (*bed->elf_backend_hide_symbol) (eif->info, h);
    }




  if (h->weakdef != ((void *)0))
    {
      struct elf_link_hash_entry *weakdef;

      { if (!(h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)) bfd_assert("elflink.h",3976); };

      weakdef = h->weakdef;
      { if (!(weakdef->root.type == bfd_link_hash_defined || weakdef->root.type == bfd_link_hash_defweak)) bfd_assert("elflink.h",3979); };

      { if (!(weakdef->elf_link_hash_flags & 010)) bfd_assert("elflink.h",3980); };




      if ((weakdef->elf_link_hash_flags & 02) != 0)
        h->weakdef = ((void *)0);
      else
        {
          struct elf_backend_data *bed;

          bed = ((struct elf_backend_data *) (((struct elf_link_hash_table *) ((eif->info)->hash))->dynobj)->xvec->backend_data);
          (*bed->elf_backend_copy_indirect_symbol) (weakdef, h);
        }
    }

  return true;
}





static boolean
elf_adjust_dynamic_symbol (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_info_failed *eif = (struct elf_info_failed *) data;
  bfd *dynobj;
  struct elf_backend_data *bed;


  if (h->root.type == bfd_link_hash_indirect)
    return true;

  if (! ((eif->info)->hash->type == bfd_link_elf_hash_table))
    return false;


  if (! elf_fix_symbol_flags (h, eif))
    return false;
# 4030 "elflink.h"
  if ((h->elf_link_hash_flags & 0200) == 0
      && ((h->elf_link_hash_flags & 02) != 0
          || (h->elf_link_hash_flags & 010) == 0
          || ((h->elf_link_hash_flags & 01) == 0
              && (h->weakdef == ((void *)0) || h->weakdef->dynindx == -1))))
    {
      h->plt.offset = (bfd_vma) -1;
      return true;
    }



  if ((h->elf_link_hash_flags & 040) != 0)
    return true;





  h->elf_link_hash_flags |= 040;
# 4079 "elflink.h"
  if (h->weakdef != ((void *)0))
    {




      h->weakdef->elf_link_hash_flags |= 01;

      if (! elf_adjust_dynamic_symbol (h->weakdef, (void *) eif))
        return false;
    }






  if (h->size == 0
      && h->type == 0
      && (h->elf_link_hash_flags & 0200) == 0)
    (*_bfd_error_handler)
      (dcgettext ("bfd", "warning: type and size of dynamic symbol `%s' are not defined", __LC_MESSAGES),
         h->root.root.string);

  dynobj = ((struct elf_link_hash_table *) ((eif->info)->hash))->dynobj;
  bed = ((struct elf_backend_data *) (dynobj)->xvec->backend_data);
  if (! (*bed->elf_backend_adjust_dynamic_symbol) (eif->info, h))
    {
      eif->failed = true;
      return false;
    }

  return true;
}




static boolean
elf_export_symbol (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_info_failed *eif = (struct elf_info_failed *) data;


  if (h->root.type == bfd_link_hash_indirect)
    return true;

  if (h->dynindx == -1
      && (h->elf_link_hash_flags
          & (02 | 01)) != 0)
    {
      struct bfd_elf_version_tree *t;
      struct bfd_elf_version_expr *d;

      for (t = eif->verdefs; t != ((void *)0); t = t->next)
        {
          if (t->globals != ((void *)0))
            {
              for (d = t->globals; d != ((void *)0); d = d->next)
                {
                  if ((*d->match) (d, h->root.root.string))
                    goto doit;
                }
            }

          if (t->locals != ((void *)0))
            {
              for (d = t->locals ; d != ((void *)0); d = d->next)
                {
                  if ((*d->match) (d, h->root.root.string))
                    return true;
                }
            }
        }

      if (!eif->verdefs)
        {
doit:
          if (! _bfd_elf_link_record_dynamic_symbol (eif->info, h))
            {
              eif->failed = true;
              return false;
            }
        }
    }

  return true;
}






static boolean
elf_link_find_version_dependencies (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_find_verdep_info *rinfo = (struct elf_find_verdep_info *) data;
  Elf_Internal_Verneed *t;
  Elf_Internal_Vernaux *a;
  bfd_size_type amt;



  if ((h->elf_link_hash_flags & 010) == 0
      || (h->elf_link_hash_flags & 02) != 0
      || h->dynindx == -1
      || h->verinfo.verdef == ((void *)0))
    return true;


  for (t = ((rinfo->output_bfd) -> tdata.elf_obj_data)->verref; t != ((void *)0); t = t->vn_nextref)
    {
      if (t->vn_bfd != h->verinfo.verdef->vd_bfd)
        continue;

      for (a = t->vn_auxptr; a != ((void *)0); a = a->vna_nextptr)
        if (a->vna_nodename == h->verinfo.verdef->vd_nodename)
          return true;

      break;
    }



  if (t == ((void *)0))
    {
      amt = sizeof *t;
      t = (Elf_Internal_Verneed *) bfd_zalloc (rinfo->output_bfd, amt);
      if (t == ((void *)0))
        {
          rinfo->failed = true;
          return false;
        }

      t->vn_bfd = h->verinfo.verdef->vd_bfd;
      t->vn_nextref = ((rinfo->output_bfd) -> tdata.elf_obj_data)->verref;
      ((rinfo->output_bfd) -> tdata.elf_obj_data)->verref = t;
    }

  amt = sizeof *a;
  a = (Elf_Internal_Vernaux *) bfd_zalloc (rinfo->output_bfd, amt);





  a->vna_nodename = h->verinfo.verdef->vd_nodename;

  a->vna_flags = h->verinfo.verdef->vd_flags;
  a->vna_nextptr = t->vn_auxptr;

  h->verinfo.verdef->vd_exp_refno = rinfo->vers;
  ++rinfo->vers;

  a->vna_other = h->verinfo.verdef->vd_exp_refno + 1;

  t->vn_auxptr = a;

  return true;
}






static boolean
elf_link_assign_sym_version (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_assign_sym_version_info *sinfo;
  struct bfd_link_info *info;
  struct elf_backend_data *bed;
  struct elf_info_failed eif;
  char *p;
  bfd_size_type amt;

  sinfo = (struct elf_assign_sym_version_info *) data;
  info = sinfo->info;


  eif.failed = false;
  eif.info = info;
  if (! elf_fix_symbol_flags (h, &eif))
    {
      if (eif.failed)
        sinfo->failed = true;
      return false;
    }



  if ((h->elf_link_hash_flags & 02) == 0)
    return true;

  bed = ((struct elf_backend_data *) (sinfo->output_bfd)->xvec->backend_data);
  p = (__extension__ (__builtin_constant_p ('@') && ('@') == '\0' ? (char *) __rawmemchr (h->root.root.string, '@') : strchr (h->root.root.string, '@')));
  if (p != ((void *)0) && h->verinfo.vertree == ((void *)0))
    {
      struct bfd_elf_version_tree *t;
      boolean hidden;

      hidden = true;



      ++p;
      if (*p == '@')
        {
          hidden = false;
          ++p;
        }


      if (*p == '\0')
        {
          if (hidden)
            h->elf_link_hash_flags |= 01000;
          return true;
        }


      for (t = sinfo->verdefs; t != ((void *)0); t = t->next)
        {
          if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (t->name) && __builtin_constant_p (p) && (__s1_len = strlen (t->name), __s2_len = strlen (p), (!((size_t)(const void *)((t->name) + 1) - (size_t)(const void *)(t->name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((p) + 1) - (size_t)(const void *)(p) == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (t->name), (__const char *) (p), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (t->name) && ((size_t)(const void *)((t->name) + 1) - (size_t)(const void *)(t->name) == 1) && (__s1_len = strlen (t->name), __s1_len < 4) ? (__builtin_constant_p (p) && ((size_t)(const void *)((p) + 1) - (size_t)(const void *)(p) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (t->name))[0] - ((__const unsigned char *) (__const char *)(p))[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->!
name))[1] - ((__const unsigned char *) (__const char *) (p))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->name))[2] - ((__const unsigned char *) (__const char *) (p))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (t->name))[3] - ((__const unsigned char *) (__const char *) (p))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (p); register int __result = (((__const unsigned char *) (__const char *) (t->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (t->name))[3] - __s2[3]); } } __result; }))) : (__builtin_c!
onstant_p (p) && ((size_t)(const void *)((p) + 1) - (size_t)(!
const void *)(p) == 1) && (__s2_len = strlen (p), __s2_len < 4) ? (__builtin_constant_p (t->name) && ((size_t)(const void *)((t->name) + 1) - (size_t)(const void *)(t->name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (t->name))[0] - ((__const unsigned char *) (__const char *)(p))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->name))[1] - ((__const unsigned char *) (__const char *) (p))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (t->name))[2] - ((__const unsigned char *) (__const char *) (p))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (t->name))[3] - ((__const unsigned char *) (__const char *) (p))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (t->name); register int __result = __s1[0] - ((__cons!
t unsigned char *) (__const char *) (p))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (p))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (p))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (p))[3]); } } __result; }))) : strcmp (t->name, p)))); }) == 0)
            {
              size_t len;
              char *alc;
              struct bfd_elf_version_expr *d;

              len = p - h->root.root.string;
              alc = bfd_alloc (sinfo->output_bfd, (bfd_size_type) len);
              if (alc == ((void *)0))
                return false;
              (__extension__ (__builtin_constant_p (h->root.root.string) && __builtin_constant_p (len - 1) ? (strlen (h->root.root.string) + 1 >= ((size_t) (len - 1)) ? (char *) memcpy (alc, h->root.root.string, len - 1) : strncpy (alc, h->root.root.string, len - 1)) : strncpy (alc, h->root.root.string, len - 1)));
              alc[len - 1] = '\0';
              if (alc[len - 2] == '@')
                alc[len - 2] = '\0';

              h->verinfo.vertree = t;
              t->used = true;
              d = ((void *)0);

              if (t->globals != ((void *)0))
                {
                  for (d = t->globals; d != ((void *)0); d = d->next)
                    if ((*d->match) (d, alc))
                      break;
                }



              if (d == ((void *)0) && t->locals != ((void *)0))
                {
                  for (d = t->locals; d != ((void *)0); d = d->next)
                    {
                      if ((*d->match) (d, alc))
                        {
                          if (h->dynindx != -1
                              && info->shared
                              && ! info->export_dynamic)
                            {
                              h->elf_link_hash_flags |= 02000;
                              (*bed->elf_backend_hide_symbol) (info, h);
                              _bfd_elf_strtab_delref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                                      h->dynstr_index);
                            }

                          break;
                        }
                    }
                }

              bfd_release (sinfo->output_bfd, alc);
              break;
            }
        }



      if (t == ((void *)0) && ! info->shared)
        {
          struct bfd_elf_version_tree **pp;
          int version_index;



          if (h->dynindx == -1)
            return true;

          amt = sizeof *t;
          t = ((struct bfd_elf_version_tree *)
               bfd_alloc (sinfo->output_bfd, amt));
          if (t == ((void *)0))
            {
              sinfo->failed = true;
              return false;
            }

          t->next = ((void *)0);
          t->name = p;
          t->globals = ((void *)0);
          t->locals = ((void *)0);
          t->deps = ((void *)0);
          t->name_indx = (unsigned int) -1;
          t->used = true;

          version_index = 1;
          for (pp = &sinfo->verdefs; *pp != ((void *)0); pp = &(*pp)->next)
            ++version_index;
          t->vernum = version_index;

          *pp = t;

          h->verinfo.vertree = t;
        }
      else if (t == ((void *)0))
        {


          (*_bfd_error_handler)
            (dcgettext ("bfd", "%s: undefined versioned symbol name %s", __LC_MESSAGES),
             ((char *) (sinfo->output_bfd)->filename), h->root.root.string);
          bfd_set_error (bfd_error_bad_value);
          sinfo->failed = true;
          return false;
        }

      if (hidden)
        h->elf_link_hash_flags |= 01000;
    }



  if (h->verinfo.vertree == ((void *)0) && sinfo->verdefs != ((void *)0))
    {
      struct bfd_elf_version_tree *t;
      struct bfd_elf_version_tree *deflt;
      struct bfd_elf_version_expr *d;




      deflt = ((void *)0);
      for (t = sinfo->verdefs; t != ((void *)0); t = t->next)
        {
          if (t->globals != ((void *)0))
            {
              for (d = t->globals; d != ((void *)0); d = d->next)
                {
                  if ((*d->match) (d, h->root.root.string))
                    {
                      h->verinfo.vertree = t;
                      break;
                    }
                }

              if (d != ((void *)0))
                break;
            }

          if (t->locals != ((void *)0))
            {
              for (d = t->locals; d != ((void *)0); d = d->next)
                {
                  if (d->pattern[0] == '*' && d->pattern[1] == '\0')
                    deflt = t;
                  else if ((*d->match) (d, h->root.root.string))
                    {
                      h->verinfo.vertree = t;
                      if (h->dynindx != -1
                          && info->shared
                          && ! info->export_dynamic)
                        {
                          h->elf_link_hash_flags |= 02000;
                          (*bed->elf_backend_hide_symbol) (info, h);
                          _bfd_elf_strtab_delref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                                  h->dynstr_index);
                        }
                      break;
                    }
                }

              if (d != ((void *)0))
                break;
            }
        }

      if (deflt != ((void *)0) && h->verinfo.vertree == ((void *)0))
        {
          h->verinfo.vertree = deflt;
          if (h->dynindx != -1
              && info->shared
              && ! info->export_dynamic)
            {
              h->elf_link_hash_flags |= 02000;
              (*bed->elf_backend_hide_symbol) (info, h);
              _bfd_elf_strtab_delref (((struct elf_link_hash_table *) ((info)->hash))->dynstr,
                                      h->dynstr_index);
            }
        }
    }

  return true;
}





struct elf_final_link_info
{

  struct bfd_link_info *info;

  bfd *output_bfd;

  struct bfd_strtab_hash *symstrtab;

  asection *dynsym_sec;

  asection *hash_sec;

  asection *symver_sec;

  bfd_byte *contents;

  void * external_relocs;

  Elf_Internal_Rela *internal_relocs;


  Elf64_External_Sym *external_syms;


  Elf_Internal_Sym *internal_syms;


  long *indices;


  asection **sections;

  Elf64_External_Sym *symbuf;

  size_t symbuf_count;

  size_t symbuf_size;
};

static boolean elf_link_output_sym
  (struct elf_final_link_info *, const char *, Elf_Internal_Sym *, asection *);

static boolean elf_link_flush_output_syms
  (struct elf_final_link_info *);
static boolean elf_link_output_extsym
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_sec_merge_syms
  (struct elf_link_hash_entry *, void *);
static boolean elf_link_input_bfd
  (struct elf_final_link_info *, bfd *);
static boolean elf_reloc_link_order
  (bfd *, struct bfd_link_info *, asection *, struct bfd_link_order *);




struct elf_outext_info
{
  boolean failed;
  boolean localsyms;
  struct elf_final_link_info *finfo;
};




static boolean
elf_link_size_reloc_section (abfd, rel_hdr, o)
     bfd *abfd;
     Elf_Internal_Shdr *rel_hdr;
     asection *o;
{
  bfd_size_type reloc_count;
  bfd_size_type num_rel_hashes;


  if (rel_hdr == &((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr)
    reloc_count = ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count;
  else
    reloc_count = ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count2;

  num_rel_hashes = o->reloc_count;
  if (num_rel_hashes < reloc_count)
    num_rel_hashes = reloc_count;


  rel_hdr->sh_size = rel_hdr->sh_entsize * reloc_count;





  rel_hdr->contents = (void *) bfd_zalloc (abfd, rel_hdr->sh_size);
  if (rel_hdr->contents == ((void *)0) && rel_hdr->sh_size != 0)
    return false;



  if (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes == ((void *)0)
      && num_rel_hashes)
    {
      struct elf_link_hash_entry **p;

      p = ((struct elf_link_hash_entry **)
           bfd_zmalloc (num_rel_hashes
                        * sizeof (struct elf_link_hash_entry *)));
      if (p == ((void *)0))
        return false;

      ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes = p;
    }

  return true;
}






static void
elf_link_adjust_relocs (abfd, rel_hdr, count, rel_hash)
     bfd *abfd;
     Elf_Internal_Shdr *rel_hdr;
     unsigned int count;
     struct elf_link_hash_entry **rel_hash;
{
  unsigned int i;
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  Elf_Internal_Rel *irel;
  Elf_Internal_Rela *irela;
  bfd_size_type amt = sizeof (Elf_Internal_Rel) * bed->s->int_rels_per_ext_rel;

  irel = (Elf_Internal_Rel *) bfd_zmalloc (amt);
  if (irel == ((void *)0))
    {
      (*_bfd_error_handler) (dcgettext ("bfd", "Error: out of memory", __LC_MESSAGES));
      _bfd_abort ("elflink.h", 4633, __PRETTY_FUNCTION__);
    }

  amt = sizeof (Elf_Internal_Rela) * bed->s->int_rels_per_ext_rel;
  irela = (Elf_Internal_Rela *) bfd_zmalloc (amt);
  if (irela == ((void *)0))
    {
      (*_bfd_error_handler) (dcgettext ("bfd", "Error: out of memory", __LC_MESSAGES));
      _bfd_abort ("elflink.h", 4641, __PRETTY_FUNCTION__);
    }

  for (i = 0; i < count; i++, rel_hash++)
    {
      if (*rel_hash == ((void *)0))
        continue;

      { if (!((*rel_hash)->indx >= 0)) bfd_assert("elflink.h",4649); };

      if (rel_hdr->sh_entsize == sizeof (Elf64_External_Rel))
        {
          Elf64_External_Rel *erel;
          unsigned int j;

          erel = (Elf64_External_Rel *) rel_hdr->contents + i;
          if (bed->s->swap_reloc_in)
            (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, irel);
          else
            bfd_elf64_swap_reloc_in (abfd, erel, irel);

          for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
            irel[j].r_info = (((bfd_vma) ((*rel_hash)->indx) << 32) + (bfd_vma) (((irel[j].r_info) & 0xffffffff)));


          if (bed->s->swap_reloc_out)
            (*bed->s->swap_reloc_out) (abfd, irel, (bfd_byte *) erel);
          else
            bfd_elf64_swap_reloc_out (abfd, irel, erel);
        }
      else
        {
          Elf64_External_Rela *erela;
          unsigned int j;

          { if (!(rel_hdr->sh_entsize == sizeof (Elf64_External_Rela))) bfd_assert("elflink.h",4677); };


          erela = (Elf64_External_Rela *) rel_hdr->contents + i;
          if (bed->s->swap_reloca_in)
            (*bed->s->swap_reloca_in) (abfd, (bfd_byte *) erela, irela);
          else
            bfd_elf64_swap_reloca_in (abfd, erela, irela);

          for (j = 0; j < bed->s->int_rels_per_ext_rel; j++)
            irela[j].r_info = (((bfd_vma) ((*rel_hash)->indx) << 32) + (bfd_vma) (((irela[j].r_info) & 0xffffffff)));


          if (bed->s->swap_reloca_out)
            (*bed->s->swap_reloca_out) (abfd, irela, (bfd_byte *) erela);
          else
            bfd_elf64_swap_reloca_out (abfd, irela, erela);
        }
    }

  free (irel);
  free (irela);
}

struct elf_link_sort_rela {
  bfd_vma offset;
  enum elf_reloc_type_class type;
  union {
    Elf_Internal_Rel rel;
    Elf_Internal_Rela rela;
  } u;
};

static int
elf_link_sort_cmp1 (A, B)
     const void * A;
     const void * B;
{
  struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A;
  struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B;
  int relativea, relativeb;

  relativea = a->type == reloc_class_relative;
  relativeb = b->type == reloc_class_relative;

  if (relativea < relativeb)
    return 1;
  if (relativea > relativeb)
    return -1;
  if (((a->u.rel.r_info) >> 32) < ((b->u.rel.r_info) >> 32))
    return -1;
  if (((a->u.rel.r_info) >> 32) > ((b->u.rel.r_info) >> 32))
    return 1;
  if (a->u.rel.r_offset < b->u.rel.r_offset)
    return -1;
  if (a->u.rel.r_offset > b->u.rel.r_offset)
    return 1;
  return 0;
}

static int
elf_link_sort_cmp2 (A, B)
     const void * A;
     const void * B;
{
  struct elf_link_sort_rela *a = (struct elf_link_sort_rela *) A;
  struct elf_link_sort_rela *b = (struct elf_link_sort_rela *) B;
  int copya, copyb;

  if (a->offset < b->offset)
    return -1;
  if (a->offset > b->offset)
    return 1;
  copya = (a->type == reloc_class_copy) * 2 + (a->type == reloc_class_plt);
  copyb = (b->type == reloc_class_copy) * 2 + (b->type == reloc_class_plt);
  if (copya < copyb)
    return -1;
  if (copya > copyb)
    return 1;
  if (a->u.rel.r_offset < b->u.rel.r_offset)
    return -1;
  if (a->u.rel.r_offset > b->u.rel.r_offset)
    return 1;
  return 0;
}

static size_t
elf_link_sort_relocs (abfd, info, psec)
     bfd *abfd;
     struct bfd_link_info *info;
     asection **psec;
{
  bfd *dynobj = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;
  asection *reldyn, *o;
  boolean rel = false;
  bfd_size_type count, size;
  size_t i, j, ret;
  struct elf_link_sort_rela *rela;
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);

  reldyn = bfd_get_section_by_name (abfd, ".rela.dyn");
  if (reldyn == ((void *)0) || reldyn->_raw_size == 0)
    {
      reldyn = bfd_get_section_by_name (abfd, ".rel.dyn");
      if (reldyn == ((void *)0) || reldyn->_raw_size == 0)
        return 0;
      rel = true;
      count = reldyn->_raw_size / sizeof (Elf64_External_Rel);
    }
  else
    count = reldyn->_raw_size / sizeof (Elf64_External_Rela);

  size = 0;
  for (o = dynobj->sections; o != ((void *)0); o = o->next)
    if ((o->flags & (0x200|0x800000))
        == (0x200|0x800000)
        && o->output_section == reldyn)
      size += o->_raw_size;

  if (size != reldyn->_raw_size)
    return 0;

  rela = (struct elf_link_sort_rela *) bfd_zmalloc (sizeof (*rela) * count);
  if (rela == ((void *)0))
    {
      (*info->callbacks->warning)
        (info, dcgettext ("bfd", "Not enough memory to sort relocations", __LC_MESSAGES), 0, abfd, 0,
         (bfd_vma) 0);
      return 0;
    }

  for (o = dynobj->sections; o != ((void *)0); o = o->next)
    if ((o->flags & (0x200|0x800000))
        == (0x200|0x800000)
        && o->output_section == reldyn)
      {
        if (rel)
          {
            Elf64_External_Rel *erel, *erelend;
            struct elf_link_sort_rela *s;

            erel = (Elf64_External_Rel *) o->contents;
            erelend = (Elf64_External_Rel *) (o->contents + o->_raw_size);
            s = rela + o->output_offset / sizeof (Elf64_External_Rel);
            for (; erel < erelend; erel++, s++)
              {
                if (bed->s->swap_reloc_in)
                  (*bed->s->swap_reloc_in) (abfd, (bfd_byte *) erel, &s->u.rel);
                else
                  bfd_elf64_swap_reloc_in (abfd, erel, &s->u.rel);

                s->type = (*bed->elf_backend_reloc_type_class) (&s->u.rela);
              }
          }
        else
          {
            Elf64_External_Rela *erela, *erelaend;
            struct elf_link_sort_rela *s;

            erela = (Elf64_External_Rela *) o->contents;
            erelaend = (Elf64_External_Rela *) (o->contents + o->_raw_size);
            s = rela + o->output_offset / sizeof (Elf64_External_Rela);
            for (; erela < erelaend; erela++, s++)
              {
                if (bed->s->swap_reloca_in)
                  (*bed->s->swap_reloca_in) (dynobj, (bfd_byte *) erela,
                                             &s->u.rela);
                else
                  bfd_elf64_swap_reloca_in (dynobj, erela, &s->u.rela);

                s->type = (*bed->elf_backend_reloc_type_class) (&s->u.rela);
              }
          }
      }

  qsort (rela, (size_t) count, sizeof (*rela), elf_link_sort_cmp1);
  for (ret = 0; ret < count && rela[ret].type == reloc_class_relative; ret++)
    ;
  for (i = ret, j = ret; i < count; i++)
    {
      if (((rela[i].u.rel.r_info) >> 32) != ((rela[j].u.rel.r_info) >> 32))
        j = i;
      rela[i].offset = rela[j].u.rel.r_offset;
    }
  qsort (rela + ret, (size_t) count - ret, sizeof (*rela), elf_link_sort_cmp2);

  for (o = dynobj->sections; o != ((void *)0); o = o->next)
    if ((o->flags & (0x200|0x800000))
        == (0x200|0x800000)
        && o->output_section == reldyn)
      {
        if (rel)
          {
            Elf64_External_Rel *erel, *erelend;
            struct elf_link_sort_rela *s;

            erel = (Elf64_External_Rel *) o->contents;
            erelend = (Elf64_External_Rel *) (o->contents + o->_raw_size);
            s = rela + o->output_offset / sizeof (Elf64_External_Rel);
            for (; erel < erelend; erel++, s++)
              {
                if (bed->s->swap_reloc_out)
                  (*bed->s->swap_reloc_out) (abfd, &s->u.rel,
                                             (bfd_byte *) erel);
                else
                  bfd_elf64_swap_reloc_out (abfd, &s->u.rel, erel);
              }
          }
        else
          {
            Elf64_External_Rela *erela, *erelaend;
            struct elf_link_sort_rela *s;

            erela = (Elf64_External_Rela *) o->contents;
            erelaend = (Elf64_External_Rela *) (o->contents + o->_raw_size);
            s = rela + o->output_offset / sizeof (Elf64_External_Rela);
            for (; erela < erelaend; erela++, s++)
              {
                if (bed->s->swap_reloca_out)
                  (*bed->s->swap_reloca_out) (dynobj, &s->u.rela,
                                              (bfd_byte *) erela);
                else
                  bfd_elf64_swap_reloca_out (dynobj, &s->u.rela, erela);
              }
          }
      }

  free (rela);
  *psec = reldyn;
  return ret;
}



boolean
bfd_elf64_bfd_final_link (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  boolean dynamic;
  boolean emit_relocs;
  bfd *dynobj;
  struct elf_final_link_info finfo;
  register asection *o;
  register struct bfd_link_order *p;
  register bfd *sub;
  bfd_size_type max_contents_size;
  bfd_size_type max_external_reloc_size;
  bfd_size_type max_internal_reloc_count;
  bfd_size_type max_sym_count;
  file_ptr off;
  Elf_Internal_Sym elfsym;
  unsigned int i;
  Elf_Internal_Shdr *symtab_hdr;
  Elf_Internal_Shdr *symstrtab_hdr;
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  struct elf_outext_info eoinfo;
  boolean merged;
  size_t relativecount = 0;
  asection *reldyn = 0;
  bfd_size_type amt;

  if (! ((info)->hash->type == bfd_link_elf_hash_table))
    return false;

  if (info->shared)
    abfd->flags |= 0x40;

  dynamic = ((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created;
  dynobj = ((struct elf_link_hash_table *) ((info)->hash))->dynobj;

  emit_relocs = (info->relocateable
                 || info->emitrelocations
                 || bed->elf_backend_emit_relocs);

  finfo.info = info;
  finfo.output_bfd = abfd;
  finfo.symstrtab = _bfd_elf_stringtab_init ();
  if (finfo.symstrtab == ((void *)0))
    return false;

  if (! dynamic)
    {
      finfo.dynsym_sec = ((void *)0);
      finfo.hash_sec = ((void *)0);
      finfo.symver_sec = ((void *)0);
    }
  else
    {
      finfo.dynsym_sec = bfd_get_section_by_name (dynobj, ".dynsym");
      finfo.hash_sec = bfd_get_section_by_name (dynobj, ".hash");
      { if (!(finfo.dynsym_sec != ((void *)0) && finfo.hash_sec != ((void *)0))) bfd_assert("elflink.h",4967); };
      finfo.symver_sec = bfd_get_section_by_name (dynobj, ".gnu.version");

    }

  finfo.contents = ((void *)0);
  finfo.external_relocs = ((void *)0);
  finfo.internal_relocs = ((void *)0);
  finfo.external_syms = ((void *)0);
  finfo.internal_syms = ((void *)0);
  finfo.indices = ((void *)0);
  finfo.sections = ((void *)0);
  finfo.symbuf = ((void *)0);
  finfo.symbuf_count = 0;




  max_contents_size = 0;
  max_external_reloc_size = 0;
  max_internal_reloc_count = 0;
  max_sym_count = 0;
  merged = false;
  for (o = abfd->sections; o != (asection *) ((void *)0); o = o->next)
    {
      o->reloc_count = 0;

      for (p = o->link_order_head; p != ((void *)0); p = p->next)
        {
          if (p->type == bfd_section_reloc_link_order
              || p->type == bfd_symbol_reloc_link_order)
            ++o->reloc_count;
          else if (p->type == bfd_indirect_link_order)
            {
              asection *sec;

              sec = p->u.indirect.section;





              sec->linker_mark = true;

              if (sec->flags & 0x20000000)
                merged = true;

              if (info->relocateable || info->emitrelocations)
                o->reloc_count += sec->reloc_count;
              else if (bed->elf_backend_count_relocs)
                {
                  Elf_Internal_Rela * relocs;

                  relocs = (_bfd_elf64_link_read_relocs
                            (abfd, sec, (void *) ((void *)0),
                             (Elf_Internal_Rela *) ((void *)0), info->keep_memory));

                  o->reloc_count += (*bed->elf_backend_count_relocs)
                                      (sec, relocs);

                  if (!info->keep_memory)
                    free (relocs);
                }

              if (sec->_raw_size > max_contents_size)
                max_contents_size = sec->_raw_size;
              if (sec->_cooked_size > max_contents_size)
                max_contents_size = sec->_cooked_size;



              if (((sec->owner)->xvec->flavour) == bfd_target_elf_flavour
                  && (sec->owner->flags & 0x40) == 0)
                {
                  size_t sym_count;

                  if ((((sec->owner) -> tdata.elf_obj_data) -> bad_symtab))
                    sym_count = (((sec->owner) -> tdata.elf_obj_data)->symtab_hdr.sh_size
                                 / sizeof (Elf64_External_Sym));
                  else
                    sym_count = ((sec->owner) -> tdata.elf_obj_data)->symtab_hdr.sh_info;

                  if (sym_count > max_sym_count)
                    max_sym_count = sym_count;

                  if ((sec->flags & 0x004) != 0)
                    {
                      size_t ext_size;

                      ext_size = ((struct bfd_elf_section_data*)sec->used_by_bfd)->rel_hdr.sh_size;
                      if (ext_size > max_external_reloc_size)
                        max_external_reloc_size = ext_size;
                      if (sec->reloc_count > max_internal_reloc_count)
                        max_internal_reloc_count = sec->reloc_count;
                    }
                }
            }
        }

      if (o->reloc_count > 0)
        o->flags |= 0x004;
      else
        {



          o->flags &=~ 0x004;
        }





      if ((o->flags & 0x001) == 0
          && ! o->user_set_vma)
        o->vma = 0;
    }

  if (! info->relocateable && merged)
    (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_link_sec_merge_syms), ((void *) abfd)));





  ((abfd)->symcount) = info->strip == strip_all ? 0 : 1;
  { if (!(! abfd->output_has_begun)) bfd_assert("elflink.h",5093); };
  if (! _bfd_elf_compute_section_file_positions (abfd, info))
    goto error_return;




  if (emit_relocs)
    for (sub = info->input_bfds; sub != ((void *)0); sub = sub->link_next)
      for (o = sub->sections; o != ((void *)0); o = o->next)
        {
          asection *output_section;

          if (! o->linker_mark)
            {

              continue;
            }

          output_section = o->output_section;

          if (output_section != ((void *)0)
              && (o->flags & 0x004) != 0)
            {
              struct bfd_elf_section_data *esdi
                = ((struct bfd_elf_section_data*)o->used_by_bfd);
              struct bfd_elf_section_data *esdo
                = ((struct bfd_elf_section_data*)output_section->used_by_bfd);
              unsigned int *rel_count;
              unsigned int *rel_count2;



              if (esdi->rel_hdr.sh_entsize == esdo->rel_hdr.sh_entsize)
                {
                  rel_count = &esdo->rel_count;
                  rel_count2 = &esdo->rel_count2;
                }
              else
                {
                  rel_count = &esdo->rel_count2;
                  rel_count2 = &esdo->rel_count;
                }

              *rel_count += ((& esdi->rel_hdr)->sh_size / (& esdi->rel_hdr)->sh_entsize);
              if (esdi->rel_hdr2)
                *rel_count2 += ((esdi->rel_hdr2)->sh_size / (esdi->rel_hdr2)->sh_entsize);
              output_section->flags |= 0x004;
            }
        }



  for (o = abfd->sections; o != ((void *)0); o = o->next)
    {
      if ((o->flags & 0x004) != 0)
        {
          if (!elf_link_size_reloc_section (abfd,
                                            &((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr,
                                            o))
            goto error_return;

          if (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2
              && !elf_link_size_reloc_section (abfd,
                                               ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2,
                                               o))
            goto error_return;
        }



      ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count = 0;
      ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count2 = 0;
    }

  _bfd_elf_assign_file_positions_for_relocs (abfd);





  ((abfd)->symcount) = 0;
  symtab_hdr = &((abfd) -> tdata.elf_obj_data)->symtab_hdr;

  symtab_hdr->sh_type = 2;
  symtab_hdr->sh_flags = 0;
  symtab_hdr->sh_addr = 0;
  symtab_hdr->sh_size = 0;
  symtab_hdr->sh_entsize = sizeof (Elf64_External_Sym);



  symtab_hdr->sh_addralign = bed->s->file_align;

  off = ((abfd) -> tdata.elf_obj_data)->next_file_pos;
  off = _bfd_elf_assign_file_position_for_section (symtab_hdr, off, true);







  if (! info->keep_memory || max_sym_count < 20)
    finfo.symbuf_size = 20;
  else
    finfo.symbuf_size = max_sym_count;
  amt = finfo.symbuf_size;
  amt *= sizeof (Elf64_External_Sym);
  finfo.symbuf = (Elf64_External_Sym *) bfd_malloc (amt);
  if (finfo.symbuf == ((void *)0))
    goto error_return;



  if (info->strip != strip_all
      || emit_relocs)
    {
      elfsym.st_value = 0;
      elfsym.st_size = 0;
      elfsym.st_info = 0;
      elfsym.st_other = 0;
      elfsym.st_shndx = 0;
      if (! elf_link_output_sym (&finfo, (const char *) ((void *)0),
                                 &elfsym, ((asection *) &bfd_und_section)))
        goto error_return;
    }
# 5242 "elflink.h"
  if (info->strip != strip_all
      || emit_relocs)
    {
      elfsym.st_size = 0;
      elfsym.st_info = (((0) << 4) + ((3) & 0xF));
      elfsym.st_other = 0;
      for (i = 1; i < (((abfd) -> tdata.elf_obj_data) -> elf_header)->e_shnum; i++)
        {
          o = bfd_section_from_elf_index (abfd, i);
          if (o != ((void *)0))
            o->target_index = ((abfd)->symcount);
          elfsym.st_shndx = i;
          if (info->relocateable || o == ((void *)0))
            elfsym.st_value = 0;
          else
            elfsym.st_value = o->vma;
          if (! elf_link_output_sym (&finfo, (const char *) ((void *)0),
                                     &elfsym, o))
            goto error_return;
        }
    }



  finfo.contents = (bfd_byte *) bfd_malloc (max_contents_size);
  finfo.external_relocs = (void *) bfd_malloc (max_external_reloc_size);
  finfo.internal_relocs = ((Elf_Internal_Rela *)
                           bfd_malloc (max_internal_reloc_count
                                       * sizeof (Elf_Internal_Rela)
                                       * bed->s->int_rels_per_ext_rel));
  finfo.external_syms = ((Elf64_External_Sym *)
                         bfd_malloc (max_sym_count
                                     * sizeof (Elf64_External_Sym)));
  finfo.internal_syms = ((Elf_Internal_Sym *)
                         bfd_malloc (max_sym_count
                                     * sizeof (Elf_Internal_Sym)));
  finfo.indices = (long *) bfd_malloc (max_sym_count * sizeof (long));
  finfo.sections = ((asection **)
                    bfd_malloc (max_sym_count * sizeof (asection *)));
  if ((finfo.contents == ((void *)0) && max_contents_size != 0)
      || (finfo.external_relocs == ((void *)0) && max_external_reloc_size != 0)
      || (finfo.internal_relocs == ((void *)0) && max_internal_reloc_count != 0)
      || (finfo.external_syms == ((void *)0) && max_sym_count != 0)
      || (finfo.internal_syms == ((void *)0) && max_sym_count != 0)
      || (finfo.indices == ((void *)0) && max_sym_count != 0)
      || (finfo.sections == ((void *)0) && max_sym_count != 0))
    goto error_return;
# 5310 "elflink.h"
  for (sub = info->input_bfds; sub != ((void *)0); sub = sub->link_next)
    sub->output_has_begun = false;
  for (o = abfd->sections; o != ((void *)0); o = o->next)
    {
      for (p = o->link_order_head; p != ((void *)0); p = p->next)
        {
          if (p->type == bfd_indirect_link_order
              && (((p->u.indirect.section->owner)->xvec->flavour)
                  == bfd_target_elf_flavour))
            {
              sub = p->u.indirect.section->owner;
              if (! sub->output_has_begun)
                {
                  if (! elf_link_input_bfd (&finfo, sub))
                    goto error_return;
                  sub->output_has_begun = true;
                }
            }
          else if (p->type == bfd_section_reloc_link_order
                   || p->type == bfd_symbol_reloc_link_order)
            {
              if (! elf_reloc_link_order (abfd, info, o, p))
                goto error_return;
            }
          else
            {
              if (! _bfd_default_link_order (abfd, info, o, p))
                goto error_return;
            }
        }
    }






  if (info->shared)
    {






      eoinfo.failed = false;
      eoinfo.finfo = &finfo;
      eoinfo.localsyms = true;
      (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_link_output_extsym), ((void *) &eoinfo)));

      if (eoinfo.failed)
        return false;
    }


  symtab_hdr->sh_info = ((abfd)->symcount);

  if (dynamic
      && finfo.dynsym_sec->output_section != ((asection *) &bfd_abs_section))
    {
      Elf_Internal_Sym sym;
      Elf64_External_Sym *dynsym =
        (Elf64_External_Sym *) finfo.dynsym_sec->contents;
      long last_local = 0;


      if (info->shared)
        {
          asection *s;

          sym.st_size = 0;
          sym.st_name = 0;
          sym.st_info = (((0) << 4) + ((3) & 0xF));
          sym.st_other = 0;

          for (s = abfd->sections; s != ((void *)0); s = s->next)
            {
              int indx;
              indx = ((struct bfd_elf_section_data*)s->used_by_bfd)->this_idx;
              { if (!(indx > 0)) bfd_assert("elflink.h",5389); };
              sym.st_shndx = indx;
              sym.st_value = s->vma;

              bfd_elf64_swap_symbol_out (abfd, &sym,
                                   dynsym + ((struct bfd_elf_section_data*)s->used_by_bfd)->dynindx);
            }

          last_local = ((abfd)->section_count);
        }


      if (((struct elf_link_hash_table *) ((info)->hash))->dynlocal)
        {
          struct elf_link_local_dynamic_entry *e;
          for (e = ((struct elf_link_hash_table *) ((info)->hash))->dynlocal; e ; e = e->next)
            {
              asection *s;

              sym.st_size = e->isym.st_size;
              sym.st_other = e->isym.st_other;




              sym = e->isym;

              if (e->isym.st_shndx > 0 && e->isym.st_shndx < 0xFF00)
                {
                  s = bfd_section_from_elf_index (e->input_bfd,
                                                  e->isym.st_shndx);

                  sym.st_shndx =
                    ((struct bfd_elf_section_data*)s->output_section->used_by_bfd)->this_idx;
                  sym.st_value = (s->output_section->vma
                                  + s->output_offset
                                  + e->isym.st_value);
                }

              if (last_local < e->dynindx)
                last_local = e->dynindx;

              bfd_elf64_swap_symbol_out (abfd, &sym, dynsym + e->dynindx);
            }
        }

      ((struct bfd_elf_section_data*)finfo.dynsym_sec->output_section->used_by_bfd)->this_hdr.sh_info =
        last_local + 1;
    }


  eoinfo.failed = false;
  eoinfo.localsyms = false;
  eoinfo.finfo = &finfo;
  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_link_output_extsym), ((void *) &eoinfo)));

  if (eoinfo.failed)
    return false;



  if (bed->elf_backend_output_arch_syms)
    {
      typedef boolean (*out_sym_func) (void *, const char *, Elf_Internal_Sym *, asection *);



      if (! ((*bed->elf_backend_output_arch_syms)
             (abfd, info, (void *) &finfo, (out_sym_func) elf_link_output_sym)))
        return false;
    }


  if (! elf_link_flush_output_syms (&finfo))
    return false;


  off += symtab_hdr->sh_size;



  symstrtab_hdr = &((abfd) -> tdata.elf_obj_data)->strtab_hdr;

  symstrtab_hdr->sh_type = 3;
  symstrtab_hdr->sh_flags = 0;
  symstrtab_hdr->sh_addr = 0;
  symstrtab_hdr->sh_size = _bfd_stringtab_size (finfo.symstrtab);
  symstrtab_hdr->sh_entsize = 0;
  symstrtab_hdr->sh_link = 0;
  symstrtab_hdr->sh_info = 0;

  symstrtab_hdr->sh_addralign = 1;

  off = _bfd_elf_assign_file_position_for_section (symstrtab_hdr, off, true);
  ((abfd) -> tdata.elf_obj_data)->next_file_pos = off;

  if (((abfd)->symcount) > 0)
    {
      if (bfd_seek (abfd, symstrtab_hdr->sh_offset, 0) != 0
          || ! _bfd_stringtab_emit (abfd, finfo.symstrtab))
        return false;
    }


  for (o = abfd->sections; o != ((void *)0); o = o->next)
    {
      if ((o->flags & 0x004) == 0)
        continue;

      elf_link_adjust_relocs (abfd, &((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr,
                              ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count,
                              ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes);
      if (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2 != ((void *)0))
        elf_link_adjust_relocs (abfd, ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2,
                                ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count2,
                                (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes
                                 + ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_count));



      o->reloc_count = 0;
    }

  if (dynamic && info->combreloc && dynobj != ((void *)0))
    relativecount = elf_link_sort_relocs (abfd, info, &reldyn);



  if (dynamic)
    {
      Elf64_External_Dyn *dyncon, *dynconend;


      o = bfd_get_section_by_name (dynobj, ".dynamic");
      { if (!(o != ((void *)0))) bfd_assert("elflink.h",5523); };

      dyncon = (Elf64_External_Dyn *) o->contents;
      dynconend = (Elf64_External_Dyn *) (o->contents + o->_raw_size);
      for (; dyncon < dynconend; dyncon++)
        {
          Elf_Internal_Dyn dyn;
          const char *name;
          unsigned int type;

          bfd_elf64_swap_dyn_in (dynobj, dyncon, &dyn);

          switch (dyn.d_tag)
            {
            default:
              break;
            case 0:
              if (relativecount > 0 && dyncon + 1 < dynconend)
                {
                  switch (((struct bfd_elf_section_data*)reldyn->used_by_bfd)->this_hdr.sh_type)
                    {
                    case 9: dyn.d_tag = 0x6ffffffa; break;
                    case 4: dyn.d_tag = 0x6ffffff9; break;
                    default: break;
                    }
                  if (dyn.d_tag != 0)
                    {
                      dyn.d_un.d_val = relativecount;
                      bfd_elf64_swap_dyn_out (dynobj, &dyn, dyncon);
                      relativecount = 0;
                    }
                }
              break;
            case 12:
              name = info->init_function;
              goto get_sym;
            case 13:
              name = info->fini_function;
            get_sym:
              {
                struct elf_link_hash_entry *h;

                h = ((struct elf_link_hash_entry *) bfd_link_hash_lookup (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (name), (false), (false), (true)));

                if (h != ((void *)0)
                    && (h->root.type == bfd_link_hash_defined
                        || h->root.type == bfd_link_hash_defweak))
                  {
                    dyn.d_un.d_val = h->root.u.def.value;
                    o = h->root.u.def.section;
                    if (o->output_section != ((void *)0))
                      dyn.d_un.d_val += (o->output_section->vma
                                         + o->output_offset);
                    else
                      {


                        dyn.d_un.d_val = 0;
                      }

                    bfd_elf64_swap_dyn_out (dynobj, &dyn, dyncon);
                  }
              }
              break;

            case 4:
              name = ".hash";
              goto get_vma;
            case 5:
              name = ".dynstr";
              goto get_vma;
            case 6:
              name = ".dynsym";
              goto get_vma;
            case 0x6ffffffc:
              name = ".gnu.version_d";
              goto get_vma;
            case 0x6ffffffe:
              name = ".gnu.version_r";
              goto get_vma;
            case 0x6ffffff0:
              name = ".gnu.version";
            get_vma:
              o = bfd_get_section_by_name (abfd, name);
              { if (!(o != ((void *)0))) bfd_assert("elflink.h",5607); };
              dyn.d_un.d_ptr = o->vma;
              bfd_elf64_swap_dyn_out (dynobj, &dyn, dyncon);
              break;

            case 17:
            case 7:
            case 18:
            case 8:
              if (dyn.d_tag == 17 || dyn.d_tag == 18)
                type = 9;
              else
                type = 4;
              dyn.d_un.d_val = 0;
              for (i = 1; i < (((abfd) -> tdata.elf_obj_data) -> elf_header)->e_shnum; i++)
                {
                  Elf_Internal_Shdr *hdr;

                  hdr = (((abfd) -> tdata.elf_obj_data) -> elf_sect_ptr)[i];
                  if (hdr->sh_type == type
                      && (hdr->sh_flags & (1 << 1)) != 0)
                    {
                      if (dyn.d_tag == 18 || dyn.d_tag == 8)
                        dyn.d_un.d_val += hdr->sh_size;
                      else
                        {
                          if (dyn.d_un.d_val == 0
                              || hdr->sh_addr < dyn.d_un.d_val)
                            dyn.d_un.d_val = hdr->sh_addr;
                        }
                    }
                }
              bfd_elf64_swap_dyn_out (dynobj, &dyn, dyncon);
              break;
            }
        }
    }


  if (dynobj != ((void *)0))
    {
      if (! (*bed->elf_backend_finish_dynamic_sections) (abfd, info))
        goto error_return;

      for (o = dynobj->sections; o != ((void *)0); o = o->next)
        {
          if ((o->flags & 0x200) == 0
              || o->_raw_size == 0
              || o->output_section == ((asection *) &bfd_abs_section))
            continue;
          if ((o->flags & 0x800000) == 0)
            {


              continue;
            }
          if ((((struct bfd_elf_section_data*)o->output_section->used_by_bfd)->this_hdr.sh_type
               != 3)
              || __extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (((o)->name + 0)) && __builtin_constant_p (".dynstr") && (__s1_len = strlen (((o)->name + 0)), __s2_len = strlen (".dynstr"), (!((size_t)(const void *)((((o)->name + 0)) + 1) - (size_t)(const void *)(((o)->name + 0)) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".dynstr") + 1) - (size_t)(const void *)(".dynstr") == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (((o)->name + 0)), (__const char *) (".dynstr"), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : (__builtin_constant_p (((o)->name + 0)) && ((size_t)(const void *)((((o)->name + 0)) + 1) - (size_t)(const void *)(((o)->name + 0)) == 1) && (__s1_len = strlen (((o)->name + 0)), __s1_len < 4) ? (__builtin_constant_p (".dynstr") && ((size_t)(const void *)((".dynstr") + 1) - (size_t)(const void *)(".dynstr") == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[0] - ((_!
_const unsigned char *) (__const char *)(".dynstr"))[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[1] - ((__const unsigned char *) (__const char *) (".dynstr"))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[2] - ((__const unsigned char *) (__const char *) (".dynstr"))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[3] - ((__const unsigned char *) (__const char *) (".dynstr"))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (".dynstr"); register int __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __res!
ult = (((__const unsigned char *) (__const char *) (((o)->nam!
e + 0)))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[3] - __s2[3]); } } __result; }))) : (__builtin_constant_p (".dynstr") && ((size_t)(const void *)((".dynstr") + 1) - (size_t)(const void *)(".dynstr") == 1) && (__s2_len = strlen (".dynstr"), __s2_len < 4) ? (__builtin_constant_p (((o)->name + 0)) && ((size_t)(const void *)((((o)->name + 0)) + 1) - (size_t)(const void *)(((o)->name + 0)) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[0] - ((__const unsigned char *) (__const char *)(".dynstr"))[0]); if (__s2_len > 0 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[1] - ((__const unsigned char *) (__const char *) (".dynstr"))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[2] - ((__const unsigned char *) (__const char!
 *) (".dynstr"))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (((o)->name + 0)))[3] - ((__const unsigned char *) (__const char *) (".dynstr"))[3]); } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (((o)->name + 0)); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (".dynstr"))[0]; if (__s2_len > 0 && __result == 0) { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (".dynstr"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (".dynstr"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1[3] - ((__const unsigned char *) (__const char *) (".dynstr"))[3]); } } __result; }))) : strcmp (((o)->name + 0), ".dynstr")))); }) != 0)
            {
              if (! bfd_set_section_contents (abfd, o->output_section,
                                              o->contents,
                                              (file_ptr) o->output_offset,
                                              o->_raw_size))
                goto error_return;
            }
          else
            {


              off = ((struct bfd_elf_section_data*)o->output_section->used_by_bfd)->this_hdr.sh_offset;
              if (bfd_seek (abfd, off, 0) != 0
                  || ! _bfd_elf_strtab_emit (abfd,
                                             ((struct elf_link_hash_table *) ((info)->hash))->dynstr))
                goto error_return;
            }
        }
    }


  if (((struct elf_link_hash_table *) ((info)->hash))->stab_info != ((void *)0))
    {
      if (! _bfd_write_stab_strings (abfd, &((struct elf_link_hash_table *) ((info)->hash))->stab_info))
        goto error_return;
    }

  if (finfo.symstrtab != ((void *)0))
    _bfd_stringtab_free (finfo.symstrtab);
  if (finfo.contents != ((void *)0))
    free (finfo.contents);
  if (finfo.external_relocs != ((void *)0))
    free (finfo.external_relocs);
  if (finfo.internal_relocs != ((void *)0))
    free (finfo.internal_relocs);
  if (finfo.external_syms != ((void *)0))
    free (finfo.external_syms);
  if (finfo.internal_syms != ((void *)0))
    free (finfo.internal_syms);
  if (finfo.indices != ((void *)0))
    free (finfo.indices);
  if (finfo.sections != ((void *)0))
    free (finfo.sections);
  if (finfo.symbuf != ((void *)0))
    free (finfo.symbuf);
  for (o = abfd->sections; o != ((void *)0); o = o->next)
    {
      if ((o->flags & 0x004) != 0
          && ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes != ((void *)0))
        free (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes);
    }

  ((abfd) -> tdata.elf_obj_data)->linker = true;

  return true;

 error_return:
  if (finfo.symstrtab != ((void *)0))
    _bfd_stringtab_free (finfo.symstrtab);
  if (finfo.contents != ((void *)0))
    free (finfo.contents);
  if (finfo.external_relocs != ((void *)0))
    free (finfo.external_relocs);
  if (finfo.internal_relocs != ((void *)0))
    free (finfo.internal_relocs);
  if (finfo.external_syms != ((void *)0))
    free (finfo.external_syms);
  if (finfo.internal_syms != ((void *)0))
    free (finfo.internal_syms);
  if (finfo.indices != ((void *)0))
    free (finfo.indices);
  if (finfo.sections != ((void *)0))
    free (finfo.sections);
  if (finfo.symbuf != ((void *)0))
    free (finfo.symbuf);
  for (o = abfd->sections; o != ((void *)0); o = o->next)
    {
      if ((o->flags & 0x004) != 0
          && ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes != ((void *)0))
        free (((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hashes);
    }

  return false;
}



static boolean
elf_link_output_sym (finfo, name, elfsym, input_sec)
     struct elf_final_link_info *finfo;
     const char *name;
     Elf_Internal_Sym *elfsym;
     asection *input_sec;
{
  boolean (*output_symbol_hook) (bfd *, struct bfd_link_info *info, const char *, Elf_Internal_Sym *, asection *);





  output_symbol_hook = ((struct elf_backend_data *) (finfo->output_bfd)->xvec->backend_data)->
    elf_backend_link_output_symbol_hook;
  if (output_symbol_hook != ((void *)0))
    {
      if (! ((*output_symbol_hook)
             (finfo->output_bfd, finfo->info, name, elfsym, input_sec)))
        return false;
    }

  if (name == (const char *) ((void *)0) || *name == '\0')
    elfsym->st_name = 0;
  else if (input_sec->flags & 0x40000)
    elfsym->st_name = 0;
  else
    {
      elfsym->st_name = (unsigned long) _bfd_stringtab_add (finfo->symstrtab,
                                                            name, true, false);
      if (elfsym->st_name == (unsigned long) -1)
        return false;
    }

  if (finfo->symbuf_count >= finfo->symbuf_size)
    {
      if (! elf_link_flush_output_syms (finfo))
        return false;
    }

  bfd_elf64_swap_symbol_out (finfo->output_bfd, elfsym,
                       (void *) (finfo->symbuf + finfo->symbuf_count));
  ++finfo->symbuf_count;

  ++ ((finfo->output_bfd)->symcount);

  return true;
}



static boolean
elf_link_flush_output_syms (finfo)
     struct elf_final_link_info *finfo;
{
  if (finfo->symbuf_count > 0)
    {
      Elf_Internal_Shdr *symtab;
      file_ptr pos;
      bfd_size_type amt;

      symtab = &((finfo->output_bfd) -> tdata.elf_obj_data)->symtab_hdr;
      pos = symtab->sh_offset + symtab->sh_size;
      amt = finfo->symbuf_count * sizeof (Elf64_External_Sym);
      if (bfd_seek (finfo->output_bfd, pos, 0) != 0
          || bfd_bwrite ((void *) finfo->symbuf, amt, finfo->output_bfd) != amt)
        return false;

      symtab->sh_size += finfo->symbuf_count * sizeof (Elf64_External_Sym);

      finfo->symbuf_count = 0;
    }

  return true;
}




static boolean
elf_link_sec_merge_syms (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  asection *sec;

  if ((h->root.type == bfd_link_hash_defined
       || h->root.type == bfd_link_hash_defweak)
      && ((sec = h->root.u.def.section)->flags & 0x20000000)
      && ((struct bfd_elf_section_data*)sec->used_by_bfd)->merge_info)
    {
      bfd *output_bfd = (bfd *) data;

      h->root.u.def.value =
        _bfd_merged_section_offset (output_bfd,
                                    &h->root.u.def.section,
                                    ((struct bfd_elf_section_data*)sec->used_by_bfd)->merge_info,
                                    h->root.u.def.value, (bfd_vma) 0);
    }

  return true;
}
# 5863 "elflink.h"
static boolean
elf_link_output_extsym (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  struct elf_outext_info *eoinfo = (struct elf_outext_info *) data;
  struct elf_final_link_info *finfo = eoinfo->finfo;
  boolean strip;
  Elf_Internal_Sym sym;
  asection *input_sec;


  if (eoinfo->localsyms)
    {
      if ((h->elf_link_hash_flags & 02000) == 0)
        return true;
    }
  else
    {
      if ((h->elf_link_hash_flags & 02000) != 0)
        return true;
    }
# 5893 "elflink.h"
  if (! finfo->info->relocateable
      && ! finfo->info->allow_shlib_undefined
      && ! finfo->info->shared
      && h->root.type == bfd_link_hash_undefined
      && (h->elf_link_hash_flags & 04) != 0
      && (h->elf_link_hash_flags & 01) == 0)
    {




      boolean def;

      if ((((h->root.u.undef.abfd) -> tdata.elf_obj_data) -> dt_soname) != ((void *)0))
        def = elf_link_check_versioned_symbol (finfo->info, h);
      else
        def = false;

      if (!def
          && ! ((*finfo->info->callbacks->undefined_symbol)
                  (finfo->info, h->root.root.string,
                   h->root.u.undef.abfd, (asection *) ((void *)0),
                   (bfd_vma) 0, true)))
        {
          eoinfo->failed = true;
          return false;
        }
    }





  if (h->indx == -2)
    strip = false;
  else if (((h->elf_link_hash_flags & 010) != 0
            || (h->elf_link_hash_flags & 04) != 0)
           && (h->elf_link_hash_flags & 02) == 0
           && (h->elf_link_hash_flags & 01) == 0)
    strip = true;
  else if (finfo->info->strip == strip_all
           || (finfo->info->strip == strip_some
               && bfd_hash_lookup (finfo->info->keep_hash,
                                   h->root.root.string,
                                   false, false) == ((void *)0)))
    strip = true;
  else
    strip = false;



  if (strip
      && h->dynindx == -1
      && (h->elf_link_hash_flags & 02000) == 0)
    return true;

  sym.st_value = 0;
  sym.st_size = h->size;
  sym.st_other = h->other;
  if ((h->elf_link_hash_flags & 02000) != 0)
    sym.st_info = (((0) << 4) + ((h->type) & 0xF));
  else if (h->root.type == bfd_link_hash_undefweak
           || h->root.type == bfd_link_hash_defweak)
    sym.st_info = (((2) << 4) + ((h->type) & 0xF));
  else
    sym.st_info = (((1) << 4) + ((h->type) & 0xF));

  switch (h->root.type)
    {
    default:
    case bfd_link_hash_new:
      _bfd_abort ("elflink.h", 5964, __PRETTY_FUNCTION__);
      return false;

    case bfd_link_hash_undefined:
      input_sec = ((asection *) &bfd_und_section);
      sym.st_shndx = 0;
      break;

    case bfd_link_hash_undefweak:
      input_sec = ((asection *) &bfd_und_section);
      sym.st_shndx = 0;
      break;

    case bfd_link_hash_defined:
    case bfd_link_hash_defweak:
      {
        input_sec = h->root.u.def.section;
        if (input_sec->output_section != ((void *)0))
          {
            sym.st_shndx =
              _bfd_elf_section_from_bfd_section (finfo->output_bfd,
                                                 input_sec->output_section);
            if (sym.st_shndx == (unsigned short) -1)
              {
                (*_bfd_error_handler)
                  (dcgettext ("bfd", "%s: could not find output section %s for input section %s", __LC_MESSAGES),
                   ((char *) (finfo->output_bfd)->filename),
                   input_sec->output_section->name,
                   input_sec->name);
                eoinfo->failed = true;
                return false;
              }




            sym.st_value = h->root.u.def.value + input_sec->output_offset;
            if (! finfo->info->relocateable)
              sym.st_value += input_sec->output_section->vma;
          }
        else
          {
            { if (!(input_sec->owner == ((void *)0) || (input_sec->owner->flags & 0x40) != 0)) bfd_assert("elflink.h",6007); };

            sym.st_shndx = 0;
            input_sec = ((asection *) &bfd_und_section);
          }
      }
      break;

    case bfd_link_hash_common:
      input_sec = h->root.u.c.p->section;
      sym.st_shndx = 0xFFF2;
      sym.st_value = 1 << h->root.u.c.p->alignment_power;
      break;

    case bfd_link_hash_indirect:






      return true;

    case bfd_link_hash_warning:




      if (h->root.u.i.link->type == bfd_link_hash_new)
        return true;
      return (elf_link_output_extsym
              ((struct elf_link_hash_entry *) h->root.u.i.link, data));
    }




  if ((h->dynindx != -1
       || (h->elf_link_hash_flags & 02000) != 0)
      && ((struct elf_link_hash_table *) ((finfo->info)->hash))->dynamic_sections_created)
    {
      struct elf_backend_data *bed;

      bed = ((struct elf_backend_data *) (finfo->output_bfd)->xvec->backend_data);
      if (! ((*bed->elf_backend_finish_dynamic_symbol)
             (finfo->output_bfd, finfo->info, h, &sym)))
        {
          eoinfo->failed = true;
          return false;
        }
    }







  if (sym.st_shndx == 0
      && (h->elf_link_hash_flags & 01) != 0
      && ((((unsigned int)(sym.st_info)) >> 4) == 1
          || (((unsigned int)(sym.st_info)) >> 4) == 2))
    {
      int bindtype;

      if ((h->elf_link_hash_flags & 020) != 0)
        bindtype = 1;
      else
        bindtype = 2;
      sym.st_info = (((bindtype) << 4) + ((((sym.st_info) & 0xF)) & 0xF));
    }



  if (! finfo->info->relocateable
      && (h->elf_link_hash_flags & 02) == 0)
    sym.st_other ^= ((sym.st_other) & 0x3);




  if (h->dynindx != -1
      && ((struct elf_link_hash_table *) ((finfo->info)->hash))->dynamic_sections_created)
    {
      size_t bucketcount;
      size_t bucket;
      size_t hash_entry_size;
      bfd_byte *bucketpos;
      bfd_vma chain;
      Elf64_External_Sym *esym;

      sym.st_name = h->dynstr_index;
      esym = (Elf64_External_Sym *) finfo->dynsym_sec->contents + h->dynindx;
      bfd_elf64_swap_symbol_out (finfo->output_bfd, &sym, (void *) esym);

      bucketcount = ((struct elf_link_hash_table *) ((finfo->info)->hash))->bucketcount;
      bucket = h->elf_hash_value % bucketcount;
      hash_entry_size
        = ((struct bfd_elf_section_data*)finfo->hash_sec->used_by_bfd)->this_hdr.sh_entsize;
      bucketpos = ((bfd_byte *) finfo->hash_sec->contents
                   + (bucket + 2) * hash_entry_size);
      chain = ( (8 * hash_entry_size) == 8 ? (bfd_vma) (*(unsigned char *) (bucketpos) & 0xff) : (8 * hash_entry_size) == 16 ? ((*((finfo->output_bfd)->xvec->bfd_getx16)) (bucketpos)) : (8 * hash_entry_size) == 32 ? ((*((finfo->output_bfd)->xvec->bfd_getx32)) (bucketpos)) : (8 * hash_entry_size) == 64 ? ((*((finfo->output_bfd)->xvec->bfd_getx64)) (bucketpos)) : (_bfd_abort ("elflink.h", 6107, __PRETTY_FUNCTION__), (bfd_vma) - 1));
      ( (8 * hash_entry_size) == 8 ? ((void) (*((unsigned char *) (bucketpos)) = (unsigned char) ((bfd_vma) h->dynindx))) : (8 * hash_entry_size) == 16 ? ((*((finfo->output_bfd)->xvec->bfd_putx16)) (((bfd_vma) h->dynindx),(bucketpos))) : (8 * hash_entry_size) == 32 ? ((*((finfo->output_bfd)->xvec->bfd_putx32)) (((bfd_vma) h->dynindx),(bucketpos))) : (8 * hash_entry_size) == 64 ? ((*((finfo->output_bfd)->xvec->bfd_putx64)) (((bfd_vma) h->dynindx), (bucketpos))) : (_bfd_abort ("elflink.h", 6109, __PRETTY_FUNCTION__), (void) 0));

      ( (8 * hash_entry_size) == 8 ? ((void) (*((unsigned char *) (((bfd_byte *) finfo->hash_sec->contents + (bucketcount + 2 + h->dynindx) * hash_entry_size))) = (unsigned char) (chain))) : (8 * hash_entry_size) == 16 ? ((*((finfo->output_bfd)->xvec->bfd_putx16)) ((chain),(((bfd_byte *) finfo->hash_sec->contents + (bucketcount + 2 + h->dynindx) * hash_entry_size)))) : (8 * hash_entry_size) == 32 ? ((*((finfo->output_bfd)->xvec->bfd_putx32)) ((chain),(((bfd_byte *) finfo->hash_sec->contents + (bucketcount + 2 + h->dynindx) * hash_entry_size)))) : (8 * hash_entry_size) == 64 ? ((*((finfo->output_bfd)->xvec->bfd_putx64)) ((chain), (((bfd_byte *) finfo->hash_sec->contents + (bucketcount + 2 + h->dynindx) * hash_entry_size)))) : (_bfd_abort ("elflink.h", 6112, __PRETTY_FUNCTION__), (void) 0));



      if (finfo->symver_sec != ((void *)0) && finfo->symver_sec->contents != ((void *)0))
        {
          Elf_Internal_Versym iversym;
          Elf_External_Versym *eversym;

          if ((h->elf_link_hash_flags & 02) == 0)
            {
              if (h->verinfo.verdef == ((void *)0))
                iversym.vs_vers = 0;
              else
                iversym.vs_vers = h->verinfo.verdef->vd_exp_refno + 1;
            }
          else
            {
              if (h->verinfo.vertree == ((void *)0))
                iversym.vs_vers = 1;
              else
                iversym.vs_vers = h->verinfo.vertree->vernum + 1;
            }

          if ((h->elf_link_hash_flags & 01000) != 0)
            iversym.vs_vers |= 0x8000;

          eversym = (Elf_External_Versym *) finfo->symver_sec->contents;
          eversym += h->dynindx;
          _bfd_elf_swap_versym_out (finfo->output_bfd, &iversym, eversym);
        }
    }



  if (strip)
    return true;

  h->indx = ((finfo->output_bfd)->symcount);

  if (! elf_link_output_sym (finfo, h->root.root.string, &sym, input_sec))
    {
      eoinfo->failed = true;
      return false;
    }

  return true;
}





static void
elf_link_output_relocs (output_bfd, input_section, input_rel_hdr,
                        internal_relocs)
     bfd *output_bfd;
     asection *input_section;
     Elf_Internal_Shdr *input_rel_hdr;
     Elf_Internal_Rela *internal_relocs;
{
  Elf_Internal_Rela *irela;
  Elf_Internal_Rela *irelaend;
  Elf_Internal_Shdr *output_rel_hdr;
  asection *output_section;
  unsigned int *rel_countp = ((void *)0);
  struct elf_backend_data *bed;
  bfd_size_type amt;

  output_section = input_section->output_section;
  output_rel_hdr = ((void *)0);

  if (((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr.sh_entsize
      == input_rel_hdr->sh_entsize)
    {
      output_rel_hdr = &((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr;
      rel_countp = &((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count;
    }
  else if (((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr2
           && (((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr2->sh_entsize
               == input_rel_hdr->sh_entsize))
    {
      output_rel_hdr = ((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr2;
      rel_countp = &((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count2;
    }

  { if (!(output_rel_hdr != ((void *)0))) bfd_assert("elflink.h",6196); };

  bed = ((struct elf_backend_data *) (output_bfd)->xvec->backend_data);
  irela = internal_relocs;
  irelaend = irela + ((input_rel_hdr)->sh_size / (input_rel_hdr)->sh_entsize)
                     * bed->s->int_rels_per_ext_rel;

  if (input_rel_hdr->sh_entsize == sizeof (Elf64_External_Rel))
    {
      Elf64_External_Rel *erel;
      Elf_Internal_Rel *irel;

      amt = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel);
      irel = (Elf_Internal_Rel *) bfd_zmalloc (amt);
      if (irel == ((void *)0))
        {
          (*_bfd_error_handler) (dcgettext ("bfd", "Error: out of memory", __LC_MESSAGES));
          _bfd_abort ("elflink.h", 6213, __PRETTY_FUNCTION__);
        }

      erel = ((Elf64_External_Rel *) output_rel_hdr->contents + *rel_countp);
      for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erel++)
        {
          unsigned int i;

          for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
            {
              irel[i].r_offset = irela[i].r_offset;
              irel[i].r_info = irela[i].r_info;
              { if (!(irela[i].r_addend == 0)) bfd_assert("elflink.h",6225); };
            }

          if (bed->s->swap_reloc_out)
            (*bed->s->swap_reloc_out) (output_bfd, irel, (void *) erel);
          else
            bfd_elf64_swap_reloc_out (output_bfd, irel, erel);
        }

      free (irel);
    }
  else
    {
      Elf64_External_Rela *erela;

      { if (!(input_rel_hdr->sh_entsize == sizeof (Elf64_External_Rela))) bfd_assert("elflink.h",6240); };

      erela = ((Elf64_External_Rela *) output_rel_hdr->contents + *rel_countp);
      for (; irela < irelaend; irela += bed->s->int_rels_per_ext_rel, erela++)
        if (bed->s->swap_reloca_out)
          (*bed->s->swap_reloca_out) (output_bfd, irela, (void *) erela);
        else
          bfd_elf64_swap_reloca_out (output_bfd, irela, erela);
    }



  *rel_countp += ((input_rel_hdr)->sh_size / (input_rel_hdr)->sh_entsize);
}






static boolean
elf_link_input_bfd (finfo, input_bfd)
     struct elf_final_link_info *finfo;
     bfd *input_bfd;
{
  boolean (*relocate_section) (bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **);



  bfd *output_bfd;
  Elf_Internal_Shdr *symtab_hdr;
  size_t locsymcount;
  size_t extsymoff;
  Elf64_External_Sym *external_syms;
  Elf64_External_Sym *esym;
  Elf64_External_Sym *esymend;
  Elf_Internal_Sym *isym;
  long *pindex;
  asection **ppsection;
  asection *o;
  struct elf_backend_data *bed;
  boolean emit_relocs;
  struct elf_link_hash_entry **sym_hashes;

  output_bfd = finfo->output_bfd;
  bed = ((struct elf_backend_data *) (output_bfd)->xvec->backend_data);
  relocate_section = bed->elf_backend_relocate_section;




  if ((input_bfd->flags & 0x40) != 0)
    return true;

  emit_relocs = (finfo->info->relocateable
                 || finfo->info->emitrelocations
                 || bed->elf_backend_emit_relocs);

  symtab_hdr = &((input_bfd) -> tdata.elf_obj_data)->symtab_hdr;
  if ((((input_bfd) -> tdata.elf_obj_data) -> bad_symtab))
    {
      locsymcount = symtab_hdr->sh_size / sizeof (Elf64_External_Sym);
      extsymoff = 0;
    }
  else
    {
      locsymcount = symtab_hdr->sh_info;
      extsymoff = symtab_hdr->sh_info;
    }


  if (symtab_hdr->contents != ((void *)0))
    external_syms = (Elf64_External_Sym *) symtab_hdr->contents;
  else if (locsymcount == 0)
    external_syms = ((void *)0);
  else
    {
      bfd_size_type amt = locsymcount * sizeof (Elf64_External_Sym);
      external_syms = finfo->external_syms;
      if (bfd_seek (input_bfd, symtab_hdr->sh_offset, 0) != 0
          || bfd_bread (external_syms, amt, input_bfd) != amt)
        return false;
    }



  esym = external_syms;
  esymend = esym + locsymcount;
  isym = finfo->internal_syms;
  pindex = finfo->indices;
  ppsection = finfo->sections;
  for (; esym < esymend; esym++, isym++, pindex++, ppsection++)
    {
      asection *isec;
      const char *name;
      Elf_Internal_Sym osym;

      bfd_elf64_swap_symbol_in (input_bfd, esym, isym);
      *pindex = -1;

      if ((((input_bfd) -> tdata.elf_obj_data) -> bad_symtab))
        {
          if ((((unsigned int)(isym->st_info)) >> 4) != 0)
            {
              *ppsection = ((void *)0);
              continue;
            }
        }

      if (isym->st_shndx == 0)
        isec = ((asection *) &bfd_und_section);
      else if (isym->st_shndx > 0 && isym->st_shndx < 0xFF00)
        {
          isec = bfd_section_from_elf_index (input_bfd, isym->st_shndx);
          if (isec && ((struct bfd_elf_section_data*)isec->used_by_bfd)->merge_info
              && ((isym->st_info) & 0xF) != 3)
            isym->st_value =
              _bfd_merged_section_offset (output_bfd, &isec,
                                          ((struct bfd_elf_section_data*)isec->used_by_bfd)->merge_info,
                                          isym->st_value, (bfd_vma) 0);
        }
      else if (isym->st_shndx == 0xFFF1)
        isec = ((asection *) &bfd_abs_section);
      else if (isym->st_shndx == 0xFFF2)
        isec = ((asection *) &bfd_com_section);
      else
        {

          isec = ((void *)0);
        }

      *ppsection = isec;


      if (esym == external_syms)
        continue;

      if (((isym->st_info) & 0xF) == 3)
        {



          continue;
        }



      if (finfo->info->strip == strip_all)
        continue;






      if (finfo->info->discard == discard_all)
        continue;






      if (isym->st_shndx > 0
          && isym->st_shndx < 0xFF00
          && isec != ((void *)0)
          && ((! isec->linker_mark && (isec->flags & 0x200) != 0)
              || (! finfo->info->relocateable
                  && (isec->flags & 0x40000) != 0)))
        continue;


      name = bfd_elf_string_from_elf_section (input_bfd, symtab_hdr->sh_link,
                                              isym->st_name);
      if (name == ((void *)0))
        return false;


      if ((finfo->info->strip == strip_some
           && (bfd_hash_lookup (finfo->info->keep_hash, name, false, false)
               == ((void *)0)))
          || (((finfo->info->discard == discard_sec_merge
                && (isec->flags & 0x20000000) && ! finfo->info->relocateable)
               || finfo->info->discard == discard_l)
              && ((*((input_bfd)->xvec->_bfd_is_local_label_name)) (input_bfd, name))))
        continue;



      osym = *isym;


      osym.st_shndx = _bfd_elf_section_from_bfd_section (output_bfd,
                                                         isec->output_section);
      if (osym.st_shndx == (unsigned short) -1)
        return false;

      *pindex = ((output_bfd)->symcount);
# 6446 "elflink.h"
      osym.st_value += isec->output_offset;
      if (! finfo->info->relocateable)
        osym.st_value += isec->output_section->vma;

      if (! elf_link_output_sym (finfo, name, &osym, isec))
        return false;
    }


  sym_hashes = (((input_bfd) -> tdata.elf_obj_data) -> sym_hashes);
  for (o = input_bfd->sections; o != ((void *)0); o = o->next)
    {
      bfd_byte *contents;

      if (! o->linker_mark)
        {

          continue;
        }

      if ((o->flags & 0x200) == 0
          || (o->_raw_size == 0 && (o->flags & 0x004) == 0))
        continue;

      if ((o->flags & 0x800000) != 0)
        {


          continue;
        }





      if (((struct bfd_elf_section_data*)o->used_by_bfd)->this_hdr.contents != ((void *)0))
        contents = ((struct bfd_elf_section_data*)o->used_by_bfd)->this_hdr.contents;
      else
        {
          contents = finfo->contents;
          if (! bfd_get_section_contents (input_bfd, o, contents,
                                          (file_ptr) 0, o->_raw_size))
            return false;
        }

      if ((o->flags & 0x004) != 0)
        {
          Elf_Internal_Rela *internal_relocs;


          internal_relocs = (_bfd_elf64_link_read_relocs
                             (input_bfd, o, finfo->external_relocs,
                              finfo->internal_relocs, false));
          if (internal_relocs == ((void *)0)
              && o->reloc_count > 0)
            return false;
# 6513 "elflink.h"
          if (!finfo->info->relocateable
              && !elf_section_ignore_discarded_relocs (o))
            {
              Elf_Internal_Rela *rel, *relend;

              rel = internal_relocs;
              relend = rel + o->reloc_count * bed->s->int_rels_per_ext_rel;
              for ( ; rel < relend; rel++)
                {
                  unsigned long r_symndx = ((rel->r_info) >> 32);

                  if (r_symndx >= locsymcount
                      || ((((input_bfd) -> tdata.elf_obj_data) -> bad_symtab)
                          && finfo->sections[r_symndx] == ((void *)0)))
                    {
                      struct elf_link_hash_entry *h;

                      h = sym_hashes[r_symndx - extsymoff];
                      while (h->root.type == bfd_link_hash_indirect
                             || h->root.type == bfd_link_hash_warning)
                        h = (struct elf_link_hash_entry *) h->root.u.i.link;



                      if ((h->root.type == bfd_link_hash_defined
                           || h->root.type == bfd_link_hash_defweak)
                          && ! ((h->root.u.def.section) == ((asection *) &bfd_abs_section))
                          && ((h->root.u.def.section ->output_section) == ((asection *) &bfd_abs_section)))

                        {

                          if ((o->flags & 0x10000) != 0)
                            {






                              { if (!(r_symndx != 0)) bfd_assert("elflink.h",6552); };
                              (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (rel); __builtin_memset (__s, '\0', sizeof (*rel)); __s; }) : memset (rel, 0, sizeof (*rel))));
                            }
                          else

                            {
                              if (! ((*finfo->info->callbacks->undefined_symbol)
                                     (finfo->info, h->root.root.string,
                                      input_bfd, o, rel->r_offset,
                                      true)))
                                return false;
                            }
                        }
                    }
                  else
                    {
                      asection *sec = finfo->sections[r_symndx];

                      if (sec != ((void *)0)
                          && ! ((sec) == ((asection *) &bfd_abs_section))
                          && ((sec->output_section) == ((asection *) &bfd_abs_section)))
                        {

                          if ((o->flags & 0x10000) != 0
                              || (sec->flags & 0x100000) != 0)
                            {






                              { if (!(r_symndx != 0)) bfd_assert("elflink.h",6584); };
                              rel->r_info
                                = (((bfd_vma) (0) << 32) + (bfd_vma) (((rel->r_info) & 0xffffffff)));
                              rel->r_addend = 0;
                            }
                          else

                            {
                              boolean ok;
                              const char *msg
                                = dcgettext ("bfd", "local symbols in discarded section %s", __LC_MESSAGES);
                              bfd_size_type amt
                                = strlen (sec->name) + strlen (msg) - 1;
                              char *buf = (char *) bfd_malloc (amt);

                              if (buf != ((void *)0))
                                sprintf (buf, msg, sec->name);
                              else
                                buf = (char *) sec->name;
                              ok = (*finfo->info->callbacks
                                    ->undefined_symbol) (finfo->info, buf,
                                                         input_bfd, o,
                                                         rel->r_offset,
                                                         true);
                              if (buf != sec->name)
                                free (buf);
                              if (!ok)
                                return false;
                            }
                        }
                    }
                }
            }
# 6638 "elflink.h"
          if (! (*relocate_section) (output_bfd, finfo->info,
                                     input_bfd, o, contents,
                                     internal_relocs,
                                     finfo->internal_syms,
                                     finfo->sections))
            return false;

          if (emit_relocs)
            {
              Elf_Internal_Rela *irela;
              Elf_Internal_Rela *irelaend;
              struct elf_link_hash_entry **rel_hash;
              Elf_Internal_Shdr *input_rel_hdr;
              unsigned int next_erel;
              void (*reloc_emitter) (bfd *, asection *, Elf_Internal_Shdr *, Elf_Internal_Rela *);





              irela = internal_relocs;
              irelaend = irela + o->reloc_count * bed->s->int_rels_per_ext_rel;
              rel_hash = (((struct bfd_elf_section_data*)o->output_section->used_by_bfd)->rel_hashes
                          + ((struct bfd_elf_section_data*)o->output_section->used_by_bfd)->rel_count
                          + ((struct bfd_elf_section_data*)o->output_section->used_by_bfd)->rel_count2);
              for (next_erel = 0; irela < irelaend; irela++, next_erel++)
                {
                  unsigned long r_symndx;
                  asection *sec;

                  if (next_erel == bed->s->int_rels_per_ext_rel)
                    {
                      rel_hash++;
                      next_erel = 0;
                    }

                  irela->r_offset += o->output_offset;


                  if (finfo->info->emitrelocations)
                    irela->r_offset += o->output_section->vma;

                  r_symndx = ((irela->r_info) >> 32);

                  if (r_symndx == 0)
                    continue;

                  if (r_symndx >= locsymcount
                      || ((((input_bfd) -> tdata.elf_obj_data) -> bad_symtab)
                          && finfo->sections[r_symndx] == ((void *)0)))
                    {
                      struct elf_link_hash_entry *rh;
                      unsigned long indx;
# 6699 "elflink.h"
                      indx = r_symndx - extsymoff;
                      rh = (((input_bfd) -> tdata.elf_obj_data) -> sym_hashes)[indx];
                      while (rh->root.type == bfd_link_hash_indirect
                             || rh->root.type == bfd_link_hash_warning)
                        rh = (struct elf_link_hash_entry *) rh->root.u.i.link;




                      { if (!(rh->indx < 0)) bfd_assert("elflink.h",6708); };
                      rh->indx = -2;

                      *rel_hash = rh;

                      continue;
                    }



                  *rel_hash = ((void *)0);
                  isym = finfo->internal_syms + r_symndx;
                  sec = finfo->sections[r_symndx];
                  if (((isym->st_info) & 0xF) == 3)
                    {





                      if (sec != ((void *)0)
                          && (((sec) == ((asection *) &bfd_abs_section))
                              || (sec->output_section != ((void *)0)
                                  && ((sec->output_section) == ((asection *) &bfd_abs_section)))))
                        r_symndx = 0;
                      else if (sec == ((void *)0) || sec->owner == ((void *)0))
                        {
                          bfd_set_error (bfd_error_bad_value);
                          return false;
                        }
                      else
                        {
                          r_symndx = sec->output_section->target_index;
                          { if (!(r_symndx != 0)) bfd_assert("elflink.h",6741); };
                        }
                    }
                  else
                    {
                      if (finfo->indices[r_symndx] == -1)
                        {
                          unsigned long shlink;
                          const char *name;
                          asection *osec;

                          if (finfo->info->strip == strip_all)
                            {

                              bfd_set_error (bfd_error_invalid_operation);
                              return false;
                            }




                          shlink = symtab_hdr->sh_link;
                          name = (bfd_elf_string_from_elf_section
                                  (input_bfd, shlink, isym->st_name));
                          if (name == ((void *)0))
                            return false;

                          osec = sec->output_section;
                          isym->st_shndx =
                            _bfd_elf_section_from_bfd_section (output_bfd,
                                                               osec);
                          if (isym->st_shndx == (unsigned short) -1)
                            return false;

                          isym->st_value += sec->output_offset;
                          if (! finfo->info->relocateable)
                            isym->st_value += osec->vma;

                          finfo->indices[r_symndx]
                            = ((output_bfd)->symcount);

                          if (! elf_link_output_sym (finfo, name, isym, sec))
                            return false;
                        }

                      r_symndx = finfo->indices[r_symndx];
                    }

                  irela->r_info = (((bfd_vma) (r_symndx) << 32) + (bfd_vma) (((irela->r_info) & 0xffffffff)));

                }


              if (bed->elf_backend_emit_relocs
                  && !(finfo->info->relocateable
                       || finfo->info->emitrelocations))
                reloc_emitter = bed->elf_backend_emit_relocs;
              else
                reloc_emitter = elf_link_output_relocs;

              input_rel_hdr = &((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr;
              (*reloc_emitter) (output_bfd, o, input_rel_hdr, internal_relocs);

              input_rel_hdr = ((struct bfd_elf_section_data*)o->used_by_bfd)->rel_hdr2;
              if (input_rel_hdr)
                {
                  internal_relocs += (((input_rel_hdr)->sh_size / (input_rel_hdr)->sh_entsize)
                                      * bed->s->int_rels_per_ext_rel);
                  reloc_emitter (output_bfd, o, input_rel_hdr, internal_relocs);
                }

            }
        }


      if (bed->elf_backend_write_section
          && (*bed->elf_backend_write_section) (output_bfd, o, contents))
        {

        }
      else if (((struct bfd_elf_section_data*)o->used_by_bfd)->stab_info)
        {
          if (! (_bfd_write_section_stabs
                 (output_bfd, &((struct elf_link_hash_table *) ((finfo->info)->hash))->stab_info,
                  o, &((struct bfd_elf_section_data*)o->used_by_bfd)->stab_info, contents)))
            return false;
        }
      else if (((struct bfd_elf_section_data*)o->used_by_bfd)->merge_info)
        {
          if (! (_bfd_write_merged_section
                 (output_bfd, o, ((struct bfd_elf_section_data*)o->used_by_bfd)->merge_info)))
            return false;
        }
      else
        {
          bfd_size_type sec_size;

          sec_size = (o->_cooked_size != 0 ? o->_cooked_size : o->_raw_size);
          if (! (o->flags & 0x40000)
              && ! bfd_set_section_contents (output_bfd, o->output_section,
                                             contents,
                                             (file_ptr) o->output_offset,
                                             sec_size))
            return false;
        }
    }

  return true;
}






static boolean
elf_reloc_link_order (output_bfd, info, output_section, link_order)
     bfd *output_bfd;
     struct bfd_link_info *info;
     asection *output_section;
     struct bfd_link_order *link_order;
{
  reloc_howto_type *howto;
  long indx;
  bfd_vma offset;
  bfd_vma addend;
  struct elf_link_hash_entry **rel_hash_ptr;
  Elf_Internal_Shdr *rel_hdr;
  struct elf_backend_data *bed = ((struct elf_backend_data *) (output_bfd)->xvec->backend_data);

  howto = bfd_reloc_type_lookup (output_bfd, link_order->u.reloc.p->reloc);
  if (howto == ((void *)0))
    {
      bfd_set_error (bfd_error_bad_value);
      return false;
    }

  addend = link_order->u.reloc.p->addend;


  rel_hash_ptr = (((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hashes
                  + ((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count
                  + ((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count2);
  if (link_order->type == bfd_section_reloc_link_order)
    {
      indx = link_order->u.reloc.p->u.section->target_index;
      { if (!(indx != 0)) bfd_assert("elflink.h",6887); };
      *rel_hash_ptr = ((void *)0);
    }
  else
    {
      struct elf_link_hash_entry *h;



      h = ((struct elf_link_hash_entry *)
           bfd_wrapped_link_hash_lookup (output_bfd, info,
                                         link_order->u.reloc.p->u.name,
                                         false, false, true));
      if (h != ((void *)0)
          && (h->root.type == bfd_link_hash_defined
              || h->root.type == bfd_link_hash_defweak))
        {
          asection *section;

          section = h->root.u.def.section;
          indx = section->output_section->target_index;
          *rel_hash_ptr = ((void *)0);



          addend += section->output_section->vma + section->output_offset;
        }
      else if (h != ((void *)0))
        {


          h->indx = -2;
          *rel_hash_ptr = h;
          indx = 0;
        }
      else
        {
          if (! ((*info->callbacks->unattached_reloc)
                 (info, link_order->u.reloc.p->u.name, (bfd *) ((void *)0),
                  (asection *) ((void *)0), (bfd_vma) 0)))
            return false;
          indx = 0;
        }
    }



  if (howto->partial_inplace && addend != 0)
    {
      bfd_size_type size;
      bfd_reloc_status_type rstat;
      bfd_byte *buf;
      boolean ok;
      const char *sym_name;

      size = bfd_get_reloc_size (howto);
      buf = (bfd_byte *) bfd_zmalloc (size);
      if (buf == (bfd_byte *) ((void *)0))
        return false;
      rstat = _bfd_relocate_contents (howto, output_bfd, (bfd_vma) addend, buf);
      switch (rstat)
        {
        case bfd_reloc_ok:
          break;

        default:
        case bfd_reloc_outofrange:
          _bfd_abort ("elflink.h", 6954, __PRETTY_FUNCTION__);

        case bfd_reloc_overflow:
          if (link_order->type == bfd_section_reloc_link_order)
            sym_name = ((link_order->u.reloc.p->u.section)->name);

          else
            sym_name = link_order->u.reloc.p->u.name;
          if (! ((*info->callbacks->reloc_overflow)
                 (info, sym_name, howto->name, addend,
                  (bfd *) ((void *)0), (asection *) ((void *)0), (bfd_vma) 0)))
            {
              free (buf);
              return false;
            }
          break;
        }
      ok = bfd_set_section_contents (output_bfd, output_section, (void *) buf,
                                     (file_ptr) link_order->offset, size);
      free (buf);
      if (! ok)
        return false;
    }




  offset = link_order->offset;
  if (! info->relocateable)
    offset += output_section->vma;

  rel_hdr = &((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_hdr;

  if (rel_hdr->sh_type == 9)
    {
      bfd_size_type size;
      Elf_Internal_Rel *irel;
      Elf64_External_Rel *erel;
      unsigned int i;

      size = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rel);
      irel = (Elf_Internal_Rel *) bfd_zmalloc (size);
      if (irel == ((void *)0))
        return false;

      for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
        irel[i].r_offset = offset;
      irel[0].r_info = (((bfd_vma) (indx) << 32) + (bfd_vma) (howto->type));

      erel = ((Elf64_External_Rel *) rel_hdr->contents
              + ((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count);

      if (bed->s->swap_reloc_out)
        (*bed->s->swap_reloc_out) (output_bfd, irel, (bfd_byte *) erel);
      else
        bfd_elf64_swap_reloc_out (output_bfd, irel, erel);

      free (irel);
    }
  else
    {
      bfd_size_type size;
      Elf_Internal_Rela *irela;
      Elf64_External_Rela *erela;
      unsigned int i;

      size = bed->s->int_rels_per_ext_rel * sizeof (Elf_Internal_Rela);
      irela = (Elf_Internal_Rela *) bfd_zmalloc (size);
      if (irela == ((void *)0))
        return false;

      for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
        irela[i].r_offset = offset;
      irela[0].r_info = (((bfd_vma) (indx) << 32) + (bfd_vma) (howto->type));
      irela[0].r_addend = addend;

      erela = ((Elf64_External_Rela *) rel_hdr->contents
               + ((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count);

      if (bed->s->swap_reloca_out)
        (*bed->s->swap_reloca_out) (output_bfd, irela, (bfd_byte *) erela);
      else
        bfd_elf64_swap_reloca_out (output_bfd, irela, erela);
    }

  ++((struct bfd_elf_section_data*)output_section->used_by_bfd)->rel_count;

  return true;
}



boolean
bfd_elf64_create_pointer_linker_section (abfd, info, lsect, h, rel)
     bfd *abfd;
     struct bfd_link_info *info;
     elf_linker_section_t *lsect;
     struct elf_link_hash_entry *h;
     const Elf_Internal_Rela *rel;
{
  elf_linker_section_pointers_t **ptr_linker_section_ptr = ((void *)0);
  elf_linker_section_pointers_t *linker_section_ptr;
  unsigned long r_symndx = ((rel->r_info) >> 32);
  bfd_size_type amt;

  { if (!(lsect != ((void *)0))) bfd_assert("elflink.h",7059); };


  if (h != ((void *)0))
    {

      if (_bfd_elf_find_pointer_linker_section (h->linker_section_pointer,
                                                rel->r_addend,
                                                lsect->which))
        return true;

      ptr_linker_section_ptr = &h->linker_section_pointer;

      if (h->dynindx == -1)
        {
          if (! _bfd_elf_link_record_dynamic_symbol (info, h))
            return false;
        }

      if (lsect->rel_section)
        lsect->rel_section->_raw_size += sizeof (Elf64_External_Rela);
    }
  else
    {

      elf_linker_section_pointers_t **ptr = (((abfd) -> tdata.elf_obj_data) -> linker_section_pointers);


      if (!ptr)
        {
          unsigned int num_symbols = ((abfd) -> tdata.elf_obj_data)->symtab_hdr.sh_info;
          register unsigned int i;

          amt = num_symbols;
          amt *= sizeof (elf_linker_section_pointers_t *);
          ptr = (elf_linker_section_pointers_t **) bfd_alloc (abfd, amt);

          if (!ptr)
            return false;

          (((abfd) -> tdata.elf_obj_data) -> linker_section_pointers) = ptr;
          for (i = 0; i < num_symbols; i++)
            ptr[i] = (elf_linker_section_pointers_t *) 0;
        }


      if (_bfd_elf_find_pointer_linker_section (ptr[r_symndx],
                                                rel->r_addend,
                                                lsect->which))
        return true;

      ptr_linker_section_ptr = &ptr[r_symndx];

      if (info->shared)
        {



          { if (!(lsect->rel_section != ((void *)0))) bfd_assert("elflink.h",7117); };
          lsect->rel_section->_raw_size += sizeof (Elf64_External_Rela);
        }
    }



  { if (!(ptr_linker_section_ptr != ((void *)0))) bfd_assert("elflink.h",7124); };
  amt = sizeof (elf_linker_section_pointers_t);
  linker_section_ptr = (elf_linker_section_pointers_t *) bfd_alloc (abfd, amt);

  if (!linker_section_ptr)
    return false;

  linker_section_ptr->next = *ptr_linker_section_ptr;
  linker_section_ptr->addend = rel->r_addend;
  linker_section_ptr->which = lsect->which;
  linker_section_ptr->written_address_p = false;
  *ptr_linker_section_ptr = linker_section_ptr;
# 7158 "elflink.h"
    linker_section_ptr->offset = lsect->section->_raw_size;

  lsect->section->_raw_size += 64 / 8;
# 7169 "elflink.h"
  return true;
}
# 7181 "elflink.h"
bfd_vma
bfd_elf64_finish_pointer_linker_section (output_bfd, input_bfd, info, lsect, h,
                                   relocation, rel, relative_reloc)
     bfd *output_bfd;
     bfd *input_bfd;
     struct bfd_link_info *info;
     elf_linker_section_t *lsect;
     struct elf_link_hash_entry *h;
     bfd_vma relocation;
     const Elf_Internal_Rela *rel;
     int relative_reloc;
{
  elf_linker_section_pointers_t *linker_section_ptr;

  { if (!(lsect != ((void *)0))) bfd_assert("elflink.h",7195); };

  if (h != ((void *)0))
    {

      linker_section_ptr = (_bfd_elf_find_pointer_linker_section
                            (h->linker_section_pointer,
                             rel->r_addend,
                             lsect->which));

      { if (!(linker_section_ptr != ((void *)0))) bfd_assert("elflink.h",7205); };

      if (! ((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created
          || (info->shared
              && info->symbolic
              && (h->elf_link_hash_flags & 02)))
        {
# 7220 "elflink.h"
          if (!linker_section_ptr->written_address_p)
            {
              linker_section_ptr->written_address_p = true;
              ((*((output_bfd)->xvec->bfd_putx64)) ((relocation + linker_section_ptr->addend), ((lsect->section->contents + linker_section_ptr->offset))));



            }
        }
    }
  else
    {

      unsigned long r_symndx = ((rel->r_info) >> 32);
      { if (!((((input_bfd) -> tdata.elf_obj_data) -> linker_section_pointers) != ((void *)0))) bfd_assert("elflink.h",7234); };
      { if (!((((input_bfd) -> tdata.elf_obj_data) -> linker_section_pointers)[r_symndx] != ((void *)0))) bfd_assert("elflink.h",7235); };
      linker_section_ptr = (_bfd_elf_find_pointer_linker_section
                            ((((input_bfd) -> tdata.elf_obj_data) -> linker_section_pointers)[r_symndx],
                             rel->r_addend,
                             lsect->which));

      { if (!(linker_section_ptr != ((void *)0))) bfd_assert("elflink.h",7241); };


      if (!linker_section_ptr->written_address_p)
        {
          linker_section_ptr->written_address_p = true;
          ((*((output_bfd)->xvec->bfd_putx64)) ((relocation + linker_section_ptr->addend), (lsect->section->contents + linker_section_ptr->offset)));


          if (info->shared)
            {
              asection *srel = lsect->rel_section;
              Elf_Internal_Rela *outrel;
              Elf64_External_Rela *erel;
              struct elf_backend_data *bed = ((struct elf_backend_data *) (output_bfd)->xvec->backend_data);
              unsigned int i;
              bfd_size_type amt;

              amt = sizeof (Elf_Internal_Rela) * bed->s->int_rels_per_ext_rel;
              outrel = (Elf_Internal_Rela *) bfd_zmalloc (amt);
              if (outrel == ((void *)0))
                {
                  (*_bfd_error_handler) (dcgettext ("bfd", "Error: out of memory", __LC_MESSAGES));
                  return 0;
                }



              if (!srel)
                {
                  srel = bfd_get_section_by_name (((struct elf_link_hash_table *) ((info)->hash))->dynobj,
                                                  lsect->rel_name);
                  lsect->rel_section = srel;
                }

              { if (!(srel != ((void *)0))) bfd_assert("elflink.h",7276); };

              for (i = 0; i < bed->s->int_rels_per_ext_rel; i++)
                outrel[i].r_offset = (lsect->section->output_section->vma
                                      + lsect->section->output_offset
                                      + linker_section_ptr->offset);
              outrel[0].r_info = (((bfd_vma) (0) << 32) + (bfd_vma) (relative_reloc));
              outrel[0].r_addend = 0;
              erel = (Elf64_External_Rela *) lsect->section->contents;
              erel += ((struct bfd_elf_section_data*)lsect->section->used_by_bfd)->rel_count;
              bfd_elf64_swap_reloca_out (output_bfd, outrel, erel);
              ++((struct bfd_elf_section_data*)lsect->section->used_by_bfd)->rel_count;

              free (outrel);
            }
        }
    }

  relocation = (lsect->section->output_offset
                + linker_section_ptr->offset
                - lsect->hole_offset
                - lsect->sym_offset);
# 7307 "elflink.h"
  return relocation - linker_section_ptr->addend;
}



static boolean elf_gc_mark
  (struct bfd_link_info *info, asection *sec, asection * (*gc_mark_hook) (bfd *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *));




static boolean elf_gc_sweep
  (struct bfd_link_info *info, boolean (*gc_sweep_hook) (bfd *abfd, struct bfd_link_info *info, asection *o, const Elf_Internal_Rela *relocs));




static boolean elf_gc_sweep_symbol
  (struct elf_link_hash_entry *h, void * idxptr);

static boolean elf_gc_allocate_got_offsets
  (struct elf_link_hash_entry *h, void * offarg);

static boolean elf_gc_propagate_vtable_entries_used
  (struct elf_link_hash_entry *h, void * dummy);

static boolean elf_gc_smash_unused_vtentry_relocs
  (struct elf_link_hash_entry *h, void * dummy);





static boolean
elf_gc_mark (info, sec, gc_mark_hook)
     struct bfd_link_info *info;
     asection *sec;
     asection * (*gc_mark_hook)
       (bfd *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *, Elf_Internal_Sym *);

{
  boolean ret;
  asection *group_sec;

  sec->gc_mark = 1;


  group_sec = ((struct bfd_elf_section_data*)sec->used_by_bfd)->next_in_group;
  if (group_sec && !group_sec->gc_mark)
    if (!elf_gc_mark (info, group_sec, gc_mark_hook))
      return false;


  ret = true;
  if ((sec->flags & 0x004) != 0 && sec->reloc_count > 0)
    {
      Elf_Internal_Rela *relstart, *rel, *relend;
      Elf_Internal_Shdr *symtab_hdr;
      struct elf_link_hash_entry **sym_hashes;
      size_t nlocsyms;
      size_t extsymoff;
      Elf64_External_Sym *locsyms, *freesyms = ((void *)0);
      bfd *input_bfd = sec->owner;
      struct elf_backend_data *bed = ((struct elf_backend_data *) (input_bfd)->xvec->backend_data);




      symtab_hdr = &((input_bfd) -> tdata.elf_obj_data)->symtab_hdr;
      sym_hashes = (((input_bfd) -> tdata.elf_obj_data) -> sym_hashes);


      if ((((input_bfd) -> tdata.elf_obj_data) -> bad_symtab))
        {
          nlocsyms = symtab_hdr->sh_size / sizeof (Elf64_External_Sym);
          extsymoff = 0;
        }
      else
        extsymoff = nlocsyms = symtab_hdr->sh_info;
      if (symtab_hdr->contents)
        locsyms = (Elf64_External_Sym *) symtab_hdr->contents;
      else if (nlocsyms == 0)
        locsyms = ((void *)0);
      else
        {
          bfd_size_type amt = nlocsyms * sizeof (Elf64_External_Sym);
          locsyms = freesyms = bfd_malloc (amt);
          if (freesyms == ((void *)0)
              || bfd_seek (input_bfd, symtab_hdr->sh_offset, 0) != 0
              || bfd_bread (locsyms, amt, input_bfd) != amt)
            {
              ret = false;
              goto out1;
            }
        }


      relstart = (_bfd_elf64_link_read_relocs
                  (sec->owner, sec, ((void *)0), (Elf_Internal_Rela *) ((void *)0),
                   info->keep_memory));
      if (relstart == ((void *)0))
        {
          ret = false;
          goto out1;
        }
      relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;

      for (rel = relstart; rel < relend; rel++)
        {
          unsigned long r_symndx;
          asection *rsec;
          struct elf_link_hash_entry *h;
          Elf_Internal_Sym s;

          r_symndx = ((rel->r_info) >> 32);
          if (r_symndx == 0)
            continue;

          if ((((sec->owner) -> tdata.elf_obj_data) -> bad_symtab))
            {
              bfd_elf64_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
              if ((((unsigned int)(s.st_info)) >> 4) == 0)
                rsec = (*gc_mark_hook) (sec->owner, info, rel, ((void *)0), &s);
              else
                {
                  h = sym_hashes[r_symndx - extsymoff];
                  rsec = (*gc_mark_hook) (sec->owner, info, rel, h, ((void *)0));
                }
            }
          else if (r_symndx >= nlocsyms)
            {
              h = sym_hashes[r_symndx - extsymoff];
              rsec = (*gc_mark_hook) (sec->owner, info, rel, h, ((void *)0));
            }
          else
            {
              bfd_elf64_swap_symbol_in (input_bfd, &locsyms[r_symndx], &s);
              rsec = (*gc_mark_hook) (sec->owner, info, rel, ((void *)0), &s);
            }

          if (rsec && !rsec->gc_mark)
            if (!elf_gc_mark (info, rsec, gc_mark_hook))
              {
                ret = false;
                goto out2;
              }
        }

    out2:
      if (!info->keep_memory)
        free (relstart);
    out1:
      if (freesyms)
        free (freesyms);
    }

  return ret;
}



static boolean
elf_gc_sweep (info, gc_sweep_hook)
     struct bfd_link_info *info;
     boolean (*gc_sweep_hook)
       (bfd *abfd, struct bfd_link_info *info, asection *o, const Elf_Internal_Rela *relocs);

{
  bfd *sub;

  for (sub = info->input_bfds; sub != ((void *)0); sub = sub->link_next)
    {
      asection *o;

      if (((sub)->xvec->flavour) != bfd_target_elf_flavour)
        continue;

      for (o = sub->sections; o != ((void *)0); o = o->next)
        {

          if ((o->flags & 0x800000)
              || (o->flags & 0x10000))
            o->gc_mark = 1;

          if (o->gc_mark)
            continue;


          if (o->flags & 0x40000)
            continue;



          o->flags |= 0x40000;



          if (gc_sweep_hook
              && (o->flags & 0x004) && o->reloc_count > 0)
            {
              Elf_Internal_Rela *internal_relocs;
              boolean r;

              internal_relocs = (_bfd_elf64_link_read_relocs
                                 (o->owner, o, ((void *)0), ((void *)0), info->keep_memory));
              if (internal_relocs == ((void *)0))
                return false;

              r = (*gc_sweep_hook) (o->owner, info, o, internal_relocs);

              if (!info->keep_memory)
                free (internal_relocs);

              if (!r)
                return false;
            }
        }
    }




  {
    int i = 0;

    (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_gc_sweep_symbol), ((void *) &i)));



    ((struct elf_link_hash_table *) ((info)->hash))->dynsymcount = i;
  }

  return true;
}



static boolean
elf_gc_sweep_symbol (h, idxptr)
     struct elf_link_hash_entry *h;
     void * idxptr;
{
  int *idx = (int *) idxptr;

  if (h->dynindx != -1
      && ((h->root.type != bfd_link_hash_defined
           && h->root.type != bfd_link_hash_defweak)
          || h->root.u.def.section->gc_mark))
    h->dynindx = (*idx)++;

  return true;
}




static boolean
elf_gc_propagate_vtable_entries_used (h, okp)
     struct elf_link_hash_entry *h;
     void * okp;
{

  if (h->vtable_parent == ((void *)0))
    return true;


  if (h->vtable_parent == (struct elf_link_hash_entry *) -1)
    return true;


  if (h->vtable_entries_used && h->vtable_entries_used[-1])
    return true;


  elf_gc_propagate_vtable_entries_used (h->vtable_parent, okp);

  if (h->vtable_entries_used == ((void *)0))
    {


      h->vtable_entries_used = h->vtable_parent->vtable_entries_used;
      h->vtable_entries_size = h->vtable_parent->vtable_entries_size;
    }
  else
    {
      size_t n;
      boolean *cu, *pu;


      cu = h->vtable_entries_used;
      cu[-1] = true;
      pu = h->vtable_parent->vtable_entries_used;
      if (pu != ((void *)0))
        {
          asection *sec = h->root.u.def.section;
          struct elf_backend_data *bed = ((struct elf_backend_data *) (sec->owner)->xvec->backend_data);
          int file_align = bed->s->file_align;

          n = h->vtable_parent->vtable_entries_size / file_align;
          while (n--)
            {
              if (*pu)
                *cu = true;
              pu++;
              cu++;
            }
        }
    }

  return true;
}

static boolean
elf_gc_smash_unused_vtentry_relocs (h, okp)
     struct elf_link_hash_entry *h;
     void * okp;
{
  asection *sec;
  bfd_vma hstart, hend;
  Elf_Internal_Rela *relstart, *relend, *rel;
  struct elf_backend_data *bed;
  int file_align;



  if (h->vtable_parent == ((void *)0))
    return true;

  { if (!(h->root.type == bfd_link_hash_defined || h->root.type == bfd_link_hash_defweak)) bfd_assert("elflink.h",7636); };


  sec = h->root.u.def.section;
  hstart = h->root.u.def.value;
  hend = hstart + h->size;

  relstart = (_bfd_elf64_link_read_relocs
              (sec->owner, sec, ((void *)0), (Elf_Internal_Rela *) ((void *)0), true));
  if (!relstart)
    return *(boolean *) okp = false;
  bed = ((struct elf_backend_data *) (sec->owner)->xvec->backend_data);
  file_align = bed->s->file_align;

  relend = relstart + sec->reloc_count * bed->s->int_rels_per_ext_rel;

  for (rel = relstart; rel < relend; ++rel)
    if (rel->r_offset >= hstart && rel->r_offset < hend)
      {

        if (h->vtable_entries_used
            && (rel->r_offset - hstart) < h->vtable_entries_size)
          {
            bfd_vma entry = (rel->r_offset - hstart) / file_align;
            if (h->vtable_entries_used[entry])
              continue;
          }

        rel->r_offset = rel->r_info = rel->r_addend = 0;
      }

  return true;
}



boolean
_bfd_elf64_gc_sections (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  boolean ok = true;
  bfd *sub;
  asection * (*gc_mark_hook)
    (bfd *, struct bfd_link_info *, Elf_Internal_Rela *, struct elf_link_hash_entry *h, Elf_Internal_Sym *);


  if (!((struct elf_backend_data *) (abfd)->xvec->backend_data)->can_gc_sections
      || info->relocateable || info->emitrelocations
      || ((struct elf_link_hash_table *) ((info)->hash))->dynamic_sections_created)
    return true;


  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_gc_propagate_vtable_entries_used), ((void *) &ok)));


  if (!ok)
    return false;


  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_gc_smash_unused_vtentry_relocs), ((void *) &ok)));


  if (!ok)
    return false;



  gc_mark_hook = ((struct elf_backend_data *) (abfd)->xvec->backend_data)->gc_mark_hook;
  for (sub = info->input_bfds; sub != ((void *)0); sub = sub->link_next)
    {
      asection *o;

      if (((sub)->xvec->flavour) != bfd_target_elf_flavour)
        continue;

      for (o = sub->sections; o != ((void *)0); o = o->next)
        {
          if (o->flags & 0x1000000)
            if (!elf_gc_mark (info, o, gc_mark_hook))
              return false;
        }
    }


  if (!elf_gc_sweep (info, ((struct elf_backend_data *) (abfd)->xvec->backend_data)->gc_sweep_hook))
    return false;

  return true;
}



boolean
_bfd_elf64_gc_record_vtinherit (abfd, sec, h, offset)
     bfd *abfd;
     asection *sec;
     struct elf_link_hash_entry *h;
     bfd_vma offset;
{
  struct elf_link_hash_entry **sym_hashes, **sym_hashes_end;
  struct elf_link_hash_entry **search, *child;
  bfd_size_type extsymcount;




  extsymcount = ((abfd) -> tdata.elf_obj_data)->symtab_hdr.sh_size/sizeof (Elf64_External_Sym);
  if (!(((abfd) -> tdata.elf_obj_data) -> bad_symtab))
    extsymcount -= ((abfd) -> tdata.elf_obj_data)->symtab_hdr.sh_info;

  sym_hashes = (((abfd) -> tdata.elf_obj_data) -> sym_hashes);
  sym_hashes_end = sym_hashes + extsymcount;



  for (search = sym_hashes; search != sym_hashes_end; ++search)
    {
      if ((child = *search) != ((void *)0)
          && (child->root.type == bfd_link_hash_defined
              || child->root.type == bfd_link_hash_defweak)
          && child->root.u.def.section == sec
          && child->root.u.def.value == offset)
        goto win;
    }

  (*_bfd_error_handler) ("%s: %s+%lu: No symbol found for INHERIT",
                         bfd_archive_filename (abfd), sec->name,
                         (unsigned long) offset);
  bfd_set_error (bfd_error_invalid_operation);
  return false;

 win:
  if (!h)
    {





      child->vtable_parent = (struct elf_link_hash_entry *) -1;
    }
  else
    child->vtable_parent = h;

  return true;
}



boolean
_bfd_elf64_gc_record_vtentry (abfd, sec, h, addend)
     bfd *abfd __attribute__ ((__unused__));
     asection *sec __attribute__ ((__unused__));
     struct elf_link_hash_entry *h;
     bfd_vma addend;
{
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  int file_align = bed->s->file_align;

  if (addend >= h->vtable_entries_size)
    {
      size_t size, bytes;
      boolean *ptr = h->vtable_entries_used;



      if (h->root.type == bfd_link_hash_undefined)
        size = addend;
      else
        {
          size = h->size;
          if (size < addend)
            {


              size = addend;
            }
        }



      bytes = (size / file_align + 1) * sizeof (boolean);

      if (ptr)
        {
          ptr = bfd_realloc (ptr - 1, (bfd_size_type) bytes);

          if (ptr != ((void *)0))
            {
              size_t oldbytes;

              oldbytes = ((h->vtable_entries_size / file_align + 1)
                          * sizeof (boolean));
              (__extension__ (__builtin_constant_p (0) && (0) == '\0' ? ({ void *__s = (((char *) ptr) + oldbytes); __builtin_memset (__s, '\0', bytes - oldbytes); __s; }) : memset (((char *) ptr) + oldbytes, 0, bytes - oldbytes)));
            }
        }
      else
        ptr = bfd_zmalloc ((bfd_size_type) bytes);

      if (ptr == ((void *)0))
        return false;


      h->vtable_entries_used = ptr + 1;
      h->vtable_entries_size = size;
    }

  h->vtable_entries_used[addend / file_align] = true;

  return true;
}




boolean
_bfd_elf64_gc_common_finalize_got_offsets (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  bfd *i;
  struct elf_backend_data *bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);
  bfd_vma gotoff;



  if (bed->want_got_plt)
    gotoff = 0;
  else
    gotoff = bed->got_header_size;


  for (i = info->input_bfds; i; i = i->link_next)
    {
      bfd_signed_vma *local_got;
      bfd_size_type j, locsymcount;
      Elf_Internal_Shdr *symtab_hdr;

      if (((i)->xvec->flavour) != bfd_target_elf_flavour)
        continue;

      local_got = (((i) -> tdata.elf_obj_data) -> local_got.refcounts);
      if (!local_got)
        continue;

      symtab_hdr = &((i) -> tdata.elf_obj_data)->symtab_hdr;
      if ((((i) -> tdata.elf_obj_data) -> bad_symtab))
        locsymcount = symtab_hdr->sh_size / sizeof (Elf64_External_Sym);
      else
        locsymcount = symtab_hdr->sh_info;

      for (j = 0; j < locsymcount; ++j)
        {
          if (local_got[j] > 0)
            {
              local_got[j] = gotoff;
              gotoff += 64 / 8;
            }
          else
            local_got[j] = (bfd_vma) -1;
        }
    }



  (bfd_link_hash_traverse (&(((struct elf_link_hash_table *) ((info)->hash)))->root, (boolean (*) (struct bfd_link_hash_entry *, void *)) (elf_gc_allocate_got_offsets), ((void *) &gotoff)));


  return true;
}




static boolean
elf_gc_allocate_got_offsets (h, offarg)
     struct elf_link_hash_entry *h;
     void * offarg;
{
  bfd_vma *off = (bfd_vma *) offarg;

  if (h->got.refcount > 0)
    {
      h->got.offset = off[0];
      off[0] += 64 / 8;
    }
  else
    h->got.offset = (bfd_vma) -1;

  return true;
}




boolean
_bfd_elf64_gc_common_final_link (abfd, info)
     bfd *abfd;
     struct bfd_link_info *info;
{
  if (!_bfd_elf64_gc_common_finalize_got_offsets (abfd, info))
    return false;


  return bfd_elf64_bfd_final_link (abfd, info);
}




static boolean
elf_collect_hash_codes (h, data)
     struct elf_link_hash_entry *h;
     void * data;
{
  unsigned long **valuep = (unsigned long **) data;
  const char *name;
  char *p;
  unsigned long ha;
  char *alc = ((void *)0);


  if (h->dynindx == -1)
    return true;

  name = h->root.root.string;
  p = (__extension__ (__builtin_constant_p ('@') && ('@') == '\0' ? (char *) __rawmemchr (name, '@') : strchr (name, '@')));
  if (p != ((void *)0))
    {
      alc = bfd_malloc ((bfd_size_type) (p - name + 1));
      memcpy (alc, name, (size_t) (p - name));
      alc[p - name] = '\0';
      name = alc;
    }


  ha = bfd_elf_hash (name);


  *(*valuep)++ = ha;



  h->elf_hash_value = ha;

  if (alc != ((void *)0))
    free (alc);

  return true;
}

boolean
_bfd_elf64_reloc_symbol_deleted_p (offset, cookie)
     bfd_vma offset;
     void * cookie;
{
  struct elf_reloc_cookie *rcookie = (struct elf_reloc_cookie *)cookie;

  if (rcookie->bad_symtab)
    rcookie->rel = rcookie->rels;

  for (; rcookie->rel < rcookie->relend; rcookie->rel++)
    {
      unsigned long r_symndx = ((rcookie->rel->r_info) >> 32);
      Elf_Internal_Sym isym;

      if (! rcookie->bad_symtab)
        if (rcookie->rel->r_offset > offset)
          return false;
      if (rcookie->rel->r_offset != offset)
        continue;

      if (rcookie->locsyms && r_symndx < rcookie->locsymcount)
        bfd_elf64_swap_symbol_in (rcookie->abfd,
                            (Elf64_External_Sym *) rcookie->locsyms + r_symndx,
                            &isym);

      if (r_symndx >= rcookie->locsymcount
          || (rcookie->locsyms
              && (((unsigned int)(isym.st_info)) >> 4) != 0))
        {
          struct elf_link_hash_entry *h;

          h = rcookie->sym_hashes[r_symndx - rcookie->extsymoff];

          while (h->root.type == bfd_link_hash_indirect
                 || h->root.type == bfd_link_hash_warning)
            h = (struct elf_link_hash_entry *) h->root.u.i.link;

          if ((h->root.type == bfd_link_hash_defined
               || h->root.type == bfd_link_hash_defweak)
              && ! ((h->root.u.def.section) == ((asection *) &bfd_abs_section))
              && ((h->root.u.def.section ->output_section) == ((asection *) &bfd_abs_section)))

            return true;
          else
            return false;
        }
      else if (rcookie->locsyms)
        {



          asection *isec;


          if (isym.st_shndx > 0 && isym.st_shndx < 0xFF00)
            {
              isec = bfd_section_from_elf_index (rcookie->abfd, isym.st_shndx);
              if (isec != ((void *)0)
                  && ! ((isec) == ((asection *) &bfd_abs_section))
                  && ((isec->output_section) == ((asection *) &bfd_abs_section)))
                return true;
            }
        }
      return false;
    }
  return false;
}






boolean
bfd_elf64_discard_info (info)
     struct bfd_link_info *info;
{
  struct elf_reloc_cookie cookie;
  asection *o;
  Elf_Internal_Shdr *symtab_hdr;
  Elf64_External_Sym *freesyms;
  struct elf_backend_data *bed;
  bfd *abfd;
  boolean ret = false;

  if (info->relocateable
      || info->traditional_format
      || info->hash->creator->flavour != bfd_target_elf_flavour
      || ! ((info)->hash->type == bfd_link_elf_hash_table)
      || info->strip == strip_all
      || info->strip == strip_debugger)
    return false;
  for (abfd = info->input_bfds; abfd != ((void *)0); abfd = abfd->link_next)
    {
      if (((abfd)->xvec->flavour) != bfd_target_elf_flavour)
        continue;

      bed = ((struct elf_backend_data *) (abfd)->xvec->backend_data);

      if ((abfd->flags & 0x40) != 0)
        continue;

      o = bfd_get_section_by_name (abfd, ".stab");
      if (! o && ! bed->elf_backend_discard_info)
        continue;

      symtab_hdr = &((abfd) -> tdata.elf_obj_data)->symtab_hdr;

      cookie.abfd = abfd;
      cookie.sym_hashes = (((abfd) -> tdata.elf_obj_data) -> sym_hashes);
      cookie.bad_symtab = (((abfd) -> tdata.elf_obj_data) -> bad_symtab);
      if (cookie.bad_symtab)
        {
          cookie.locsymcount =
            symtab_hdr->sh_size / sizeof (Elf64_External_Sym);
          cookie.extsymoff = 0;
        }
      else
        {
          cookie.locsymcount = symtab_hdr->sh_info;
          cookie.extsymoff = symtab_hdr->sh_info;
        }

      freesyms = ((void *)0);
      if (symtab_hdr->contents)
        cookie.locsyms = (void *) symtab_hdr->contents;
      else if (cookie.locsymcount == 0)
        cookie.locsyms = ((void *)0);
      else
        {
          bfd_size_type amt = cookie.locsymcount * sizeof (Elf64_External_Sym);
          cookie.locsyms = bfd_malloc (amt);
          if (cookie.locsyms == ((void *)0)
              || bfd_seek (abfd, symtab_hdr->sh_offset, 0) != 0
              || bfd_bread (cookie.locsyms, amt, abfd) != amt)
            {


              if (cookie.locsyms)
                free (cookie.locsyms);
              cookie.locsyms = ((void *)0);
            }
          else
            {
              freesyms = cookie.locsyms;
            }
        }

      if (o)
        {
          cookie.rels = (_bfd_elf64_link_read_relocs
                         (abfd, o, (void *) ((void *)0),
                          (Elf_Internal_Rela *) ((void *)0),
                          info->keep_memory));
          if (cookie.rels)
            {
              cookie.rel = cookie.rels;
              cookie.relend =
                cookie.rels + o->reloc_count * bed->s->int_rels_per_ext_rel;
              if (_bfd_discard_section_stabs (abfd, o,
                                              ((struct bfd_elf_section_data*)o->used_by_bfd)->stab_info,
                                              _bfd_elf64_reloc_symbol_deleted_p,
                                              &cookie))
                ret = true;
              if (! info->keep_memory)
                free (cookie.rels);
            }
        }

      if (bed->elf_backend_discard_info)
        {
          if (bed->elf_backend_discard_info (abfd, &cookie, info))
            ret = true;
        }

      if (freesyms)
        free (freesyms);
    }
  return ret;
}

static boolean
elf_section_ignore_discarded_relocs (sec)
     asection *sec;
{
  if (__extension__ ({ size_t __s1_len, __s2_len; (__builtin_constant_p (sec->name) && __builtin_constant_p (".stab") && (__s1_len = strlen (sec->name), __s2_len = strlen (".stab"), (!((size_t)(const void *)((sec->name) + 1) - (size_t)(const void *)(sec-
>Fix:
	
>Release-Note:
>Audit-Trail:
>Unformatted:
 >name) == 1) || __s1_len >= 4) && (!((size_t)(const void *)((".stab") + 1) - (size_t)(const void *)(".stab") == 1) || __s2_len >= 4)) ? memcmp ((__const char *) (sec->name), (__const char *) (".stab"), (__s1_len < __s2_len ? __s1_len : __s2_len) + 1) : ( __builtin_constant_p (sec->name) && ((size_t)(const void *)((sec->name) + 1) - (size_t)(const void *)(sec->name) == 1) && (__s1_len = strlen (sec->name), __s1_len < 4) ? (__builtin_constant_p (".stab") && ((size_t)(const void *)((".stab") + 1) - (size_t) (const void *)(".stab") == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (sec->name))[0] - ((__const unsigned char *) (__const char *)(".stab"))[0]); if (__s1_len > 0 && __result ==!
  0) { __result = (((__const unsigned char *) (__const char *) (sec->name))[1] - ((__const unsigned char *) (__const char *) (".stab"))[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (sec->name))[2] - ((_ _const unsigned char *) (__const char *) (".stab"))[2]); if (__s1_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (sec->name))[3] - ((__const unsigned char *) (__const char *) (".stab"))[3]); } } __result; })) : (__exten sion__ ({ __const unsigned char *__s2 = (__const unsigned char *) (__const char *) (".stab"); register int __result = (((__const unsigned char *) (__const char *) (sec->name))[0] - __s2[0]); if (__s1_len > 0 && __result == 0) { __result = (((__const unsi gned char *) (__const char *) (sec->name))[1] - __s2[1]); if (__s1_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (sec->name))[2] - __s2[2]); if (__s1_len > 2 && __result == 0) __result = ((!
 (__const unsigned char *) (__const char *) (sec->name))[3] - !
 __s2[3]); } } __result; }))) : (__builtin_constant_p (".stab") && ((size_t)(const void *)((".stab") + 1) - (size_t)(const void *)(".stab") == 1) && (__s2_len = strlen (".stab"), __s2_len < 4) ? (__builtin_constant_p (sec->name) && ((size_t)(const void *) ((sec->name) + 1) - (size_t)(const void *)(sec->name) == 1) ? (__extension__ ({ register int __result = (((__const unsigned char *) (__const char *) (sec->name))[0] - ((__const unsigned char *) (__const char *)(".stab"))[0]); if (__s2_len > 0 && __result  == 0) { __result = (((__const unsigned char *) (__const char *) (sec->name))[1] - ((__const unsigned char *) (__const char *) (".stab"))[1]); if (__s2_len > 1 && __result == 0) { __result = (((__const unsigned char *) (__const char *) (sec->name))[2] -  ((__const unsigned char *) (__const char *) (".stab"))[2]); if (__s2_len > 2 && __result == 0) __result = (((__const unsigned char *) (__const char *) (sec->name))[3] - ((__const unsigned char *) (__const char *) (".stab"))[3])!
 ; } } __result; })) : (__extension__ ({ __const unsigned char *__s1 = (__const unsigned char *) (__const char *) (sec->name); register int __result = __s1[0] - ((__const unsigned char *) (__const char *) (".stab"))[0]; if (__s2_len > 0 && __result == 0)  { __result = (__s1[1] - ((__const unsigned char *) (__const char *) (".stab"))[1]); if (__s2_len > 1 && __result == 0) { __result = (__s1[2] - ((__const unsigned char *) (__const char *) (".stab"))[2]); if (__s2_len > 2 && __result == 0) __result = (__s1 [3] - ((__const unsigned char *) (__const char *) (".stab"))[3]); } } __result; }))) : strcmp (sec->name, ".stab")))); }) == 0)
     return true;
   else if ((((struct elf_backend_data *) (sec->owner)->xvec->backend_data)
             ->elf_backend_ignore_discarded_relocs != ((void *)0))
            && (*((struct elf_backend_data *) (sec->owner)->xvec->backend_data)
                ->elf_backend_ignore_discarded_relocs) (sec))
     return true;
   else
     return false;
 }
 # 1554 "elfcode.h" 2
 
 
 const struct elf_size_info _bfd_elf64_size_info = {
   sizeof (Elf64_External_Ehdr),
   sizeof (Elf64_External_Phdr),
   sizeof (Elf64_External_Shdr),
   sizeof (Elf64_External_Rel),
   sizeof (Elf64_External_Rela),
   sizeof (Elf64_External_Sym),
   sizeof (Elf64_External_Dyn),
   sizeof (Elf_External_Note),
   4,
   1,
   64, 8,
   2, 1,
   bfd_elf64_write_out_phdrs,
   bfd_elf64_write_shdrs_and_ehdr,
   bfd_elf64_write_relocs,
   bfd_elf64_swap_symbol_out,
   bfd_elf64_slurp_reloc_table,
   bfd_elf64_slurp_symbol_table,
   bfd_elf64_swap_dyn_in,
   bfd_elf64_swap_dyn_out,
   ((void *)0),
   ((void *)0),
   ((void *)0),
   ((void *)0)
 };
 # 23 "elf64.c" 2


^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2002-04-26  9:07 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2002-04-26  2:07 c/5124: gcc fails to compile binutils on alpha rth
  -- strict thread matches above, loose matches on Subject: below --
2001-12-15  6:06 dl8bcu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).