aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bfd/ChangeLog3
-rw-r--r--bfd/elf32-i386.c32
2 files changed, 14 insertions, 21 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 6caadcd..bfa76ba 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,5 +1,8 @@
Thu Jul 6 14:37:43 1995 Ian Lance Taylor <ian@cygnus.com>
+ * elf32-i386.c (elf_i386_relocate_section): Revert May 24 patch.
+ Don't copy PC32 reloc against section into shared object.
+
* Makefile.in: Rebuild dependencies.
(CFILES): Added elflink.c.
(Makefile): Depend upon config.status, not configure.in.
diff --git a/bfd/elf32-i386.c b/bfd/elf32-i386.c
index dbe2268..ef1b42e 100644
--- a/bfd/elf32-i386.c
+++ b/bfd/elf32-i386.c
@@ -852,7 +852,6 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
asection *sec;
bfd_vma relocation;
bfd_reloc_status_type r;
- char *shared_name;
r_type = ELF32_R_TYPE (rel->r_info);
if (r_type < 0 || r_type >= (int) R_386_max)
@@ -891,8 +890,6 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
h = NULL;
sym = NULL;
sec = NULL;
- shared_name = NULL;
-
if (r_symndx < symtab_hdr->sh_info)
{
sym = local_syms + r_symndx;
@@ -1091,7 +1088,8 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
case R_386_32:
case R_386_PC32:
if (info->shared
- && (input_section->flags & SEC_ALLOC) != 0)
+ && (input_section->flags & SEC_ALLOC) != 0
+ && (r_type != R_386_PC32 || h != NULL))
{
Elf_Internal_Rel outrel;
@@ -1101,19 +1099,21 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
if (sreloc == NULL)
{
- shared_name = (bfd_elf_string_from_elf_section
+ const char *name;
+
+ name = (bfd_elf_string_from_elf_section
(input_bfd,
elf_elfheader (input_bfd)->e_shstrndx,
elf_section_data (input_section)->rel_hdr.sh_name));
- if (shared_name == NULL)
+ if (name == NULL)
return false;
- BFD_ASSERT (strncmp (shared_name, ".rel", 4) == 0
+ BFD_ASSERT (strncmp (name, ".rel", 4) == 0
&& strcmp (bfd_get_section_name (input_bfd,
input_section),
- shared_name + 4) == 0);
+ name + 4) == 0);
- sreloc = bfd_get_section_by_name (dynobj, shared_name);
+ sreloc = bfd_get_section_by_name (dynobj, name);
BFD_ASSERT (sreloc != NULL);
}
@@ -1122,18 +1122,8 @@ elf_i386_relocate_section (output_bfd, info, input_bfd, input_section,
+ input_section->output_offset);
if (r_type == R_386_PC32)
{
- if (!h)
- {
- if (! ((*info->callbacks->undefined_symbol)
- (info, shared_name ? shared_name : sec->name, input_bfd,
- input_section, rel->r_offset)))
- bfd_set_error (bfd_error_bad_value);
- return false;
- }
- else {
- BFD_ASSERT (h->dynindx != -1);
- outrel.r_info = ELF32_R_INFO (h->dynindx, R_386_PC32);
- }
+ BFD_ASSERT (h != NULL && h->dynindx != -1);
+ outrel.r_info = ELF32_R_INFO (h->dynindx, R_386_PC32);
}
else
{