Index: bfd/elf32-m32c.c |
diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c |
index b2b12ca330ab21284c7f2b0e0c1093d91b1d7c5b..8e77c5ec1724fe3508e65ba3ec397608ad646883 100644 |
--- a/bfd/elf32-m32c.c |
+++ b/bfd/elf32-m32c.c |
@@ -28,9 +28,9 @@ |
/* Forward declarations. */ |
static reloc_howto_type * m32c_reloc_type_lookup |
(bfd *, bfd_reloc_code_real_type); |
-static void m32c_info_to_howto_rela |
+static void m32c_info_to_howto_rela |
(bfd *, arelent *, Elf_Internal_Rela *); |
-static bfd_boolean m32c_elf_relocate_section |
+static bfd_boolean m32c_elf_relocate_section |
(bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *, Elf_Internal_Rela *, Elf_Internal_Sym *, asection **); |
static bfd_boolean m32c_elf_check_relocs |
(bfd *, struct bfd_link_info *, asection *, const Elf_Internal_Rela *); |
@@ -268,7 +268,7 @@ m32c_reloc_type_lookup |
for (i = ARRAY_SIZE (m32c_reloc_map); --i;) |
if (m32c_reloc_map [i].bfd_reloc_val == code) |
return & m32c_elf_howto_table [m32c_reloc_map[i].m32c_reloc_val]; |
- |
+ |
return NULL; |
} |
@@ -375,7 +375,7 @@ m32c_elf_relocate_section |
bfd_reloc_status_type r; |
const char * name = NULL; |
int r_type; |
- |
+ |
r_type = ELF32_R_TYPE (rel->r_info); |
/* These are only used for relaxing; we don't actually relocate |
@@ -384,7 +384,7 @@ m32c_elf_relocate_section |
|| r_type == R_M32C_RL_1ADDR |
|| r_type == R_M32C_RL_2ADDR) |
continue; |
- |
+ |
r_symndx = ELF32_R_SYM (rel->r_info); |
howto = m32c_elf_howto_table + ELF32_R_TYPE (rel->r_info); |
@@ -400,7 +400,7 @@ m32c_elf_relocate_section |
relocation = (sec->output_section->vma |
+ sec->output_offset |
+ sym->st_value); |
- |
+ |
name = bfd_elf_string_from_elf_section |
(input_bfd, symtab_hdr->sh_link, sym->st_name); |
name = (sym->st_name == 0) ? bfd_section_name (input_bfd, sec) : name; |
@@ -408,13 +408,13 @@ m32c_elf_relocate_section |
else |
{ |
h = sym_hashes [r_symndx - symtab_hdr->sh_info]; |
- |
+ |
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; |
name = h->root.root.string; |
- |
+ |
if (h->root.type == bfd_link_hash_defined |
|| h->root.type == bfd_link_hash_defweak) |
{ |
@@ -542,13 +542,13 @@ m32c_elf_relocate_section |
(info, (h ? &h->root : NULL), name, howto->name, (bfd_vma) 0, |
input_bfd, input_section, rel->r_offset); |
break; |
- |
+ |
case bfd_reloc_undefined: |
r = info->callbacks->undefined_symbol |
(info, name, input_bfd, input_section, rel->r_offset, |
TRUE); |
break; |
- |
+ |
case bfd_reloc_outofrange: |
msg = _("internal error: out of range error"); |
break; |
@@ -580,7 +580,7 @@ m32c_elf_relocate_section |
/* We support 16-bit pointers to code above 64k by generating a thunk |
below 64k containing a JMP instruction to the final address. */ |
- |
+ |
static bfd_boolean |
m32c_elf_check_relocs |
(bfd * abfd, |
@@ -595,10 +595,10 @@ m32c_elf_check_relocs |
bfd_vma *local_plt_offsets; |
asection *splt; |
bfd *dynobj; |
- |
+ |
if (info->relocatable) |
return TRUE; |
- |
+ |
symtab_hdr = &elf_tdata (abfd)->symtab_hdr; |
sym_hashes = elf_sym_hashes (abfd); |
local_plt_offsets = elf_local_got_offsets (abfd); |
@@ -611,7 +611,7 @@ m32c_elf_check_relocs |
struct elf_link_hash_entry *h; |
unsigned long r_symndx; |
bfd_vma *offset; |
- |
+ |
r_symndx = ELF32_R_SYM (rel->r_info); |
if (r_symndx < symtab_hdr->sh_info) |
h = NULL; |
@@ -621,8 +621,12 @@ m32c_elf_check_relocs |
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; |
+ |
+ /* PR15323, ref flags aren't set for references in the same |
+ object. */ |
+ h->root.non_ir_ref = 1; |
} |
- |
+ |
switch (ELF32_R_TYPE (rel->r_info)) |
{ |
/* This relocation describes a 16-bit pointer to a function. |
@@ -676,7 +680,7 @@ m32c_elf_check_relocs |
break; |
} |
} |
- |
+ |
return TRUE; |
} |
@@ -799,7 +803,7 @@ m32c_elf_merge_private_bfd_data (bfd *ibfd, bfd *obfd) |
case EF_M32C_CPU_M32C: strcat (old_opt, " -m32c"); break; |
} |
} |
- |
+ |
/* Print out any mismatches from above. */ |
if (new_opt[0]) |
{ |
@@ -902,7 +906,7 @@ dump_symtab (bfd * abfd, void *internal_syms, void *external_syms) |
external_syms = bfd_malloc (1000); |
free_external = 1; |
} |
- |
+ |
symtab_hdr = &elf_tdata (abfd)->symtab_hdr; |
locsymcount = symtab_hdr->sh_size / get_elf_backend_data(abfd)->s->sizeof_sym; |
if (free_internal) |
@@ -917,37 +921,83 @@ dump_symtab (bfd * abfd, void *internal_syms, void *external_syms) |
{ |
switch (ELF_ST_TYPE (isym->st_info)) |
{ |
- case STT_FUNC: st_info_str = "STT_FUNC"; |
- case STT_SECTION: st_info_str = "STT_SECTION"; |
- case STT_FILE: st_info_str = "STT_FILE"; |
- case STT_OBJECT: st_info_str = "STT_OBJECT"; |
- case STT_TLS: st_info_str = "STT_TLS"; |
- default: st_info_str = ""; |
+ case STT_FUNC: |
+ st_info_str = "STT_FUNC"; |
+ break; |
+ |
+ case STT_SECTION: |
+ st_info_str = "STT_SECTION"; |
+ break; |
+ |
+ case STT_FILE: |
+ st_info_str = "STT_FILE"; |
+ break; |
+ |
+ case STT_OBJECT: |
+ st_info_str = "STT_OBJECT"; |
+ break; |
+ |
+ case STT_TLS: |
+ st_info_str = "STT_TLS"; |
+ break; |
+ |
+ default: |
+ st_info_str = ""; |
} |
+ |
switch (ELF_ST_BIND (isym->st_info)) |
{ |
- case STB_LOCAL: st_info_stb_str = "STB_LOCAL"; |
- case STB_GLOBAL: st_info_stb_str = "STB_GLOBAL"; |
- default: st_info_stb_str = ""; |
+ case STB_LOCAL: |
+ st_info_stb_str = "STB_LOCAL"; |
+ break; |
+ |
+ case STB_GLOBAL: |
+ st_info_stb_str = "STB_GLOBAL"; |
+ break; |
+ |
+ default: |
+ st_info_stb_str = ""; |
} |
+ |
switch (ELF_ST_VISIBILITY (isym->st_other)) |
{ |
- case STV_DEFAULT: st_other_str = "STV_DEFAULT"; |
- case STV_INTERNAL: st_other_str = "STV_INTERNAL"; |
- case STV_PROTECTED: st_other_str = "STV_PROTECTED"; |
- default: st_other_str = ""; |
+ case STV_DEFAULT: |
+ st_other_str = "STV_DEFAULT"; |
+ break; |
+ |
+ case STV_INTERNAL: |
+ st_other_str = "STV_INTERNAL"; |
+ break; |
+ |
+ case STV_PROTECTED: |
+ st_other_str = "STV_PROTECTED"; |
+ break; |
+ |
+ default: |
+ st_other_str = ""; |
} |
+ |
switch (isym->st_shndx) |
{ |
- case SHN_ABS: st_shndx_str = "SHN_ABS"; |
- case SHN_COMMON: st_shndx_str = "SHN_COMMON"; |
- case SHN_UNDEF: st_shndx_str = "SHN_UNDEF"; |
- default: st_shndx_str = ""; |
+ case SHN_ABS: |
+ st_shndx_str = "SHN_ABS"; |
+ break; |
+ |
+ case SHN_COMMON: |
+ st_shndx_str = "SHN_COMMON"; |
+ break; |
+ |
+ case SHN_UNDEF: |
+ st_shndx_str = "SHN_UNDEF"; |
+ break; |
+ |
+ default: |
+ st_shndx_str = ""; |
} |
- |
+ |
printf ("isym = %p st_value = %lx st_size = %lx st_name = (%lu) %s " |
"st_info = (%d) %s %s st_other = (%d) %s st_shndx = (%d) %s\n", |
- isym, |
+ isym, |
(unsigned long) isym->st_value, |
(unsigned long) isym->st_size, |
isym->st_name, |
@@ -1579,7 +1629,7 @@ m32c_elf_relax_section |
enctbl = m16c_addr_encodings; |
posn = 2; |
- |
+ |
/* Check the opcode for jumps. We know it's safe to |
do this because all 2ADDR insns are at least two |
bytes long. */ |
@@ -1765,7 +1815,7 @@ m32c_elf_relax_section |
/* Note that we've changed the relocs, section contents, etc. */ |
elf_section_data (sec)->relocs = internal_relocs; |
free_relocs = NULL; |
- |
+ |
elf_section_data (sec)->this_hdr.contents = contents; |
free_contents = NULL; |