| Index: bfd/elf-bfd.h
|
| diff --git a/bfd/elf-bfd.h b/bfd/elf-bfd.h
|
| index 486b76eecf123488e11785a9b35d30dad74479b4..889ce128b4b526ad731af03bee0688b7a3774d4c 100644
|
| --- a/bfd/elf-bfd.h
|
| +++ b/bfd/elf-bfd.h
|
| @@ -1,6 +1,6 @@
|
| /* BFD back-end data structures for ELF files.
|
| Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
|
| - 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011
|
| + 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
| Free Software Foundation, Inc.
|
| Written by Cygnus Support.
|
|
|
| @@ -428,6 +428,7 @@ enum elf_target_id
|
| TIC6X_ELF_DATA,
|
| X86_64_ELF_DATA,
|
| XTENSA_ELF_DATA,
|
| + XGATE_ELF_DATA,
|
| TILEGX_ELF_DATA,
|
| TILEPRO_ELF_DATA,
|
| GENERIC_ELF_DATA
|
| @@ -1185,7 +1186,8 @@ struct elf_backend_data
|
| see elf.c, elfcode.h. */
|
| bfd *(*elf_backend_bfd_from_remote_memory)
|
| (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
|
| - int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr, int len));
|
| + int (*target_read_memory) (bfd_vma vma, bfd_byte *myaddr,
|
| + bfd_size_type len));
|
|
|
| /* This function is used by `_bfd_elf_get_synthetic_symtab';
|
| see elf.c. */
|
| @@ -1221,6 +1223,12 @@ struct elf_backend_data
|
| /* Return TRUE if type is a function symbol type. */
|
| bfd_boolean (*is_function_type) (unsigned int type);
|
|
|
| + /* If the ELF symbol SYM might be a function in SEC, return the
|
| + function size and set *CODE_OFF to the function's entry point,
|
| + otherwise return zero. */
|
| + bfd_size_type (*maybe_function_sym) (const asymbol *sym, asection *sec,
|
| + bfd_vma *code_off);
|
| +
|
| /* Used to handle bad SHF_LINK_ORDER input. */
|
| bfd_error_handler_type link_order_error_handler;
|
|
|
| @@ -1361,6 +1369,9 @@ struct bfd_elf_section_data
|
| /* The ELF header for this section. */
|
| Elf_Internal_Shdr this_hdr;
|
|
|
| + /* INPUT_SECTION_FLAGS if specified in the linker script. */
|
| + struct flag_info *section_flag_info;
|
| +
|
| /* Information about the REL and RELA reloc sections associated
|
| with this section, if any. */
|
| struct bfd_elf_section_reloc_data rel, rela;
|
| @@ -1413,14 +1424,14 @@ struct bfd_elf_section_data
|
| void *sec_info;
|
| };
|
|
|
| -#define elf_section_data(sec) ((struct bfd_elf_section_data*)(sec)->used_by_bfd)
|
| +#define elf_section_data(sec) ((struct bfd_elf_section_data*)(sec)->used_by_bfd)
|
| #define elf_linked_to_section(sec) (elf_section_data(sec)->linked_to)
|
| -#define elf_section_type(sec) (elf_section_data(sec)->this_hdr.sh_type)
|
| -#define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags)
|
| -#define elf_group_name(sec) (elf_section_data(sec)->group.name)
|
| -#define elf_group_id(sec) (elf_section_data(sec)->group.id)
|
| -#define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
|
| -#define elf_fde_list(sec) (elf_section_data(sec)->fde_list)
|
| +#define elf_section_type(sec) (elf_section_data(sec)->this_hdr.sh_type)
|
| +#define elf_section_flags(sec) (elf_section_data(sec)->this_hdr.sh_flags)
|
| +#define elf_group_name(sec) (elf_section_data(sec)->group.name)
|
| +#define elf_group_id(sec) (elf_section_data(sec)->group.id)
|
| +#define elf_next_in_group(sec) (elf_section_data(sec)->next_in_group)
|
| +#define elf_fde_list(sec) (elf_section_data(sec)->fde_list)
|
| #define elf_sec_group(sec) (elf_section_data(sec)->sec_group)
|
|
|
| #define xvec_get_elf_backend_data(xvec) \
|
| @@ -1807,8 +1818,7 @@ extern void bfd_elf_set_group_contents
|
| (bfd *, asection *, void *);
|
| extern asection *_bfd_elf_check_kept_section
|
| (asection *, struct bfd_link_info *);
|
| -extern void _bfd_elf_link_just_syms
|
| - (asection *, struct bfd_link_info *);
|
| +#define _bfd_elf_link_just_syms _bfd_generic_link_just_syms
|
| extern void _bfd_elf_copy_link_hash_symbol_type
|
| (bfd *, struct bfd_link_hash_entry *, struct bfd_link_hash_entry *);
|
| extern bfd_boolean _bfd_elf_size_group_sections
|
| @@ -1942,6 +1952,8 @@ extern bfd_boolean _bfd_elf_write_section_eh_frame
|
| (bfd *, struct bfd_link_info *, asection *, bfd_byte *);
|
| extern bfd_boolean _bfd_elf_write_section_eh_frame_hdr
|
| (bfd *, struct bfd_link_info *);
|
| +extern bfd_boolean _bfd_elf_eh_frame_present
|
| + (struct bfd_link_info *);
|
| extern bfd_boolean _bfd_elf_maybe_strip_eh_frame_hdr
|
| (struct bfd_link_info *);
|
|
|
| @@ -2132,9 +2144,6 @@ extern unsigned int _bfd_elf_common_section_index
|
| extern asection *_bfd_elf_common_section
|
| (asection *);
|
|
|
| -extern void _bfd_dwarf2_cleanup_debug_info
|
| - (bfd *);
|
| -
|
| extern bfd_vma _bfd_elf_default_got_elt_size
|
| (bfd *, struct bfd_link_info *, struct elf_link_hash_entry *, bfd *,
|
| unsigned long);
|
| @@ -2200,10 +2209,13 @@ extern bfd_boolean _bfd_elf_map_sections_to_segments
|
|
|
| extern bfd_boolean _bfd_elf_is_function_type (unsigned int);
|
|
|
| +extern bfd_size_type _bfd_elf_maybe_function_sym (const asymbol *, asection *,
|
| + bfd_vma *);
|
| +
|
| extern int bfd_elf_get_default_section_type (flagword);
|
|
|
| -extern void bfd_elf_lookup_section_flags
|
| - (struct bfd_link_info *, struct flag_info *);
|
| +extern bfd_boolean bfd_elf_lookup_section_flags
|
| + (struct bfd_link_info *, struct flag_info *, asection *);
|
|
|
| extern Elf_Internal_Phdr * _bfd_elf_find_segment_containing_section
|
| (bfd * abfd, asection * section);
|
| @@ -2250,10 +2262,10 @@ extern char *elfcore_write_register_note
|
|
|
| extern bfd *_bfd_elf32_bfd_from_remote_memory
|
| (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
|
| - int (*target_read_memory) (bfd_vma, bfd_byte *, int));
|
| + int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
|
| extern bfd *_bfd_elf64_bfd_from_remote_memory
|
| (bfd *templ, bfd_vma ehdr_vma, bfd_vma *loadbasep,
|
| - int (*target_read_memory) (bfd_vma, bfd_byte *, int));
|
| + int (*target_read_memory) (bfd_vma, bfd_byte *, bfd_size_type));
|
|
|
| extern bfd_vma bfd_elf_obj_attr_size (bfd *);
|
| extern void bfd_elf_set_obj_attr_contents (bfd *, bfd_byte *, bfd_vma);
|
| @@ -2403,10 +2415,12 @@ extern asection _bfd_elf_large_com_section;
|
| link, we remove such relocations. Otherwise, we just want the
|
| section contents zeroed and avoid any special processing. */
|
| #define RELOC_AGAINST_DISCARDED_SECTION(info, input_bfd, input_section, \
|
| - rel, relend, howto, contents) \
|
| + rel, count, relend, \
|
| + howto, index, contents) \
|
| { \
|
| + int i_; \
|
| _bfd_clear_contents (howto, input_bfd, input_section, \
|
| - contents + rel->r_offset); \
|
| + contents + rel[index].r_offset); \
|
| \
|
| if (info->relocatable \
|
| && (input_section->flags & SEC_DEBUGGING)) \
|
| @@ -2418,23 +2432,28 @@ extern asection _bfd_elf_large_com_section;
|
| rel_hdr = _bfd_elf_single_rel_hdr (input_section->output_section); \
|
| \
|
| /* Avoid empty output section. */ \
|
| - if (rel_hdr->sh_size > rel_hdr->sh_entsize) \
|
| + if (rel_hdr->sh_size > count * rel_hdr->sh_entsize) \
|
| { \
|
| - rel_hdr->sh_size -= rel_hdr->sh_entsize; \
|
| + rel_hdr->sh_size -= count * rel_hdr->sh_entsize; \
|
| rel_hdr = _bfd_elf_single_rel_hdr (input_section); \
|
| - rel_hdr->sh_size -= rel_hdr->sh_entsize; \
|
| + rel_hdr->sh_size -= count * rel_hdr->sh_entsize; \
|
| \
|
| - memmove (rel, rel + 1, (relend - rel - 1) * sizeof (*rel)); \
|
| + memmove (rel, rel + count, \
|
| + (relend - rel - count) * sizeof (*rel)); \
|
| \
|
| - input_section->reloc_count--; \
|
| - relend--; \
|
| + input_section->reloc_count -= count; \
|
| + relend -= count; \
|
| rel--; \
|
| continue; \
|
| } \
|
| } \
|
| \
|
| - rel->r_info = 0; \
|
| - rel->r_addend = 0; \
|
| + for (i_ = 0; i_ < count; i_++) \
|
| + { \
|
| + rel[i_].r_info = 0; \
|
| + rel[i_].r_addend = 0; \
|
| + } \
|
| + rel += count - 1; \
|
| continue; \
|
| }
|
|
|
|
|