mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2025-01-18 12:24:38 +08:00
Basically a checkpoint for coff-mips.c.
Fri Jan 15 18:13:17 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com) * coff-msym.c (ecoff_swap_hdr_out, ecoff_swap_fdr_out, ecoff_swap_pdr_out, ecoff_swap_sym_out, ecoff_swap_ext_out, ecoff_swap_rndx_out, ecoff_swap_rfd_out, ecoff_swap_opt_in, ecoff_swap_opt_out, ecoff_swap_dnr_in, ecoff_swap_dnr_out): New functions. * coffswap.h: If NO_COFF_RELOCS is defined, don't define bfd_swap_reloc_in or coff_swap_reloc_out. * coff-mips.c: Added code to link and write out symbolic debugging information, and to swap relocs in and out.
This commit is contained in:
parent
9dcfbb6781
commit
8fa0d3a012
@ -1,3 +1,15 @@
|
||||
Fri Jan 15 18:13:17 1993 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* coff-msym.c (ecoff_swap_hdr_out, ecoff_swap_fdr_out,
|
||||
ecoff_swap_pdr_out, ecoff_swap_sym_out, ecoff_swap_ext_out,
|
||||
ecoff_swap_rndx_out, ecoff_swap_rfd_out, ecoff_swap_opt_in,
|
||||
ecoff_swap_opt_out, ecoff_swap_dnr_in, ecoff_swap_dnr_out): New
|
||||
functions.
|
||||
* coffswap.h: If NO_COFF_RELOCS is defined, don't define
|
||||
bfd_swap_reloc_in or coff_swap_reloc_out.
|
||||
* coff-mips.c: Added code to link and write out symbolic debugging
|
||||
information, and to swap relocs in and out.
|
||||
|
||||
Thu Jan 14 15:51:58 1993 Steve Chamberlain (sac@thepub.cygnus.com)
|
||||
|
||||
* libcoff.h, coffgen.c (coff_count_linenumbers), coffcode.h
|
||||
|
1499
bfd/coff-mips.c
1499
bfd/coff-mips.c
File diff suppressed because it is too large
Load Diff
397
bfd/coff-msym.c
397
bfd/coff-msym.c
@ -17,12 +17,7 @@ You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
|
||||
/* These routines are not yet called from BFD. They are called from
|
||||
the MIPS symbol reading code in GDB. However, they are in the BFD
|
||||
library because they will eventually be useful if and when BFD
|
||||
supports reading or writing of MIPS symbol tables.
|
||||
|
||||
The routines in this file convert the external representation of
|
||||
/* The routines in this file convert the external representation of
|
||||
ECOFF symbol tables to the internal (usual struct) representation.
|
||||
On a machine with the same byte-order and the same basic type
|
||||
sizes and alignments as a MIPS machine, this is a no-op.
|
||||
@ -37,6 +32,8 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
|
||||
#include "coff/symconst.h" /* MIPS symbols */
|
||||
#include "coff/ecoff-ext.h" /* ECOFF external struct defns */
|
||||
|
||||
/* Swap in the symbolic header. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_hdr_in, (abfd, ext_copy, intern),
|
||||
bfd *abfd AND
|
||||
@ -79,6 +76,50 @@ DEFUN (ecoff_swap_hdr_in, (abfd, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out the symbolic header. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_hdr_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
HDRR *intern_copy AND
|
||||
struct hdr_ext *ext)
|
||||
{
|
||||
HDRR intern[1];
|
||||
|
||||
*intern = *intern_copy;
|
||||
|
||||
bfd_h_put_16 (abfd, intern->magic, (bfd_byte *)ext->h_magic);
|
||||
bfd_h_put_16 (abfd, intern->vstamp, (bfd_byte *)ext->h_vstamp);
|
||||
bfd_h_put_32 (abfd, intern->ilineMax, (bfd_byte *)ext->h_ilineMax);
|
||||
bfd_h_put_32 (abfd, intern->cbLine, (bfd_byte *)ext->h_cbLine);
|
||||
bfd_h_put_32 (abfd, intern->cbLineOffset, (bfd_byte *)ext->h_cbLineOffset);
|
||||
bfd_h_put_32 (abfd, intern->idnMax, (bfd_byte *)ext->h_idnMax);
|
||||
bfd_h_put_32 (abfd, intern->cbDnOffset, (bfd_byte *)ext->h_cbDnOffset);
|
||||
bfd_h_put_32 (abfd, intern->ipdMax, (bfd_byte *)ext->h_ipdMax);
|
||||
bfd_h_put_32 (abfd, intern->cbPdOffset, (bfd_byte *)ext->h_cbPdOffset);
|
||||
bfd_h_put_32 (abfd, intern->isymMax, (bfd_byte *)ext->h_isymMax);
|
||||
bfd_h_put_32 (abfd, intern->cbSymOffset, (bfd_byte *)ext->h_cbSymOffset);
|
||||
bfd_h_put_32 (abfd, intern->ioptMax, (bfd_byte *)ext->h_ioptMax);
|
||||
bfd_h_put_32 (abfd, intern->cbOptOffset, (bfd_byte *)ext->h_cbOptOffset);
|
||||
bfd_h_put_32 (abfd, intern->iauxMax, (bfd_byte *)ext->h_iauxMax);
|
||||
bfd_h_put_32 (abfd, intern->cbAuxOffset, (bfd_byte *)ext->h_cbAuxOffset);
|
||||
bfd_h_put_32 (abfd, intern->issMax, (bfd_byte *)ext->h_issMax);
|
||||
bfd_h_put_32 (abfd, intern->cbSsOffset, (bfd_byte *)ext->h_cbSsOffset);
|
||||
bfd_h_put_32 (abfd, intern->issExtMax, (bfd_byte *)ext->h_issExtMax);
|
||||
bfd_h_put_32 (abfd, intern->cbSsExtOffset, (bfd_byte *)ext->h_cbSsExtOffset);
|
||||
bfd_h_put_32 (abfd, intern->ifdMax, (bfd_byte *)ext->h_ifdMax);
|
||||
bfd_h_put_32 (abfd, intern->cbFdOffset, (bfd_byte *)ext->h_cbFdOffset);
|
||||
bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->h_crfd);
|
||||
bfd_h_put_32 (abfd, intern->cbRfdOffset, (bfd_byte *)ext->h_cbRfdOffset);
|
||||
bfd_h_put_32 (abfd, intern->iextMax, (bfd_byte *)ext->h_iextMax);
|
||||
bfd_h_put_32 (abfd, intern->cbExtOffset, (bfd_byte *)ext->h_cbExtOffset);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in the file descriptor record. */
|
||||
|
||||
void
|
||||
@ -138,7 +179,66 @@ DEFUN (ecoff_swap_fdr_in, (abfd, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out the file descriptor record. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_fdr_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
FDR *intern_copy AND
|
||||
struct fdr_ext *ext)
|
||||
{
|
||||
FDR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
bfd_h_put_32 (abfd, intern->adr, (bfd_byte *)ext->f_adr);
|
||||
bfd_h_put_32 (abfd, intern->rss, (bfd_byte *)ext->f_rss);
|
||||
bfd_h_put_32 (abfd, intern->issBase, (bfd_byte *)ext->f_issBase);
|
||||
bfd_h_put_32 (abfd, intern->cbSs, (bfd_byte *)ext->f_cbSs);
|
||||
bfd_h_put_32 (abfd, intern->isymBase, (bfd_byte *)ext->f_isymBase);
|
||||
bfd_h_put_32 (abfd, intern->csym, (bfd_byte *)ext->f_csym);
|
||||
bfd_h_put_32 (abfd, intern->ilineBase, (bfd_byte *)ext->f_ilineBase);
|
||||
bfd_h_put_32 (abfd, intern->cline, (bfd_byte *)ext->f_cline);
|
||||
bfd_h_put_32 (abfd, intern->ioptBase, (bfd_byte *)ext->f_ioptBase);
|
||||
bfd_h_put_32 (abfd, intern->copt, (bfd_byte *)ext->f_copt);
|
||||
bfd_h_put_16 (abfd, intern->ipdFirst, (bfd_byte *)ext->f_ipdFirst);
|
||||
bfd_h_put_16 (abfd, intern->cpd, (bfd_byte *)ext->f_cpd);
|
||||
bfd_h_put_32 (abfd, intern->iauxBase, (bfd_byte *)ext->f_iauxBase);
|
||||
bfd_h_put_32 (abfd, intern->caux, (bfd_byte *)ext->f_caux);
|
||||
bfd_h_put_32 (abfd, intern->rfdBase, (bfd_byte *)ext->f_rfdBase);
|
||||
bfd_h_put_32 (abfd, intern->crfd, (bfd_byte *)ext->f_crfd);
|
||||
|
||||
/* now the fun stuff... */
|
||||
if (abfd->xvec->header_byteorder_big_p != false) {
|
||||
ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_BIG)
|
||||
& FDR_BITS1_LANG_BIG)
|
||||
| (intern->fMerge ? FDR_BITS1_FMERGE_BIG : 0)
|
||||
| (intern->fReadin ? FDR_BITS1_FREADIN_BIG : 0)
|
||||
| (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_BIG : 0));
|
||||
ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_BIG)
|
||||
& FDR_BITS2_GLEVEL_BIG);
|
||||
ext->f_bits2[1] = 0;
|
||||
ext->f_bits2[2] = 0;
|
||||
} else {
|
||||
ext->f_bits1[0] = (((intern->lang << FDR_BITS1_LANG_SH_LITTLE)
|
||||
& FDR_BITS1_LANG_LITTLE)
|
||||
| (intern->fMerge ? FDR_BITS1_FMERGE_LITTLE : 0)
|
||||
| (intern->fReadin ? FDR_BITS1_FREADIN_LITTLE : 0)
|
||||
| (intern->fBigendian ? FDR_BITS1_FBIGENDIAN_LITTLE : 0));
|
||||
ext->f_bits2[0] = ((intern->glevel << FDR_BITS2_GLEVEL_SH_LITTLE)
|
||||
& FDR_BITS2_GLEVEL_LITTLE);
|
||||
ext->f_bits2[1] = 0;
|
||||
ext->f_bits2[2] = 0;
|
||||
}
|
||||
|
||||
bfd_h_put_32 (abfd, intern->cbLineOffset, (bfd_byte *)ext->f_cbLineOffset);
|
||||
bfd_h_put_32 (abfd, intern->cbLine, (bfd_byte *)ext->f_cbLine);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in the procedure descriptor record. */
|
||||
|
||||
@ -173,6 +273,38 @@ DEFUN (ecoff_swap_pdr_in, (abfd, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out the procedure descriptor record. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_pdr_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
PDR *intern_copy AND
|
||||
struct pdr_ext *ext)
|
||||
{
|
||||
PDR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
bfd_h_put_32 (abfd, intern->adr, (bfd_byte *)ext->p_adr);
|
||||
bfd_h_put_32 (abfd, intern->isym, (bfd_byte *)ext->p_isym);
|
||||
bfd_h_put_32 (abfd, intern->iline, (bfd_byte *)ext->p_iline);
|
||||
bfd_h_put_32 (abfd, intern->regmask, (bfd_byte *)ext->p_regmask);
|
||||
bfd_h_put_32 (abfd, intern->regoffset, (bfd_byte *)ext->p_regoffset);
|
||||
bfd_h_put_32 (abfd, intern->iopt, (bfd_byte *)ext->p_iopt);
|
||||
bfd_h_put_32 (abfd, intern->fregmask, (bfd_byte *)ext->p_fregmask);
|
||||
bfd_h_put_32 (abfd, intern->fregoffset, (bfd_byte *)ext->p_fregoffset);
|
||||
bfd_h_put_32 (abfd, intern->frameoffset, (bfd_byte *)ext->p_frameoffset);
|
||||
bfd_h_put_16 (abfd, intern->framereg, (bfd_byte *)ext->p_framereg);
|
||||
bfd_h_put_16 (abfd, intern->pcreg, (bfd_byte *)ext->p_pcreg);
|
||||
bfd_h_put_32 (abfd, intern->lnLow, (bfd_byte *)ext->p_lnLow);
|
||||
bfd_h_put_32 (abfd, intern->lnHigh, (bfd_byte *)ext->p_lnHigh);
|
||||
bfd_h_put_32 (abfd, intern->cbLineOffset, (bfd_byte *)ext->p_cbLineOffset);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in a symbol record. */
|
||||
|
||||
@ -222,6 +354,53 @@ DEFUN (ecoff_swap_sym_in, (abfd, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out a symbol record. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_sym_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
SYMR *intern_copy AND
|
||||
struct sym_ext *ext)
|
||||
{
|
||||
SYMR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
bfd_h_put_32 (abfd, intern->iss, (bfd_byte *)ext->s_iss);
|
||||
bfd_h_put_32 (abfd, intern->value, (bfd_byte *)ext->s_value);
|
||||
|
||||
/* now the fun stuff... */
|
||||
if (abfd->xvec->header_byteorder_big_p != false) {
|
||||
ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_BIG)
|
||||
& SYM_BITS1_ST_BIG)
|
||||
| ((intern->sc >> SYM_BITS1_SC_SH_LEFT_BIG)
|
||||
& SYM_BITS1_SC_BIG));
|
||||
ext->s_bits2[0] = (((intern->sc << SYM_BITS2_SC_SH_BIG)
|
||||
& SYM_BITS2_SC_BIG)
|
||||
| (intern->reserved ? SYM_BITS2_RESERVED_BIG : 0)
|
||||
| ((intern->index >> SYM_BITS2_INDEX_SH_LEFT_BIG)
|
||||
& SYM_BITS2_INDEX_BIG));
|
||||
ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_BIG) & 0xff;
|
||||
ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_BIG) & 0xff;
|
||||
} else {
|
||||
ext->s_bits1[0] = (((intern->st << SYM_BITS1_ST_SH_LITTLE)
|
||||
& SYM_BITS1_ST_LITTLE)
|
||||
| ((intern->sc << SYM_BITS1_SC_SH_LITTLE)
|
||||
& SYM_BITS1_SC_LITTLE));
|
||||
ext->s_bits2[0] = (((intern->sc >> SYM_BITS2_SC_SH_LEFT_LITTLE)
|
||||
& SYM_BITS2_SC_LITTLE)
|
||||
| (intern->reserved ? SYM_BITS2_RESERVED_LITTLE : 0)
|
||||
| ((intern->index << SYM_BITS2_INDEX_SH_LITTLE)
|
||||
& SYM_BITS2_INDEX_LITTLE));
|
||||
ext->s_bits3[0] = (intern->index >> SYM_BITS3_INDEX_SH_LEFT_LITTLE) & 0xff;
|
||||
ext->s_bits4[0] = (intern->index >> SYM_BITS4_INDEX_SH_LEFT_LITTLE) & 0xff;
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in an external symbol record. */
|
||||
|
||||
@ -255,6 +434,40 @@ DEFUN (ecoff_swap_ext_in, (abfd, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out an external symbol record. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_ext_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
EXTR *intern_copy AND
|
||||
struct ext_ext *ext)
|
||||
{
|
||||
EXTR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
/* now the fun stuff... */
|
||||
if (abfd->xvec->header_byteorder_big_p != false) {
|
||||
ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_BIG : 0)
|
||||
| (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_BIG : 0)
|
||||
| (intern->weakext ? EXT_BITS1_WEAKEXT_BIG : 0));
|
||||
ext->es_bits2[0] = 0;
|
||||
} else {
|
||||
ext->es_bits1[0] = ((intern->jmptbl ? EXT_BITS1_JMPTBL_LITTLE : 0)
|
||||
| (intern->cobol_main ? EXT_BITS1_COBOL_MAIN_LITTLE : 0)
|
||||
| (intern->weakext ? EXT_BITS1_WEAKEXT_LITTLE : 0));
|
||||
ext->es_bits2[0] = 0;
|
||||
}
|
||||
|
||||
bfd_h_put_16 (abfd, intern->ifd, (bfd_byte *)ext->es_ifd);
|
||||
ecoff_swap_sym_out (abfd, &intern->asym, &ext->es_asym);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in a type information record.
|
||||
BIGEND says whether AUX symbols are big-endian or little-endian; this
|
||||
info comes from the file header record (fh-fBigendian). */
|
||||
@ -350,6 +563,44 @@ DEFUN (ecoff_swap_rndx_in, (bigend, ext_copy, intern),
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out a relative symbol record. BIGEND says whether it is in
|
||||
big-endian or little-endian format.*/
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_rndx_out, (bigend, intern_copy, ext),
|
||||
int bigend AND
|
||||
RNDXR *intern_copy AND
|
||||
struct rndx_ext *ext)
|
||||
{
|
||||
RNDXR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
/* now the fun stuff... */
|
||||
if (bigend) {
|
||||
ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_BIG;
|
||||
ext->r_bits[1] = (((intern->rfd << RNDX_BITS1_RFD_SH_BIG)
|
||||
& RNDX_BITS1_RFD_BIG)
|
||||
| ((intern->index >> RNDX_BITS1_INDEX_SH_LEFT_BIG)
|
||||
& RNDX_BITS1_INDEX_BIG));
|
||||
ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_BIG;
|
||||
ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_BIG;
|
||||
} else {
|
||||
ext->r_bits[0] = intern->rfd >> RNDX_BITS0_RFD_SH_LEFT_LITTLE;
|
||||
ext->r_bits[1] = (((intern->rfd >> RNDX_BITS1_RFD_SH_LEFT_LITTLE)
|
||||
& RNDX_BITS1_RFD_LITTLE)
|
||||
| ((intern->index << RNDX_BITS1_INDEX_SH_LITTLE)
|
||||
& RNDX_BITS1_INDEX_LITTLE));
|
||||
ext->r_bits[2] = intern->index >> RNDX_BITS2_INDEX_SH_LEFT_LITTLE;
|
||||
ext->r_bits[3] = intern->index >> RNDX_BITS3_INDEX_SH_LEFT_LITTLE;
|
||||
}
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in a relative file descriptor. */
|
||||
|
||||
void
|
||||
@ -366,3 +617,137 @@ DEFUN (ecoff_swap_rfd_in, (abfd, ext, intern),
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out a relative file descriptor. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_rfd_out, (abfd, intern, ext),
|
||||
bfd *abfd AND
|
||||
RFDT *intern AND
|
||||
struct rfd_ext *ext)
|
||||
{
|
||||
bfd_h_put_32 (abfd, *intern, (bfd_byte *)ext->rfd);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in an optimization symbol. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_opt_in, (abfd, ext_copy, intern),
|
||||
bfd *abfd AND
|
||||
struct opt_ext *ext_copy AND
|
||||
OPTR *intern)
|
||||
{
|
||||
struct opt_ext ext[1];
|
||||
|
||||
*ext = *ext_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
if (abfd->xvec->header_byteorder_big_p != false)
|
||||
{
|
||||
intern->ot = ext->o_bits1[0];
|
||||
intern->value = ((ext->o_bits2[0] << OPT_BITS2_VALUE_SH_LEFT_BIG)
|
||||
| (ext->o_bits3[0] << OPT_BITS2_VALUE_SH_LEFT_BIG)
|
||||
| (ext->o_bits4[0] << OPT_BITS2_VALUE_SH_LEFT_BIG));
|
||||
}
|
||||
else
|
||||
{
|
||||
intern->ot = ext->o_bits1[0];
|
||||
intern->value = ((ext->o_bits2[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE)
|
||||
| (ext->o_bits3[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE)
|
||||
| (ext->o_bits4[0] << OPT_BITS2_VALUE_SH_LEFT_LITTLE));
|
||||
}
|
||||
|
||||
ecoff_swap_rndx_in (abfd->xvec->header_byteorder_big_p != false,
|
||||
&ext->o_rndx, &intern->rndx);
|
||||
|
||||
intern->offset = bfd_h_get_32 (abfd, (bfd_byte *) ext->o_offset);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out an optimization symbol. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_opt_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
OPTR *intern_copy AND
|
||||
struct opt_ext *ext)
|
||||
{
|
||||
OPTR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
if (abfd->xvec->header_byteorder_big_p != false)
|
||||
{
|
||||
ext->o_bits1[0] = intern->ot;
|
||||
ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_BIG;
|
||||
ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_BIG;
|
||||
ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_BIG;
|
||||
}
|
||||
else
|
||||
{
|
||||
ext->o_bits1[0] = intern->ot;
|
||||
ext->o_bits2[0] = intern->value >> OPT_BITS2_VALUE_SH_LEFT_LITTLE;
|
||||
ext->o_bits3[0] = intern->value >> OPT_BITS3_VALUE_SH_LEFT_LITTLE;
|
||||
ext->o_bits4[0] = intern->value >> OPT_BITS4_VALUE_SH_LEFT_LITTLE;
|
||||
}
|
||||
|
||||
ecoff_swap_rndx_out (abfd->xvec->header_byteorder_big_p != false,
|
||||
&intern->rndx, &ext->o_rndx);
|
||||
|
||||
bfd_h_put_32 (abfd, intern->value, (bfd_byte *) ext->o_offset);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap in a dense number. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_dnr_in, (abfd, ext_copy, intern),
|
||||
bfd *abfd AND
|
||||
struct dnr_ext *ext_copy AND
|
||||
DNR *intern)
|
||||
{
|
||||
struct dnr_ext ext[1];
|
||||
|
||||
*ext = *ext_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
intern->rfd = bfd_h_get_32 (abfd, (bfd_byte *) ext->d_rfd);
|
||||
intern->index = bfd_h_get_32 (abfd, (bfd_byte *) ext->d_index);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
||||
/* Swap out a dense number. */
|
||||
|
||||
void
|
||||
DEFUN (ecoff_swap_dnr_out, (abfd, intern_copy, ext),
|
||||
bfd *abfd AND
|
||||
DNR *intern_copy AND
|
||||
struct dnr_ext *ext)
|
||||
{
|
||||
DNR intern[1];
|
||||
|
||||
*intern = *intern_copy; /* Make it reasonable to do in-place. */
|
||||
|
||||
bfd_h_put_32 (abfd, intern->rfd, (bfd_byte *) ext->d_rfd);
|
||||
bfd_h_put_32 (abfd, intern->index, (bfd_byte *) ext->d_index);
|
||||
|
||||
#ifdef TEST
|
||||
if (memcmp ((char *)ext, (char *)intern, sizeof (*intern)) != 0)
|
||||
abort();
|
||||
#endif
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user