Add new bitfield 'want_p_paddr_set_to_zero'.
Set this field for HPUX IA64 port. Test this field when setting p_paddr.
This commit is contained in:
parent
88ff637d20
commit
5e8d754953
5 changed files with 126 additions and 102 deletions
|
@ -1,3 +1,12 @@
|
|||
2002-07-23 Nick Clifton <nickc@redhat.com>
|
||||
|
||||
* elf-bfd.h (struct elf_backend_data): Add new bitfield
|
||||
'want_p_paddr_set_to_zero'.
|
||||
* elfxx-target.h: Set default value for want_p_paddr_set_to_zero
|
||||
to false;
|
||||
* elfxx-ia64.c: Set want_p_paddr_set_zero for HPUX target.
|
||||
* elf.c (copy_private_bfd_data): Test want_p_paddr_set_zero.
|
||||
|
||||
2002-07-23 Gabor Keresztfalvi <keresztg@mail.com>
|
||||
|
||||
* nlmcode.h (nlm_swap_auxiliary_headers_out): Swapped the order of
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
2002 Free Software Foundation, Inc.
|
||||
Written by Cygnus Support.
|
||||
|
||||
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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifndef _LIBELF_H_
|
||||
#define _LIBELF_H_ 1
|
||||
|
@ -859,6 +859,10 @@ struct elf_backend_data
|
|||
unsigned can_refcount : 1;
|
||||
unsigned want_got_sym : 1;
|
||||
unsigned want_dynbss : 1;
|
||||
/* Targets which do not support physical addressing often require
|
||||
that the p_paddr field in the section header to be set to zero.
|
||||
This field indicates whether this behavior is required. */
|
||||
unsigned want_p_paddr_set_to_zero : 1;
|
||||
};
|
||||
|
||||
/* Information stored for each BFD section in an ELF file. This
|
||||
|
|
34
bfd/elf.c
34
bfd/elf.c
|
@ -2,21 +2,21 @@
|
|||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* SECTION
|
||||
|
||||
|
@ -4813,9 +4813,10 @@ copy_private_bfd_data (ibfd, obfd)
|
|||
|
||||
/* The Solaris native linker always sets p_paddr to 0.
|
||||
We try to catch that case here, and set it to the
|
||||
correct value. */
|
||||
correct value. Note - some backends require that
|
||||
p_paddr be left as zero. */
|
||||
if (segment->p_paddr == 0
|
||||
&& segment->p_vaddr != 0
|
||||
&& (! bed->want_p_paddr_set_to_zero)
|
||||
&& isec == 0
|
||||
&& output_section->lma != 0
|
||||
&& (output_section->vma == (segment->p_vaddr
|
||||
|
@ -4832,7 +4833,10 @@ copy_private_bfd_data (ibfd, obfd)
|
|||
LMA address of the output section. */
|
||||
if (IS_CONTAINED_BY_LMA (output_section, segment, map->p_paddr)
|
||||
|| IS_CONTAINED_BY_FILEPOS (section, segment, bed)
|
||||
|| IS_COREFILE_NOTE (segment, section))
|
||||
|| IS_COREFILE_NOTE (segment, section)
|
||||
|| (bed->want_p_paddr_set_to_zero &&
|
||||
IS_CONTAINED_BY_VMA (output_section, segment))
|
||||
)
|
||||
{
|
||||
if (matching_lma == 0)
|
||||
matching_lma = output_section->lma;
|
||||
|
|
127
bfd/elfxx-ia64.c
127
bfd/elfxx-ia64.c
|
@ -2,21 +2,21 @@
|
|||
Copyright 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
|
||||
Contributed by David Mosberger-Tang <davidm@hpl.hp.com>
|
||||
|
||||
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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
|
@ -25,35 +25,33 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
#include "opcode/ia64.h"
|
||||
#include "elf/ia64.h"
|
||||
|
||||
/*
|
||||
* THE RULES for all the stuff the linker creates --
|
||||
*
|
||||
* GOT Entries created in response to LTOFF or LTOFF_FPTR
|
||||
* relocations. Dynamic relocs created for dynamic
|
||||
* symbols in an application; REL relocs for locals
|
||||
* in a shared library.
|
||||
*
|
||||
* FPTR The canonical function descriptor. Created for local
|
||||
* symbols in applications. Descriptors for dynamic symbols
|
||||
* and local symbols in shared libraries are created by
|
||||
* ld.so. Thus there are no dynamic relocs against these
|
||||
* objects. The FPTR relocs for such _are_ passed through
|
||||
* to the dynamic relocation tables.
|
||||
*
|
||||
* FULL_PLT Created for a PCREL21B relocation against a dynamic symbol.
|
||||
* Requires the creation of a PLTOFF entry. This does not
|
||||
* require any dynamic relocations.
|
||||
*
|
||||
* PLTOFF Created by PLTOFF relocations. For local symbols, this
|
||||
* is an alternate function descriptor, and in shared libraries
|
||||
* requires two REL relocations. Note that this cannot be
|
||||
* transformed into an FPTR relocation, since it must be in
|
||||
* range of the GP. For dynamic symbols, this is a function
|
||||
* descriptor for a MIN_PLT entry, and requires one IPLT reloc.
|
||||
*
|
||||
* MIN_PLT Created by PLTOFF entries against dynamic symbols. This
|
||||
* does not reqire dynamic relocations.
|
||||
*/
|
||||
/* THE RULES for all the stuff the linker creates --
|
||||
|
||||
GOT Entries created in response to LTOFF or LTOFF_FPTR
|
||||
relocations. Dynamic relocs created for dynamic
|
||||
symbols in an application; REL relocs for locals
|
||||
in a shared library.
|
||||
|
||||
FPTR The canonical function descriptor. Created for local
|
||||
symbols in applications. Descriptors for dynamic symbols
|
||||
and local symbols in shared libraries are created by
|
||||
ld.so. Thus there are no dynamic relocs against these
|
||||
objects. The FPTR relocs for such _are_ passed through
|
||||
to the dynamic relocation tables.
|
||||
|
||||
FULL_PLT Created for a PCREL21B relocation against a dynamic symbol.
|
||||
Requires the creation of a PLTOFF entry. This does not
|
||||
require any dynamic relocations.
|
||||
|
||||
PLTOFF Created by PLTOFF relocations. For local symbols, this
|
||||
is an alternate function descriptor, and in shared libraries
|
||||
requires two REL relocations. Note that this cannot be
|
||||
transformed into an FPTR relocation, since it must be in
|
||||
range of the GP. For dynamic symbols, this is a function
|
||||
descriptor for a MIN_PLT entry, and requires one IPLT reloc.
|
||||
|
||||
MIN_PLT Created by PLTOFF entries against dynamic symbols. This
|
||||
does not reqire dynamic relocations. */
|
||||
|
||||
#define USE_RELA /* we want RELA relocs, not REL */
|
||||
|
||||
|
@ -140,7 +138,7 @@ struct elfNN_ia64_link_hash_entry
|
|||
|
||||
struct elfNN_ia64_link_hash_table
|
||||
{
|
||||
/* The main hash table */
|
||||
/* The main hash table. */
|
||||
struct elf_link_hash_table root;
|
||||
|
||||
asection *got_sec; /* the linkage table section (or NULL) */
|
||||
|
@ -327,7 +325,7 @@ static void elfNN_hpux_post_process_headers
|
|||
boolean elfNN_hpux_backend_section_from_bfd_section
|
||||
PARAMS ((bfd *abfd, asection *sec, int *retval));
|
||||
|
||||
/* ia64-specific relocation */
|
||||
/* ia64-specific relocation. */
|
||||
|
||||
/* Perform a relocation. Not much to do here as all the hard work is
|
||||
done in elfNN_ia64_final_link_relocate. */
|
||||
|
@ -461,7 +459,7 @@ static unsigned char elf_code_to_howto_index[R_IA64_MAX_RELOC_CODE + 1];
|
|||
|
||||
/* Given a BFD reloc type, return the matching HOWTO structure. */
|
||||
|
||||
static reloc_howto_type*
|
||||
static reloc_howto_type *
|
||||
lookup_howto (rtype)
|
||||
unsigned int rtype;
|
||||
{
|
||||
|
@ -1087,24 +1085,22 @@ elfNN_ia64_fake_sections (abfd, hdr, sec)
|
|||
else if (strcmp (name, ".HP.opt_annot") == 0)
|
||||
hdr->sh_type = SHT_IA_64_HP_OPT_ANOT;
|
||||
else if (strcmp (name, ".reloc") == 0)
|
||||
/*
|
||||
* This is an ugly, but unfortunately necessary hack that is
|
||||
* needed when producing EFI binaries on IA-64. It tells
|
||||
* elf.c:elf_fake_sections() not to consider ".reloc" as a section
|
||||
* containing ELF relocation info. We need this hack in order to
|
||||
* be able to generate ELF binaries that can be translated into
|
||||
* EFI applications (which are essentially COFF objects). Those
|
||||
* files contain a COFF ".reloc" section inside an ELFNN object,
|
||||
* which would normally cause BFD to segfault because it would
|
||||
* attempt to interpret this section as containing relocation
|
||||
* entries for section "oc". With this hack enabled, ".reloc"
|
||||
* will be treated as a normal data section, which will avoid the
|
||||
* segfault. However, you won't be able to create an ELFNN binary
|
||||
* with a section named "oc" that needs relocations, but that's
|
||||
* the kind of ugly side-effects you get when detecting section
|
||||
* types based on their names... In practice, this limitation is
|
||||
* unlikely to bite.
|
||||
*/
|
||||
/* This is an ugly, but unfortunately necessary hack that is
|
||||
needed when producing EFI binaries on IA-64. It tells
|
||||
elf.c:elf_fake_sections() not to consider ".reloc" as a section
|
||||
containing ELF relocation info. We need this hack in order to
|
||||
be able to generate ELF binaries that can be translated into
|
||||
EFI applications (which are essentially COFF objects). Those
|
||||
files contain a COFF ".reloc" section inside an ELFNN object,
|
||||
which would normally cause BFD to segfault because it would
|
||||
attempt to interpret this section as containing relocation
|
||||
entries for section "oc". With this hack enabled, ".reloc"
|
||||
will be treated as a normal data section, which will avoid the
|
||||
segfault. However, you won't be able to create an ELFNN binary
|
||||
with a section named "oc" that needs relocations, but that's
|
||||
the kind of ugly side-effects you get when detecting section
|
||||
types based on their names... In practice, this limitation is
|
||||
unlikely to bite. */
|
||||
hdr->sh_type = SHT_PROGBITS;
|
||||
|
||||
if (sec->flags & SEC_SMALL_DATA)
|
||||
|
@ -1510,6 +1506,8 @@ elfNN_ia64_dynamic_symbol_p (h, info)
|
|||
case STV_INTERNAL:
|
||||
case STV_HIDDEN:
|
||||
return false;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
if (h->root.type == bfd_link_hash_undefweak
|
||||
|
@ -4796,6 +4794,9 @@ elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval)
|
|||
#undef elf_backend_section_from_bfd_section
|
||||
#define elf_backend_section_from_bfd_section elfNN_hpux_backend_section_from_bfd_section
|
||||
|
||||
#undef elf_backend_want_p_paddr_set_to_zero
|
||||
#define elf_backend_want_p_paddr_set_to_zero 1
|
||||
|
||||
#undef ELF_MAXPAGESIZE
|
||||
#define ELF_MAXPAGESIZE 0x1000 /* 1K */
|
||||
|
||||
|
@ -4803,3 +4804,5 @@ elfNN_hpux_backend_section_from_bfd_section (abfd, sec, retval)
|
|||
#define elfNN_bed elfNN_ia64_hpux_bed
|
||||
|
||||
#include "elfNN-target.h"
|
||||
|
||||
#undef elf_backend_want_p_paddr_set_to_zero
|
||||
|
|
|
@ -2,21 +2,21 @@
|
|||
Copyright 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
|
||||
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
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
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
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
/* This structure contains everything that BFD knows about a target.
|
||||
It includes things like its byte order, name, what routines to call
|
||||
|
@ -89,6 +89,9 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
|||
#ifndef elf_backend_want_dynbss
|
||||
#define elf_backend_want_dynbss 1
|
||||
#endif
|
||||
#ifndef elf_backend_want_p_paddr_set_to_zero
|
||||
#define elf_backend_want_p_paddr_set_to_zero 0
|
||||
#endif
|
||||
|
||||
#define bfd_elfNN_bfd_debug_info_start bfd_void
|
||||
#define bfd_elfNN_bfd_debug_info_end bfd_void
|
||||
|
@ -519,7 +522,8 @@ static const struct elf_backend_data elfNN_bed =
|
|||
elf_backend_can_gc_sections,
|
||||
elf_backend_can_refcount,
|
||||
elf_backend_want_got_sym,
|
||||
elf_backend_want_dynbss
|
||||
elf_backend_want_dynbss,
|
||||
elf_backend_want_p_paddr_set_to_zero
|
||||
};
|
||||
#endif
|
||||
|
||||
|
|
Loading…
Reference in a new issue