OLD | NEW |
1 /* SuperH SH64-specific support for 64-bit ELF | 1 /* SuperH SH64-specific support for 64-bit ELF |
2 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, | 2 Copyright 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, |
3 2010, 2011, 2012 Free Software Foundation, Inc. | 3 2010, 2011, 2012 Free Software Foundation, Inc. |
4 | 4 |
5 This file is part of BFD, the Binary File Descriptor library. | 5 This file is part of BFD, the Binary File Descriptor library. |
6 | 6 |
7 This program is free software; you can redistribute it and/or modify | 7 This program is free software; you can redistribute it and/or modify |
8 it under the terms of the GNU General Public License as published by | 8 it under the terms of the GNU General Public License as published by |
9 the Free Software Foundation; either version 3 of the License, or | 9 the Free Software Foundation; either version 3 of the License, or |
10 (at your option) any later version. | 10 (at your option) any later version. |
(...skipping 2406 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2417 | 2417 |
2418 r_symndx = ELF64_R_SYM (rel->r_info); | 2418 r_symndx = ELF64_R_SYM (rel->r_info); |
2419 if (r_symndx < symtab_hdr->sh_info) | 2419 if (r_symndx < symtab_hdr->sh_info) |
2420 h = NULL; | 2420 h = NULL; |
2421 else | 2421 else |
2422 { | 2422 { |
2423 h = sym_hashes[r_symndx - symtab_hdr->sh_info]; | 2423 h = sym_hashes[r_symndx - symtab_hdr->sh_info]; |
2424 while (h->root.type == bfd_link_hash_indirect | 2424 while (h->root.type == bfd_link_hash_indirect |
2425 || h->root.type == bfd_link_hash_warning) | 2425 || h->root.type == bfd_link_hash_warning) |
2426 h = (struct elf_link_hash_entry *) h->root.u.i.link; | 2426 h = (struct elf_link_hash_entry *) h->root.u.i.link; |
| 2427 |
| 2428 /* PR15323, ref flags aren't set for references in the same |
| 2429 object. */ |
| 2430 h->root.non_ir_ref = 1; |
2427 } | 2431 } |
2428 | 2432 |
2429 /* Some relocs require a global offset table. */ | 2433 /* Some relocs require a global offset table. */ |
2430 if (dynobj == NULL) | 2434 if (dynobj == NULL) |
2431 { | 2435 { |
2432 switch (ELF64_R_TYPE (rel->r_info)) | 2436 switch (ELF64_R_TYPE (rel->r_info)) |
2433 { | 2437 { |
2434 case R_SH_GOTPLT_LOW16: | 2438 case R_SH_GOTPLT_LOW16: |
2435 case R_SH_GOTPLT_MEDLOW16: | 2439 case R_SH_GOTPLT_MEDLOW16: |
2436 case R_SH_GOTPLT_MEDHI16: | 2440 case R_SH_GOTPLT_MEDHI16: |
(...skipping 625 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3062 return (struct bfd_hash_entry *) ret; | 3066 return (struct bfd_hash_entry *) ret; |
3063 } | 3067 } |
3064 | 3068 |
3065 /* Create an sh64 ELF linker hash table. */ | 3069 /* Create an sh64 ELF linker hash table. */ |
3066 | 3070 |
3067 static struct bfd_link_hash_table * | 3071 static struct bfd_link_hash_table * |
3068 sh64_elf64_link_hash_table_create (bfd *abfd) | 3072 sh64_elf64_link_hash_table_create (bfd *abfd) |
3069 { | 3073 { |
3070 struct elf_link_hash_table *ret; | 3074 struct elf_link_hash_table *ret; |
3071 | 3075 |
3072 ret = (struct elf_link_hash_table *) bfd_malloc (sizeof (* ret)); | 3076 ret = (struct elf_link_hash_table *) bfd_zmalloc (sizeof (* ret)); |
3073 if (ret == (struct elf_link_hash_table *) NULL) | 3077 if (ret == (struct elf_link_hash_table *) NULL) |
3074 return NULL; | 3078 return NULL; |
3075 | 3079 |
3076 if (!_bfd_elf_link_hash_table_init (ret, abfd, | 3080 if (!_bfd_elf_link_hash_table_init (ret, abfd, |
3077 sh64_elf64_link_hash_newfunc, | 3081 sh64_elf64_link_hash_newfunc, |
3078 sizeof (struct elf_sh64_link_hash_entry), | 3082 sizeof (struct elf_sh64_link_hash_entry), |
3079 GENERIC_ELF_DATA)) | 3083 GENERIC_ELF_DATA)) |
3080 { | 3084 { |
3081 free (ret); | 3085 free (ret); |
3082 return NULL; | 3086 return NULL; |
(...skipping 676 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3759 s = bfd_get_linker_section (dynobj, ".rela.bss"); | 3763 s = bfd_get_linker_section (dynobj, ".rela.bss"); |
3760 BFD_ASSERT (s != NULL); | 3764 BFD_ASSERT (s != NULL); |
3761 | 3765 |
3762 rel.r_offset = (h->root.u.def.value | 3766 rel.r_offset = (h->root.u.def.value |
3763 + h->root.u.def.section->output_section->vma | 3767 + h->root.u.def.section->output_section->vma |
3764 + h->root.u.def.section->output_offset); | 3768 + h->root.u.def.section->output_offset); |
3765 rel.r_info = ELF64_R_INFO (h->dynindx, R_SH_COPY64); | 3769 rel.r_info = ELF64_R_INFO (h->dynindx, R_SH_COPY64); |
3766 rel.r_addend = 0; | 3770 rel.r_addend = 0; |
3767 loc = s->contents; | 3771 loc = s->contents; |
3768 loc += s->reloc_count++ * sizeof (Elf64_External_Rela); | 3772 loc += s->reloc_count++ * sizeof (Elf64_External_Rela); |
error: old chunk mismatch |
None
OLD | NEW |