diff options
-rw-r--r-- | bfd/ChangeLog | 23 | ||||
-rw-r--r-- | bfd/coff-alpha.c | 18 |
2 files changed, 34 insertions, 7 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog index ef6223b..a9d52e8 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,5 +1,28 @@ Mon Feb 19 12:37:41 1996 Ian Lance Taylor <ian@cygnus.com> + * coff-alpha.c (alpha_ecoff_get_relocated_section_contents): Don't + assume that we can set the GP value and then get the same value, + since it won't be true if the output file is neither ELF nor + ECOFF. + * coff-mips.c (mips_adjust_reloc_in): Don't bother to use + _bfd_get_gp_value here. + (mips_gprel_reloc): Don't assume we can set and get the GP value. + * elf32-mips.c (mips_elf_hi16_reloc): Get gp value from + mips_elf_final_gp. + (mips_elf_lo16_reloc): Likewise. + (mips_elf_final_gp): Add pgp parameter. Set it to the GP value. + Don't require that the BFD be ELF. + (mips_elf_gprel16_reloc): Get gp value from mips_elf_final_gp. + (mips_elf_gprel32_reloc): Likewise. + (mips_elf_relocate_section): Don't assume we can set and get the + GP value. + (mips_elf_finish_dynamic_symbol): Don't bother to use + _bfd_get_gp_value here. + + * elf32-mips.c (mips_elf_create_procedure_table): Initialize sv. + Don't change epdr between malloc and free. Be careful not to free + NULL pointers. Zero out the first RPDR. + * configure.host: On Linux, only pass -rpath option if $(libdir) is neither /lib nor /usr/lib. From Alan Modra <alan@mullet.Levels.UniSA.Edu.Au>. diff --git a/bfd/coff-alpha.c b/bfd/coff-alpha.c index 67dc002..b1134d0 100644 --- a/bfd/coff-alpha.c +++ b/bfd/coff-alpha.c @@ -759,6 +759,7 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order, bfd *output_bfd = relocateable ? abfd : (bfd *) NULL; bfd_vma gp; boolean gp_undefined; + bfd_vma gp; bfd_vma stack[RELOC_STACKSIZE]; int tos = 0; @@ -785,7 +786,8 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order, /* Get the GP value for the output BFD. */ gp_undefined = false; - if (_bfd_get_gp_value (abfd) == 0) + gp = _bfd_get_gp_value (abfd); + if (gp == 0) { if (relocateable != false) { @@ -804,7 +806,8 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order, || strcmp (sec->name, ".lita") == 0)) lo = sec->vma; } - _bfd_set_gp_value (abfd, lo + 0x8000); + gp = lo + 0x8000; + _bfd_set_gp_value (abfd, gp); } else { @@ -816,13 +819,14 @@ alpha_ecoff_get_relocated_section_contents (abfd, link_info, link_order, || h->type != bfd_link_hash_defined) gp_undefined = true; else - _bfd_set_gp_value (abfd, - (h->u.def.value - + h->u.def.section->output_section->vma - + h->u.def.section->output_offset)); + { + gp = (h->u.def.value + + h->u.def.section->output_section->vma + + h->u.def.section->output_offset); + _bfd_set_gp_value (abfd, gp); + } } } - gp = _bfd_get_gp_value (abfd); for (; *reloc_vector != (arelent *) NULL; reloc_vector++) { |