diff options
Diffstat (limited to 'bfd/elf32-m32c.c')
-rw-r--r-- | bfd/elf32-m32c.c | 21 |
1 files changed, 16 insertions, 5 deletions
diff --git a/bfd/elf32-m32c.c b/bfd/elf32-m32c.c index 953f00e..b2db4f5 100644 --- a/bfd/elf32-m32c.c +++ b/bfd/elf32-m32c.c @@ -1473,8 +1473,11 @@ m32c_elf_relax_section || (sec->flags & SEC_CODE) == 0) return TRUE; - symtab_hdr = &elf_tdata (abfd)->symtab_hdr; - shndx_hdr = &elf_tdata (abfd)->symtab_shndx_hdr; + symtab_hdr = & elf_symtab_hdr (abfd); + if (elf_symtab_shndx_list (abfd)) + shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr; + else + shndx_hdr = NULL; /* Get the section contents. */ if (elf_section_data (sec)->this_hdr.contents != NULL) @@ -1495,7 +1498,7 @@ m32c_elf_relax_section symtab_hdr->contents = (bfd_byte *) intsyms; } - if (shndx_hdr->sh_size != 0) + if (shndx_hdr && shndx_hdr->sh_size != 0) { bfd_size_type amt; @@ -2043,8 +2046,16 @@ m32c_elf_relax_delete_bytes isymend = isym + symtab_hdr->sh_info; sec_shndx = _bfd_elf_section_from_bfd_section (abfd, sec); - shndx_hdr = & elf_tdata (abfd)->symtab_shndx_hdr; - shndx_buf = (Elf_External_Sym_Shndx *) shndx_hdr->contents; + if (elf_symtab_shndx_list (abfd)) + { + shndx_hdr = & elf_symtab_shndx_list (abfd)->hdr; + shndx_buf = (Elf_External_Sym_Shndx *) shndx_hdr->contents; + } + else + { + shndx_hdr = NULL; + shndx_buf = NULL; + } shndx = shndx_buf; for (; isym < isymend; isym++, shndx = (shndx ? shndx + 1 : NULL)) |