summaryrefslogtreecommitdiff
path: root/bfd/elf32-rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'bfd/elf32-rx.c')
-rw-r--r--bfd/elf32-rx.c89
1 files changed, 7 insertions, 82 deletions
diff --git a/bfd/elf32-rx.c b/bfd/elf32-rx.c
index 23e9a74140..f049f6e339 100644
--- a/bfd/elf32-rx.c
+++ b/bfd/elf32-rx.c
@@ -32,7 +32,6 @@
endian-swap we would otherwise get. We check for this in
rx_elf_object_p(). */
const bfd_target bfd_elf32_rx_be_ns_vec;
-const bfd_target bfd_elf32_rx_be_vec;
#ifdef DEBUG
char * rx_get_reloc (long);
@@ -463,13 +462,6 @@ rx_elf_relocate_section
struct elf_link_hash_entry ** sym_hashes;
Elf_Internal_Rela * rel;
Elf_Internal_Rela * relend;
- bfd_boolean pid_mode;
- bfd_boolean saw_subtract = FALSE;
-
- if (elf_elfheader (output_bfd)->e_flags & E_FLAG_RX_PID)
- pid_mode = TRUE;
- else
- pid_mode = FALSE;
symtab_hdr = & elf_tdata (input_bfd)->symtab_hdr;
sym_hashes = elf_sym_hashes (input_bfd);
@@ -496,9 +488,6 @@ rx_elf_relocate_section
sec = NULL;
relocation = 0;
- if (rx_stack_top == 0)
- saw_subtract = FALSE;
-
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
@@ -564,28 +553,6 @@ rx_elf_relocate_section
_bfd_error_handler (_("%B:%A: Warning: deprecated Red Hat reloc " type " detected against: %s."), \
input_bfd, input_section, name)
- /* Check for unsafe relocs in PID mode. These are any relocs where
- an absolute address is being computed. There are special cases
- for relocs against symbols that are known to be referenced in
- crt0.o before the PID base address register has been initialised. */
-#define UNSAFE_FOR_PID \
- do \
- { \
- if (pid_mode \
- && sec != NULL \
- && sec->flags & SEC_READONLY \
- && !(input_section->flags & SEC_DEBUGGING) \
- && strcmp (name, "__pid_base") != 0 \
- && strcmp (name, "__gp") != 0 \
- && strcmp (name, "__romdatastart") != 0 \
- && !saw_subtract) \
- _bfd_error_handler (_("%B(%A): unsafe PID relocation %s at 0x%08lx (against %s in %s)"), \
- input_bfd, input_section, howto->name, \
- input_section->output_section->vma + input_section->output_offset + rel->r_offset, \
- name, sec->name); \
- } \
- while (0)
-
/* Opcode relocs are always big endian. Data relocs are bi-endian. */
switch (r_type)
{
@@ -606,19 +573,16 @@ rx_elf_relocate_section
WARN_REDHAT ("RX_RH_8_NEG");
relocation = - relocation;
case R_RX_DIR8S_PCREL:
- UNSAFE_FOR_PID;
RANGE (-128, 127);
OP (0) = relocation;
break;
case R_RX_DIR8S:
- UNSAFE_FOR_PID;
RANGE (-128, 255);
OP (0) = relocation;
break;
case R_RX_DIR8U:
- UNSAFE_FOR_PID;
RANGE (0, 255);
OP (0) = relocation;
break;
@@ -627,7 +591,6 @@ rx_elf_relocate_section
WARN_REDHAT ("RX_RH_16_NEG");
relocation = - relocation;
case R_RX_DIR16S_PCREL:
- UNSAFE_FOR_PID;
RANGE (-32768, 32767);
#if RX_OPCODE_BIG_ENDIAN
#else
@@ -638,7 +601,6 @@ rx_elf_relocate_section
case R_RX_RH_16_OP:
WARN_REDHAT ("RX_RH_16_OP");
- UNSAFE_FOR_PID;
RANGE (-32768, 32767);
#if RX_OPCODE_BIG_ENDIAN
OP (1) = relocation;
@@ -650,7 +612,6 @@ rx_elf_relocate_section
break;
case R_RX_DIR16S:
- UNSAFE_FOR_PID;
RANGE (-32768, 65535);
if (BIGE (output_bfd) && !(input_section->flags & SEC_CODE))
{
@@ -665,7 +626,6 @@ rx_elf_relocate_section
break;
case R_RX_DIR16U:
- UNSAFE_FOR_PID;
RANGE (0, 65536);
#if RX_OPCODE_BIG_ENDIAN
OP (1) = relocation;
@@ -677,7 +637,6 @@ rx_elf_relocate_section
break;
case R_RX_DIR16:
- UNSAFE_FOR_PID;
RANGE (-32768, 65536);
#if RX_OPCODE_BIG_ENDIAN
OP (1) = relocation;
@@ -689,7 +648,6 @@ rx_elf_relocate_section
break;
case R_RX_DIR16_REV:
- UNSAFE_FOR_PID;
RANGE (-32768, 65536);
#if RX_OPCODE_BIG_ENDIAN
OP (0) = relocation;
@@ -707,7 +665,6 @@ rx_elf_relocate_section
break;
case R_RX_RH_24_NEG:
- UNSAFE_FOR_PID;
WARN_REDHAT ("RX_RH_24_NEG");
relocation = - relocation;
case R_RX_DIR24S_PCREL:
@@ -724,7 +681,6 @@ rx_elf_relocate_section
break;
case R_RX_RH_24_OP:
- UNSAFE_FOR_PID;
WARN_REDHAT ("RX_RH_24_OP");
RANGE (-0x800000, 0x7fffff);
#if RX_OPCODE_BIG_ENDIAN
@@ -739,7 +695,6 @@ rx_elf_relocate_section
break;
case R_RX_DIR24S:
- UNSAFE_FOR_PID;
RANGE (-0x800000, 0x7fffff);
if (BIGE (output_bfd) && !(input_section->flags & SEC_CODE))
{
@@ -756,7 +711,6 @@ rx_elf_relocate_section
break;
case R_RX_RH_24_UNS:
- UNSAFE_FOR_PID;
WARN_REDHAT ("RX_RH_24_UNS");
RANGE (0, 0xffffff);
#if RX_OPCODE_BIG_ENDIAN
@@ -771,7 +725,6 @@ rx_elf_relocate_section
break;
case R_RX_RH_32_NEG:
- UNSAFE_FOR_PID;
WARN_REDHAT ("RX_RH_32_NEG");
relocation = - relocation;
#if RX_OPCODE_BIG_ENDIAN
@@ -788,7 +741,6 @@ rx_elf_relocate_section
break;
case R_RX_RH_32_OP:
- UNSAFE_FOR_PID;
WARN_REDHAT ("RX_RH_32_OP");
#if RX_OPCODE_BIG_ENDIAN
OP (3) = relocation;
@@ -968,7 +920,6 @@ rx_elf_relocate_section
/* Complex reloc handling: */
case R_RX_ABS32:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
#if RX_OPCODE_BIG_ENDIAN
OP (3) = relocation;
@@ -984,7 +935,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS32_REV:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
#if RX_OPCODE_BIG_ENDIAN
OP (0) = relocation;
@@ -1001,7 +951,6 @@ rx_elf_relocate_section
case R_RX_ABS24S_PCREL:
case R_RX_ABS24S:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (-0x800000, 0x7fffff);
if (BIGE (output_bfd) && !(input_section->flags & SEC_CODE))
@@ -1019,7 +968,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS16:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (-32768, 65535);
#if RX_OPCODE_BIG_ENDIAN
@@ -1032,7 +980,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS16_REV:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (-32768, 65535);
#if RX_OPCODE_BIG_ENDIAN
@@ -1061,7 +1008,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS16U:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (0, 65536);
#if RX_OPCODE_BIG_ENDIAN
@@ -1074,7 +1020,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS16UL:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
relocation >>= 2;
RANGE (0, 65536);
@@ -1088,7 +1033,6 @@ rx_elf_relocate_section
break;
case R_RX_ABS16UW:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
relocation >>= 1;
RANGE (0, 65536);
@@ -1102,21 +1046,18 @@ rx_elf_relocate_section
break;
case R_RX_ABS8:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (-128, 255);
OP (0) = relocation;
break;
case R_RX_ABS8U:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
RANGE (0, 255);
OP (0) = relocation;
break;
case R_RX_ABS8UL:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
relocation >>= 2;
RANGE (0, 255);
@@ -1124,16 +1065,14 @@ rx_elf_relocate_section
break;
case R_RX_ABS8UW:
- UNSAFE_FOR_PID;
RX_STACK_POP (relocation);
relocation >>= 1;
RANGE (0, 255);
OP (0) = relocation;
break;
- case R_RX_ABS8S:
- UNSAFE_FOR_PID;
case R_RX_ABS8S_PCREL:
+ case R_RX_ABS8S:
RX_STACK_POP (relocation);
RANGE (-128, 127);
OP (0) = relocation;
@@ -1143,8 +1082,7 @@ rx_elf_relocate_section
if (r_symndx < symtab_hdr->sh_info)
RX_STACK_PUSH (sec->output_section->vma
+ sec->output_offset
- + sym->st_value
- + rel->r_addend);
+ + sym->st_value);
else
{
if (h != NULL
@@ -1152,8 +1090,7 @@ rx_elf_relocate_section
|| h->root.type == bfd_link_hash_defweak))
RX_STACK_PUSH (h->root.u.def.value
+ sec->output_section->vma
- + sec->output_offset
- + rel->r_addend);
+ + sec->output_offset);
else
_bfd_error_handler (_("Warning: RX_SYM reloc with an unknown symbol"));
}
@@ -1184,7 +1121,6 @@ rx_elf_relocate_section
{
int32_t tmp1, tmp2;
- saw_subtract = TRUE;
RX_STACK_POP (tmp1);
RX_STACK_POP (tmp2);
tmp2 -= tmp1;
@@ -1207,7 +1143,6 @@ rx_elf_relocate_section
{
int32_t tmp1, tmp2;
- saw_subtract = TRUE;
RX_STACK_POP (tmp1);
RX_STACK_POP (tmp2);
tmp1 /= tmp2;
@@ -2115,7 +2050,7 @@ elf32_rx_relax_section (bfd * abfd,
/* Decodable bits. */
&& (insn[0] & 0xcc) == 0xcc
/* Width. */
- && (insn[0] & 0x30) != 0x30
+ && (insn[0] & 0x30) != 3
/* Register MSBs. */
&& (insn[1] & 0x88) == 0x00)
{
@@ -2219,7 +2154,7 @@ elf32_rx_relax_section (bfd * abfd,
/* Decodable bits. */
&& (insn[0] & 0xc3) == 0xc3
/* Width. */
- && (insn[0] & 0x30) != 0x30
+ && (insn[0] & 0x30) != 3
/* Register MSBs. */
&& (insn[1] & 0x88) == 0x00)
{
@@ -2958,7 +2893,7 @@ rx_elf_merge_private_bfd_data (bfd * ibfd, bfd * obfd)
}
else if (old_flags != new_flags)
{
- flagword known_flags = E_FLAG_RX_64BIT_DOUBLES | E_FLAG_RX_DSP | E_FLAG_RX_PID;
+ flagword known_flags = E_FLAG_RX_64BIT_DOUBLES | E_FLAG_RX_DSP;
if ((old_flags ^ new_flags) & known_flags)
{
@@ -3029,7 +2964,6 @@ rx_elf_object_p (bfd * abfd)
Elf_Internal_Phdr *phdr = elf_tdata (abfd)->phdr;
int nphdrs = elf_elfheader (abfd)->e_phnum;
sec_ptr bsec;
- static int saw_be = FALSE;
/* We never want to automatically choose the non-swapping big-endian
target. The user can only get that explicitly, such as with -I
@@ -3038,15 +2972,6 @@ rx_elf_object_p (bfd * abfd)
&& abfd->target_defaulted)
return FALSE;
- /* BFD->target_defaulted is not set to TRUE when a target is chosen
- as a fallback, so we check for "scanning" to know when to stop
- using the non-swapping target. */
- if (abfd->xvec == &bfd_elf32_rx_be_ns_vec
- && saw_be)
- return FALSE;
- if (abfd->xvec == &bfd_elf32_rx_be_vec)
- saw_be = TRUE;
-
bfd_default_set_arch_mach (abfd, bfd_arch_rx,
elf32_rx_machine (abfd));
@@ -3084,7 +3009,7 @@ rx_elf_object_p (bfd * abfd)
bsec = abfd->sections;
while (bsec)
{
- if (phdr[i].p_vaddr <= bsec->vma
+ if (phdr[i].p_vaddr <= bsec->lma
&& bsec->vma <= phdr[i].p_vaddr + (phdr[i].p_filesz - 1))
{
bsec->lma = phdr[i].p_paddr + (bsec->vma - phdr[i].p_vaddr);