Line 1... |
Line 1... |
/* V850-specific support for 32-bit ELF
|
/* V850-specific support for 32-bit ELF
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
Copyright 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
2006, 2007 Free Software Foundation, Inc.
|
2006, 2007, 2008, 2009 Free Software Foundation, Inc.
|
|
|
This file is part of BFD, the Binary File Descriptor library.
|
This file is part of BFD, the Binary File Descriptor library.
|
|
|
This program is free software; you can redistribute it and/or modify
|
This program is free software; you can redistribute it and/or modify
|
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
Line 50... |
Line 50... |
bfd *dynobj;
|
bfd *dynobj;
|
Elf_Internal_Shdr *symtab_hdr;
|
Elf_Internal_Shdr *symtab_hdr;
|
struct elf_link_hash_entry **sym_hashes;
|
struct elf_link_hash_entry **sym_hashes;
|
const Elf_Internal_Rela *rel;
|
const Elf_Internal_Rela *rel;
|
const Elf_Internal_Rela *rel_end;
|
const Elf_Internal_Rela *rel_end;
|
asection *sreloc;
|
|
enum v850_reloc_type r_type;
|
enum v850_reloc_type r_type;
|
int other = 0;
|
int other = 0;
|
const char *common = NULL;
|
const char *common = NULL;
|
|
|
if (info->relocatable)
|
if (info->relocatable)
|
Line 66... |
Line 65... |
#endif
|
#endif
|
|
|
dynobj = elf_hash_table (info)->dynobj;
|
dynobj = elf_hash_table (info)->dynobj;
|
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
symtab_hdr = &elf_tdata (abfd)->symtab_hdr;
|
sym_hashes = elf_sym_hashes (abfd);
|
sym_hashes = elf_sym_hashes (abfd);
|
sreloc = NULL;
|
|
|
|
rel_end = relocs + sec->reloc_count;
|
rel_end = relocs + sec->reloc_count;
|
for (rel = relocs; rel < rel_end; rel++)
|
for (rel = relocs; rel < rel_end; rel++)
|
{
|
{
|
unsigned long r_symndx;
|
unsigned long r_symndx;
|
Line 1680... |
Line 1678... |
(input_bfd, symtab_hdr->sh_link, sym->st_name));
|
(input_bfd, symtab_hdr->sh_link, sym->st_name));
|
if (name == NULL || *name == '\0')
|
if (name == NULL || *name == '\0')
|
name = bfd_section_name (input_bfd, sec);
|
name = bfd_section_name (input_bfd, sec);
|
}
|
}
|
|
|
switch (r)
|
switch ((int) r)
|
{
|
{
|
case bfd_reloc_overflow:
|
case bfd_reloc_overflow:
|
if (! ((*info->callbacks->reloc_overflow)
|
if (! ((*info->callbacks->reloc_overflow)
|
(info, (h ? &h->root : NULL), name, howto->name,
|
(info, (h ? &h->root : NULL), name, howto->name,
|
(bfd_vma) 0, input_bfd, input_section,
|
(bfd_vma) 0, input_bfd, input_section,
|
Line 2095... |
Line 2093... |
}
|
}
|
|
|
return TRUE;
|
return TRUE;
|
}
|
}
|
|
|
static bfd_boolean
|
static int
|
v850_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
v850_elf_link_output_symbol_hook (struct bfd_link_info *info ATTRIBUTE_UNUSED,
|
const char *name ATTRIBUTE_UNUSED,
|
const char *name ATTRIBUTE_UNUSED,
|
Elf_Internal_Sym *sym,
|
Elf_Internal_Sym *sym,
|
asection *input_sec,
|
asection *input_sec,
|
struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
|
struct elf_link_hash_entry *h ATTRIBUTE_UNUSED)
|
Line 2122... |
Line 2120... |
linker is cleaning up after ourselves. */
|
linker is cleaning up after ourselves. */
|
|
|
sym->st_other &= ~(V850_OTHER_SDA | V850_OTHER_ZDA | V850_OTHER_TDA
|
sym->st_other &= ~(V850_OTHER_SDA | V850_OTHER_ZDA | V850_OTHER_TDA
|
| V850_OTHER_ERROR);
|
| V850_OTHER_ERROR);
|
|
|
return TRUE;
|
return 1;
|
}
|
}
|
|
|
static bfd_boolean
|
static bfd_boolean
|
v850_elf_section_from_shdr (bfd *abfd,
|
v850_elf_section_from_shdr (bfd *abfd,
|
Elf_Internal_Shdr *hdr,
|
Elf_Internal_Shdr *hdr,
|