* coffcode.h (bfd_coff_backend_data): Added new arguments to
_bfd_coff_swap_aux_in and _bfd_coff_swap_aux_out: aux index number and number of aux entries. (bfd_coff_swap_aux_in, bfd_coff_swap_aux_out): Changed accordingly. * libcoff.h: Rebuilt. * coffswap.h (coff_swap_aux_in, coff_swap_aux_out): Accept new arguments. If RS6000COFF_C, only treat C_EXT and C_HIDEXT specially if this is the last aux entry. * coffgen.c (coff_write_symbol, coff_get_normalized_symtab): Pass new arguments to swap_aux functions.
This commit is contained in:
parent
60ce6e743c
commit
330595d00b
|
@ -1,3 +1,17 @@
|
|||
Tue Feb 1 12:05:44 1994 Ian Lance Taylor (ian@tweedledumb.cygnus.com)
|
||||
|
||||
* coffcode.h (bfd_coff_backend_data): Added new arguments to
|
||||
_bfd_coff_swap_aux_in and _bfd_coff_swap_aux_out: aux index number
|
||||
and number of aux entries.
|
||||
(bfd_coff_swap_aux_in, bfd_coff_swap_aux_out): Changed
|
||||
accordingly.
|
||||
* libcoff.h: Rebuilt.
|
||||
* coffswap.h (coff_swap_aux_in, coff_swap_aux_out): Accept new
|
||||
arguments. If RS6000COFF_C, only treat C_EXT and C_HIDEXT
|
||||
specially if this is the last aux entry.
|
||||
* coffgen.c (coff_write_symbol, coff_get_normalized_symtab): Pass
|
||||
new arguments to swap_aux functions.
|
||||
|
||||
Sun Jan 30 15:14:36 1994 Ken Raeburn (raeburn@cujo.cygnus.com)
|
||||
|
||||
* gen-aout.c (main): Set DEFAULT_ARCH based on preprocessor macros
|
||||
|
|
|
@ -290,7 +290,6 @@ CODE_FRAGMENT
|
|||
|
||||
*/
|
||||
|
||||
#include "seclet.h"
|
||||
#include "coffswap.h"
|
||||
|
||||
/* void warning(); */
|
||||
|
@ -475,10 +474,12 @@ Special entry points for gdb to swap in coff symbol table parts:
|
|||
.typedef struct
|
||||
.{
|
||||
. void (*_bfd_coff_swap_aux_in) PARAMS ((
|
||||
. bfd *abfd ,
|
||||
. bfd *abfd,
|
||||
. PTR ext,
|
||||
. int type,
|
||||
. int class ,
|
||||
. int class,
|
||||
. int indaux,
|
||||
. int numaux,
|
||||
. PTR in));
|
||||
.
|
||||
. void (*_bfd_coff_swap_sym_in) PARAMS ((
|
||||
|
@ -499,6 +500,8 @@ Special entry points for gas to swap out coff parts:
|
|||
. PTR in,
|
||||
. int type,
|
||||
. int class,
|
||||
. int indaux,
|
||||
. int numaux,
|
||||
. PTR ext));
|
||||
.
|
||||
. unsigned int (*_bfd_coff_swap_sym_out) PARAMS ((
|
||||
|
@ -581,7 +584,8 @@ dependent COFF routines:
|
|||
. struct internal_syment *sym));
|
||||
. void (*_bfd_coff_reloc16_extra_cases) PARAMS ((
|
||||
. bfd *abfd,
|
||||
. struct bfd_seclet *seclet,
|
||||
. struct bfd_link_info *link_info,
|
||||
. struct bfd_link_order *link_order,
|
||||
. arelent *reloc,
|
||||
. bfd_byte *data,
|
||||
. unsigned int *src_ptr,
|
||||
|
@ -590,14 +594,15 @@ dependent COFF routines:
|
|||
. asection *input_section,
|
||||
. asymbol **symbols,
|
||||
. arelent *r,
|
||||
. unsigned int shrink));
|
||||
. unsigned int shrink,
|
||||
. struct bfd_link_info *link_info));
|
||||
.
|
||||
.} bfd_coff_backend_data;
|
||||
.
|
||||
.#define coff_backend_info(abfd) ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
|
||||
.
|
||||
.#define bfd_coff_swap_aux_in(a,e,t,c,i) \
|
||||
. ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,i))
|
||||
.#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
|
||||
. ((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
|
||||
.
|
||||
.#define bfd_coff_swap_sym_in(a,e,i) \
|
||||
. ((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
|
||||
|
@ -611,8 +616,8 @@ dependent COFF routines:
|
|||
.#define bfd_coff_swap_lineno_out(abfd, i, o) \
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
|
||||
.
|
||||
.#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_swap_aux_out) (abfd, i,t,c, o))
|
||||
.#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
|
||||
. ((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
|
||||
.
|
||||
.#define bfd_coff_swap_sym_out(abfd, i,o) \
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
|
||||
|
@ -665,13 +670,13 @@ dependent COFF routines:
|
|||
.#define bfd_coff_symname_in_debug(abfd, sym)\
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
|
||||
.
|
||||
.#define bfd_coff_reloc16_extra_cases(abfd, seclet, reloc, data, src_ptr, dst_ptr)\
|
||||
.#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)\
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
|
||||
. (abfd, seclet, reloc, data, src_ptr, dst_ptr))
|
||||
. (abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
|
||||
.
|
||||
.#define bfd_coff_reloc16_estimate(abfd, section, symbols, reloc, shrink)\
|
||||
.#define bfd_coff_reloc16_estimate(abfd, section, symbols, reloc, shrink, link_info)\
|
||||
. ((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
|
||||
. (section, symbols, reloc, shrink))
|
||||
. (section, symbols, reloc, shrink, link_info))
|
||||
.
|
||||
*/
|
||||
|
||||
|
@ -2321,11 +2326,12 @@ bfd *abfd;
|
|||
#define coff_reloc16_estimate dummy_reloc16_estimate
|
||||
|
||||
static int
|
||||
dummy_reloc16_estimate(input_section, symbols, reloc, shrink)
|
||||
dummy_reloc16_estimate (input_section, symbols, reloc, shrink, link_info)
|
||||
asection *input_section;
|
||||
asymbol **symbols;
|
||||
arelent *reloc;
|
||||
unsigned int shrink;
|
||||
struct bfd_link_info *link_info;
|
||||
{
|
||||
abort ();
|
||||
}
|
||||
|
@ -2336,9 +2342,11 @@ dummy_reloc16_estimate(input_section, symbols, reloc, shrink)
|
|||
#define coff_reloc16_extra_cases dummy_reloc16_extra_cases
|
||||
/* This works even if abort is not declared in any header file. */
|
||||
static void
|
||||
dummy_reloc16_extra_cases (abfd, seclet, reloc, data, src_ptr, dst_ptr)
|
||||
dummy_reloc16_extra_cases (abfd, link_info, link_order, reloc, data, src_ptr,
|
||||
dst_ptr)
|
||||
bfd *abfd;
|
||||
struct bfd_seclet *seclet;
|
||||
struct bfd_link_info *link_info;
|
||||
struct bfd_link_order *link_order;
|
||||
arelent *reloc;
|
||||
bfd_byte *data;
|
||||
unsigned int *src_ptr;
|
||||
|
@ -2385,8 +2393,10 @@ static CONST bfd_coff_backend_data bfd_coff_std_swap_table = {
|
|||
(void (*) PARAMS ((bfd *, struct sec *))) bfd_void
|
||||
#define coff_bfd_get_relocated_section_contents bfd_generic_get_relocated_section_contents
|
||||
#define coff_bfd_relax_section bfd_generic_relax_section
|
||||
#define coff_bfd_seclet_link bfd_generic_seclet_link
|
||||
#ifndef coff_bfd_reloc_type_lookup
|
||||
#define coff_bfd_reloc_type_lookup \
|
||||
((CONST struct reloc_howto_struct *(*) PARAMS ((bfd *, bfd_reloc_code_real_type))) bfd_nullvoidptr)
|
||||
#endif
|
||||
#define coff_bfd_link_hash_table_create _bfd_generic_link_hash_table_create
|
||||
#define coff_bfd_link_add_symbols _bfd_generic_link_add_symbols
|
||||
#define coff_bfd_final_link _bfd_generic_final_link
|
||||
|
|
|
@ -359,6 +359,7 @@ DEFUN(coff_count_linenumbers,(abfd),
|
|||
/* Takes a bfd and a symbol, returns a pointer to the coff specific
|
||||
area of the symbol if there is one. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
coff_symbol_type *
|
||||
DEFUN(coff_symbol_from,(ignore_abfd, symbol),
|
||||
bfd *ignore_abfd AND
|
||||
|
@ -641,6 +642,8 @@ unsigned int written)
|
|||
&((native + j + 1)->u.auxent),
|
||||
type,
|
||||
class,
|
||||
j,
|
||||
native->u.syment.n_numaux,
|
||||
buf);
|
||||
bfd_write(buf, 1, auxesz, abfd);
|
||||
}
|
||||
|
@ -892,6 +895,7 @@ DEFUN(coff_write_linenumbers,(abfd),
|
|||
bfd_release (abfd, buff);
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
alent *
|
||||
DEFUN(coff_get_lineno,(ignore_abfd, symbol),
|
||||
bfd *ignore_abfd AND
|
||||
|
@ -1143,6 +1147,7 @@ bfd *abfd)
|
|||
bfd_coff_swap_aux_in(abfd, (PTR) raw_src,
|
||||
symbol_ptr->u.syment.n_type,
|
||||
symbol_ptr->u.syment.n_sclass,
|
||||
i, symbol_ptr->u.syment.n_numaux,
|
||||
&(internal_ptr->u.auxent));
|
||||
/* Remember that bal entries arn't pointerized */
|
||||
if (i != 1 || symbol_ptr->u.syment.n_sclass != C_LEAFPROC)
|
||||
|
@ -1284,6 +1289,7 @@ coff_bfd_make_debug_symbol (abfd, ptr, sz)
|
|||
return &new->symbol;
|
||||
}
|
||||
|
||||
/*ARGSUSED*/
|
||||
void
|
||||
coff_get_symbol_info (abfd, symbol, ret)
|
||||
bfd *abfd;
|
||||
|
@ -1392,6 +1398,7 @@ coff_print_symbol (abfd, filep, symbol, how)
|
|||
and return the name of the source file and the line nearest to the
|
||||
wanted location. */
|
||||
|
||||
/*ARGSUSED*/
|
||||
boolean
|
||||
DEFUN(coff_find_nearest_line,(abfd,
|
||||
section,
|
||||
|
|
238
bfd/coffswap.h
238
bfd/coffswap.h
|
@ -324,11 +324,13 @@ DEFUN(coff_swap_sym_out,(abfd, inp, extp),
|
|||
}
|
||||
|
||||
static void
|
||||
DEFUN(coff_swap_aux_in,(abfd, ext1, type, class, in1),
|
||||
DEFUN(coff_swap_aux_in,(abfd, ext1, type, class, indx, numaux, in1),
|
||||
bfd *abfd AND
|
||||
PTR ext1 AND
|
||||
int type AND
|
||||
int class AND
|
||||
int indx AND
|
||||
int numaux AND
|
||||
PTR in1)
|
||||
{
|
||||
AUXENT *ext = (AUXENT *)ext1;
|
||||
|
@ -347,21 +349,27 @@ DEFUN(coff_swap_aux_in,(abfd, ext1, type, class, in1),
|
|||
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
return;
|
||||
|
||||
/* RS/6000 "csect" auxents */
|
||||
#ifdef RS6000COFF_C
|
||||
case C_EXT:
|
||||
case C_HIDEXT:
|
||||
in->x_csect.x_scnlen = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_csect.x_scnlen);
|
||||
in->x_csect.x_parmhash = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_csect.x_parmhash);
|
||||
in->x_csect.x_snhash = bfd_h_get_16 (abfd, (bfd_byte *) ext->x_csect.x_snhash);
|
||||
/* We don't have to hack bitfields in x_smtyp because it's defined by
|
||||
shifts-and-ands, which are equivalent on all byte orders. */
|
||||
in->x_csect.x_smtyp = bfd_h_get_8 (abfd, (bfd_byte *) ext->x_csect.x_smtyp);
|
||||
in->x_csect.x_smclas = bfd_h_get_8 (abfd, (bfd_byte *) ext->x_csect.x_smclas);
|
||||
in->x_csect.x_stab = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_csect.x_stab);
|
||||
in->x_csect.x_snstab = bfd_h_get_16 (abfd, (bfd_byte *) ext->x_csect.x_snstab);
|
||||
if (indx + 1 == numaux)
|
||||
{
|
||||
in->x_csect.x_scnlen = bfd_h_get_32 (abfd, ext->x_csect.x_scnlen);
|
||||
in->x_csect.x_parmhash = bfd_h_get_32 (abfd,
|
||||
ext->x_csect.x_parmhash);
|
||||
in->x_csect.x_snhash = bfd_h_get_16 (abfd, ext->x_csect.x_snhash);
|
||||
/* We don't have to hack bitfields in x_smtyp because it's
|
||||
defined by shifts-and-ands, which are equivalent on all
|
||||
byte orders. */
|
||||
in->x_csect.x_smtyp = bfd_h_get_8 (abfd, ext->x_csect.x_smtyp);
|
||||
in->x_csect.x_smclas = bfd_h_get_8 (abfd, ext->x_csect.x_smclas);
|
||||
in->x_csect.x_stab = bfd_h_get_32 (abfd, ext->x_csect.x_stab);
|
||||
in->x_csect.x_snstab = bfd_h_get_16 (abfd, ext->x_csect.x_snstab);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -374,45 +382,48 @@ DEFUN(coff_swap_aux_in,(abfd, ext1, type, class, in1),
|
|||
in->x_scn.x_scnlen = GET_SCN_SCNLEN(abfd, ext);
|
||||
in->x_scn.x_nreloc = GET_SCN_NRELOC(abfd, ext);
|
||||
in->x_scn.x_nlinno = GET_SCN_NLINNO(abfd, ext);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||
#ifndef NO_TVNDX
|
||||
in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx);
|
||||
#endif
|
||||
|
||||
if (ISARY(type)) {
|
||||
#if DIMNUM != E_DIMNUM
|
||||
-> Error, we need to cope with truncating or extending DIMNUM!;
|
||||
#else
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[0] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[1] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[2] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[3] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
|
||||
#endif
|
||||
}
|
||||
if (class == C_BLOCK || ISFCN(type) || ISTAG(class)) {
|
||||
in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR(abfd, ext);
|
||||
in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX(abfd, ext);
|
||||
}
|
||||
|
||||
if (ISFCN(type)) {
|
||||
in->x_sym.x_misc.x_fsize = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||
}
|
||||
else {
|
||||
in->x_sym.x_misc.x_lnsz.x_lnno = GET_LNSZ_LNNO(abfd, ext);
|
||||
in->x_sym.x_misc.x_lnsz.x_size = GET_LNSZ_SIZE(abfd, ext);
|
||||
return;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
in->x_sym.x_tagndx.l = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||
#ifndef NO_TVNDX
|
||||
in->x_sym.x_tvndx = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_tvndx);
|
||||
#endif
|
||||
|
||||
if (ISARY(type)) {
|
||||
#if DIMNUM != E_DIMNUM
|
||||
-> Error, we need to cope with truncating or extending DIMNUM!;
|
||||
#else
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[0] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[1] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[2] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
|
||||
in->x_sym.x_fcnary.x_ary.x_dimen[3] = bfd_h_get_16(abfd, (bfd_byte *) ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
|
||||
#endif
|
||||
}
|
||||
if (class == C_BLOCK || ISFCN(type) || ISTAG(class)) {
|
||||
in->x_sym.x_fcnary.x_fcn.x_lnnoptr = GET_FCN_LNNOPTR(abfd, ext);
|
||||
in->x_sym.x_fcnary.x_fcn.x_endndx.l = GET_FCN_ENDNDX(abfd, ext);
|
||||
}
|
||||
|
||||
if (ISFCN(type)) {
|
||||
in->x_sym.x_misc.x_fsize = bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||
}
|
||||
else {
|
||||
in->x_sym.x_misc.x_lnsz.x_lnno = GET_LNSZ_LNNO(abfd, ext);
|
||||
in->x_sym.x_misc.x_lnsz.x_size = GET_LNSZ_SIZE(abfd, ext);
|
||||
}
|
||||
}
|
||||
|
||||
static unsigned int
|
||||
DEFUN(coff_swap_aux_out,(abfd, inp, type, class, extp),
|
||||
DEFUN(coff_swap_aux_out,(abfd, inp, type, class, indx, numaux, extp),
|
||||
bfd *abfd AND
|
||||
PTR inp AND
|
||||
int type AND
|
||||
int class AND
|
||||
int indx AND
|
||||
int numaux AND
|
||||
PTR extp)
|
||||
{
|
||||
union internal_auxent *in = (union internal_auxent *)inp;
|
||||
|
@ -434,21 +445,26 @@ DEFUN(coff_swap_aux_out,(abfd, inp, type, class, extp),
|
|||
memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
|
||||
#endif
|
||||
}
|
||||
break;
|
||||
return sizeof (AUXENT);
|
||||
|
||||
#ifdef RS6000COFF_C
|
||||
/* RS/6000 "csect" auxents */
|
||||
case C_EXT:
|
||||
case C_HIDEXT:
|
||||
PUTWORD (abfd, in->x_csect.x_scnlen, ext->x_csect.x_scnlen);
|
||||
PUTWORD (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
|
||||
PUTHALF (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
|
||||
/* We don't have to hack bitfields in x_smtyp because it's defined by
|
||||
shifts-and-ands, which are equivalent on all byte orders. */
|
||||
PUTBYTE (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp);
|
||||
PUTBYTE (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
|
||||
PUTWORD (abfd, in->x_csect.x_stab, ext->x_csect.x_stab);
|
||||
PUTHALF (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab);
|
||||
if (indx + 1 == numaux)
|
||||
{
|
||||
PUTWORD (abfd, in->x_csect.x_scnlen, ext->x_csect.x_scnlen);
|
||||
PUTWORD (abfd, in->x_csect.x_parmhash, ext->x_csect.x_parmhash);
|
||||
PUTHALF (abfd, in->x_csect.x_snhash, ext->x_csect.x_snhash);
|
||||
/* We don't have to hack bitfields in x_smtyp because it's
|
||||
defined by shifts-and-ands, which are equivalent on all
|
||||
byte orders. */
|
||||
PUTBYTE (abfd, in->x_csect.x_smtyp, ext->x_csect.x_smtyp);
|
||||
PUTBYTE (abfd, in->x_csect.x_smclas, ext->x_csect.x_smclas);
|
||||
PUTWORD (abfd, in->x_csect.x_stab, ext->x_csect.x_stab);
|
||||
PUTHALF (abfd, in->x_csect.x_snstab, ext->x_csect.x_snstab);
|
||||
return sizeof (AUXENT);
|
||||
}
|
||||
break;
|
||||
#endif
|
||||
|
||||
|
@ -461,38 +477,39 @@ DEFUN(coff_swap_aux_out,(abfd, inp, type, class, extp),
|
|||
PUT_SCN_SCNLEN(abfd, in->x_scn.x_scnlen, ext);
|
||||
PUT_SCN_NRELOC(abfd, in->x_scn.x_nreloc, ext);
|
||||
PUT_SCN_NLINNO(abfd, in->x_scn.x_nlinno, ext);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
PUTWORD(abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||
#ifndef NO_TVNDX
|
||||
bfd_h_put_16(abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx);
|
||||
#endif
|
||||
|
||||
if (class == C_BLOCK || ISFCN(type) || ISTAG(class)) {
|
||||
PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
|
||||
PUT_FCN_ENDNDX(abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
|
||||
}
|
||||
|
||||
if (ISFCN(type)) {
|
||||
PUTWORD(abfd, in->x_sym.x_misc.x_fsize, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||
}
|
||||
else {
|
||||
if (ISARY(type)) {
|
||||
#if DIMNUM != E_DIMNUM
|
||||
-> Error, we need to cope with truncating or extending DIMNUM!;
|
||||
#else
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
|
||||
#endif
|
||||
}
|
||||
PUT_LNSZ_LNNO(abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
|
||||
PUT_LNSZ_SIZE(abfd, in->x_sym.x_misc.x_lnsz.x_size, ext);
|
||||
return sizeof (AUXENT);
|
||||
}
|
||||
break;
|
||||
}
|
||||
return sizeof(AUXENT);
|
||||
|
||||
PUTWORD(abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||
#ifndef NO_TVNDX
|
||||
bfd_h_put_16(abfd, in->x_sym.x_tvndx , (bfd_byte *) ext->x_sym.x_tvndx);
|
||||
#endif
|
||||
|
||||
if (class == C_BLOCK || ISFCN(type) || ISTAG(class)) {
|
||||
PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
|
||||
PUT_FCN_ENDNDX(abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
|
||||
}
|
||||
|
||||
if (ISFCN(type)) {
|
||||
PUTWORD(abfd, in->x_sym.x_misc.x_fsize, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||
}
|
||||
else {
|
||||
if (ISARY(type)) {
|
||||
#if DIMNUM != E_DIMNUM
|
||||
-> Error, we need to cope with truncating or extending DIMNUM!;
|
||||
#else
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[0], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[0]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[1], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[1]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[2], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[2]);
|
||||
bfd_h_put_16(abfd, in->x_sym.x_fcnary.x_ary.x_dimen[3], (bfd_byte *)ext->x_sym.x_fcnary.x_ary.x_dimen[3]);
|
||||
#endif
|
||||
}
|
||||
PUT_LNSZ_LNNO(abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
|
||||
PUT_LNSZ_SIZE(abfd, in->x_sym.x_misc.x_lnsz.x_size, ext);
|
||||
}
|
||||
return sizeof(AUXENT);
|
||||
}
|
||||
|
||||
#endif /* NO_COFF_SYMBOLS */
|
||||
|
@ -558,6 +575,14 @@ DEFUN(coff_swap_aouthdr_in,(abfd, aouthdr_ext1, aouthdr_int1),
|
|||
aouthdr_int->tagentries = bfd_h_get_32(abfd, (bfd_byte *) aouthdr_ext->tagentries);
|
||||
#endif
|
||||
|
||||
#ifdef APOLLO_M68
|
||||
bfd_h_put_32(abfd, aouthdr_int->o_inlib, (bfd_byte *) aouthdr_ext->o_inlib);
|
||||
bfd_h_put_32(abfd, aouthdr_int->o_sri, (bfd_byte *) aouthdr_ext->o_sri);
|
||||
bfd_h_put_32(abfd, aouthdr_int->vid[0], (bfd_byte *) aouthdr_ext->vid);
|
||||
bfd_h_put_32(abfd, aouthdr_int->vid[1], (bfd_byte *) aouthdr_ext->vid + 4);
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef RS6000COFF_C
|
||||
aouthdr_int->o_toc = bfd_h_get_32(abfd, aouthdr_ext->o_toc);
|
||||
aouthdr_int->o_snentry = bfd_h_get_16(abfd, aouthdr_ext->o_snentry);
|
||||
|
@ -624,7 +649,9 @@ DEFUN(coff_swap_aouthdr_out,(abfd, in, out),
|
|||
#endif
|
||||
|
||||
#ifdef ALPHAECOFF
|
||||
bfd_h_put_32(abfd, 0, (bfd_byte *) aouthdr_out->padding);
|
||||
/* FIXME: What does bldrev mean? */
|
||||
bfd_h_put_16(abfd, (bfd_vma) 2, (bfd_byte *) aouthdr_out->bldrev);
|
||||
bfd_h_put_16(abfd, (bfd_vma) 0, (bfd_byte *) aouthdr_out->padding);
|
||||
bfd_h_put_64(abfd, aouthdr_in->bss_start, (bfd_byte *) aouthdr_out->bss_start);
|
||||
bfd_h_put_64(abfd, aouthdr_in->gp_value, (bfd_byte *) aouthdr_out->gp_value);
|
||||
bfd_h_put_32(abfd, aouthdr_in->gprmask, (bfd_byte *) aouthdr_out->gprmask);
|
||||
|
@ -669,6 +696,9 @@ DEFUN(coff_swap_scnhdr_in,(abfd, ext, in),
|
|||
scnhdr_int->s_align = bfd_h_get_32(abfd, (bfd_byte *) scnhdr_ext->s_align);
|
||||
#endif
|
||||
}
|
||||
/* start-sanitize-mpw */
|
||||
#ifndef MPW_C
|
||||
/* end-sanitize-mpw */
|
||||
|
||||
static unsigned int
|
||||
DEFUN(coff_swap_scnhdr_out,(abfd, in, out),
|
||||
|
@ -706,3 +736,47 @@ DEFUN(coff_swap_scnhdr_out,(abfd, in, out),
|
|||
#endif
|
||||
return sizeof(SCNHDR);
|
||||
}
|
||||
/* start-sanitize-mpw */
|
||||
#else
|
||||
/* Same routine, but with some pre-expanded macros, so ^&%$#&! MPW C doesn't
|
||||
corrupt itself and then freak out. */
|
||||
|
||||
static unsigned int
|
||||
DEFUN(coff_swap_scnhdr_out,(abfd, in, out),
|
||||
bfd *abfd AND
|
||||
PTR in AND
|
||||
PTR out)
|
||||
{
|
||||
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *)in;
|
||||
SCNHDR *scnhdr_ext = (SCNHDR *)out;
|
||||
|
||||
memcpy(scnhdr_ext->s_name, scnhdr_int->s_name, sizeof(scnhdr_int->s_name));
|
||||
bfd_h_put_32 (abfd, scnhdr_int->s_vaddr,
|
||||
(bfd_byte *) scnhdr_ext->s_vaddr);
|
||||
bfd_h_put_32 (abfd, scnhdr_int->s_paddr,
|
||||
(bfd_byte *) scnhdr_ext->s_paddr);
|
||||
bfd_h_put_32 (abfd, scnhdr_int->s_size,
|
||||
(bfd_byte *) scnhdr_ext->s_size);
|
||||
PUT_SCNHDR_SCNPTR (abfd, scnhdr_int->s_scnptr,
|
||||
(bfd_byte *) scnhdr_ext->s_scnptr);
|
||||
PUT_SCNHDR_RELPTR (abfd, scnhdr_int->s_relptr,
|
||||
(bfd_byte *) scnhdr_ext->s_relptr);
|
||||
PUT_SCNHDR_LNNOPTR (abfd, scnhdr_int->s_lnnoptr,
|
||||
(bfd_byte *) scnhdr_ext->s_lnnoptr);
|
||||
PUTWORD(abfd, scnhdr_int->s_flags, (bfd_byte *) scnhdr_ext->s_flags);
|
||||
#if defined(M88)
|
||||
PUTWORD(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
|
||||
PUTWORD(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
|
||||
#else
|
||||
PUTHALF(abfd, scnhdr_int->s_nlnno, (bfd_byte *) scnhdr_ext->s_nlnno);
|
||||
PUTHALF(abfd, scnhdr_int->s_nreloc, (bfd_byte *) scnhdr_ext->s_nreloc);
|
||||
#endif
|
||||
|
||||
#if defined(I960)
|
||||
PUTWORD(abfd, scnhdr_int->s_align, (bfd_byte *) scnhdr_ext->s_align);
|
||||
#endif
|
||||
return sizeof(SCNHDR);
|
||||
}
|
||||
|
||||
#endif
|
||||
/* end-sanitize-mpw */
|
||||
|
|
|
@ -92,7 +92,10 @@ extern unsigned int coff_get_reloc_upper_bound PARAMS ((bfd *, sec_ptr));
|
|||
extern asymbol *coff_make_empty_symbol PARAMS ((bfd *));
|
||||
extern void coff_print_symbol PARAMS ((bfd *, PTR filep, asymbol *,
|
||||
bfd_print_symbol_type how));
|
||||
extern asymbol *coff_make_debug_symbol PARAMS ((bfd *, PTR, unsigned long));
|
||||
extern void coff_get_symbol_info PARAMS ((bfd *, asymbol *,
|
||||
symbol_info *ret));
|
||||
extern asymbol *coff_bfd_make_debug_symbol PARAMS ((bfd *, PTR,
|
||||
unsigned long));
|
||||
extern boolean coff_find_nearest_line PARAMS ((bfd *,
|
||||
asection *,
|
||||
asymbol **,
|
||||
|
@ -103,11 +106,17 @@ extern boolean coff_find_nearest_line PARAMS ((bfd *,
|
|||
extern int coff_sizeof_headers PARAMS ((bfd *, boolean reloc));
|
||||
extern boolean bfd_coff_reloc16_relax_section PARAMS ((bfd *,
|
||||
asection *,
|
||||
struct bfd_link_info *,
|
||||
asymbol **));
|
||||
extern bfd_byte *bfd_coff_reloc16_get_relocated_section_contents
|
||||
PARAMS ((bfd *, struct bfd_seclet *, bfd_byte *, boolean relocateable));
|
||||
PARAMS ((bfd *, struct bfd_link_info *, struct bfd_link_order *,
|
||||
bfd_byte *, boolean relocateable, asymbol **));
|
||||
extern bfd_vma bfd_coff_reloc16_get_value PARAMS ((arelent *,
|
||||
struct bfd_seclet *));
|
||||
struct bfd_link_info *,
|
||||
asection *));
|
||||
extern void bfd_perform_slip PARAMS ((asymbol **s, unsigned int slip,
|
||||
asection *input_section,
|
||||
bfd_vma value));
|
||||
|
||||
/* And more taken from the source .. */
|
||||
|
||||
|
@ -155,10 +164,12 @@ boolean done_lineno;
|
|||
typedef struct
|
||||
{
|
||||
void (*_bfd_coff_swap_aux_in) PARAMS ((
|
||||
bfd *abfd ,
|
||||
bfd *abfd,
|
||||
PTR ext,
|
||||
int type,
|
||||
int class ,
|
||||
int class,
|
||||
int indaux,
|
||||
int numaux,
|
||||
PTR in));
|
||||
|
||||
void (*_bfd_coff_swap_sym_in) PARAMS ((
|
||||
|
@ -176,6 +187,8 @@ typedef struct
|
|||
PTR in,
|
||||
int type,
|
||||
int class,
|
||||
int indaux,
|
||||
int numaux,
|
||||
PTR ext));
|
||||
|
||||
unsigned int (*_bfd_coff_swap_sym_out) PARAMS ((
|
||||
|
@ -254,17 +267,25 @@ typedef struct
|
|||
struct internal_syment *sym));
|
||||
void (*_bfd_coff_reloc16_extra_cases) PARAMS ((
|
||||
bfd *abfd,
|
||||
struct bfd_seclet *seclet,
|
||||
struct bfd_link_info *link_info,
|
||||
struct bfd_link_order *link_order,
|
||||
arelent *reloc,
|
||||
bfd_byte *data,
|
||||
unsigned int *src_ptr,
|
||||
unsigned int *dst_ptr));
|
||||
int (*_bfd_coff_reloc16_estimate) PARAMS ((
|
||||
asection *input_section,
|
||||
asymbol **symbols,
|
||||
arelent *r,
|
||||
unsigned int shrink,
|
||||
struct bfd_link_info *link_info));
|
||||
|
||||
} bfd_coff_backend_data;
|
||||
|
||||
#define coff_backend_info(abfd) ((bfd_coff_backend_data *) (abfd)->xvec->backend_data)
|
||||
|
||||
#define bfd_coff_swap_aux_in(a,e,t,c,i) \
|
||||
((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,i))
|
||||
#define bfd_coff_swap_aux_in(a,e,t,c,ind,num,i) \
|
||||
((coff_backend_info (a)->_bfd_coff_swap_aux_in) (a,e,t,c,ind,num,i))
|
||||
|
||||
#define bfd_coff_swap_sym_in(a,e,i) \
|
||||
((coff_backend_info (a)->_bfd_coff_swap_sym_in) (a,e,i))
|
||||
|
@ -278,8 +299,8 @@ typedef struct
|
|||
#define bfd_coff_swap_lineno_out(abfd, i, o) \
|
||||
((coff_backend_info (abfd)->_bfd_coff_swap_lineno_out) (abfd, i, o))
|
||||
|
||||
#define bfd_coff_swap_aux_out(abfd, i, t,c,o) \
|
||||
((coff_backend_info (abfd)->_bfd_coff_swap_aux_out) (abfd, i,t,c, o))
|
||||
#define bfd_coff_swap_aux_out(a,i,t,c,ind,num,o) \
|
||||
((coff_backend_info (a)->_bfd_coff_swap_aux_out) (a,i,t,c,ind,num,o))
|
||||
|
||||
#define bfd_coff_swap_sym_out(abfd, i,o) \
|
||||
((coff_backend_info (abfd)->_bfd_coff_swap_sym_out) (abfd, i, o))
|
||||
|
@ -332,7 +353,11 @@ typedef struct
|
|||
#define bfd_coff_symname_in_debug(abfd, sym)\
|
||||
((coff_backend_info (abfd)->_bfd_coff_symname_in_debug) (abfd, sym))
|
||||
|
||||
#define bfd_coff_reloc16_extra_cases(abfd, seclet, reloc, data, src_ptr, dst_ptr)\
|
||||
#define bfd_coff_reloc16_extra_cases(abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr)\
|
||||
((coff_backend_info (abfd)->_bfd_coff_reloc16_extra_cases)\
|
||||
(abfd, seclet, reloc, data, src_ptr, dst_ptr))
|
||||
(abfd, link_info, link_order, reloc, data, src_ptr, dst_ptr))
|
||||
|
||||
#define bfd_coff_reloc16_estimate(abfd, section, symbols, reloc, shrink, link_info)\
|
||||
((coff_backend_info (abfd)->_bfd_coff_reloc16_estimate)\
|
||||
(section, symbols, reloc, shrink, link_info))
|
||||
|
||||
|
|
Loading…
Reference in New Issue