Browse Source

bfd/

* elf32-ppc.h (has_vle_insns, is_ppc_vle): Delete.
	(has_tls_reloc, has_tls_get_addr_call): Move back to..
	* elf32-ppc.c: ..here.
	(ppc_elf_section_flags, elf_backend_section_flags): Delete.
	(ppc_elf_modify_segment_map): Use ELF sh_flags to detect VLE sections.
opcodes/
	* ppc-dis.c: Don't include elf32-ppc.h, do include elf/ppc.h.
	(get_powerpc_dialect): Detect VLE sections from ELF sh_flags.
ld/testsuite/
	* ld-powerpc/vle.ld: New.
	* ld-powerpc/powerpc.exp (vle reloc tests): Link using vle.ld.
cygwin-64bit-branch
Alan Modra 14 years ago
parent
commit
94caa96637
  1. 8
      bfd/ChangeLog
  2. 27
      bfd/elf32-ppc.c
  3. 20
      bfd/elf32-ppc.h
  4. 5
      ld/testsuite/ChangeLog
  5. 8
      ld/testsuite/ld-powerpc/powerpc.exp
  6. 11
      ld/testsuite/ld-powerpc/vle.ld
  7. 5
      opcodes/ChangeLog
  8. 7
      opcodes/ppc-dis.c

8
bfd/ChangeLog

@ -1,3 +1,11 @@
2012-05-19 Alan Modra <amodra@gmail.com>
* elf32-ppc.h (has_vle_insns, is_ppc_vle): Delete.
(has_tls_reloc, has_tls_get_addr_call): Move back to..
* elf32-ppc.c: ..here.
(ppc_elf_section_flags, elf_backend_section_flags): Delete.
(ppc_elf_modify_segment_map): Use ELF sh_flags to detect VLE sections.
2012-05-18 H.J. Lu <hongjiu.lu@intel.com> 2012-05-18 H.J. Lu <hongjiu.lu@intel.com>
* elf32-i386.c (elf_i386_finish_dynamic_symbol): Don't make * elf32-i386.c (elf_i386_finish_dynamic_symbol): Don't make

27
bfd/elf32-ppc.c

