aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Brook <paul@codesourcery.com>2004-11-30 17:45:54 +0000
committerPaul Brook <paul@codesourcery.com>2004-11-30 17:45:54 +0000
commitdea514f51da1051f9f3cd7a746e3b68085aa1a72 (patch)
tree16b2c05eea27625ad25c6a10212e63c6b67394d0
parent32118081351da7f2e122ba3f0e4bd2493cafdd28 (diff)
downloadfsf-binutils-gdb-dea514f51da1051f9f3cd7a746e3b68085aa1a72.zip
fsf-binutils-gdb-dea514f51da1051f9f3cd7a746e3b68085aa1a72.tar.gz
fsf-binutils-gdb-dea514f51da1051f9f3cd7a746e3b68085aa1a72.tar.bz2
2004-11-30 Paul Brook <paul@codesourcery.com>
bfd/ * elf32-arm.c (struct elf32_arm_link_hash_table): Remove no_pipeline_knowledge (elf32_arm_link_hash_table_create): Ditto. (bfd_elf32_arm_process_before_allocation): Ditto. (elf32_arm_final_link_relocate): Ditto. Remove oabi relocation handling. * bfd-in.h (bfd_elf32_arm_process_before_allocation): Update prototype. * bfd-in2.h: Regenerate. ld/ * emultempl/armelf.em: Ignore -p and -no-pipeline-knowledge.
-rw-r--r--bfd/ChangeLog12
-rw-r--r--bfd/bfd-in.h2
-rw-r--r--bfd/bfd-in2.h2
-rw-r--r--bfd/elf32-arm.c103
-rw-r--r--ld/ChangeLog4
-rw-r--r--ld/emultempl/armelf.em5
6 files changed, 42 insertions, 86 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 5fe9ae6..6a1d301 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,15 @@
+2004-11-30 Paul Brook <paul@codesourcery.com>
+
+ * elf32-arm.c (struct elf32_arm_link_hash_table): Remove
+ no_pipeline_knowledge
+ (elf32_arm_link_hash_table_create): Ditto.
+ (bfd_elf32_arm_process_before_allocation): Ditto.
+ (elf32_arm_final_link_relocate): Ditto. Remove oabi relocation
+ handling.
+ * bfd-in.h (bfd_elf32_arm_process_before_allocation): Update
+ prototype.
+ * bfd-in2.h: Regenerate.
+
2004-11-30 Randolph Chung <tausq@debian.org>
* elf32-hppa.c (elf32_hppa_grok_prstatus): New function.
diff --git a/bfd/bfd-in.h b/bfd/bfd-in.h
index 04dfe69..ff84516 100644
--- a/bfd/bfd-in.h
+++ b/bfd/bfd-in.h
@@ -814,7 +814,7 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation
- (bfd *, struct bfd_link_info *, int, int);
+ (bfd *, struct bfd_link_info *, int);
void bfd_elf32_arm_set_target_relocs
(struct bfd_link_info *, int, char *);
diff --git a/bfd/bfd-in2.h b/bfd/bfd-in2.h
index c39e4f8..b10883c 100644
--- a/bfd/bfd-in2.h
+++ b/bfd/bfd-in2.h
@@ -821,7 +821,7 @@ extern bfd_boolean bfd_elf32_arm_allocate_interworking_sections
(struct bfd_link_info *);
extern bfd_boolean bfd_elf32_arm_process_before_allocation
- (bfd *, struct bfd_link_info *, int, int);
+ (bfd *, struct bfd_link_info *, int);
void bfd_elf32_arm_set_target_relocs
(struct bfd_link_info *, int, char *);
diff --git a/bfd/elf32-arm.c b/bfd/elf32-arm.c
index 0154195..0b031e0 100644
--- a/bfd/elf32-arm.c
+++ b/bfd/elf32-arm.c
@@ -1161,10 +1161,6 @@ struct elf32_arm_link_hash_table
/* An arbitrary input BFD chosen to hold the glue sections. */
bfd * bfd_of_glue_owner;
- /* A boolean indicating whether knowledge of the ARM's pipeline
- length should be applied by the linker. */
- int no_pipeline_knowledge;
-
/* Nonzero to output a BE8 image. */
int byteswap_code;
@@ -1382,7 +1378,6 @@ elf32_arm_link_hash_table_create (bfd *abfd)
ret->thumb_glue_size = 0;
ret->arm_glue_size = 0;
ret->bfd_of_glue_owner = NULL;
- ret->no_pipeline_knowledge = 0;
ret->byteswap_code = 0;
ret->target1_is_rel = 0;
ret->target2_reloc = R_ARM_NONE;
@@ -1771,7 +1766,6 @@ bfd_elf32_arm_get_bfd_for_interworking (bfd *abfd, struct bfd_link_info *info)
bfd_boolean
bfd_elf32_arm_process_before_allocation (bfd *abfd,
struct bfd_link_info *link_info,
- int no_pipeline_knowledge,
int byteswap_code)
{
Elf_Internal_Shdr *symtab_hdr;
@@ -1794,8 +1788,6 @@ bfd_elf32_arm_process_before_allocation (bfd *abfd,
BFD_ASSERT (globals != NULL);
BFD_ASSERT (globals->bfd_of_glue_owner != NULL);
- globals->no_pipeline_knowledge = no_pipeline_knowledge;
-
if (byteswap_code && !bfd_big_endian (abfd))
{
_bfd_error_handler (_("%B: BE8 images only valid in big-endian mode."),
@@ -2494,61 +2486,29 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
}
}
- if ( strcmp (bfd_get_target (input_bfd), "elf32-littlearm-oabi") == 0
- || strcmp (bfd_get_target (input_bfd), "elf32-bigarm-oabi") == 0)
- {
- /* The old way of doing things. Trearing the addend as a
- byte sized field and adding in the pipeline offset. */
- value -= (input_section->output_section->vma
- + input_section->output_offset);
- value -= rel->r_offset;
- value += addend;
-
- if (! globals->no_pipeline_knowledge)
- value -= 8;
- }
- else
- {
- /* The ARM ELF ABI says that this reloc is computed as: S - P + A
- where:
- S is the address of the symbol in the relocation.
- P is address of the instruction being relocated.
- A is the addend (extracted from the instruction) in bytes.
-
- S is held in 'value'.
- P is the base address of the section containing the
- instruction plus the offset of the reloc into that
- section, ie:
- (input_section->output_section->vma +
- input_section->output_offset +
- rel->r_offset).
- A is the addend, converted into bytes, ie:
- (signed_addend * 4)
-
- Note: None of these operations have knowledge of the pipeline
- size of the processor, thus it is up to the assembler to
- encode this information into the addend. */
- value -= (input_section->output_section->vma
- + input_section->output_offset);
- value -= rel->r_offset;
- value += (signed_addend << howto->size);
-
- /* Previous versions of this code also used to add in the
- pipeline offset here. This is wrong because the linker is
- not supposed to know about such things, and one day it might
- change. In order to support old binaries that need the old
- behaviour however, so we attempt to detect which ABI was
- used to create the reloc. */
- if (! globals->no_pipeline_knowledge)
- {
- Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form */
-
- i_ehdrp = elf_elfheader (input_bfd);
-
- if (i_ehdrp->e_ident[EI_OSABI] == 0)
- value -= 8;
- }
- }
+ /* The ARM ELF ABI says that this reloc is computed as: S - P + A
+ where:
+ S is the address of the symbol in the relocation.
+ P is address of the instruction being relocated.
+ A is the addend (extracted from the instruction) in bytes.
+
+ S is held in 'value'.
+ P is the base address of the section containing the
+ instruction plus the offset of the reloc into that
+ section, ie:
+ (input_section->output_section->vma +
+ input_section->output_offset +
+ rel->r_offset).
+ A is the addend, converted into bytes, ie:
+ (signed_addend * 4)
+
+ Note: None of these operations have knowledge of the pipeline
+ size of the processor, thus it is up to the assembler to
+ encode this information into the addend. */
+ value -= (input_section->output_section->vma
+ + input_section->output_offset);
+ value -= rel->r_offset;
+ value += (signed_addend << howto->size);
signed_addend = value;
signed_addend >>= howto->rightshift;
@@ -2733,23 +2693,6 @@ elf32_arm_final_link_relocate (reloc_howto_type * howto,
+ input_section->output_offset
+ rel->r_offset);
- if (! globals->no_pipeline_knowledge)
- {
- Elf_Internal_Ehdr * i_ehdrp; /* Elf file header, internal form. */
-
- i_ehdrp = elf_elfheader (input_bfd);
-
- /* Previous versions of this code also used to add in the pipline
- offset here. This is wrong because the linker is not supposed
- to know about such things, and one day it might change. In order
- to support old binaries that need the old behaviour however, so
- we attempt to detect which ABI was used to create the reloc. */
- if ( strcmp (bfd_get_target (input_bfd), "elf32-littlearm-oabi") == 0
- || strcmp (bfd_get_target (input_bfd), "elf32-bigarm-oabi") == 0
- || i_ehdrp->e_ident[EI_OSABI] == 0)
- relocation += 4;
- }
-
check = relocation >> howto->rightshift;
/* If this is a signed value, the rightshift just dropped
diff --git a/ld/ChangeLog b/ld/ChangeLog
index c644720..97cc36c 100644
--- a/ld/ChangeLog
+++ b/ld/ChangeLog
@@ -1,3 +1,7 @@
+2004-11-30 Paul Brook <paul@codesourcery.com>
+
+ * emultempl/armelf.em: Ignore -p and -no-pipeline-knowledge.
+
2004-11-30 Tero Niemela <tero_niemela@yahoo.com>
* Makefile.am: Change LOCALEDIR to $(datadir)/share.
diff --git a/ld/emultempl/armelf.em b/ld/emultempl/armelf.em
index 3e594cb..b292cd1 100644
--- a/ld/emultempl/armelf.em
+++ b/ld/emultempl/armelf.em
@@ -25,7 +25,6 @@
test -z $TARGET2_TYPE && TARGET2_TYPE="rel"
cat >>e${EMULATION_NAME}.c <<EOF
-static int no_pipeline_knowledge = 0;
static char *thumb_entry_symbol = NULL;
static bfd *bfd_for_interwork;
static int byteswap_code = 0;
@@ -125,7 +124,6 @@ arm_elf_before_allocation (void)
LANG_FOR_EACH_INPUT_STATEMENT (is)
{
if (!bfd_elf32_arm_process_before_allocation (is->the_bfd, & link_info,
- no_pipeline_knowledge,
byteswap_code))
{
/* xgettext:c-format */
@@ -219,7 +217,6 @@ PARSE_AND_LIST_LONGOPTS='
'
PARSE_AND_LIST_OPTIONS='
- fprintf (file, _(" -p --no-pipeline-knowledge Stop the linker knowing about the pipeline length\n"));
fprintf (file, _(" --thumb-entry=<sym> Set the entry point to be Thumb symbol <sym>\n"));
fprintf (file, _(" --be8 Oputput BE8 format image\n"));
fprintf (file, _(" --target1=rel Interpret R_ARM_TARGET1 as R_ARM_REL32\n"));
@@ -229,7 +226,7 @@ PARSE_AND_LIST_OPTIONS='
PARSE_AND_LIST_ARGS_CASES='
case '\'p\'':
- no_pipeline_knowledge = 1;
+ /* Only here for backwards compatibility. */
break;
case OPTION_THUMB_ENTRY: