ecoffswap.h revision 77298
111499Sjkh/* Generic ECOFF swapping routines, for BFD. 211499Sjkh Copyright 1992, 1993, 1994, 1995, 1996, 2000 Free Software Foundation, Inc. 311499Sjkh Written by Cygnus Support. 411499Sjkh 511499SjkhThis file is part of BFD, the Binary File Descriptor library. 611499Sjkh 715242SjkhThis program is free software; you can redistribute it and/or modify 811499Sjkhit under the terms of the GNU General Public License as published by 911499Sjkhthe Free Software Foundation; either version 2 of the License, or 1011499Sjkh(at your option) any later version. 1111499Sjkh 1211499SjkhThis program is distributed in the hope that it will be useful, 1311499Sjkhbut WITHOUT ANY WARRANTY; without even the implied warranty of 1411499SjkhMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 1511499SjkhGNU General Public License for more details. 1611499Sjkh 1711499SjkhYou should have received a copy of the GNU General Public License 1811499Sjkhalong with this program; if not, write to the Free Software 1911499SjkhFoundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ 2011499Sjkh 2111499Sjkh/* NOTE: This is a header file, but it contains executable routines. 2211499Sjkh This is done this way because these routines are substantially 2311499Sjkh similar, but are not identical, for all ECOFF targets. 2411499Sjkh 2511499Sjkh These are routines to swap the ECOFF symbolic information in and 2611499Sjkh out. The routines are defined statically. You can set breakpoints 2711499Sjkh on them in gdb by naming the including source file; e.g., 2811499Sjkh 'coff-mips.c':ecoff_swap_hdr_in. 2911499Sjkh 3011499Sjkh Before including this header file, one of ECOFF_32, ECOFF_64, 3111499Sjkh ECOFF_SIGNED_32 or ECOFF_SIGNED_64 must be defined. These are 3211499Sjkh checked when swapping information that depends upon the target 3311499Sjkh size. This code works for 32 bit and 64 bit ECOFF, but may need to 3411499Sjkh be generalized in the future. 3511499Sjkh 3611499Sjkh Some header file which defines the external forms of these 3711499Sjkh structures must also be included before including this header file. 3811499Sjkh Currently this is either coff/mips.h or coff/alpha.h. 3911499Sjkh 4011499Sjkh If the symbol TEST is defined when this file is compiled, a 4111499Sjkh comparison is made to ensure that, in fact, the output is 4211499Sjkh bit-for-bit the same as the input. Of course, this symbol should 4311499Sjkh only be defined when deliberately testing the code on a machine 4411499Sjkh with the proper byte sex and such. */ 4511499Sjkh 4611650Sjkh#ifdef ECOFF_32 4711650Sjkh#define ecoff_get_off bfd_h_get_32 4811650Sjkh#define ecoff_put_off bfd_h_put_32 4911650Sjkh#endif 5011650Sjkh#ifdef ECOFF_64 5115242Sjkh#define ecoff_get_off bfd_h_get_64 5214738Sjkh#define ecoff_put_off bfd_h_put_64 5311650Sjkh#endif 5411650Sjkh#ifdef ECOFF_SIGNED_32 5511499Sjkh#define ecoff_get_off bfd_h_get_signed_32 5611499Sjkh#define ecoff_put_off bfd_h_put_signed_32 5714738Sjkh#endif 5811499Sjkh#ifdef ECOFF_SIGNED_64 5911499Sjkh#define ecoff_get_off bfd_h_get_signed_64 6011718Sjkh#define ecoff_put_off bfd_h_put_signed_64 6111499Sjkh#endif 6212232Sjkh 6312232Sjkh/* ECOFF auxiliary information swapping routines. These are the same 6412232Sjkh for all ECOFF targets, so they are defined in ecofflink.c. */ 6512232Sjkh 6612612Sjkhextern void _bfd_ecoff_swap_tir_in 6711536Sjkh PARAMS ((int, const struct tir_ext *, TIR *)); 6811672Sjkhextern void _bfd_ecoff_swap_tir_out 6911834Sjkh PARAMS ((int, const TIR *, struct tir_ext *)); 7015242Sjkhextern void _bfd_ecoff_swap_rndx_in 7111672Sjkh PARAMS ((int, const struct rndx_ext *, RNDXR *)); 7211536Sjkhextern void _bfd_ecoff_swap_rndx_out 7311553Sjkh PARAMS ((int, const RNDXR *, struct rndx_ext *)); 7411672Sjkh 7511672Sjkh/* Prototypes for functions defined in this file. */ 7615242Sjkh 7711553Sjkhstatic void ecoff_swap_hdr_in PARAMS ((bfd *, PTR, HDRR *)); 7811499Sjkhstatic void ecoff_swap_hdr_out PARAMS ((bfd *, const HDRR *, PTR)); 7914738Sjkhstatic void ecoff_swap_fdr_in PARAMS ((bfd *, PTR, FDR *)); 8015242Sjkhstatic void ecoff_swap_fdr_out PARAMS ((bfd *, const FDR *, PTR)); 8112129Sjkhstatic void ecoff_swap_pdr_in PARAMS ((bfd *, PTR, PDR *)); 8212129Sjkhstatic void ecoff_swap_pdr_out PARAMS ((bfd *, const PDR *, PTR)); 8312129Sjkhstatic void ecoff_swap_sym_in PARAMS ((bfd *, PTR, SYMR *)); 8412129Sjkhstatic void ecoff_swap_sym_out PARAMS ((bfd *, const SYMR *, PTR)); 8514670Sjkhstatic void ecoff_swap_ext_in PARAMS ((bfd *, PTR, EXTR *)); 8614670Sjkhstatic void ecoff_swap_ext_out PARAMS ((bfd *, const EXTR *, PTR)); 8712129Sjkhstatic void ecoff_swap_rfd_in PARAMS ((bfd *, PTR, RFDT *)); 8812129Sjkhstatic void ecoff_swap_rfd_out PARAMS ((bfd *, const RFDT *, PTR)); 8911553Sjkhstatic void ecoff_swap_opt_in PARAMS ((bfd *, PTR, OPTR *)); 9011553Sjkhstatic void ecoff_swap_opt_out PARAMS ((bfd *, const OPTR *, PTR)); 9111499Sjkhstatic void ecoff_swap_dnr_in PARAMS ((bfd *, PTR, DNR *)); 9214670Sjkhstatic void ecoff_swap_dnr_out PARAMS ((bfd *, const DNR *, PTR)); 9314670Sjkh 9412184Sjkh/* Swap in the symbolic header. */ 9514738Sjkh 9614738Sjkhstatic void 9714670Sjkhecoff_swap_hdr_in (abfd, ext_copy, intern) 9814670Sjkh bfd *abfd; 9914670Sjkh PTR ext_copy; 10014670Sjkh HDRR *intern; 10114670Sjkh{ 10214670Sjkh struct hdr_ext ext[1]; 10314670Sjkh 10414670Sjkh *ext = *(struct hdr_ext *) ext_copy; 10511499Sjkh 10614670Sjkh intern->magic = bfd_h_get_signed_16 (abfd, (bfd_byte *)ext->h_magic); 10711499Sjkh intern->vstamp = bfd_h_get_signed_16 (abfd, (bfd_byte *)ext->h_vstamp); 10811672Sjkh intern->ilineMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_ilineMax); 10914670Sjkh intern->cbLine = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbLine); 11014670Sjkh intern->cbLineOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbLineOffset); 11114670Sjkh intern->idnMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_idnMax); 11214670Sjkh intern->cbDnOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbDnOffset); 11315242Sjkh intern->ipdMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_ipdMax); 11415242Sjkh intern->cbPdOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbPdOffset); 11515242Sjkh intern->isymMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_isymMax); 11614670Sjkh intern->cbSymOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbSymOffset); 11714670Sjkh intern->ioptMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_ioptMax); 11815242Sjkh intern->cbOptOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbOptOffset); 11915242Sjkh intern->iauxMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_iauxMax); 12015242Sjkh intern->cbAuxOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbAuxOffset); 12115242Sjkh intern->issMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_issMax); 12215242Sjkh intern->cbSsOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbSsOffset); 12315242Sjkh intern->issExtMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_issExtMax); 12414670Sjkh intern->cbSsExtOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbSsExtOffset); 12514670Sjkh intern->ifdMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_ifdMax); 12614670Sjkh intern->cbFdOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbFdOffset); 12714670Sjkh intern->crfd = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_crfd); 12814670Sjkh intern->cbRfdOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbRfdOffset); 12914738Sjkh intern->iextMax = bfd_h_get_32 (abfd, (bfd_byte *)ext->h_iextMax); 13014738Sjkh intern->cbExtOffset = ecoff_get_off (abfd, (bfd_byte *)ext->h_cbExtOffset); 13114670Sjkh 13214670Sjkh#ifdef TEST 13314670Sjkh if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 13414670Sjkh abort (); 13514670Sjkh#endif 13614670Sjkh} 13714670Sjkh 13811672Sjkh/* Swap out the symbolic header. */ 13911499Sjkh 14011672Sjkhstatic void 14111553Sjkhecoff_swap_hdr_out (abfd, intern_copy, ext_ptr) 14211672Sjkh bfd *abfd; 14311672Sjkh const HDRR *intern_copy; 14411799Sjkh PTR ext_ptr; 14511672Sjkh{ 14611672Sjkh struct hdr_ext *ext = (struct hdr_ext *) ext_ptr; 14711672Sjkh HDRR intern[1]; 14811799Sjkh 14911672Sjkh *intern = *intern_copy; 15015242Sjkh 15111672Sjkh bfd_h_put_signed_16 (abfd, intern->magic, (bfd_byte *)ext->h_magic); 15211499Sjkh bfd_h_put_signed_16 (abfd, intern->vstamp, (bfd_byte *)ext->h_vstamp); 15311499Sjkh bfd_h_put_32 (abfd, intern->ilineMax, (bfd_byte *)ext->h_ilineMax); 154 ecoff_put_off (abfd, intern->cbLine, (bfd_byte *)ext->h_cbLine); 155 ecoff_put_off (abfd, intern->cbLineOffset, (bfd_byte *)ext->h_cbLineOffset); 156 bfd_h_put_32 (abfd, intern->idnMax, (bfd_byte *)ext->h_idnMax); 157 ecoff_put_off (abfd, intern->cbDnOffset, (bfd_byte *)ext->h_cbDnOffset); 158 bfd_h_put_32 (abfd, intern->ipdMax, (bfd_byte *)ext->h_ipdMax); 159 ecoff_put_off (abfd, intern->cbPdOffset, (bfd_byte *)ext->h_cbPdOffset); 160 bfd_h_put_32 (abfd, intern->isymMax, (bfd_byte *)ext->h_isymMax); 161 ecoff_put_off (abfd, intern->cbSymOffset, (bfd_byte *)ext->h_cbSymOffset); 162 bfd_h_put_32 (abfd, intern->ioptMax, (bfd_byte *)ext->h_ioptMax); 163 ecoff_put_off (abfd, intern->cbOptOffset, (bfd_byte *)ext->h_cbOptOffset); 164 bfd_h_put_32 (abfd, intern->iauxMax, (bfd_byte *)ext->h_iauxMax); 165 ecoff_put_off (abfd, intern->cbAuxOffset, (bfd_byte *)ext->h_cbAuxOffset); 166 bfd_h_put_32 (abfd, intern->issMax, (bfd_byte *)ext->h_issMax); 167 ecoff_put_off (abfd, intern->cbSsOffset, (bfd_byte *)ext->h_cbSsOffset); 168 bfd_h_put_32 (abfd, intern->issExtMax, (bfd_byte *)ext->h_issExtMax); 169 ecoff_put_off (abfd, intern->cbSsExtOffset, (bfd_byte *)ext->h_cbSsExtOffset); 170 bfd_h_put_32 (abfd, intern->ifdMax, (bfd_byte *)ext->h_ifdMax); 171 ecoff_put_off (abfd, intern->cbFdOffset, (bfd_byte *)ext->h_cbFdOffset); 172 bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->h_crfd); 173 ecoff_put_off (abfd, intern->cbRfdOffset, (bfd_byte *)ext->h_cbRfdOffset); 174 bfd_h_put_32 (abfd, intern->iextMax, (bfd_byte *)ext->h_iextMax); 175 ecoff_put_off (abfd, intern->cbExtOffset, (bfd_byte *)ext->h_cbExtOffset); 176 177#ifdef TEST 178 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 179 abort (); 180#endif 181} 182 183/* Swap in the file descriptor record. */ 184 185static void 186ecoff_swap_fdr_in (abfd, ext_copy, intern) 187 bfd *abfd; 188 PTR ext_copy; 189 FDR *intern; 190{ 191 struct fdr_ext ext[1]; 192 193 *ext = *(struct fdr_ext *) ext_copy; 194 195 intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->f_adr); 196 intern->rss = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rss); 197#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 198 if (intern->rss == 0xffffffff) 199 intern->rss = -1; 200#endif 201 intern->issBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_issBase); 202 intern->cbSs = ecoff_get_off (abfd, (bfd_byte *)ext->f_cbSs); 203 intern->isymBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_isymBase); 204 intern->csym = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_csym); 205 intern->ilineBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_ilineBase); 206 intern->cline = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_cline); 207 intern->ioptBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_ioptBase); 208 intern->copt = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_copt); 209#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 210 intern->ipdFirst = bfd_h_get_16 (abfd, (bfd_byte *)ext->f_ipdFirst); 211 intern->cpd = bfd_h_get_16 (abfd, (bfd_byte *)ext->f_cpd); 212#endif 213#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 214 intern->ipdFirst = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_ipdFirst); 215 intern->cpd = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_cpd); 216#endif 217 intern->iauxBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_iauxBase); 218 intern->caux = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_caux); 219 intern->rfdBase = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_rfdBase); 220 intern->crfd = bfd_h_get_32 (abfd, (bfd_byte *)ext->f_crfd); 221 222 /* now the fun stuff... */ 223 if (bfd_header_big_endian (abfd)) { 224 intern->lang = (ext->f_bits1[0] & FDR_BITS1_LANG_BIG) 225 >> FDR_BITS1_LANG_SH_BIG; 226 intern->fMerge = 0 != (ext->f_bits1[0] & FDR_BITS1_FMERGE_BIG); 227 intern->fReadin = 0 != (ext->f_bits1[0] & FDR_BITS1_FREADIN_BIG); 228 intern->fBigendian = 0 != (ext->f_bits1[0] & FDR_BITS1_FBIGENDIAN_BIG); 229 intern->glevel = (ext->f_bits2[0] & FDR_BITS2_GLEVEL_BIG) 230 >> FDR_BITS2_GLEVEL_SH_BIG; 231 } else { 232 intern->lang = (ext->f_bits1[0] & FDR_BITS1_LANG_LITTLE) 233 >> FDR_BITS1_LANG_SH_LITTLE; 234 intern->fMerge = 0 != (ext->f_bits1[0] & FDR_BITS1_FMERGE_LITTLE); 235 intern->fReadin = 0 != (ext->f_bits1[0] & FDR_BITS1_FREADIN_LITTLE); 236 intern->fBigendian = 0 != (ext->f_bits1[0] & FDR_BITS1_FBIGENDIAN_LITTLE); 237 intern->glevel = (ext->f_bits2[0] & FDR_BITS2_GLEVEL_LITTLE) 238 >> FDR_BITS2_GLEVEL_SH_LITTLE; 239 } 240 intern->reserved = 0; 241 242 intern->cbLineOffset = ecoff_get_off (abfd, (bfd_byte *)ext->f_cbLineOffset); 243 intern->cbLine = ecoff_get_off (abfd, (bfd_byte *)ext->f_cbLine); 244 245#ifdef TEST 246 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 247 abort (); 248#endif 249} 250 251/* Swap out the file descriptor record. */ 252 253static void 254ecoff_swap_fdr_out (abfd, intern_copy, ext_ptr) 255 bfd *abfd; 256 const FDR *intern_copy; 257 PTR ext_ptr; 258{ 259 struct fdr_ext *ext = (struct fdr_ext *) ext_ptr; 260 FDR intern[1]; 261 262 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 263 264 ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->f_adr); 265 bfd_h_put_32 (abfd, intern->rss, (bfd_byte *)ext->f_rss); 266 bfd_h_put_32 (abfd, intern->issBase, (bfd_byte *)ext->f_issBase); 267 ecoff_put_off (abfd, intern->cbSs, (bfd_byte *)ext->f_cbSs); 268 bfd_h_put_32 (abfd, intern->isymBase, (bfd_byte *)ext->f_isymBase); 269 bfd_h_put_32 (abfd, intern->csym, (bfd_byte *)ext->f_csym); 270 bfd_h_put_32 (abfd, intern->ilineBase, (bfd_byte *)ext->f_ilineBase); 271 bfd_h_put_32 (abfd, intern->cline, (bfd_byte *)ext->f_cline); 272 bfd_h_put_32 (abfd, intern->ioptBase, (bfd_byte *)ext->f_ioptBase); 273 bfd_h_put_32 (abfd, intern->copt, (bfd_byte *)ext->f_copt); 274#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 275 bfd_h_put_16 (abfd, intern->ipdFirst, (bfd_byte *)ext->f_ipdFirst); 276 bfd_h_put_16 (abfd, intern->cpd, (bfd_byte *)ext->f_cpd); 277#endif 278#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 279 bfd_h_put_32 (abfd, intern->ipdFirst, (bfd_byte *)ext->f_ipdFirst); 280 bfd_h_put_32 (abfd, intern->cpd, (bfd_byte *)ext->f_cpd); 281#endif 282 bfd_h_put_32 (abfd, intern->iauxBase, (bfd_byte *)ext->f_iauxBase); 283 bfd_h_put_32 (abfd, intern->caux, (bfd_byte *)ext->f_caux); 284 bfd_h_put_32 (abfd, intern->rfdBase, (bfd_byte *)ext->f_rfdBase); 285 bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->f_crfd); 286 287 /* now the fun stuff... */ 288 if (bfd_header_big_endian (abfd)) { 289 ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_BIG) 290 & FDR_BITS1_LANG_BIG) 291 | (intern->fMerge ? FDR_BITS1_FMERGE_BIG : 0) 292 | (intern->fReadin ? FDR_BITS1_FREADIN_BIG : 0) 293 | (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_BIG : 0)); 294 ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_BIG) 295 & FDR_BITS2_GLEVEL_BIG); 296 ext->f_bits2[1] = 0; 297 ext->f_bits2[2] = 0; 298 } else { 299 ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_LITTLE) 300 & FDR_BITS1_LANG_LITTLE) 301 | (intern->fMerge ? FDR_BITS1_FMERGE_LITTLE : 0) 302 | (intern->fReadin ? FDR_BITS1_FREADIN_LITTLE : 0) 303 | (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_LITTLE : 0)); 304 ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_LITTLE) 305 & FDR_BITS2_GLEVEL_LITTLE); 306 ext->f_bits2[1] = 0; 307 ext->f_bits2[2] = 0; 308 } 309 310 ecoff_put_off (abfd, intern->cbLineOffset, (bfd_byte *)ext->f_cbLineOffset); 311 ecoff_put_off (abfd, intern->cbLine, (bfd_byte *)ext->f_cbLine); 312 313#ifdef TEST 314 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 315 abort (); 316#endif 317} 318 319#ifndef MPW_C 320 321/* Swap in the procedure descriptor record. */ 322 323static void 324ecoff_swap_pdr_in (abfd, ext_copy, intern) 325 bfd *abfd; 326 PTR ext_copy; 327 PDR *intern; 328{ 329 struct pdr_ext ext[1]; 330 331 *ext = *(struct pdr_ext *) ext_copy; 332 333 memset ((PTR) intern, 0, sizeof (*intern)); 334 335 intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->p_adr); 336 intern->isym = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_isym); 337 intern->iline = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_iline); 338 intern->regmask = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_regmask); 339 intern->regoffset = bfd_h_get_signed_32 (abfd, 340 (bfd_byte *)ext->p_regoffset); 341 intern->iopt = bfd_h_get_signed_32 (abfd, (bfd_byte *)ext->p_iopt); 342 intern->fregmask = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_fregmask); 343 intern->fregoffset = bfd_h_get_signed_32 (abfd, 344 (bfd_byte *)ext->p_fregoffset); 345 intern->frameoffset = bfd_h_get_signed_32 (abfd, 346 (bfd_byte *)ext->p_frameoffset); 347 intern->framereg = bfd_h_get_16 (abfd, (bfd_byte *)ext->p_framereg); 348 intern->pcreg = bfd_h_get_16 (abfd, (bfd_byte *)ext->p_pcreg); 349 intern->lnLow = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_lnLow); 350 intern->lnHigh = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_lnHigh); 351 intern->cbLineOffset = ecoff_get_off (abfd, (bfd_byte *)ext->p_cbLineOffset); 352 353#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 354 intern->gp_prologue = bfd_h_get_8 (abfd, (bfd_byte *) ext->p_gp_prologue); 355 if (bfd_header_big_endian (abfd)) 356 { 357 intern->gp_used = 0 != (ext->p_bits1[0] & PDR_BITS1_GP_USED_BIG); 358 intern->reg_frame = 0 != (ext->p_bits1[0] & PDR_BITS1_REG_FRAME_BIG); 359 intern->prof = 0 != (ext->p_bits1[0] & PDR_BITS1_PROF_BIG); 360 intern->reserved = (((ext->p_bits1[0] & PDR_BITS1_RESERVED_BIG) 361 << PDR_BITS1_RESERVED_SH_LEFT_BIG) 362 | ((ext->p_bits2[0] & PDR_BITS2_RESERVED_BIG) 363 >> PDR_BITS2_RESERVED_SH_BIG)); 364 } 365 else 366 { 367 intern->gp_used = 0 != (ext->p_bits1[0] & PDR_BITS1_GP_USED_LITTLE); 368 intern->reg_frame = 0 != (ext->p_bits1[0] & PDR_BITS1_REG_FRAME_LITTLE); 369 intern->prof = 0 != (ext->p_bits1[0] & PDR_BITS1_PROF_LITTLE); 370 intern->reserved = (((ext->p_bits1[0] & PDR_BITS1_RESERVED_LITTLE) 371 >> PDR_BITS1_RESERVED_SH_LITTLE) 372 | ((ext->p_bits2[0] & PDR_BITS2_RESERVED_LITTLE) 373 << PDR_BITS2_RESERVED_SH_LEFT_LITTLE)); 374 } 375 intern->localoff = bfd_h_get_8 (abfd, (bfd_byte *) ext->p_localoff); 376#endif 377 378#ifdef TEST 379 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 380 abort (); 381#endif 382} 383 384/* Swap out the procedure descriptor record. */ 385 386static void 387ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr) 388 bfd *abfd; 389 const PDR *intern_copy; 390 PTR ext_ptr; 391{ 392 struct pdr_ext *ext = (struct pdr_ext *) ext_ptr; 393 PDR intern[1]; 394 395 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 396 397 ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr); 398 bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym); 399 bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline); 400 bfd_h_put_32 (abfd, intern->regmask, (bfd_byte *)ext->p_regmask); 401 bfd_h_put_32 (abfd, intern->regoffset, (bfd_byte *)ext->p_regoffset); 402 bfd_h_put_32 (abfd, intern->iopt, (bfd_byte *)ext->p_iopt); 403 bfd_h_put_32 (abfd, intern->fregmask, (bfd_byte *)ext->p_fregmask); 404 bfd_h_put_32 (abfd, intern->fregoffset, (bfd_byte *)ext->p_fregoffset); 405 bfd_h_put_32 (abfd, intern->frameoffset, (bfd_byte *)ext->p_frameoffset); 406 bfd_h_put_16 (abfd, intern->framereg, (bfd_byte *)ext->p_framereg); 407 bfd_h_put_16 (abfd, intern->pcreg, (bfd_byte *)ext->p_pcreg); 408 bfd_h_put_32 (abfd, intern->lnLow, (bfd_byte *)ext->p_lnLow); 409 bfd_h_put_32 (abfd, intern->lnHigh, (bfd_byte *)ext->p_lnHigh); 410 ecoff_put_off (abfd, intern->cbLineOffset, (bfd_byte *)ext->p_cbLineOffset); 411 412#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 413 bfd_h_put_8 (abfd, intern->gp_prologue, (bfd_byte *) ext->p_gp_prologue); 414 if (bfd_header_big_endian (abfd)) 415 { 416 ext->p_bits1[0] = ((intern->gp_used ? PDR_BITS1_GP_USED_BIG : 0) 417 | (intern->reg_frame ? PDR_BITS1_REG_FRAME_BIG : 0) 418 | (intern->prof ? PDR_BITS1_PROF_BIG : 0) 419 | ((intern->reserved 420 >> PDR_BITS1_RESERVED_SH_LEFT_BIG) 421 & PDR_BITS1_RESERVED_BIG)); 422 ext->p_bits2[0] = ((intern->reserved << PDR_BITS2_RESERVED_SH_BIG) 423 & PDR_BITS2_RESERVED_BIG); 424 } 425 else 426 { 427 ext->p_bits1[0] = ((intern->gp_used ? PDR_BITS1_GP_USED_LITTLE : 0) 428 | (intern->reg_frame ? PDR_BITS1_REG_FRAME_LITTLE : 0) 429 | (intern->prof ? PDR_BITS1_PROF_LITTLE : 0) 430 | ((intern->reserved << PDR_BITS1_RESERVED_SH_LITTLE) 431 & PDR_BITS1_RESERVED_LITTLE)); 432 ext->p_bits2[0] = ((intern->reserved >> 433 PDR_BITS2_RESERVED_SH_LEFT_LITTLE) 434 & PDR_BITS2_RESERVED_LITTLE); 435 } 436 bfd_h_put_8 (abfd, intern->localoff, (bfd_byte *) ext->p_localoff); 437#endif 438 439#ifdef TEST 440 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 441 abort (); 442#endif 443} 444 445#else /* MPW_C */ 446/* Same routines, but with ECOFF_64 code removed, so ^&%$#&! MPW C doesn't 447 corrupt itself and then freak out. */ 448/* Swap in the procedure descriptor record. */ 449 450static void 451ecoff_swap_pdr_in (abfd, ext_copy, intern) 452 bfd *abfd; 453 PTR ext_copy; 454 PDR *intern; 455{ 456 struct pdr_ext ext[1]; 457 458 *ext = *(struct pdr_ext *) ext_copy; 459 460 intern->adr = ecoff_get_off (abfd, (bfd_byte *)ext->p_adr); 461 intern->isym = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_isym); 462 intern->iline = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_iline); 463 intern->regmask = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_regmask); 464 intern->regoffset = bfd_h_get_signed_32 (abfd, 465 (bfd_byte *)ext->p_regoffset); 466 intern->iopt = bfd_h_get_signed_32 (abfd, (bfd_byte *)ext->p_iopt); 467 intern->fregmask = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_fregmask); 468 intern->fregoffset = bfd_h_get_signed_32 (abfd, 469 (bfd_byte *)ext->p_fregoffset); 470 intern->frameoffset = bfd_h_get_signed_32 (abfd, 471 (bfd_byte *)ext->p_frameoffset); 472 intern->framereg = bfd_h_get_16 (abfd, (bfd_byte *)ext->p_framereg); 473 intern->pcreg = bfd_h_get_16 (abfd, (bfd_byte *)ext->p_pcreg); 474 intern->lnLow = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_lnLow); 475 intern->lnHigh = bfd_h_get_32 (abfd, (bfd_byte *)ext->p_lnHigh); 476 intern->cbLineOffset = ecoff_get_off (abfd, (bfd_byte *)ext->p_cbLineOffset); 477 478#ifdef TEST 479 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 480 abort (); 481#endif 482} 483 484/* Swap out the procedure descriptor record. */ 485 486static void 487ecoff_swap_pdr_out (abfd, intern_copy, ext_ptr) 488 bfd *abfd; 489 const PDR *intern_copy; 490 PTR ext_ptr; 491{ 492 struct pdr_ext *ext = (struct pdr_ext *) ext_ptr; 493 PDR intern[1]; 494 495 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 496 497 ecoff_put_off (abfd, intern->adr, (bfd_byte *)ext->p_adr); 498 bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym); 499 bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline); 500 bfd_h_put_32 (abfd, intern->regmask, (bfd_byte *)ext->p_regmask); 501 bfd_h_put_32 (abfd, intern->regoffset, (bfd_byte *)ext->p_regoffset); 502 bfd_h_put_32 (abfd, intern->iopt, (bfd_byte *)ext->p_iopt); 503 bfd_h_put_32 (abfd, intern->fregmask, (bfd_byte *)ext->p_fregmask); 504 bfd_h_put_32 (abfd, intern->fregoffset, (bfd_byte *)ext->p_fregoffset); 505 bfd_h_put_32 (abfd, intern->frameoffset, (bfd_byte *)ext->p_frameoffset); 506 bfd_h_put_16 (abfd, intern->framereg, (bfd_byte *)ext->p_framereg); 507 bfd_h_put_16 (abfd, intern->pcreg, (bfd_byte *)ext->p_pcreg); 508 bfd_h_put_32 (abfd, intern->lnLow, (bfd_byte *)ext->p_lnLow); 509 bfd_h_put_32 (abfd, intern->lnHigh, (bfd_byte *)ext->p_lnHigh); 510 ecoff_put_off (abfd, intern->cbLineOffset, (bfd_byte *)ext->p_cbLineOffset); 511 512#ifdef TEST 513 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 514 abort (); 515#endif 516} 517#endif /* MPW_C */ 518 519/* Swap in a symbol record. */ 520 521static void 522ecoff_swap_sym_in (abfd, ext_copy, intern) 523 bfd *abfd; 524 PTR ext_copy; 525 SYMR *intern; 526{ 527 struct sym_ext ext[1]; 528 529 *ext = *(struct sym_ext *) ext_copy; 530 531 intern->iss = bfd_h_get_32 (abfd, (bfd_byte *)ext->s_iss); 532 intern->value = ecoff_get_off (abfd, (bfd_byte *)ext->s_value); 533 534 /* now the fun stuff... */ 535 if (bfd_header_big_endian (abfd)) { 536 intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_BIG) 537 >> SYM_BITS1_ST_SH_BIG; 538 intern->sc = ((ext->s_bits1[0] & SYM_BITS1_SC_BIG) 539 << SYM_BITS1_SC_SH_LEFT_BIG) 540 | ((ext->s_bits2[0] & SYM_BITS2_SC_BIG) 541 >> SYM_BITS2_SC_SH_BIG); 542 intern->reserved = 0 != (ext->s_bits2[0] & SYM_BITS2_RESERVED_BIG); 543 intern->index = ((ext->s_bits2[0] & SYM_BITS2_INDEX_BIG) 544 << SYM_BITS2_INDEX_SH_LEFT_BIG) 545 | (ext->s_bits3[0] << SYM_BITS3_INDEX_SH_LEFT_BIG) 546 | (ext->s_bits4[0] << SYM_BITS4_INDEX_SH_LEFT_BIG); 547 } else { 548 intern->st = (ext->s_bits1[0] & SYM_BITS1_ST_LITTLE) 549 >> SYM_BITS1_ST_SH_LITTLE; 550 intern->sc = ((ext->s_bits1[0] & SYM_BITS1_SC_LITTLE) 551 >> SYM_BITS1_SC_SH_LITTLE) 552 | ((ext->s_bits2[0] & SYM_BITS2_SC_LITTLE) 553 << SYM_BITS2_SC_SH_LEFT_LITTLE); 554 intern->reserved = 0 != (ext->s_bits2[0] & SYM_BITS2_RESERVED_LITTLE); 555 intern->index = ((ext->s_bits2[0] & SYM_BITS2_INDEX_LITTLE) 556 >> SYM_BITS2_INDEX_SH_LITTLE) 557 | (ext->s_bits3[0] << SYM_BITS3_INDEX_SH_LEFT_LITTLE) 558 | ((unsigned int) ext->s_bits4[0] 559 << SYM_BITS4_INDEX_SH_LEFT_LITTLE); 560 } 561 562#ifdef TEST 563 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 564 abort (); 565#endif 566} 567 568/* Swap out a symbol record. */ 569 570static void 571ecoff_swap_sym_out (abfd, intern_copy, ext_ptr) 572 bfd *abfd; 573 const SYMR *intern_copy; 574 PTR ext_ptr; 575{ 576 struct sym_ext *ext = (struct sym_ext *) ext_ptr; 577 SYMR intern[1]; 578 579 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 580 581 bfd_h_put_32 (abfd, intern->iss, (bfd_byte *)ext->s_iss); 582 ecoff_put_off (abfd, intern->value, (bfd_byte *)ext->s_value); 583 584 /* now the fun stuff... */ 585 if (bfd_header_big_endian (abfd)) { 586 ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_BIG) 587 & SYM_BITS1_ST_BIG) 588 | ((intern->sc >> SYM_BITS1_SC_SH_LEFT_BIG) 589 & SYM_BITS1_SC_BIG)); 590 ext->s_bits2[0] = (((intern->sc << SYM_BITS2_SC_SH_BIG) 591 & SYM_BITS2_SC_BIG) 592 | (intern->reserved ? SYM_BITS2_RESERVED_BIG : 0) 593 | ((intern->index >> SYM_BITS2_INDEX_SH_LEFT_BIG) 594 & SYM_BITS2_INDEX_BIG)); 595 ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_BIG) & 0xff; 596 ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_BIG) & 0xff; 597 } else { 598 ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_LITTLE) 599 & SYM_BITS1_ST_LITTLE) 600 | ((intern->sc << SYM_BITS1_SC_SH_LITTLE) 601 & SYM_BITS1_SC_LITTLE)); 602 ext->s_bits2[0] = (((intern->sc >> SYM_BITS2_SC_SH_LEFT_LITTLE) 603 & SYM_BITS2_SC_LITTLE) 604 | (intern->reserved ? SYM_BITS2_RESERVED_LITTLE : 0) 605 | ((intern->index << SYM_BITS2_INDEX_SH_LITTLE) 606 & SYM_BITS2_INDEX_LITTLE)); 607 ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_LITTLE) & 0xff; 608 ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_LITTLE) & 0xff; 609 } 610 611#ifdef TEST 612 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 613 abort (); 614#endif 615} 616 617/* Swap in an external symbol record. */ 618 619static void 620ecoff_swap_ext_in (abfd, ext_copy, intern) 621 bfd *abfd; 622 PTR ext_copy; 623 EXTR *intern; 624{ 625 struct ext_ext ext[1]; 626 627 *ext = *(struct ext_ext *) ext_copy; 628 629 /* now the fun stuff... */ 630 if (bfd_header_big_endian (abfd)) { 631 intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_BIG); 632 intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_BIG); 633 intern->weakext = 0 != (ext->es_bits1[0] & EXT_BITS1_WEAKEXT_BIG); 634 } else { 635 intern->jmptbl = 0 != (ext->es_bits1[0] & EXT_BITS1_JMPTBL_LITTLE); 636 intern->cobol_main = 0 != (ext->es_bits1[0] & EXT_BITS1_COBOL_MAIN_LITTLE); 637 intern->weakext = 0 != (ext->es_bits1[0] & EXT_BITS1_WEAKEXT_LITTLE); 638 } 639 intern->reserved = 0; 640 641#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 642 intern->ifd = bfd_h_get_signed_16 (abfd, (bfd_byte *)ext->es_ifd); 643#endif 644#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 645 intern->ifd = bfd_h_get_signed_32 (abfd, (bfd_byte *)ext->es_ifd); 646#endif 647 648 ecoff_swap_sym_in (abfd, &ext->es_asym, &intern->asym); 649 650#ifdef TEST 651 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 652 abort (); 653#endif 654} 655 656/* Swap out an external symbol record. */ 657 658static void 659ecoff_swap_ext_out (abfd, intern_copy, ext_ptr) 660 bfd *abfd; 661 const EXTR *intern_copy; 662 PTR ext_ptr; 663{ 664 struct ext_ext *ext = (struct ext_ext *) ext_ptr; 665 EXTR intern[1]; 666 667 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 668 669 /* now the fun stuff... */ 670 if (bfd_header_big_endian (abfd)) { 671 ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_BIG : 0) 672 | (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_BIG : 0) 673 | (intern->weakext ? EXT_BITS1_WEAKEXT_BIG : 0)); 674 ext->es_bits2[0] = 0; 675#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 676 ext->es_bits2[1] = 0; 677 ext->es_bits2[2] = 0; 678#endif 679 } else { 680 ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_LITTLE : 0) 681 | (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_LITTLE : 0) 682 | (intern->weakext ? EXT_BITS1_WEAKEXT_LITTLE : 0)); 683 ext->es_bits2[0] = 0; 684#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 685 ext->es_bits2[1] = 0; 686 ext->es_bits2[2] = 0; 687#endif 688 } 689 690#if defined (ECOFF_32) || defined (ECOFF_SIGNED_32) 691 bfd_h_put_signed_16 (abfd, intern->ifd, (bfd_byte *)ext->es_ifd); 692#endif 693#if defined (ECOFF_64) || defined (ECOFF_SIGNED_64) 694 bfd_h_put_signed_32 (abfd, intern->ifd, (bfd_byte *)ext->es_ifd); 695#endif 696 697 ecoff_swap_sym_out (abfd, &intern->asym, &ext->es_asym); 698 699#ifdef TEST 700 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 701 abort (); 702#endif 703} 704 705/* Swap in a relative file descriptor. */ 706 707static void 708ecoff_swap_rfd_in (abfd, ext_ptr, intern) 709 bfd *abfd; 710 PTR ext_ptr; 711 RFDT *intern; 712{ 713 struct rfd_ext *ext = (struct rfd_ext *) ext_ptr; 714 715 *intern = bfd_h_get_32 (abfd, (bfd_byte *)ext->rfd); 716 717#ifdef TEST 718 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 719 abort (); 720#endif 721} 722 723/* Swap out a relative file descriptor. */ 724 725static void 726ecoff_swap_rfd_out (abfd, intern, ext_ptr) 727 bfd *abfd; 728 const RFDT *intern; 729 PTR ext_ptr; 730{ 731 struct rfd_ext *ext = (struct rfd_ext *) ext_ptr; 732 733 bfd_h_put_32 (abfd, *intern, (bfd_byte *)ext->rfd); 734 735#ifdef TEST 736 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 737 abort (); 738#endif 739} 740 741/* Swap in an optimization symbol. */ 742 743static void 744ecoff_swap_opt_in (abfd, ext_copy, intern) 745 bfd *abfd; 746 PTR ext_copy; 747 OPTR *intern; 748{ 749 struct opt_ext ext[1]; 750 751 *ext = *(struct opt_ext *) ext_copy; 752 753 if (bfd_header_big_endian (abfd)) 754 { 755 intern->ot = ext->o_bits1[0]; 756 intern->value = (((unsigned int) ext->o_bits2[0] 757 << OPT_BITS2_VALUE_SH_LEFT_BIG) 758 | ((unsigned int) ext->o_bits3[0] 759 << OPT_BITS2_VALUE_SH_LEFT_BIG) 760 | ((unsigned int) ext->o_bits4[0] 761 << OPT_BITS2_VALUE_SH_LEFT_BIG)); 762 } 763 else 764 { 765 intern->ot = ext->o_bits1[0]; 766 intern->value = ((ext->o_bits2[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE) 767 | (ext->o_bits3[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE) 768 | (ext->o_bits4[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE)); 769 } 770 771 _bfd_ecoff_swap_rndx_in (bfd_header_big_endian (abfd), 772 &ext->o_rndx, &intern->rndx); 773 774 intern->offset = bfd_h_get_32 (abfd, (bfd_byte *) ext->o_offset); 775 776#ifdef TEST 777 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 778 abort (); 779#endif 780} 781 782/* Swap out an optimization symbol. */ 783 784static void 785ecoff_swap_opt_out (abfd, intern_copy, ext_ptr) 786 bfd *abfd; 787 const OPTR *intern_copy; 788 PTR ext_ptr; 789{ 790 struct opt_ext *ext = (struct opt_ext *) ext_ptr; 791 OPTR intern[1]; 792 793 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 794 795 if (bfd_header_big_endian (abfd)) 796 { 797 ext->o_bits1[0] = intern->ot; 798 ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_BIG; 799 ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_BIG; 800 ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_BIG; 801 } 802 else 803 { 804 ext->o_bits1[0] = intern->ot; 805 ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_LITTLE; 806 ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_LITTLE; 807 ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_LITTLE; 808 } 809 810 _bfd_ecoff_swap_rndx_out (bfd_header_big_endian (abfd), 811 &intern->rndx, &ext->o_rndx); 812 813 bfd_h_put_32 (abfd, intern->value, (bfd_byte *) ext->o_offset); 814 815#ifdef TEST 816 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 817 abort (); 818#endif 819} 820 821/* Swap in a dense number. */ 822 823static void 824ecoff_swap_dnr_in (abfd, ext_copy, intern) 825 bfd *abfd; 826 PTR ext_copy; 827 DNR *intern; 828{ 829 struct dnr_ext ext[1]; 830 831 *ext = *(struct dnr_ext *) ext_copy; 832 833 intern->rfd = bfd_h_get_32 (abfd, (bfd_byte *) ext->d_rfd); 834 intern->index = bfd_h_get_32 (abfd, (bfd_byte *) ext->d_index); 835 836#ifdef TEST 837 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 838 abort (); 839#endif 840} 841 842/* Swap out a dense number. */ 843 844static void 845ecoff_swap_dnr_out (abfd, intern_copy, ext_ptr) 846 bfd *abfd; 847 const DNR *intern_copy; 848 PTR ext_ptr; 849{ 850 struct dnr_ext *ext = (struct dnr_ext *) ext_ptr; 851 DNR intern[1]; 852 853 *intern = *intern_copy; /* Make it reasonable to do in-place. */ 854 855 bfd_h_put_32 (abfd, intern->rfd, (bfd_byte *) ext->d_rfd); 856 bfd_h_put_32 (abfd, intern->index, (bfd_byte *) ext->d_index); 857 858#ifdef TEST 859 if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0) 860 abort (); 861#endif 862} 863