From 903612a2f4e8cd368b94e12ee701cd72c2933477 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Sun, 2 Jun 1996 01:51:55 +0000 Subject: [PATCH] * elf64-mips.c (bfd_mips_elf64_swap_reginfo_in) (bfd_mips_elf64_swap_reginfo_out): Move from here... * elf32-mips.c (bfd_mips_elf64_swap_reginfo_in) (bfd_mips_elf64_swap_reginfo_out): ...to here. --- bfd/ChangeLog | 7 +++++++ bfd/elf32-mips.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/bfd/ChangeLog b/bfd/ChangeLog index 3e8fc4627b..cd7786af10 100644 --- a/bfd/ChangeLog +++ b/bfd/ChangeLog @@ -1,3 +1,10 @@ +Sat Jun 1 21:49:58 1996 Ian Lance Taylor + + * elf64-mips.c (bfd_mips_elf64_swap_reginfo_in) + (bfd_mips_elf64_swap_reginfo_out): Move from here... + * elf32-mips.c (bfd_mips_elf64_swap_reginfo_in) + (bfd_mips_elf64_swap_reginfo_out): ...to here. + Fri May 31 13:51:28 1996 Ian Lance Taylor * elf64-mips.c: Improve reloc special_functions and handling of diff --git a/bfd/elf32-mips.c b/bfd/elf32-mips.c index 94eb015ca1..3ae2d2e466 100644 --- a/bfd/elf32-mips.c +++ b/bfd/elf32-mips.c @@ -1333,6 +1333,49 @@ bfd_mips_elf32_swap_reginfo_out (abfd, in, ex) (bfd_byte *) ex->ri_gp_value); } +/* In the 64 bit ABI, the .MIPS.options section holds register + information in an Elf64_Reginfo structure. These routines swap + them in and out. They are globally visible because they are used + outside of BFD. These routines are here so that gas can call them + without worrying about whether the 64 bit ABI has been included. */ + +void +bfd_mips_elf64_swap_reginfo_in (abfd, ex, in) + bfd *abfd; + const Elf64_External_RegInfo *ex; + Elf64_Internal_RegInfo *in; +{ + in->ri_gprmask = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_gprmask); + in->ri_pad = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_pad); + in->ri_cprmask[0] = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_cprmask[0]); + in->ri_cprmask[1] = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_cprmask[1]); + in->ri_cprmask[2] = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_cprmask[2]); + in->ri_cprmask[3] = bfd_h_get_32 (abfd, (bfd_byte *) ex->ri_cprmask[3]); + in->ri_gp_value = bfd_h_get_64 (abfd, (bfd_byte *) ex->ri_gp_value); +} + +void +bfd_mips_elf64_swap_reginfo_out (abfd, in, ex) + bfd *abfd; + const Elf64_Internal_RegInfo *in; + Elf64_External_RegInfo *ex; +{ + bfd_h_put_32 (abfd, (bfd_vma) in->ri_gprmask, + (bfd_byte *) ex->ri_gprmask); + bfd_h_put_32 (abfd, (bfd_vma) in->ri_pad, + (bfd_byte *) ex->ri_pad); + bfd_h_put_32 (abfd, (bfd_vma) in->ri_cprmask[0], + (bfd_byte *) ex->ri_cprmask[0]); + bfd_h_put_32 (abfd, (bfd_vma) in->ri_cprmask[1], + (bfd_byte *) ex->ri_cprmask[1]); + bfd_h_put_32 (abfd, (bfd_vma) in->ri_cprmask[2], + (bfd_byte *) ex->ri_cprmask[2]); + bfd_h_put_32 (abfd, (bfd_vma) in->ri_cprmask[3], + (bfd_byte *) ex->ri_cprmask[3]); + bfd_h_put_64 (abfd, (bfd_vma) in->ri_gp_value, + (bfd_byte *) ex->ri_gp_value); +} + /* Swap an entry in a .gptab section. Note that these routines rely on the equivalence of the two elements of the union. */