133965Sjdp/* Generic ECOFF swapping routines, for BFD. 2218822Sdim Copyright 1992, 1993, 1994, 1995, 1996, 2000, 2001, 2002, 2004, 2005 378828Sobrien Free Software Foundation, Inc. 433965Sjdp Written by Cygnus Support. 533965Sjdp 6130561Sobrien This file is part of BFD, the Binary File Descriptor library. 733965Sjdp 8130561Sobrien This program is free software; you can redistribute it and/or modify 9130561Sobrien it under the terms of the GNU General Public License as published by 10130561Sobrien the Free Software Foundation; either version 2 of the License, or 11130561Sobrien (at your option) any later version. 1233965Sjdp 13130561Sobrien This program is distributed in the hope that it will be useful, 14130561Sobrien but WITHOUT ANY WARRANTY; without even the implied warranty of 15130561Sobrien MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16130561Sobrien GNU General Public License for more details. 1733965Sjdp 18130561Sobrien You should have received a copy of the GNU General Public License 19130561Sobrien along with this program; if not, write to the Free Software 20218822Sdim Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ 2133965Sjdp 2233965Sjdp/* NOTE: This is a header file, but it contains executable routines. 2333965Sjdp This is done this way because these routines are substantially 2433965Sjdp similar, but are not identical, for all ECOFF targets. 2533965Sjdp 2633965Sjdp These are routines to swap the ECOFF symbolic information in and 2733965Sjdp out. The routines are defined statically. You can set breakpoints 2833965Sjdp on them in gdb by naming the including source file; e.g., 2933965Sjdp 'coff-mips.c':ecoff_swap_hdr_in. 3033965Sjdp 3177298Sobrien Before including this header file, one of ECOFF_32, ECOFF_64, 3277298Sobrien ECOFF_SIGNED_32 or ECOFF_SIGNED_64 must be defined. These are 3377298Sobrien checked when swapping information that depends upon the target 3477298Sobrien size. This code works for 32 bit and 64 bit ECOFF, but may need to 3577298Sobrien be generalized in the future. 3633965Sjdp 3733965Sjdp Some header file which defines the external forms of these 3833965Sjdp structures must also be included before including this header file. 3933965Sjdp Currently this is either coff/mips.h or coff/alpha.h. 4033965Sjdp 4133965Sjdp If the symbol TEST is defined when this file is compiled, a 4233965Sjdp comparison is made to ensure that, in fact, the output is 4333965Sjdp bit-for-bit the same as the input. Of course, this symbol should 4433965Sjdp only be defined when deliberately testing the code on a machine 4533965Sjdp with the proper byte sex and such. */ 4633965Sjdp 4733965Sjdp#ifdef ECOFF_32 4889857Sobrien#define ECOFF_GET_OFF H_GET_32 4989857Sobrien#define ECOFF_PUT_OFF H_PUT_32 5033965Sjdp#endif 5133965Sjdp#ifdef ECOFF_64 5289857Sobrien#define ECOFF_GET_OFF H_GET_64 5389857Sobrien#define ECOFF_PUT_OFF H_PUT_64 5433965Sjdp#endif 5577298Sobrien#ifdef ECOFF_SIGNED_32 5689857Sobrien#define ECOFF_GET_OFF H_GET_S32 5789857Sobrien#define ECOFF_PUT_OFF H_PUT_S32 5877298Sobrien#endif 5977298Sobrien#ifdef ECOFF_SIGNED_64 6089857Sobrien#define ECOFF_GET_OFF H_GET_S64 6189857Sobrien#define ECOFF_PUT_OFF H_PUT_S64 6277298Sobrien#endif 6333965Sjdp 6433965Sjdp/* ECOFF auxiliary information swapping routines. These are the same 6533965Sjdp for all ECOFF targets, so they are defined in ecofflink.c. */ 6633965Sjdp 6733965Sjdpextern void _bfd_ecoff_swap_tir_in 68218822Sdim (int, const struct tir_ext *, TIR *); 6933965Sjdpextern void _bfd_ecoff_swap_tir_out 70218822Sdim (int, const TIR *, struct tir_ext *); 7133965Sjdpextern void _bfd_ecoff_swap_rndx_in 72218822Sdim (int, const struct rndx_ext *, RNDXR *); 7333965Sjdpextern void _bfd_ecoff_swap_rndx_out 74218822Sdim (int, const RNDXR *, struct rndx_ext *); 7533965Sjdp 7633965Sjdp/* Prototypes for functions defined in this file. */ 7733965Sjdp 78218822Sdimstatic void ecoff_swap_hdr_in (bfd *, void *, HDRR *); 79218822Sdimstatic void ecoff_swap_hdr_out (bfd *, const HDRR *, void *); 80218822Sdimstatic void ecoff_swap_fdr_in (bfd *, void *, FDR *); 81218822Sdimstatic void ecoff_swap_fdr_out (bfd *, const FDR *, void *); 82218822Sdimstatic void ecoff_swap_pdr_in (bfd *, void *, PDR *); 83218822Sdimstatic void ecoff_swap_pdr_out (bfd *, const PDR *, void *); 84218822Sdimstatic void ecoff_swap_sym_in (bfd *, void *, SYMR *); 85218822Sdimstatic void ecoff_swap_sym_out (bfd *, const SYMR *, void *); 86218822Sdimstatic void ecoff_swap_ext_in (bfd *, void *, EXTR *); 87218822Sdimstatic void ecoff_swap_ext_out (bfd *, const EXTR *, void *); 88218822Sdimstatic void ecoff_swap_rfd_in (bfd *, void *, RFDT *); 89218822Sdimstatic void ecoff_swap_rfd_out (bfd *, const RFDT *, void *); 90218822Sdimstatic void ecoff_swap_opt_in (bfd *, void *, OPTR *); 91218822Sdimstatic void ecoff_swap_opt_out (bfd *, const OPTR *, void *); 92218822Sdimstatic void ecoff_swap_dnr_in (bfd *, void *, DNR *); 93218822Sdimstatic void ecoff_swap_dnr_out (bfd *, const DNR *, void *); 9433965Sjdp 9533965Sjdp/* Swap in the symbolic header. */ 9633965Sjdp 9733965Sjdpstatic void 98218822Sdimecoff_swap_hdr_in (bfd *abfd, void * ext_copy, HDRR *intern) 9933965Sjdp{ 10033965Sjdp struct hdr_ext ext[1]; 10133965Sjdp 10233965Sjdp *ext = *(struct hdr_ext *) ext_copy; 10333965Sjdp 10489857Sobrien intern->magic = H_GET_S16 (abfd, ext->h_magic); 10589857Sobrien intern->vstamp = H_GET_S16 (abfd, ext->h_vstamp); 10689857Sobrien intern->ilineMax = H_GET_32 (abfd, ext->h_ilineMax); 10789857Sobrien intern->cbLine = ECOFF_GET_OFF (abfd, ext->h_cbLine); 10889857Sobrien intern->cbLineOffset = ECOFF_GET_OFF (abfd, ext->h_cbLineOffset); 10989857Sobrien intern->idnMax = H_GET_32 (abfd, ext->h_idnMax); 11089857Sobrien intern->cbDnOffset = ECOFF_GET_OFF (abfd, ext->h_cbDnOffset); 11189857Sobrien intern->ipdMax = H_GET_32 (abfd, ext->h_ipdMax); 11289857Sobrien intern->cbPdOffset = ECOFF_GET_OFF (abfd, ext->h_cbPdOffset); 11389857Sobrien intern->isymMax = H_GET_32 (abfd, ext->h_isymMax); 11489857Sobrien intern->cbSymOffset = ECOFF_GET_OFF (abfd, ext->h_cbSymOffset); 11589857Sobrien intern->ioptMax = H_GET_32 (abfd, ext->h_ioptMax); 11689857Sobrien intern->cbOptOffset = ECOFF_GET_OFF (abfd, ext->h_cbOptOffset); 11789857Sobrien intern->iauxMax = H_GET_32 (abfd, ext->h_iauxMax); 11889857Sobrien intern->cbAuxOffset = ECOFF_GET_OFF (abfd, ext->h_cbAuxOffset); 11989857Sobrien intern->issMax = H_GET_32 (abfd, ext->h_issMax); 12089857Sobrien intern->cbSsOffset = ECOFF_GET_OFF (abfd, ext->h_cbSsOffset); 12189857Sobrien intern->issExtMax = H_GET_32 (abfd, ext->h_issExtMax); 12289857Sobrien intern->cbSsExtOffset = ECOFF_GET_OFF (abfd, ext->h_cbSsExtOffset); 12389857Sobrien intern->ifdMax = H_GET_32 (abfd, ext->h_ifdMax); 12489857Sobrien intern->cbFdOffset = ECOFF_GET_OFF (abfd, ext->h_cbFdOffset); 12589857Sobrien intern->crfd = H_GET_32 (abfd, ext->h_crfd); 12689857Sobrien intern->cbRfdOffset = ECOFF_GET_OFF (abfd, ext->h_cbRfdOffset); 12789857Sobrien intern->iextMax = H_GET_32 (abfd, ext->h_iextMax); 12889857Sobrien intern->cbExtOffset = ECOFF_GET_OFF (abfd, ext->h_cbExtOffset); 12933965Sjdp 13033965Sjdp#ifdef TEST 131218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 13277298Sobrien abort (); 13333965Sjdp#endif 13433965Sjdp} 13533965Sjdp 13633965Sjdp/* Swap out the symbolic header. */ 13733965Sjdp 13833965Sjdpstatic void 139218822Sdimecoff_swap_hdr_out (bfd *abfd, const HDRR *intern_copy, void * ext_ptr) 14033965Sjdp{ 14133965Sjdp struct hdr_ext *ext = (struct hdr_ext *) ext_ptr; 14233965Sjdp HDRR intern[1]; 14333965Sjdp 14433965Sjdp *intern = *intern_copy; 14533965Sjdp 14689857Sobrien H_PUT_S16 (abfd, intern->magic, ext->h_magic); 14789857Sobrien H_PUT_S16 (abfd, intern->vstamp, ext->h_vstamp); 14889857Sobrien H_PUT_32 (abfd, intern->ilineMax, ext->h_ilineMax); 14989857Sobrien ECOFF_PUT_OFF (abfd, intern->cbLine, ext->h_cbLine); 15089857Sobrien ECOFF_PUT_OFF (abfd, intern->cbLineOffset, ext->h_cbLineOffset); 15189857Sobrien H_PUT_32 (abfd, intern->idnMax, ext->h_idnMax); 15289857Sobrien ECOFF_PUT_OFF (abfd, intern->cbDnOffset, ext->h_cbDnOffset); 15389857Sobrien H_PUT_32 (abfd, intern->ipdMax, ext->h_ipdMax); 15489857Sobrien ECOFF_PUT_OFF (abfd, intern->cbPdOffset, ext->h_cbPdOffset); 15589857Sobrien H_PUT_32 (abfd, intern->isymMax, ext->h_isymMax); 15689857Sobrien ECOFF_PUT_OFF (abfd, intern->cbSymOffset, ext->h_cbSymOffset); 15789857Sobrien H_PUT_32 (abfd, intern->ioptMax, ext->h_ioptMax); 15889857Sobrien ECOFF_PUT_OFF (abfd, intern->cbOptOffset, ext->h_cbOptOffset); 15989857Sobrien H_PUT_32 (abfd, intern->iauxMax, ext->h_iauxMax); 16089857Sobrien ECOFF_PUT_OFF (abfd, intern->cbAuxOffset, ext->h_cbAuxOffset); 16189857Sobrien H_PUT_32 (abfd, intern->issMax, ext->h_issMax); 16289857Sobrien ECOFF_PUT_OFF (abfd, intern->cbSsOffset, ext->h_cbSsOffset); 16389857Sobrien H_PUT_32 (abfd, intern->issExtMax, ext->h_issExtMax); 16489857Sobrien ECOFF_PUT_OFF (abfd, intern->cbSsExtOffset, ext->h_cbSsExtOffset); 16589857Sobrien H_PUT_32 (abfd, intern->ifdMax, ext->h_ifdMax); 16689857Sobrien ECOFF_PUT_OFF (abfd, intern->cbFdOffset, ext->h_cbFdOffset); 16789857Sobrien H_PUT_32 (abfd, intern->crfd, ext->h_crfd); 16889857Sobrien ECOFF_PUT_OFF (abfd, intern->cbRfdOffset, ext->h_cbRfdOffset); 16989857Sobrien H_PUT_32 (abfd, intern->iextMax, ext->h_iextMax); 17089857Sobrien ECOFF_PUT_OFF (abfd, intern->cbExtOffset, ext->h_cbExtOffset); 17133965Sjdp 17233965Sjdp#ifdef TEST 17389857Sobrien if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 17477298Sobrien abort (); 17533965Sjdp#endif 17633965Sjdp} 17733965Sjdp 17833965Sjdp/* Swap in the file descriptor record. */ 17933965Sjdp 18033965Sjdpstatic void 181218822Sdimecoff_swap_fdr_in (bfd *abfd, void * ext_copy, FDR *intern) 18233965Sjdp{ 18333965Sjdp struct fdr_ext ext[1]; 18433965Sjdp 18533965Sjdp *ext = *(struct fdr_ext *) ext_copy; 18677298Sobrien 18789857Sobrien intern->adr = ECOFF_GET_OFF (abfd, ext->f_adr); 18889857Sobrien intern->rss = H_GET_32 (abfd, ext->f_rss); 18977298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 19078828Sobrien if (intern->rss == (signed long) 0xffffffff) 19133965Sjdp intern->rss = -1; 19233965Sjdp#endif 19389857Sobrien intern->issBase = H_GET_32 (abfd, ext->f_issBase); 19489857Sobrien intern->cbSs = ECOFF_GET_OFF (abfd, ext->f_cbSs); 19589857Sobrien intern->isymBase = H_GET_32 (abfd, ext->f_isymBase); 19689857Sobrien intern->csym = H_GET_32 (abfd, ext->f_csym); 19789857Sobrien intern->ilineBase = H_GET_32 (abfd, ext->f_ilineBase); 19889857Sobrien intern->cline = H_GET_32 (abfd, ext->f_cline); 19989857Sobrien intern->ioptBase = H_GET_32 (abfd, ext->f_ioptBase); 20089857Sobrien intern->copt = H_GET_32 (abfd, ext->f_copt); 20177298Sobrien#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 20289857Sobrien intern->ipdFirst = H_GET_16 (abfd, ext->f_ipdFirst); 20389857Sobrien intern->cpd = H_GET_16 (abfd, ext->f_cpd); 20433965Sjdp#endif 20577298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 20689857Sobrien intern->ipdFirst = H_GET_32 (abfd, ext->f_ipdFirst); 20789857Sobrien intern->cpd = H_GET_32 (abfd, ext->f_cpd); 20833965Sjdp#endif 20989857Sobrien intern->iauxBase = H_GET_32 (abfd, ext->f_iauxBase); 21089857Sobrien intern->caux = H_GET_32 (abfd, ext->f_caux); 21189857Sobrien intern->rfdBase = H_GET_32 (abfd, ext->f_rfdBase); 21289857Sobrien intern->crfd = H_GET_32 (abfd, ext->f_crfd); 21333965Sjdp 214130561Sobrien /* Now the fun stuff... */ 21589857Sobrien if (bfd_header_big_endian (abfd)) 21689857Sobrien { 21789857Sobrien intern->lang = ((ext->f_bits1[0] & FDR_BITS1_LANG_BIG) 21889857Sobrien >> FDR_BITS1_LANG_SH_BIG); 21989857Sobrien intern->fMerge = 0 != (ext->f_bits1[0] & FDR_BITS1_FMERGE_BIG); 22089857Sobrien intern->fReadin = 0 != (ext->f_bits1[0] & FDR_BITS1_FREADIN_BIG); 22189857Sobrien intern->fBigendian = 0 != (ext->f_bits1[0] & FDR_BITS1_FBIGENDIAN_BIG); 22289857Sobrien intern->glevel = ((ext->f_bits2[0] & FDR_BITS2_GLEVEL_BIG) 22389857Sobrien >> FDR_BITS2_GLEVEL_SH_BIG); 22489857Sobrien } 22589857Sobrien else 22689857Sobrien { 22789857Sobrien intern->lang = ((ext->f_bits1[0] & FDR_BITS1_LANG_LITTLE) 22889857Sobrien >> FDR_BITS1_LANG_SH_LITTLE); 22989857Sobrien intern->fMerge = 0 != (ext->f_bits1[0] & FDR_BITS1_FMERGE_LITTLE); 23089857Sobrien intern->fReadin = 0 != (ext->f_bits1[0] & FDR_BITS1_FREADIN_LITTLE); 23189857Sobrien intern->fBigendian = 0 != (ext->f_bits1[0] & FDR_BITS1_FBIGENDIAN_LITTLE); 23289857Sobrien intern->glevel = ((ext->f_bits2[0] & FDR_BITS2_GLEVEL_LITTLE) 23389857Sobrien >> FDR_BITS2_GLEVEL_SH_LITTLE); 23489857Sobrien } 23533965Sjdp intern->reserved = 0; 23633965Sjdp 23789857Sobrien intern->cbLineOffset = ECOFF_GET_OFF (abfd, ext->f_cbLineOffset); 23889857Sobrien intern->cbLine = ECOFF_GET_OFF (abfd, ext->f_cbLine); 23933965Sjdp 24033965Sjdp#ifdef TEST 241218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 24277298Sobrien abort (); 24333965Sjdp#endif 24433965Sjdp} 24533965Sjdp 24633965Sjdp/* Swap out the file descriptor record. */ 24733965Sjdp 24833965Sjdpstatic void 249218822Sdimecoff_swap_fdr_out (bfd *abfd, const FDR *intern_copy, void * ext_ptr) 25033965Sjdp{ 25133965Sjdp struct fdr_ext *ext = (struct fdr_ext *) ext_ptr; 25233965Sjdp FDR intern[1]; 25333965Sjdp 254130561Sobrien /* Make it reasonable to do in-place. */ 255130561Sobrien *intern = *intern_copy; 25677298Sobrien 25789857Sobrien ECOFF_PUT_OFF (abfd, intern->adr, ext->f_adr); 25889857Sobrien H_PUT_32 (abfd, intern->rss, ext->f_rss); 25989857Sobrien H_PUT_32 (abfd, intern->issBase, ext->f_issBase); 26089857Sobrien ECOFF_PUT_OFF (abfd, intern->cbSs, ext->f_cbSs); 26189857Sobrien H_PUT_32 (abfd, intern->isymBase, ext->f_isymBase); 26289857Sobrien H_PUT_32 (abfd, intern->csym, ext->f_csym); 26389857Sobrien H_PUT_32 (abfd, intern->ilineBase, ext->f_ilineBase); 26489857Sobrien H_PUT_32 (abfd, intern->cline, ext->f_cline); 26589857Sobrien H_PUT_32 (abfd, intern->ioptBase, ext->f_ioptBase); 26689857Sobrien H_PUT_32 (abfd, intern->copt, ext->f_copt); 26777298Sobrien#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 26889857Sobrien H_PUT_16 (abfd, intern->ipdFirst, ext->f_ipdFirst); 26989857Sobrien H_PUT_16 (abfd, intern->cpd, ext->f_cpd); 27033965Sjdp#endif 27177298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 27289857Sobrien H_PUT_32 (abfd, intern->ipdFirst, ext->f_ipdFirst); 27389857Sobrien H_PUT_32 (abfd, intern->cpd, ext->f_cpd); 27433965Sjdp#endif 27589857Sobrien H_PUT_32 (abfd, intern->iauxBase, ext->f_iauxBase); 27689857Sobrien H_PUT_32 (abfd, intern->caux, ext->f_caux); 27789857Sobrien H_PUT_32 (abfd, intern->rfdBase, ext->f_rfdBase); 27889857Sobrien H_PUT_32 (abfd, intern->crfd, ext->f_crfd); 27933965Sjdp 280130561Sobrien /* Now the fun stuff... */ 28189857Sobrien if (bfd_header_big_endian (abfd)) 28289857Sobrien { 28389857Sobrien ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_BIG) 28489857Sobrien & FDR_BITS1_LANG_BIG) 28589857Sobrien | (intern->fMerge ? FDR_BITS1_FMERGE_BIG : 0) 28689857Sobrien | (intern->fReadin ? FDR_BITS1_FREADIN_BIG : 0) 28789857Sobrien | (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_BIG : 0)); 28889857Sobrien ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_BIG) 28989857Sobrien & FDR_BITS2_GLEVEL_BIG); 29089857Sobrien ext->f_bits2[1] = 0; 29189857Sobrien ext->f_bits2[2] = 0; 29289857Sobrien } 29389857Sobrien else 29489857Sobrien { 29589857Sobrien ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_LITTLE) 29689857Sobrien & FDR_BITS1_LANG_LITTLE) 29789857Sobrien | (intern->fMerge ? FDR_BITS1_FMERGE_LITTLE : 0) 29889857Sobrien | (intern->fReadin ? FDR_BITS1_FREADIN_LITTLE : 0) 29989857Sobrien | (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_LITTLE : 0)); 30089857Sobrien ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_LITTLE) 30189857Sobrien & FDR_BITS2_GLEVEL_LITTLE); 30289857Sobrien ext->f_bits2[1] = 0; 30389857Sobrien ext->f_bits2[2] = 0; 30489857Sobrien } 30533965Sjdp 30689857Sobrien ECOFF_PUT_OFF (abfd, intern->cbLineOffset, ext->f_cbLineOffset); 30789857Sobrien ECOFF_PUT_OFF (abfd, intern->cbLine, ext->f_cbLine); 30833965Sjdp 30933965Sjdp#ifdef TEST 310218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 31177298Sobrien abort (); 31233965Sjdp#endif 31333965Sjdp} 31433965Sjdp 31533965Sjdp/* Swap in the procedure descriptor record. */ 31633965Sjdp 31733965Sjdpstatic void 318218822Sdimecoff_swap_pdr_in (bfd *abfd, void * ext_copy, PDR *intern) 31933965Sjdp{ 32033965Sjdp struct pdr_ext ext[1]; 32133965Sjdp 32233965Sjdp *ext = *(struct pdr_ext *) ext_copy; 32333965Sjdp 324218822Sdim memset ((void *) intern, 0, sizeof (*intern)); 32533965Sjdp 32689857Sobrien intern->adr = ECOFF_GET_OFF (abfd, ext->p_adr); 32789857Sobrien intern->isym = H_GET_32 (abfd, ext->p_isym); 32889857Sobrien intern->iline = H_GET_32 (abfd, ext->p_iline); 32989857Sobrien intern->regmask = H_GET_32 (abfd, ext->p_regmask); 33089857Sobrien intern->regoffset = H_GET_S32 (abfd, ext->p_regoffset); 33189857Sobrien intern->iopt = H_GET_S32 (abfd, ext->p_iopt); 33289857Sobrien intern->fregmask = H_GET_32 (abfd, ext->p_fregmask); 33389857Sobrien intern->fregoffset = H_GET_S32 (abfd, ext->p_fregoffset); 33489857Sobrien intern->frameoffset = H_GET_S32 (abfd, ext->p_frameoffset); 33589857Sobrien intern->framereg = H_GET_16 (abfd, ext->p_framereg); 33689857Sobrien intern->pcreg = H_GET_16 (abfd, ext->p_pcreg); 33789857Sobrien intern->lnLow = H_GET_32 (abfd, ext->p_lnLow); 33889857Sobrien intern->lnHigh = H_GET_32 (abfd, ext->p_lnHigh); 33989857Sobrien intern->cbLineOffset = ECOFF_GET_OFF (abfd, ext->p_cbLineOffset); 34033965Sjdp 34177298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 342130561Sobrien if (intern->isym == (signed long) 0xffffffff) 343130561Sobrien intern->isym = -1; 344130561Sobrien if (intern->iline == (signed long) 0xffffffff) 345130561Sobrien intern->iline = -1; 346130561Sobrien 34789857Sobrien intern->gp_prologue = H_GET_8 (abfd, ext->p_gp_prologue); 34833965Sjdp if (bfd_header_big_endian (abfd)) 34933965Sjdp { 35033965Sjdp intern->gp_used = 0 != (ext->p_bits1[0] & PDR_BITS1_GP_USED_BIG); 35133965Sjdp intern->reg_frame = 0 != (ext->p_bits1[0] & PDR_BITS1_REG_FRAME_BIG); 35233965Sjdp intern->prof = 0 != (ext->p_bits1[0] & PDR_BITS1_PROF_BIG); 35333965Sjdp intern->reserved = (((ext->p_bits1[0] & PDR_BITS1_RESERVED_BIG) 35433965Sjdp << PDR_BITS1_RESERVED_SH_LEFT_BIG) 35533965Sjdp | ((ext->p_bits2[0] & PDR_BITS2_RESERVED_BIG) 35633965Sjdp >> PDR_BITS2_RESERVED_SH_BIG)); 35733965Sjdp } 35833965Sjdp else 35933965Sjdp { 36033965Sjdp intern->gp_used = 0 != (ext->p_bits1[0] & PDR_BITS1_GP_USED_LITTLE); 36133965Sjdp intern->reg_frame = 0 != (ext->p_bits1[0] & PDR_BITS1_REG_FRAME_LITTLE); 36233965Sjdp intern->prof = 0 != (ext->p_bits1[0] & PDR_BITS1_PROF_LITTLE); 36333965Sjdp intern->reserved = (((ext->p_bits1[0] & PDR_BITS1_RESERVED_LITTLE) 36433965Sjdp >> PDR_BITS1_RESERVED_SH_LITTLE) 36533965Sjdp | ((ext->p_bits2[0] & PDR_BITS2_RESERVED_LITTLE) 36633965Sjdp << PDR_BITS2_RESERVED_SH_LEFT_LITTLE)); 36733965Sjdp } 36889857Sobrien intern->localoff = H_GET_8 (abfd, ext->p_localoff); 36977298Sobrien#endif 37033965Sjdp 37133965Sjdp#ifdef TEST 372218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 37377298Sobrien abort (); 37433965Sjdp#endif 37533965Sjdp} 37633965Sjdp 37733965Sjdp/* Swap out the procedure descriptor record. */ 37833965Sjdp 37933965Sjdpstatic void 380218822Sdimecoff_swap_pdr_out (bfd *abfd, const PDR *intern_copy, void * ext_ptr) 38133965Sjdp{ 38233965Sjdp struct pdr_ext *ext = (struct pdr_ext *) ext_ptr; 38333965Sjdp PDR intern[1]; 38433965Sjdp 385130561Sobrien /* Make it reasonable to do in-place. */ 386130561Sobrien *intern = *intern_copy; 38777298Sobrien 38889857Sobrien ECOFF_PUT_OFF (abfd, intern->adr, ext->p_adr); 38989857Sobrien H_PUT_32 (abfd, intern->isym, ext->p_isym); 39089857Sobrien H_PUT_32 (abfd, intern->iline, ext->p_iline); 39189857Sobrien H_PUT_32 (abfd, intern->regmask, ext->p_regmask); 39289857Sobrien H_PUT_32 (abfd, intern->regoffset, ext->p_regoffset); 39389857Sobrien H_PUT_32 (abfd, intern->iopt, ext->p_iopt); 39489857Sobrien H_PUT_32 (abfd, intern->fregmask, ext->p_fregmask); 39589857Sobrien H_PUT_32 (abfd, intern->fregoffset, ext->p_fregoffset); 39689857Sobrien H_PUT_32 (abfd, intern->frameoffset, ext->p_frameoffset); 39789857Sobrien H_PUT_16 (abfd, intern->framereg, ext->p_framereg); 39889857Sobrien H_PUT_16 (abfd, intern->pcreg, ext->p_pcreg); 39989857Sobrien H_PUT_32 (abfd, intern->lnLow, ext->p_lnLow); 40089857Sobrien H_PUT_32 (abfd, intern->lnHigh, ext->p_lnHigh); 40189857Sobrien ECOFF_PUT_OFF (abfd, intern->cbLineOffset, ext->p_cbLineOffset); 40233965Sjdp 40377298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 40489857Sobrien H_PUT_8 (abfd, intern->gp_prologue, ext->p_gp_prologue); 40589857Sobrien 40633965Sjdp if (bfd_header_big_endian (abfd)) 40733965Sjdp { 40833965Sjdp ext->p_bits1[0] = ((intern->gp_used ? PDR_BITS1_GP_USED_BIG : 0) 40933965Sjdp | (intern->reg_frame ? PDR_BITS1_REG_FRAME_BIG : 0) 41033965Sjdp | (intern->prof ? PDR_BITS1_PROF_BIG : 0) 41133965Sjdp | ((intern->reserved 41233965Sjdp >> PDR_BITS1_RESERVED_SH_LEFT_BIG) 41333965Sjdp & PDR_BITS1_RESERVED_BIG)); 41433965Sjdp ext->p_bits2[0] = ((intern->reserved << PDR_BITS2_RESERVED_SH_BIG) 41533965Sjdp & PDR_BITS2_RESERVED_BIG); 41633965Sjdp } 41733965Sjdp else 41833965Sjdp { 41933965Sjdp ext->p_bits1[0] = ((intern->gp_used ? PDR_BITS1_GP_USED_LITTLE : 0) 42033965Sjdp | (intern->reg_frame ? PDR_BITS1_REG_FRAME_LITTLE : 0) 42133965Sjdp | (intern->prof ? PDR_BITS1_PROF_LITTLE : 0) 42233965Sjdp | ((intern->reserved << PDR_BITS1_RESERVED_SH_LITTLE) 42333965Sjdp & PDR_BITS1_RESERVED_LITTLE)); 42433965Sjdp ext->p_bits2[0] = ((intern->reserved >> 42533965Sjdp PDR_BITS2_RESERVED_SH_LEFT_LITTLE) 42633965Sjdp & PDR_BITS2_RESERVED_LITTLE); 42733965Sjdp } 42889857Sobrien H_PUT_8 (abfd, intern->localoff, ext->p_localoff); 42977298Sobrien#endif 43033965Sjdp 43133965Sjdp#ifdef TEST 432218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 43377298Sobrien abort (); 43433965Sjdp#endif 43533965Sjdp} 43633965Sjdp 43733965Sjdp/* Swap in a symbol record. */ 43833965Sjdp 43933965Sjdpstatic void 440218822Sdimecoff_swap_sym_in (bfd *abfd, void * ext_copy, SYMR *intern) 44133965Sjdp{ 44233965Sjdp struct sym_ext ext[1]; 44333965Sjdp 44433965Sjdp *ext = *(struct sym_ext *) ext_copy; 44577298Sobrien 44689857Sobrien intern->iss = H_GET_32 (abfd, ext->s_iss); 44789857Sobrien intern->value = ECOFF_GET_OFF (abfd, ext->s_value); 44833965Sjdp 449130561Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 450130561Sobrien if (intern->iss == (signed long) 0xffffffff) 451130561Sobrien intern->iss = -1; 452130561Sobrien#endif 45333965Sjdp 454130561Sobrien /* Now the fun stuff... */ 455130561Sobrien if (bfd_header_big_endian (abfd)) 456130561Sobrien { 457130561Sobrien intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_BIG) 458130561Sobrien >> SYM_BITS1_ST_SH_BIG; 459130561Sobrien intern->sc = ((ext->s_bits1[0] & SYM_BITS1_SC_BIG) 460130561Sobrien << SYM_BITS1_SC_SH_LEFT_BIG) 461130561Sobrien | ((ext->s_bits2[0] & SYM_BITS2_SC_BIG) 462130561Sobrien >> SYM_BITS2_SC_SH_BIG); 463130561Sobrien intern->reserved = 0 != (ext->s_bits2[0] & SYM_BITS2_RESERVED_BIG); 464130561Sobrien intern->index = ((ext->s_bits2[0] & SYM_BITS2_INDEX_BIG) 465130561Sobrien << SYM_BITS2_INDEX_SH_LEFT_BIG) 466130561Sobrien | (ext->s_bits3[0] << SYM_BITS3_INDEX_SH_LEFT_BIG) 467130561Sobrien | (ext->s_bits4[0] << SYM_BITS4_INDEX_SH_LEFT_BIG); 468130561Sobrien } 469130561Sobrien else 470130561Sobrien { 471130561Sobrien intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_LITTLE) 472130561Sobrien >> SYM_BITS1_ST_SH_LITTLE; 473130561Sobrien intern->sc = ((ext->s_bits1[0] & SYM_BITS1_SC_LITTLE) 474130561Sobrien >> SYM_BITS1_SC_SH_LITTLE) 475130561Sobrien | ((ext->s_bits2[0] & SYM_BITS2_SC_LITTLE) 476130561Sobrien << SYM_BITS2_SC_SH_LEFT_LITTLE); 477130561Sobrien intern->reserved = 0 != (ext->s_bits2[0] & SYM_BITS2_RESERVED_LITTLE); 478130561Sobrien intern->index = ((ext->s_bits2[0] & SYM_BITS2_INDEX_LITTLE) 479130561Sobrien >> SYM_BITS2_INDEX_SH_LITTLE) 480130561Sobrien | (ext->s_bits3[0] << SYM_BITS3_INDEX_SH_LEFT_LITTLE) 481130561Sobrien | ((unsigned int) ext->s_bits4[0] 482130561Sobrien << SYM_BITS4_INDEX_SH_LEFT_LITTLE); 483130561Sobrien } 484130561Sobrien 48533965Sjdp#ifdef TEST 486218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 48777298Sobrien abort (); 48833965Sjdp#endif 48933965Sjdp} 49033965Sjdp 49133965Sjdp/* Swap out a symbol record. */ 49233965Sjdp 49333965Sjdpstatic void 494218822Sdimecoff_swap_sym_out (bfd *abfd, const SYMR *intern_copy, void * ext_ptr) 49533965Sjdp{ 49633965Sjdp struct sym_ext *ext = (struct sym_ext *) ext_ptr; 49733965Sjdp SYMR intern[1]; 49833965Sjdp 499130561Sobrien /* Make it reasonable to do in-place. */ 500130561Sobrien *intern = *intern_copy; 50177298Sobrien 50289857Sobrien H_PUT_32 (abfd, intern->iss, ext->s_iss); 50389857Sobrien ECOFF_PUT_OFF (abfd, intern->value, ext->s_value); 50433965Sjdp 505130561Sobrien /* Now the fun stuff... */ 506130561Sobrien if (bfd_header_big_endian (abfd)) 507130561Sobrien { 508130561Sobrien ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_BIG) 509130561Sobrien & SYM_BITS1_ST_BIG) 510130561Sobrien | ((intern->sc >> SYM_BITS1_SC_SH_LEFT_BIG) 511130561Sobrien & SYM_BITS1_SC_BIG)); 512130561Sobrien ext->s_bits2[0] = (((intern->sc << SYM_BITS2_SC_SH_BIG) 513130561Sobrien & SYM_BITS2_SC_BIG) 514130561Sobrien | (intern->reserved ? SYM_BITS2_RESERVED_BIG : 0) 515130561Sobrien | ((intern->index >> SYM_BITS2_INDEX_SH_LEFT_BIG) 516130561Sobrien & SYM_BITS2_INDEX_BIG)); 517130561Sobrien ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_BIG) & 0xff; 518130561Sobrien ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_BIG) & 0xff; 519130561Sobrien } 520130561Sobrien else 521130561Sobrien { 522130561Sobrien ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_LITTLE) 523130561Sobrien & SYM_BITS1_ST_LITTLE) 524130561Sobrien | ((intern->sc << SYM_BITS1_SC_SH_LITTLE) 525130561Sobrien & SYM_BITS1_SC_LITTLE)); 526130561Sobrien ext->s_bits2[0] = (((intern->sc >> SYM_BITS2_SC_SH_LEFT_LITTLE) 527130561Sobrien & SYM_BITS2_SC_LITTLE) 528130561Sobrien | (intern->reserved ? SYM_BITS2_RESERVED_LITTLE : 0) 529130561Sobrien | ((intern->index << SYM_BITS2_INDEX_SH_LITTLE) 530130561Sobrien & SYM_BITS2_INDEX_LITTLE)); 531130561Sobrien ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_LITTLE) & 0xff; 532130561Sobrien ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_LITTLE) & 0xff; 533130561Sobrien } 53433965Sjdp 53533965Sjdp#ifdef TEST 536218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 53777298Sobrien abort (); 53833965Sjdp#endif 53933965Sjdp} 54033965Sjdp 54133965Sjdp/* Swap in an external symbol record. */ 54233965Sjdp 54333965Sjdpstatic void 544218822Sdimecoff_swap_ext_in (bfd *abfd, void * ext_copy, EXTR *intern) 54533965Sjdp{ 54633965Sjdp struct ext_ext ext[1]; 54733965Sjdp 54833965Sjdp *ext = *(struct ext_ext *) ext_copy; 54977298Sobrien 550130561Sobrien /* Now the fun stuff... */ 551130561Sobrien if (bfd_header_big_endian (abfd)) 552130561Sobrien { 553130561Sobrien intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_BIG); 554130561Sobrien intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_BIG); 555130561Sobrien intern->weakext = 0 != (ext->es_bits1[0] & EXT_BITS1_WEAKEXT_BIG); 556130561Sobrien } 557130561Sobrien else 558130561Sobrien { 559130561Sobrien intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_LITTLE); 560130561Sobrien intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_LITTLE); 561130561Sobrien intern->weakext = 0 != (ext->es_bits1[0] & EXT_BITS1_WEAKEXT_LITTLE); 562130561Sobrien } 56333965Sjdp intern->reserved = 0; 56433965Sjdp 56577298Sobrien#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 566130561Sobrien intern->ifd = H_GET_S16 (abfd, ext->es_ifd); 56733965Sjdp#endif 56877298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 569130561Sobrien intern->ifd = H_GET_S32 (abfd, ext->es_ifd); 57033965Sjdp#endif 57133965Sjdp 57233965Sjdp ecoff_swap_sym_in (abfd, &ext->es_asym, &intern->asym); 57333965Sjdp 57433965Sjdp#ifdef TEST 575218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 57677298Sobrien abort (); 57733965Sjdp#endif 57833965Sjdp} 57933965Sjdp 58033965Sjdp/* Swap out an external symbol record. */ 58133965Sjdp 58233965Sjdpstatic void 583218822Sdimecoff_swap_ext_out (bfd *abfd, const EXTR *intern_copy, void * ext_ptr) 58433965Sjdp{ 58533965Sjdp struct ext_ext *ext = (struct ext_ext *) ext_ptr; 58633965Sjdp EXTR intern[1]; 58733965Sjdp 588130561Sobrien /* Make it reasonable to do in-place. */ 589130561Sobrien *intern = *intern_copy; 59077298Sobrien 591130561Sobrien /* Now the fun stuff... */ 592130561Sobrien if (bfd_header_big_endian (abfd)) 593130561Sobrien { 594130561Sobrien ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_BIG : 0) 595130561Sobrien | (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_BIG : 0) 596130561Sobrien | (intern->weakext ? EXT_BITS1_WEAKEXT_BIG : 0)); 597130561Sobrien ext->es_bits2[0] = 0; 59877298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 599130561Sobrien ext->es_bits2[1] = 0; 600130561Sobrien ext->es_bits2[2] = 0; 60133965Sjdp#endif 602130561Sobrien } 603130561Sobrien else 604130561Sobrien { 605130561Sobrien ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_LITTLE : 0) 606130561Sobrien | (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_LITTLE : 0) 607130561Sobrien | (intern->weakext ? EXT_BITS1_WEAKEXT_LITTLE : 0)); 608130561Sobrien ext->es_bits2[0] = 0; 60977298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 610130561Sobrien ext->es_bits2[1] = 0; 611130561Sobrien ext->es_bits2[2] = 0; 61233965Sjdp#endif 613130561Sobrien } 61433965Sjdp 61577298Sobrien#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 61689857Sobrien H_PUT_S16 (abfd, intern->ifd, ext->es_ifd); 61733965Sjdp#endif 61877298Sobrien#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 61989857Sobrien H_PUT_S32 (abfd, intern->ifd, ext->es_ifd); 62033965Sjdp#endif 62133965Sjdp 62233965Sjdp ecoff_swap_sym_out (abfd, &intern->asym, &ext->es_asym); 62333965Sjdp 62433965Sjdp#ifdef TEST 625218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 62677298Sobrien abort (); 62733965Sjdp#endif 62833965Sjdp} 62933965Sjdp 63033965Sjdp/* Swap in a relative file descriptor. */ 63133965Sjdp 63233965Sjdpstatic void 633218822Sdimecoff_swap_rfd_in (bfd *abfd, void * ext_ptr, RFDT *intern) 63433965Sjdp{ 63533965Sjdp struct rfd_ext *ext = (struct rfd_ext *) ext_ptr; 63633965Sjdp 63789857Sobrien *intern = H_GET_32 (abfd, ext->rfd); 63833965Sjdp 63933965Sjdp#ifdef TEST 640218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 64177298Sobrien abort (); 64233965Sjdp#endif 64333965Sjdp} 64433965Sjdp 64533965Sjdp/* Swap out a relative file descriptor. */ 64633965Sjdp 64733965Sjdpstatic void 648218822Sdimecoff_swap_rfd_out (bfd *abfd, const RFDT *intern, void * ext_ptr) 64933965Sjdp{ 65033965Sjdp struct rfd_ext *ext = (struct rfd_ext *) ext_ptr; 65133965Sjdp 65289857Sobrien H_PUT_32 (abfd, *intern, ext->rfd); 65333965Sjdp 65433965Sjdp#ifdef TEST 655218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 65677298Sobrien abort (); 65733965Sjdp#endif 65833965Sjdp} 65933965Sjdp 66033965Sjdp/* Swap in an optimization symbol. */ 66133965Sjdp 66233965Sjdpstatic void 663218822Sdimecoff_swap_opt_in (bfd *abfd, void * ext_copy, OPTR * intern) 66433965Sjdp{ 66533965Sjdp struct opt_ext ext[1]; 66633965Sjdp 66733965Sjdp *ext = *(struct opt_ext *) ext_copy; 66833965Sjdp 66933965Sjdp if (bfd_header_big_endian (abfd)) 67033965Sjdp { 67133965Sjdp intern->ot = ext->o_bits1[0]; 67233965Sjdp intern->value = (((unsigned int) ext->o_bits2[0] 67333965Sjdp << OPT_BITS2_VALUE_SH_LEFT_BIG) 67433965Sjdp | ((unsigned int) ext->o_bits3[0] 67533965Sjdp << OPT_BITS2_VALUE_SH_LEFT_BIG) 67633965Sjdp | ((unsigned int) ext->o_bits4[0] 67733965Sjdp << OPT_BITS2_VALUE_SH_LEFT_BIG)); 67833965Sjdp } 67933965Sjdp else 68033965Sjdp { 68133965Sjdp intern->ot = ext->o_bits1[0]; 68233965Sjdp intern->value = ((ext->o_bits2[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE) 68333965Sjdp | (ext->o_bits3[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE) 68433965Sjdp | (ext->o_bits4[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE)); 68533965Sjdp } 68633965Sjdp 68733965Sjdp _bfd_ecoff_swap_rndx_in (bfd_header_big_endian (abfd), 68833965Sjdp &ext->o_rndx, &intern->rndx); 68933965Sjdp 69089857Sobrien intern->offset = H_GET_32 (abfd, ext->o_offset); 69133965Sjdp 69233965Sjdp#ifdef TEST 693218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 69477298Sobrien abort (); 69533965Sjdp#endif 69633965Sjdp} 69733965Sjdp 69833965Sjdp/* Swap out an optimization symbol. */ 69933965Sjdp 70033965Sjdpstatic void 701218822Sdimecoff_swap_opt_out (bfd *abfd, const OPTR *intern_copy, void * ext_ptr) 70233965Sjdp{ 70333965Sjdp struct opt_ext *ext = (struct opt_ext *) ext_ptr; 70433965Sjdp OPTR intern[1]; 70533965Sjdp 706130561Sobrien /* Make it reasonable to do in-place. */ 707130561Sobrien *intern = *intern_copy; 70833965Sjdp 70933965Sjdp if (bfd_header_big_endian (abfd)) 71033965Sjdp { 71133965Sjdp ext->o_bits1[0] = intern->ot; 71233965Sjdp ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_BIG; 71333965Sjdp ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_BIG; 71433965Sjdp ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_BIG; 71533965Sjdp } 71633965Sjdp else 71733965Sjdp { 71833965Sjdp ext->o_bits1[0] = intern->ot; 71933965Sjdp ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_LITTLE; 72033965Sjdp ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_LITTLE; 72133965Sjdp ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_LITTLE; 72233965Sjdp } 72333965Sjdp 72433965Sjdp _bfd_ecoff_swap_rndx_out (bfd_header_big_endian (abfd), 72533965Sjdp &intern->rndx, &ext->o_rndx); 72633965Sjdp 72789857Sobrien H_PUT_32 (abfd, intern->value, ext->o_offset); 72833965Sjdp 72933965Sjdp#ifdef TEST 730218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 73177298Sobrien abort (); 73233965Sjdp#endif 73333965Sjdp} 73433965Sjdp 73533965Sjdp/* Swap in a dense number. */ 73633965Sjdp 73733965Sjdpstatic void 738218822Sdimecoff_swap_dnr_in (bfd *abfd, void * ext_copy, DNR *intern) 73933965Sjdp{ 74033965Sjdp struct dnr_ext ext[1]; 74133965Sjdp 74233965Sjdp *ext = *(struct dnr_ext *) ext_copy; 74333965Sjdp 74489857Sobrien intern->rfd = H_GET_32 (abfd, ext->d_rfd); 74589857Sobrien intern->index = H_GET_32 (abfd, ext->d_index); 74633965Sjdp 74733965Sjdp#ifdef TEST 748218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 74977298Sobrien abort (); 75033965Sjdp#endif 75133965Sjdp} 75233965Sjdp 75333965Sjdp/* Swap out a dense number. */ 75433965Sjdp 75533965Sjdpstatic void 756218822Sdimecoff_swap_dnr_out (bfd *abfd, const DNR *intern_copy, void * ext_ptr) 75733965Sjdp{ 75833965Sjdp struct dnr_ext *ext = (struct dnr_ext *) ext_ptr; 75933965Sjdp DNR intern[1]; 76033965Sjdp 761130561Sobrien /* Make it reasonable to do in-place. */ 762130561Sobrien *intern = *intern_copy; 76333965Sjdp 76489857Sobrien H_PUT_32 (abfd, intern->rfd, ext->d_rfd); 76589857Sobrien H_PUT_32 (abfd, intern->index, ext->d_index); 76633965Sjdp 76733965Sjdp#ifdef TEST 768218822Sdim if (memcmp ((char *) ext, (char *) intern, sizeof (*intern)) != 0) 76977298Sobrien abort (); 77033965Sjdp#endif 77133965Sjdp} 772