Line 1... |
Line 1... |
/* FRV-specific support for 32-bit ELF.
|
/* FRV-specific support for 32-bit ELF.
|
Copyright 2002, 2003, 2004, 2005, 2006, 2007
|
Copyright 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
|
Free Software Foundation, Inc.
|
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
|
Line 22... |
Line 22... |
#include "sysdep.h"
|
#include "sysdep.h"
|
#include "bfd.h"
|
#include "bfd.h"
|
#include "libbfd.h"
|
#include "libbfd.h"
|
#include "elf-bfd.h"
|
#include "elf-bfd.h"
|
#include "elf/frv.h"
|
#include "elf/frv.h"
|
#include "elf/dwarf2.h"
|
#include "dwarf2.h"
|
#include "hashtab.h"
|
#include "hashtab.h"
|
|
|
/* Forward declarations. */
|
/* Forward declarations. */
|
static bfd_reloc_status_type elf32_frv_relocate_lo16
|
static bfd_reloc_status_type elf32_frv_relocate_lo16
|
PARAMS ((bfd *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));
|
PARAMS ((bfd *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));
|
Line 1395... |
Line 1395... |
relocations, otherwise decay to section + offset. */
|
relocations, otherwise decay to section + offset. */
|
if (entry->symndx == -1 && entry->d.h->dynindx != -1)
|
if (entry->symndx == -1 && entry->d.h->dynindx != -1)
|
dynindx = entry->d.h->dynindx;
|
dynindx = entry->d.h->dynindx;
|
else
|
else
|
{
|
{
|
if (sec->output_section
|
if (sec
|
|
&& sec->output_section
|
&& ! bfd_is_abs_section (sec->output_section)
|
&& ! bfd_is_abs_section (sec->output_section)
|
&& ! bfd_is_und_section (sec->output_section))
|
&& ! bfd_is_und_section (sec->output_section))
|
dynindx = elf_section_data (sec->output_section)->dynindx;
|
dynindx = elf_section_data (sec->output_section)->dynindx;
|
else
|
else
|
dynindx = 0;
|
dynindx = 0;
|
Line 1677... |
Line 1678... |
{
|
{
|
/* A function descriptor for a local function gets the index
|
/* A function descriptor for a local function gets the index
|
of the section. For a non-local function, it's
|
of the section. For a non-local function, it's
|
disregarded. */
|
disregarded. */
|
lowword = ad;
|
lowword = ad;
|
if (entry->symndx == -1 && entry->d.h->dynindx != -1
|
if (sec == NULL
|
&& entry->d.h->dynindx == idx)
|
|| (entry->symndx == -1 && entry->d.h->dynindx != -1
|
|
&& entry->d.h->dynindx == idx))
|
highword = 0;
|
highword = 0;
|
else
|
else
|
highword = _frvfdpic_osec_to_segment
|
highword = _frvfdpic_osec_to_segment
|
(output_bfd, sec->output_section);
|
(output_bfd, sec->output_section);
|
}
|
}
|
Line 5734... |
Line 5736... |
elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
|
elf32_frvfdpic_relax_section (bfd *abfd ATTRIBUTE_UNUSED, asection *sec,
|
struct bfd_link_info *info, bfd_boolean *again)
|
struct bfd_link_info *info, bfd_boolean *again)
|
{
|
{
|
struct _frvfdpic_dynamic_got_plt_info gpinfo;
|
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. */
|
/* If we return early, we didn't change anything. */
|
*again = FALSE;
|
*again = FALSE;
|
|
|
/* We'll do our thing when requested to relax the GOT section. */
|
/* We'll do our thing when requested to relax the GOT section. */
|
if (sec != frvfdpic_got_section (info))
|
if (sec != frvfdpic_got_section (info))
|
Line 6834... |
Line 6840... |
|
|
/* Print normal ELF private data. */
|
/* Print normal ELF private data. */
|
_bfd_elf_print_private_bfd_data (abfd, ptr);
|
_bfd_elf_print_private_bfd_data (abfd, ptr);
|
|
|
flags = elf_elfheader (abfd)->e_flags;
|
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)
|
switch (flags & EF_FRV_CPU_MASK)
|
{
|
{
|
default: break;
|
default: break;
|
case EF_FRV_CPU_SIMPLE: fprintf (file, " -mcpu=simple"); break;
|
case EF_FRV_CPU_SIMPLE: fprintf (file, " -mcpu=simple"); break;
|