eh->dyn_relocs = NULL;
-keep:;
+ keep:;
}
/* Finally, allocate space. */
if (bfd_is_const_section (input_sec))
source = input_sec->name;
else
- source = input_sec->owner->filename;
+ source = bfd_get_filename (input_sec->owner);
fprintf (sym_ld_script, "\t%s = 0x%08lx;\t /* %s */\n",
h->root.root.string,
if (!rz)
{
- printf ("%s: %s @ 0x%08x\n", __func__, ibfd->filename,
+ printf ("%s: %s @ 0x%08x\n", __func__, bfd_get_filename (ibfd),
(int) rel->r_offset);
BFD_ASSERT(0); /* Unsupported pattern. */
}
case R_NDS32_SDA15S0_RELA:
case R_NDS32_SDA15S0:
align = 0x0;
-handle_sda:
+ handle_sda:
BFD_ASSERT (sec != NULL);
/* If the symbol is in the abs section, the out_bfd will be null.
break;
}
-check_reloc:
+ check_reloc:
if (r != bfd_reloc_ok)
{
errmsg = _("internal error: unknown error");
/* Fall through. */
-common_error:
+ common_error:
(*info->callbacks->warning) (info, errmsg, name, input_bfd,
input_section, offset);
break;
goto get_vma;
case DT_JMPREL:
s = ehtab->srelplt->output_section;
-get_vma:
+ get_vma:
BFD_ASSERT (s != NULL);
dyn.d_un.d_ptr = s->vma;
bfd_elf32_swap_dyn_out (output_bfd, &dyn, dyncon);
flagword out_fpu_config;
flagword in_fpu_config;
+ /* FIXME: What should be checked when linking shared libraries? */
+ if ((ibfd->flags & DYNAMIC) != 0)
+ return TRUE;
+
/* TODO: Revise to use object-attributes instead. */
if (!nds32_check_vec_size (ibfd))
return FALSE;
goto done;
}
-done:
+ done:
/* Bit-15 of insn16 should be set for a valid instruction. */
if ((insn16 & 0x8000) == 0)
return 0;
goto done;
}
-done:
+ done:
if (insn & 0x80000000)
return 0;
if (p < endp)
*p |= 0x80;
}
-done_adjust_diff:
+ done_adjust_diff:
if (sec == sect)
{
clean_nds32_elf_blank ();
}
-finish:
- if (internal_relocs != NULL
- && elf_section_data (sec)->relocs != internal_relocs)
+ finish:
+ if (elf_section_data (sec)->relocs != internal_relocs)
free (internal_relocs);
- if (contents != NULL
- && elf_section_data (sec)->this_hdr.contents != contents)
+ if (elf_section_data (sec)->this_hdr.contents != contents)
free (contents);
- if (isymbuf != NULL && symtab_hdr->contents != (bfd_byte *) isymbuf)
+ if (symtab_hdr->contents != (bfd_byte *) isymbuf)
free (isymbuf);
return result;
-error_return:
+ error_return:
result = FALSE;
goto finish;
}
{NULL, 0, 0, 0, 0}
};
+static bfd_boolean
+nds32_elf_section_flags (const Elf_Internal_Shdr *hdr)
+{
+ const char *name = hdr->bfd_section->name;
+
+ if (strncmp (name, ".sbss", 5) == 0
+ || strncmp (name, ".sdata", 6) == 0)
+ hdr->bfd_section->flags |= SEC_SMALL_DATA;
+
+ return TRUE;
+}
+
static bfd_boolean
nds32_elf_output_arch_syms (bfd *output_bfd ATTRIBUTE_UNUSED,
struct bfd_link_info *info,
goto error_return;
}
-finish:
+ finish:
if (relax_blank_list)
{
nds32_elf_relax_delete_blanks (abfd, sec, relax_blank_list);
}
return result;
-error_return:
+ error_return:
result = FALSE;
goto finish;
}
free (reloc_vector);
return data;
-error_return:
+ error_return:
free (reloc_vector);
return NULL;
}
}
while (FALSE);
- if ((relocs != NULL) && (elf_section_data (asec)->relocs != relocs))
+ if (elf_section_data (asec)->relocs != relocs)
free (relocs);
if ((min_id != relax_group_ptr->min_id)
}
while (FALSE);
- if (relocs != NULL && elf_section_data (asec)->relocs != relocs)
+ if (elf_section_data (asec)->relocs != relocs)
free (relocs);
return result;
#endif
}
-finish:
+ finish:
if (incontents)
contents = NULL;
- if (internal_relocs != NULL
- && elf_section_data (insec)->relocs != internal_relocs)
+ if (elf_section_data (insec)->relocs != internal_relocs)
free (internal_relocs);
- if (contents != NULL
- && elf_section_data (insec)->this_hdr.contents != contents)
+ if (elf_section_data (insec)->this_hdr.contents != contents)
free (contents);
- if (local_syms != NULL && symtab_hdr->contents != (bfd_byte *) local_syms)
+ if (symtab_hdr->contents != (bfd_byte *) local_syms)
free (local_syms);
if (chain.next)
return result;
-error_return:
+ error_return:
result = FALSE;
goto finish;
}
#define elf_backend_object_p nds32_elf_object_p
#define elf_backend_final_write_processing nds32_elf_final_write_processing
#define elf_backend_special_sections nds32_elf_special_sections
+#define elf_backend_section_flags nds32_elf_section_flags
#define bfd_elf32_bfd_get_relocated_section_contents \
nds32_elf_get_relocated_section_contents
#define bfd_elf32_bfd_is_target_special_symbol nds32_elf_is_target_special_symbol