@ -2246,15 +2246,6 @@ ppc_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_type, ...)
} }
} }
static bfd_boolean
ppc_elf_section_flags (flagword *flags ATTRIBUTE_UNUSED,
const Elf_Internal_Shdr *hdr)
{
if (hdr->sh_flags & SHF_PPC_VLE)
hdr->bfd_section->has_vle_insns = 1;
return TRUE;
}
static flagword static flagword
ppc_elf_lookup_section_flags (char *flag_name) ppc_elf_lookup_section_flags (char *flag_name)
{ {
@ -2372,17 +2363,17 @@ ppc_elf_modify_segment_map (bfd *abfd,
if (m->count == 0) if (m->count == 0)
continue; continue;
sect0_vle = is_ppc_vle (m->sections[0]); sect0_vle = (elf_section_flags (m->sections[0]) & SHF_PPC_VLE) != 0;
for (j = 1; j < m->count; ++j) for (j = 1; j < m->count; ++j)
{ {
if (is_ppc_vle (m->sections[j]) != sect0_vle) sectj_vle = (elf_section_flags (m->sections[j]) & SHF_PPC_VLE) != 0;
if (sectj_vle != sect0_vle)
break; break;
} }
if (j >= m->count) if (j >= m->count)
continue; continue;
sectj_vle = is_ppc_vle (m->sections[j]);
/* sections 0..j-1 stay in this (current) segment, /* sections 0..j-1 stay in this (current) segment,
the remainder are put in a new segment. the remainder are put in a new segment.
The scan resumes with the new segment. */ The scan resumes with the new segment. */
@ -3120,6 +3111,15 @@ struct ppc_elf_link_hash_table
struct sym_cache sym_cache; struct sym_cache sym_cache;
}; };
/* Rename some of the generic section flags to better document how they
are used for ppc32. The flags are only valid for ppc32 elf objects. */
/* Nonzero if this section has TLS related relocations. */
#define has_tls_reloc sec_flg0
/* Nonzero if this section has a call to __tls_get_addr. */
#define has_tls_get_addr_call sec_flg1
/* Get the PPC ELF linker hash table from a link_info structure. */ /* Get the PPC ELF linker hash table from a link_info structure. */
#define ppc_elf_hash_table(p) \ #define ppc_elf_hash_table(p) \
@ -9710,7 +9710,6 @@ ppc_elf_finish_dynamic_sections (bfd *output_bfd,
#define elf_backend_init_index_section _bfd_elf_init_1_index_section #define elf_backend_init_index_section _bfd_elf_init_1_index_section
#define elf_backend_post_process_headers _bfd_elf_set_osabi #define elf_backend_post_process_headers _bfd_elf_set_osabi
#define elf_backend_lookup_section_flags_hook ppc_elf_lookup_section_flags #define elf_backend_lookup_section_flags_hook ppc_elf_lookup_section_flags
#define elf_backend_section_flags ppc_elf_section_flags
#define elf_backend_section_processing ppc_elf_section_processing #define elf_backend_section_processing ppc_elf_section_processing
#include "elf32-target.h" #include "elf32-target.h"

20
bfd/elf32-ppc.h

@ -26,26 +26,6 @@ enum ppc_elf_plt_type
PLT_VXWORKS PLT_VXWORKS
}; };
/* Rename some of the generic section flags to better document how they
are used for ppc32. These macros should be private to elf32-ppc.c,
but opcodes/ppc-dis.c needs is_ppc_vle. The flags are only valid
for ppc32 elf objects. */
/* Nonzero if this section has TLS related relocations. */
#define has_tls_reloc sec_flg0
/* Nonzero if this section has a call to __tls_get_addr. */
#define has_tls_get_addr_call sec_flg1
/* Nonzero if this section has the VLE bit set. */
#define has_vle_insns sec_flg2
#define is_ppc_vle(SEC) \
((SEC)->owner != NULL \
&& bfd_get_flavour ((SEC)->owner) == bfd_target_elf_flavour \
&& elf_object_id ((SEC)->owner) == PPC32_ELF_DATA \
&& (SEC)->has_vle_insns)
int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *, int ppc_elf_select_plt_layout (bfd *, struct bfd_link_info *,
enum ppc_elf_plt_type, int); enum ppc_elf_plt_type, int);
asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *, int); asection *ppc_elf_tls_setup (bfd *, struct bfd_link_info *, int);

5
ld/testsuite/ChangeLog

@ -1,3 +1,8 @@
2012-05-19 Alan Modra <amodra@gmail.com>
* ld-powerpc/vle.ld: New.
* ld-powerpc/powerpc.exp (vle reloc tests): Link using vle.ld.
2012-05-18 H.J. Lu <hongjiu.lu@intel.com> 2012-05-18 H.J. Lu <hongjiu.lu@intel.com>
* ld-i386/tlsdesc-nacl.rd: Update for dynamic sym changes. * ld-i386/tlsdesc-nacl.rd: Update for dynamic sym changes.

8
ld/testsuite/ld-powerpc/powerpc.exp

