/* FRV-specific support for 32-bit ELF.
- Copyright 2002, 2003, 2004, 2005, 2006, 2007
+ Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010
Free Software Foundation, Inc.
This file is part of BFD, the Binary File Descriptor library.
#include "libbfd.h"
#include "elf-bfd.h"
#include "elf/frv.h"
-#include "elf/dwarf2.h"
+#include "dwarf2.h"
#include "hashtab.h"
/* Forward declarations. */
/* Get the FRV ELF linker hash table from a link_info structure. */
-#define frvfdpic_hash_table(info) \
- ((struct frvfdpic_elf_link_hash_table *) ((info)->hash))
+#define frvfdpic_hash_table(p) \
+ (elf_hash_table_id ((struct elf_link_hash_table *) ((p)->hash)) \
+ == FRV_ELF_DATA ? ((struct frvfdpic_elf_link_hash_table *) ((p)->hash)) : NULL)
#define frvfdpic_got_section(info) \
(frvfdpic_hash_table (info)->sgot)
if (!_bfd_elf_link_hash_table_init (&ret->elf, abfd,
_bfd_elf_link_hash_newfunc,
- sizeof (struct elf_link_hash_entry)))
+ sizeof (struct elf_link_hash_entry),
+ FRV_ELF_DATA))
{
free (ret);
return NULL;
check_segment[2];
int silence_segment_error = !(info->shared || info->pie);
unsigned long insn;
- static bfd_boolean ef_frv_pic_flag_set = FALSE;
- if (! ef_frv_pic_flag_set && IS_FDPIC (output_bfd))
- {
- elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
- ef_frv_pic_flag_set = TRUE;
- }
-
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
relend = relocs + input_section->reloc_count;
}
if (!silence_segment_error && (info->shared || info->pie))
return FALSE;
- /* PR 6446: EF_FRV_PIC should be cleared if
- there are any inter-segment relocations. */
- elf_elfheader (output_bfd)->e_flags &= ~ EF_FRV_PIC;
+ elf_elfheader (output_bfd)->e_flags |= EF_FRV_PIC;
}
switch (r_type)
{
struct _frvfdpic_dynamic_got_plt_info gpinfo;
+ if (info->relocatable)
+ (*info->callbacks->einfo)
+ (_("%P%F: --relax and -r may not be used together\n"));
+
/* If we return early, we didn't change anything. */
*again = FALSE;
_bfd_elf_print_private_bfd_data (abfd, ptr);
flags = elf_elfheader (abfd)->e_flags;
- fprintf (file, _("private flags = 0x%lx:"), (long)flags);
+ fprintf (file, _("private flags = 0x%lx:"), (unsigned long) flags);
switch (flags & EF_FRV_CPU_MASK)
{
elf_tdata (abfd)->core_signal = bfd_get_16 (abfd, note->descdata + 12);
/* `pr_pid' is at offset 24. */
- elf_tdata (abfd)->core_pid = bfd_get_32 (abfd, note->descdata + 24);
+ elf_tdata (abfd)->core_lwpid = bfd_get_32 (abfd, note->descdata + 24);
/* `pr_reg' is at offset 72. */
offset = 72;
return TRUE;
}
#define ELF_ARCH bfd_arch_frv
+#define ELF_TARGET_ID FRV_ELF_DATA
#define ELF_MACHINE_CODE EM_CYGNUS_FRV
#define ELF_MAXPAGESIZE 0x1000