@ -1,5 +1,5 @@
# Expect script for ld-powerpc tests # Expect script for ld-powerpc tests
# Copyright 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011 # Copyright 2002, 2003, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
# Free Software Foundation # Free Software Foundation
# #
# This file is part of the GNU Binutils. # This file is part of the GNU Binutils.
@ -231,13 +231,13 @@ set ppceabitests {
{"VLE multiple segments 5" "-T vle-multiseg-5.ld" {"VLE multiple segments 5" "-T vle-multiseg-5.ld"
"-mregnames -mvle" {vle-multiseg.s} "-mregnames -mvle" {vle-multiseg.s}
{{readelf "-l" vle-multiseg-5.d}} "vle-multiseg-5"} {{readelf "-l" vle-multiseg-5.d}} "vle-multiseg-5"}
{"VLE relocations 1" "" {"VLE relocations 1" "-T vle.ld"
"-mvle" {vle-reloc-1.s vle-reloc-def-1.s} "-mvle" {vle-reloc-1.s vle-reloc-def-1.s}
{{objdump "-Mvle -d" vle-reloc-1.d}} "vle-reloc-1"} {{objdump "-Mvle -d" vle-reloc-1.d}} "vle-reloc-1"}
{"VLE relocations 2" "" {"VLE relocations 2" "-T vle.ld"
"-mvle" {vle-reloc-2.s vle-reloc-def-2.s} "-mvle" {vle-reloc-2.s vle-reloc-def-2.s}
{{objdump "-Mvle -d" vle-reloc-2.d}} "vle-reloc-2"} {{objdump "-Mvle -d" vle-reloc-2.d}} "vle-reloc-2"}
{"VLE relocations 3" "" {"VLE relocations 3" "-T vle.ld"
"-mvle" {vle-reloc-3.s vle-reloc-def-3.s} "-mvle" {vle-reloc-3.s vle-reloc-def-3.s}
{{objdump "-Mvle -d" vle-reloc-3.d}} "vle-reloc-3"} {{objdump "-Mvle -d" vle-reloc-3.d}} "vle-reloc-3"}
} }

11
ld/testsuite/ld-powerpc/vle.ld

@ -0,0 +1,11 @@
SECTIONS
{
. = 0x01800000 + SIZEOF_HEADERS;
.text : { *(.text) }
.PPC.EMB.sdata0 : { *(.PPC.EMB.sdata0) }
.sdata2 : { PROVIDE (_SDA2_BASE_ = 32768); *(.sdata2) }
. = ALIGN (0x10000) + (. & (0x10000 - 1));
.data : { *(.data) }
.sdata : { PROVIDE (_SDA_BASE_ = 32768); *(.sdata) }
/DISCARD/ : { *(*) }
}

5
opcodes/ChangeLog

@ -1,3 +1,8 @@
2012-05-19 Alan Modra <amodra@gmail.com>
* ppc-dis.c: Don't include elf32-ppc.h, do include elf/ppc.h.
(get_powerpc_dialect): Detect VLE sections from ELF sh_flags.
2012-05-18 Alan Modra <amodra@gmail.com> 2012-05-18 Alan Modra <amodra@gmail.com>
* ia64-opc.c: Remove #include "ansidecl.h". * ia64-opc.c: Remove #include "ansidecl.h".

7
opcodes/ppc-dis.c

@ -24,7 +24,7 @@
#include <stdio.h> #include <stdio.h>
#include "dis-asm.h" #include "dis-asm.h"
#include "elf-bfd.h" #include "elf-bfd.h"
#include "elf32-ppc.h" #include "elf/ppc.h"
#include "opintl.h" #include "opintl.h"
#include "opcode/ppc.h" #include "opcode/ppc.h"
@ -199,7 +199,10 @@ get_powerpc_dialect (struct disassemble_info *info)
/* Disassemble according to the section headers flags for VLE-mode. */ /* Disassemble according to the section headers flags for VLE-mode. */
if (dialect & PPC_OPCODE_VLE if (dialect & PPC_OPCODE_VLE
&& is_ppc_vle (info->section)) && info->section->owner != NULL
&& bfd_get_flavour (info->section->owner) == bfd_target_elf_flavour
&& elf_object_id (info->section->owner) == PPC32_ELF_DATA
&& (elf_section_flags (info->section) & SHF_PPC_VLE) != 0)
return dialect; return dialect;
else else
return dialect & ~ PPC_OPCODE_VLE; return dialect & ~ PPC_OPCODE_VLE;

Loading…
Cancel
Save