Add missing protypes
This commit is contained in:
parent
cde43e70f1
commit
1725a96ea6
@ -1,7 +1,15 @@
|
||||
2001-08-14 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* aout-tic30.c: Add missing prototypes. Fix formatting.
|
||||
* aout-ns32k.c: Add missing prototypes. Fix formatting.
|
||||
* peXXigen.c: Add missining prototypes. Fix formatting.
|
||||
* aout-adobe.c: Add missining prototypes. Fix formatting.
|
||||
|
||||
2001-08-13 Nick Clifton <nickc@cambridge.redhat.com>
|
||||
|
||||
* elf32-v850.c: Add missing function prototypes.
|
||||
Fix some formatting.
|
||||
|
||||
* cpu-v850.c: Add missing function prototype.
|
||||
Fix some formatting.
|
||||
|
||||
|
158
bfd/aout-adobe.c
158
bfd/aout-adobe.c
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for a.out.adobe binaries.
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000
|
||||
Copyright 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
Written by Cygnus Support. Based on bout.c.
|
||||
|
||||
@ -26,7 +26,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
#include "aout/adobe.h"
|
||||
|
||||
#include "aout/stab_gnu.h"
|
||||
#include "libaout.h" /* BFD a.out internal data structures */
|
||||
#include "libaout.h" /* BFD a.out internal data structures. */
|
||||
|
||||
/* Forward decl. */
|
||||
extern const bfd_target a_out_adobe_vec;
|
||||
@ -35,7 +35,13 @@ static const bfd_target *aout_adobe_callback PARAMS ((bfd *));
|
||||
|
||||
extern boolean aout_32_slurp_symbol_table PARAMS ((bfd *abfd));
|
||||
extern boolean aout_32_write_syms PARAMS ((bfd *));
|
||||
static void aout_adobe_write_section PARAMS ((bfd *abfd, sec_ptr sect));
|
||||
static void aout_adobe_write_section PARAMS ((bfd *abfd, sec_ptr sect));
|
||||
static const bfd_target * aout_adobe_object_p PARAMS ((bfd *));
|
||||
static boolean aout_adobe_mkobject PARAMS ((bfd *));
|
||||
static boolean aout_adobe_write_object_contents PARAMS ((bfd *));
|
||||
static boolean aout_adobe_set_section_contents PARAMS ((bfd *, asection *, PTR, file_ptr, bfd_size_type));
|
||||
static boolean aout_adobe_set_arch_mach PARAMS ((bfd *, enum bfd_architecture, unsigned long));
|
||||
static int aout_adobe_sizeof_headers PARAMS ((bfd *, boolean));
|
||||
|
||||
/* Swaps the information in an executable header taken from a raw byte
|
||||
stream memory image, into the internal exec_header structure. */
|
||||
@ -142,7 +148,7 @@ aout_adobe_callback (abfd)
|
||||
asection *sect;
|
||||
struct external_segdesc ext[1];
|
||||
char *section_name;
|
||||
char try_again[30]; /* name and number */
|
||||
char try_again[30]; /* Name and number. */
|
||||
char *newname;
|
||||
int trynum;
|
||||
flagword flags;
|
||||
@ -155,13 +161,13 @@ aout_adobe_callback (abfd)
|
||||
obj_sym_filepos (abfd) = N_SYMOFF (*execp);
|
||||
|
||||
/* Suck up the section information from the file, one section at a time. */
|
||||
|
||||
for (;;)
|
||||
{
|
||||
if (bfd_read ((PTR) ext, 1, sizeof (*ext), abfd) != sizeof (*ext))
|
||||
{
|
||||
if (bfd_get_error () != bfd_error_system_call)
|
||||
bfd_set_error (bfd_error_wrong_format);
|
||||
|
||||
return 0;
|
||||
}
|
||||
switch (ext->e_type[0])
|
||||
@ -193,10 +199,10 @@ aout_adobe_callback (abfd)
|
||||
|
||||
/* First one is called ".text" or whatever; subsequent ones are
|
||||
".text1", ".text2", ... */
|
||||
|
||||
bfd_set_error (bfd_error_no_error);
|
||||
sect = bfd_make_section (abfd, section_name);
|
||||
trynum = 0;
|
||||
|
||||
while (!sect)
|
||||
{
|
||||
if (bfd_get_error () != bfd_error_no_error)
|
||||
@ -240,6 +246,9 @@ aout_adobe_callback (abfd)
|
||||
sect->rel_filepos = N_DRELOFF (*execp);
|
||||
sect->reloc_count = execp->a_drsize;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
no_more_sections:
|
||||
@ -253,10 +262,11 @@ aout_adobe_callback (abfd)
|
||||
return abfd->xvec;
|
||||
}
|
||||
|
||||
struct bout_data_struct {
|
||||
struct aoutdata a;
|
||||
struct internal_exec e;
|
||||
};
|
||||
struct bout_data_struct
|
||||
{
|
||||
struct aoutdata a;
|
||||
struct internal_exec e;
|
||||
};
|
||||
|
||||
static boolean
|
||||
aout_adobe_mkobject (abfd)
|
||||
@ -333,26 +343,16 @@ aout_adobe_write_object_contents (abfd)
|
||||
afterward. */
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
{
|
||||
if (sect->flags & SEC_CODE)
|
||||
{
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
}
|
||||
}
|
||||
if (sect->flags & SEC_CODE)
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
{
|
||||
if (sect->flags & SEC_DATA)
|
||||
{
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
}
|
||||
}
|
||||
if (sect->flags & SEC_DATA)
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
{
|
||||
if (!(sect->flags & (SEC_CODE | SEC_DATA)))
|
||||
{
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
}
|
||||
}
|
||||
if (!(sect->flags & (SEC_CODE | SEC_DATA)))
|
||||
aout_adobe_write_section (abfd, sect);
|
||||
|
||||
/* Write final `sentinel` section header (with type of 0). */
|
||||
if (bfd_write ((PTR) sentinel, 1, sizeof (*sentinel), abfd)
|
||||
@ -374,27 +374,20 @@ aout_adobe_write_object_contents (abfd)
|
||||
return false;
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
{
|
||||
if (sect->flags & SEC_CODE)
|
||||
{
|
||||
if (!aout_32_squirt_out_relocs (abfd, sect))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (sect->flags & SEC_CODE)
|
||||
if (!aout_32_squirt_out_relocs (abfd, sect))
|
||||
return false;
|
||||
|
||||
if (bfd_seek (abfd, (file_ptr) (N_DRELOFF (*exec_hdr (abfd))), SEEK_SET)
|
||||
!= 0)
|
||||
return false;
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
{
|
||||
if (sect->flags & SEC_DATA)
|
||||
{
|
||||
if (!aout_32_squirt_out_relocs (abfd, sect))
|
||||
return false;
|
||||
}
|
||||
}
|
||||
if (sect->flags & SEC_DATA)
|
||||
if (!aout_32_squirt_out_relocs (abfd, sect))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -422,7 +415,6 @@ aout_adobe_set_section_contents (abfd, section, location, offset, count)
|
||||
{
|
||||
/* Assign file offsets to sections. Text sections are first, and
|
||||
are contiguous. Then data sections. Everything else at the end. */
|
||||
|
||||
section_start = N_TXTOFF (ignore<-->me);
|
||||
|
||||
for (sect = abfd->sections; sect; sect = sect->next)
|
||||
@ -463,9 +455,8 @@ aout_adobe_set_section_contents (abfd, section, location, offset, count)
|
||||
return false;
|
||||
|
||||
if (count != 0)
|
||||
{
|
||||
return (bfd_write ((PTR) location, 1, count, abfd) == count) ? true : false;
|
||||
}
|
||||
return (bfd_write ((PTR) location, 1, count, abfd) == count) ? true : false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -520,44 +511,45 @@ aout_adobe_sizeof_headers (ignore_abfd, ignore)
|
||||
#define aout_32_bfd_final_link _bfd_generic_final_link
|
||||
#define aout_32_bfd_link_split_section _bfd_generic_link_split_section
|
||||
|
||||
const bfd_target a_out_adobe_vec = {
|
||||
"a.out.adobe", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_BIG, /* data byte order is unknown (big assumed) */
|
||||
BFD_ENDIAN_BIG, /* hdr byte order is big */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | WP_TEXT ),
|
||||
/* section flags */
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_DATA | SEC_RELOC),
|
||||
'_', /* symbol leading char */
|
||||
' ', /* ar_pad_char */
|
||||
16, /* ar_max_namelen */
|
||||
const bfd_target a_out_adobe_vec =
|
||||
{
|
||||
"a.out.adobe", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_BIG, /* data byte order is unknown (big assumed) */
|
||||
BFD_ENDIAN_BIG, /* hdr byte order is big */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | WP_TEXT ),
|
||||
/* section flags */
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_CODE | SEC_DATA | SEC_RELOC),
|
||||
'_', /* symbol leading char */
|
||||
' ', /* ar_pad_char */
|
||||
16, /* ar_max_namelen */
|
||||
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
|
||||
{_bfd_dummy_target, aout_adobe_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, aout_adobe_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, aout_adobe_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
|
||||
{_bfd_dummy_target, aout_adobe_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, _bfd_dummy_target},
|
||||
{bfd_false, aout_adobe_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, aout_adobe_write_object_contents,/* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
|
||||
BFD_JUMP_TABLE_GENERIC (aout_32),
|
||||
BFD_JUMP_TABLE_COPY (_bfd_generic),
|
||||
BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
||||
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd),
|
||||
BFD_JUMP_TABLE_SYMBOLS (aout_32),
|
||||
BFD_JUMP_TABLE_RELOCS (aout_32),
|
||||
BFD_JUMP_TABLE_WRITE (aout_32),
|
||||
BFD_JUMP_TABLE_LINK (aout_32),
|
||||
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
|
||||
BFD_JUMP_TABLE_GENERIC (aout_32),
|
||||
BFD_JUMP_TABLE_COPY (_bfd_generic),
|
||||
BFD_JUMP_TABLE_CORE (_bfd_nocore),
|
||||
BFD_JUMP_TABLE_ARCHIVE (_bfd_archive_bsd),
|
||||
BFD_JUMP_TABLE_SYMBOLS (aout_32),
|
||||
BFD_JUMP_TABLE_RELOCS (aout_32),
|
||||
BFD_JUMP_TABLE_WRITE (aout_32),
|
||||
BFD_JUMP_TABLE_LINK (aout_32),
|
||||
BFD_JUMP_TABLE_DYNAMIC (_bfd_nodynamic),
|
||||
|
||||
NULL,
|
||||
NULL,
|
||||
|
||||
(PTR) 0
|
||||
};
|
||||
(PTR) 0
|
||||
};
|
||||
|
275
bfd/aout-arm.c
275
bfd/aout-arm.c
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for raw ARM a.out binaries.
|
||||
Copyright 1994, 1995, 1997, 1998, 1999, 2000
|
||||
Copyright 1994, 1995, 1997, 1998, 1999, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Richard Earnshaw (rwe@pegasus.esprit.ec.org)
|
||||
|
||||
@ -19,6 +19,15 @@ 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
/* Avoid multiple defininitions from aoutx if supporting standarad a.out
|
||||
as well as our own. */
|
||||
#define NAME(x,y) CAT3(aoutarm,_32_,y)
|
||||
|
||||
#include "libaout.h"
|
||||
#include "aout/aout64.h"
|
||||
|
||||
#define N_TXTADDR(x) \
|
||||
((N_MAGIC(x) == NMAGIC) ? 0x8000 : \
|
||||
(N_MAGIC(x) != ZMAGIC) ? 0 : \
|
||||
@ -36,63 +45,45 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
((x).a_info != NMAGIC))
|
||||
#define N_MAGIC(x) ((x).a_info & ~07200)
|
||||
|
||||
#include "bfd.h"
|
||||
#include "sysdep.h"
|
||||
|
||||
#define MYARM(OP) CAT(aoutarm_,OP)
|
||||
reloc_howto_type *MYARM(bfd_reloc_type_lookup)
|
||||
PARAMS((bfd *, bfd_reloc_code_real_type));
|
||||
static boolean MYARM(write_object_contents) PARAMS((bfd *));
|
||||
|
||||
/* Avoid multiple defininitions from aoutx if supporting standarad a.out
|
||||
as well as our own. */
|
||||
#define NAME(x,y) CAT3(aoutarm,_32_,y)
|
||||
|
||||
#define MY_bfd_reloc_type_lookup aoutarm_bfd_reloc_type_lookup
|
||||
|
||||
#include "libaout.h"
|
||||
#include "aout/aout64.h"
|
||||
|
||||
static bfd_reloc_status_type
|
||||
MY(fix_pcrel_26_done) PARAMS ((bfd *, arelent *, asymbol *, PTR,
|
||||
asection *, bfd *, char **));
|
||||
|
||||
static bfd_reloc_status_type
|
||||
MY(fix_pcrel_26) PARAMS ((bfd *, arelent *, asymbol *, PTR,
|
||||
asection *, bfd *, char **));
|
||||
static void MY(swap_std_reloc_in) PARAMS ((bfd *, struct reloc_std_external *,
|
||||
arelent *, asymbol **,
|
||||
bfd_size_type));
|
||||
void MY(swap_std_reloc_out) PARAMS ((bfd *, arelent *,
|
||||
struct reloc_std_external *));
|
||||
|
||||
static boolean MY(write_object_contents) PARAMS ((bfd *));
|
||||
static bfd_reloc_status_type MY(fix_pcrel_26_done) PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
|
||||
static bfd_reloc_status_type MY(fix_pcrel_26) PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));
|
||||
static void MY(swap_std_reloc_in) PARAMS ((bfd *, struct reloc_std_external *, arelent *, asymbol **, bfd_size_type));
|
||||
reloc_howto_type * MY(bfd_reloc_type_lookup) PARAMS ((bfd *, bfd_reloc_code_real_type));
|
||||
reloc_howto_type * MY(reloc_howto) PARAMS ((bfd *, struct reloc_std_external *, int *, int *, int *));
|
||||
void MY(put_reloc) PARAMS ((bfd *, int, int, long, reloc_howto_type *, struct reloc_std_external *));
|
||||
void MY(relocatable_reloc) PARAMS ((reloc_howto_type *, bfd *, struct reloc_std_external *, bfd_vma *, bfd_vma));
|
||||
void MY(swap_std_reloc_out) PARAMS ((bfd *, arelent *, struct reloc_std_external *));
|
||||
|
||||
reloc_howto_type MY(howto_table)[] =
|
||||
{
|
||||
/* type rs size bsz pcrel bitpos ovrf sf name part_inpl readmask setmask
|
||||
pcdone */
|
||||
HOWTO (0, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "8", true,
|
||||
0x000000ff, 0x000000ff, false),
|
||||
HOWTO (1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16", true,
|
||||
0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (2, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "32", true,
|
||||
0xffffffff, 0xffffffff, false),
|
||||
HOWTO (3, 2, 2, 26, true, 0, complain_overflow_signed, MY(fix_pcrel_26),
|
||||
"ARM26", true, 0x00ffffff, 0x00ffffff, true),
|
||||
HOWTO (4, 0, 0, 8, true, 0, complain_overflow_signed, 0, "DISP8", true,
|
||||
0x000000ff, 0x000000ff, true),
|
||||
HOWTO (5, 0, 1, 16, true, 0, complain_overflow_signed, 0, "DISP16", true,
|
||||
0x0000ffff, 0x0000ffff, true),
|
||||
HOWTO (6, 0, 2, 32, true, 0, complain_overflow_signed, 0, "DISP32", true,
|
||||
0xffffffff, 0xffffffff, true),
|
||||
HOWTO (7, 2, 2, 26, false, 0, complain_overflow_signed,
|
||||
MY(fix_pcrel_26_done), "ARM26D", true, 0x0, 0x0,
|
||||
false),
|
||||
EMPTY_HOWTO (-1),
|
||||
HOWTO (9, 0, -1, 16, false, 0, complain_overflow_bitfield, 0, "NEG16", true,
|
||||
0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (10, 0, -2, 32, false, 0, complain_overflow_bitfield, 0, "NEG32", true,
|
||||
0xffffffff, 0xffffffff, false)
|
||||
};
|
||||
{
|
||||
/* Type rs size bsz pcrel bitpos ovrf sf name part_inpl
|
||||
readmask setmask pcdone. */
|
||||
HOWTO (0, 0, 0, 8, false, 0, complain_overflow_bitfield, 0, "8", true,
|
||||
0x000000ff, 0x000000ff, false),
|
||||
HOWTO (1, 0, 1, 16, false, 0, complain_overflow_bitfield, 0, "16", true,
|
||||
0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (2, 0, 2, 32, false, 0, complain_overflow_bitfield, 0, "32", true,
|
||||
0xffffffff, 0xffffffff, false),
|
||||
HOWTO (3, 2, 2, 26, true, 0, complain_overflow_signed, MY(fix_pcrel_26),
|
||||
"ARM26", true, 0x00ffffff, 0x00ffffff, true),
|
||||
HOWTO (4, 0, 0, 8, true, 0, complain_overflow_signed, 0, "DISP8", true,
|
||||
0x000000ff, 0x000000ff, true),
|
||||
HOWTO (5, 0, 1, 16, true, 0, complain_overflow_signed, 0, "DISP16", true,
|
||||
0x0000ffff, 0x0000ffff, true),
|
||||
HOWTO (6, 0, 2, 32, true, 0, complain_overflow_signed, 0, "DISP32", true,
|
||||
0xffffffff, 0xffffffff, true),
|
||||
HOWTO (7, 2, 2, 26, false, 0, complain_overflow_signed,
|
||||
MY(fix_pcrel_26_done), "ARM26D", true, 0x0, 0x0,
|
||||
false),
|
||||
EMPTY_HOWTO (-1),
|
||||
HOWTO (9, 0, -1, 16, false, 0, complain_overflow_bitfield, 0, "NEG16", true,
|
||||
0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (10, 0, -2, 32, false, 0, complain_overflow_bitfield, 0, "NEG32", true,
|
||||
0xffffffff, 0xffffffff, false)
|
||||
};
|
||||
|
||||
#define RELOC_ARM_BITS_NEG_BIG ((unsigned int) 0x08)
|
||||
#define RELOC_ARM_BITS_NEG_LITTLE ((unsigned int) 0x10)
|
||||
@ -157,14 +148,16 @@ MY(put_reloc) (abfd, r_extern, r_index, value, howto, reloc)
|
||||
int r_neg;
|
||||
|
||||
PUT_WORD (abfd, value, reloc->r_address);
|
||||
r_length = howto->size ; /* Size as a power of two */
|
||||
/* Size as a power of two. */
|
||||
r_length = howto->size;
|
||||
|
||||
/* Special case for branch relocations. */
|
||||
if (howto->type == 3 || howto->type == 7)
|
||||
r_length = 3;
|
||||
|
||||
r_pcrel = howto->type & 4; /* PC Relative done? */
|
||||
r_neg = howto->type & 8; /* Negative relocation */
|
||||
r_pcrel = howto->type & 4; /* PC Relative done? */
|
||||
r_neg = howto->type & 8; /* Negative relocation. */
|
||||
|
||||
if (bfd_header_big_endian (abfd))
|
||||
{
|
||||
reloc->r_index[0] = r_index >> 16;
|
||||
@ -258,7 +251,7 @@ MY(fix_pcrel_26) (abfd, reloc_entry, symbol, data, input_section,
|
||||
long target = bfd_get_32 (abfd, (bfd_byte *) data + addr);
|
||||
bfd_reloc_status_type flag = bfd_reloc_ok;
|
||||
|
||||
/* If this is an undefined symbol, return error */
|
||||
/* If this is an undefined symbol, return error. */
|
||||
if (symbol->section == &bfd_und_section
|
||||
&& (symbol->flags & BSF_WEAK) == 0)
|
||||
return output_bfd ? bfd_reloc_ok : bfd_reloc_undefined;
|
||||
@ -270,7 +263,7 @@ MY(fix_pcrel_26) (abfd, reloc_entry, symbol, data, input_section,
|
||||
return bfd_reloc_ok;
|
||||
|
||||
relocation = (target & 0x00ffffff) << 2;
|
||||
relocation = (relocation ^ 0x02000000) - 0x02000000; /* Sign extend */
|
||||
relocation = (relocation ^ 0x02000000) - 0x02000000; /* Sign extend. */
|
||||
relocation += symbol->value;
|
||||
relocation += symbol->section->output_section->vma;
|
||||
relocation += symbol->section->output_offset;
|
||||
@ -281,7 +274,7 @@ MY(fix_pcrel_26) (abfd, reloc_entry, symbol, data, input_section,
|
||||
if (relocation & 3)
|
||||
return bfd_reloc_overflow;
|
||||
|
||||
/* Check for overflow */
|
||||
/* Check for overflow. */
|
||||
if (relocation & 0x02000000)
|
||||
{
|
||||
if ((relocation & ~ (bfd_vma) 0x03ffffff) != ~ (bfd_vma) 0x03ffffff)
|
||||
@ -313,7 +306,8 @@ MY(bfd_reloc_type_lookup) (abfd,code)
|
||||
case 32:
|
||||
code = BFD_RELOC_32;
|
||||
break;
|
||||
default: return (CONST struct reloc_howto_struct *) 0;
|
||||
default:
|
||||
return (CONST struct reloc_howto_struct *) 0;
|
||||
}
|
||||
|
||||
switch (code)
|
||||
@ -324,7 +318,8 @@ MY(bfd_reloc_type_lookup) (abfd,code)
|
||||
ASTD (BFD_RELOC_8_PCREL, 4);
|
||||
ASTD (BFD_RELOC_16_PCREL, 5);
|
||||
ASTD (BFD_RELOC_32_PCREL, 6);
|
||||
default: return (CONST struct reloc_howto_struct *) 0;
|
||||
default:
|
||||
return (CONST struct reloc_howto_struct *) 0;
|
||||
}
|
||||
}
|
||||
|
||||
@ -419,25 +414,25 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
if (bfd_abs_section.symbol == sym)
|
||||
{
|
||||
/* Whoops, looked like an abs symbol, but is really an offset
|
||||
from the abs section */
|
||||
from the abs section. */
|
||||
r_index = 0;
|
||||
r_extern = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Fill in symbol */
|
||||
/* Fill in symbol. */
|
||||
r_extern = 1;
|
||||
r_index = (*(g->sym_ptr_ptr))->KEEPIT;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Just an ordinary section */
|
||||
/* Just an ordinary section. */
|
||||
r_extern = 0;
|
||||
r_index = output_section->target_index;
|
||||
}
|
||||
|
||||
/* now the fun stuff */
|
||||
/* Now the fun stuff. */
|
||||
if (bfd_header_big_endian (abfd))
|
||||
{
|
||||
natptr->r_index[0] = r_index >> 16;
|
||||
@ -469,83 +464,83 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
extern const bfd_target aout_arm_big_vec;
|
||||
|
||||
const bfd_target aout_arm_little_vec =
|
||||
{
|
||||
"a.out-arm-little", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_LITTLE, /* target byte order (little) */
|
||||
BFD_ENDIAN_LITTLE, /* target headers byte order (little) */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
|
||||
MY_symbol_leading_char,
|
||||
AR_PAD_CHAR, /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
||||
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
||||
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
|
||||
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
||||
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
||||
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
|
||||
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, MY_core_file_p},
|
||||
{bfd_false, MY_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
{
|
||||
"a.out-arm-little", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_LITTLE, /* target byte order (little) */
|
||||
BFD_ENDIAN_LITTLE, /* target headers byte order (little) */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
|
||||
MY_symbol_leading_char,
|
||||
AR_PAD_CHAR, /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
||||
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
||||
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* data */
|
||||
bfd_getl64, bfd_getl_signed_64, bfd_putl64,
|
||||
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
|
||||
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
|
||||
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, MY_core_file_p},
|
||||
{bfd_false, MY_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
|
||||
BFD_JUMP_TABLE_GENERIC (MY),
|
||||
BFD_JUMP_TABLE_COPY (MY),
|
||||
BFD_JUMP_TABLE_CORE (MY),
|
||||
BFD_JUMP_TABLE_ARCHIVE (MY),
|
||||
BFD_JUMP_TABLE_SYMBOLS (MY),
|
||||
BFD_JUMP_TABLE_RELOCS (MY),
|
||||
BFD_JUMP_TABLE_WRITE (MY),
|
||||
BFD_JUMP_TABLE_LINK (MY),
|
||||
BFD_JUMP_TABLE_DYNAMIC (MY),
|
||||
BFD_JUMP_TABLE_GENERIC (MY),
|
||||
BFD_JUMP_TABLE_COPY (MY),
|
||||
BFD_JUMP_TABLE_CORE (MY),
|
||||
BFD_JUMP_TABLE_ARCHIVE (MY),
|
||||
BFD_JUMP_TABLE_SYMBOLS (MY),
|
||||
BFD_JUMP_TABLE_RELOCS (MY),
|
||||
BFD_JUMP_TABLE_WRITE (MY),
|
||||
BFD_JUMP_TABLE_LINK (MY),
|
||||
BFD_JUMP_TABLE_DYNAMIC (MY),
|
||||
|
||||
& aout_arm_big_vec,
|
||||
& aout_arm_big_vec,
|
||||
|
||||
(PTR) MY_backend_data,
|
||||
};
|
||||
(PTR) MY_backend_data,
|
||||
};
|
||||
|
||||
const bfd_target aout_arm_big_vec =
|
||||
{
|
||||
"a.out-arm-big", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_BIG, /* target byte order (big) */
|
||||
BFD_ENDIAN_BIG, /* target headers byte order (big) */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
|
||||
MY_symbol_leading_char,
|
||||
AR_PAD_CHAR, /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
|
||||
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, MY_core_file_p},
|
||||
{bfd_false, MY_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
{
|
||||
"a.out-arm-big", /* name */
|
||||
bfd_target_aout_flavour,
|
||||
BFD_ENDIAN_BIG, /* target byte order (big) */
|
||||
BFD_ENDIAN_BIG, /* target headers byte order (big) */
|
||||
(HAS_RELOC | EXEC_P | /* object flags */
|
||||
HAS_LINENO | HAS_DEBUG |
|
||||
HAS_SYMS | HAS_LOCALS | DYNAMIC | WP_TEXT | D_PAGED),
|
||||
(SEC_HAS_CONTENTS | SEC_ALLOC | SEC_LOAD | SEC_RELOC | SEC_CODE | SEC_DATA),
|
||||
MY_symbol_leading_char,
|
||||
AR_PAD_CHAR, /* ar_pad_char */
|
||||
15, /* ar_max_namelen */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* data */
|
||||
bfd_getb64, bfd_getb_signed_64, bfd_putb64,
|
||||
bfd_getb32, bfd_getb_signed_32, bfd_putb32,
|
||||
bfd_getb16, bfd_getb_signed_16, bfd_putb16, /* hdrs */
|
||||
{_bfd_dummy_target, MY_object_p, /* bfd_check_format */
|
||||
bfd_generic_archive_p, MY_core_file_p},
|
||||
{bfd_false, MY_mkobject, /* bfd_set_format */
|
||||
_bfd_generic_mkarchive, bfd_false},
|
||||
{bfd_false, MY_write_object_contents, /* bfd_write_contents */
|
||||
_bfd_write_archive_contents, bfd_false},
|
||||
|
||||
BFD_JUMP_TABLE_GENERIC (MY),
|
||||
BFD_JUMP_TABLE_COPY (MY),
|
||||
BFD_JUMP_TABLE_CORE (MY),
|
||||
BFD_JUMP_TABLE_ARCHIVE (MY),
|
||||
BFD_JUMP_TABLE_SYMBOLS (MY),
|
||||
BFD_JUMP_TABLE_RELOCS (MY),
|
||||
BFD_JUMP_TABLE_WRITE (MY),
|
||||
BFD_JUMP_TABLE_LINK (MY),
|
||||
BFD_JUMP_TABLE_DYNAMIC (MY),
|
||||
BFD_JUMP_TABLE_GENERIC (MY),
|
||||
BFD_JUMP_TABLE_COPY (MY),
|
||||
BFD_JUMP_TABLE_CORE (MY),
|
||||
BFD_JUMP_TABLE_ARCHIVE (MY),
|
||||
BFD_JUMP_TABLE_SYMBOLS (MY),
|
||||
BFD_JUMP_TABLE_RELOCS (MY),
|
||||
BFD_JUMP_TABLE_WRITE (MY),
|
||||
BFD_JUMP_TABLE_LINK (MY),
|
||||
BFD_JUMP_TABLE_DYNAMIC (MY),
|
||||
|
||||
& aout_arm_little_vec,
|
||||
|
||||
& aout_arm_little_vec,
|
||||
|
||||
(PTR) MY_backend_data,
|
||||
};
|
||||
(PTR) MY_backend_data,
|
||||
};
|
||||
|
204
bfd/aout-ns32k.c
204
bfd/aout-ns32k.c
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for ns32k a.out-ish binaries.
|
||||
Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2000
|
||||
Copyright 1990, 1991, 1992, 1994, 1995, 1996, 1998, 2000, 2001
|
||||
Free Software Foundation, Inc.
|
||||
Contributed by Ian Dall (idall@eleceng.adelaide.edu.au).
|
||||
|
||||
@ -35,9 +35,8 @@ boolean
|
||||
MYNS(write_object_contents)
|
||||
PARAMS((bfd *abfd));
|
||||
|
||||
/* Avoid multiple definitions from aoutx if supporting standard a.out format(s)
|
||||
* as well as this one
|
||||
*/
|
||||
/* Avoid multiple definitions from aoutx if supporting
|
||||
standard a.out format(s) as well as this one. */
|
||||
#define NAME(x,y) CAT3(ns32kaout,_32_,y)
|
||||
|
||||
void bfd_ns32k_arch PARAMS ((void));
|
||||
@ -53,99 +52,102 @@ static void
|
||||
MY_swap_std_reloc_in PARAMS ((bfd *abfd, struct reloc_std_external *bytes,
|
||||
arelent *cache_ptr, asymbol **symbols,
|
||||
bfd_size_type symcount));
|
||||
|
||||
static void
|
||||
MY_swap_std_reloc_out PARAMS ((bfd *abfd, arelent *g,
|
||||
struct reloc_std_external *natptr));
|
||||
reloc_howto_type *
|
||||
MY(reloc_howto) PARAMS ((bfd *, struct reloc_std_external *,
|
||||
int *, int *, int *));
|
||||
void
|
||||
MY(put_reloc) PARAMS ((bfd *, int, int, long, reloc_howto_type *,
|
||||
struct reloc_std_external *));
|
||||
|
||||
/* The ns32k series is ah, unusual, when it comes to relocation.
|
||||
* There are three storage methods for relocateable objects. There
|
||||
* are displacements, immediate operands and ordinary twos complement
|
||||
* data. Of these, only the last fits into the standard relocation
|
||||
* scheme. Immediate operands are stored huffman encoded and
|
||||
* immediate operands are stored big endian (where as the natural byte
|
||||
* order is little endian for this achitecture).
|
||||
There are three storage methods for relocateable objects. There
|
||||
are displacements, immediate operands and ordinary twos complement
|
||||
data. Of these, only the last fits into the standard relocation
|
||||
scheme. Immediate operands are stored huffman encoded and
|
||||
immediate operands are stored big endian (where as the natural byte
|
||||
order is little endian for this achitecture).
|
||||
|
||||
* Note that the ns32k displacement storage method is orthogonal to
|
||||
* whether the relocation is pc relative or not. The "displacement"
|
||||
* storage scheme is used for essentially all address constants. The
|
||||
* displacement can be relative to zero (absolute displacement),
|
||||
* relative to the pc (pc relative), the stack pointer, the frame
|
||||
* pointer, the static base register and general purpose register etc.
|
||||
Note that the ns32k displacement storage method is orthogonal to
|
||||
whether the relocation is pc relative or not. The "displacement"
|
||||
storage scheme is used for essentially all address constants. The
|
||||
displacement can be relative to zero (absolute displacement),
|
||||
relative to the pc (pc relative), the stack pointer, the frame
|
||||
pointer, the static base register and general purpose register etc.
|
||||
|
||||
* For example:
|
||||
*
|
||||
* sym1: .long . # pc relative 2's complement
|
||||
* sym1: .long foo # 2's complement not pc relative
|
||||
*
|
||||
* self: movd @self, r0 # pc relative displacement
|
||||
* movd foo, r0 # non pc relative displacement
|
||||
*
|
||||
* self: movd self, r0 # pc relative immediate
|
||||
* movd foo, r0 # non pc relative immediate
|
||||
*
|
||||
* In addition, for historical reasons the encoding of the relocation types
|
||||
* in the a.out format relocation entries is such that even the relocation
|
||||
* methods which are standard are not encoded the standard way.
|
||||
*
|
||||
*/
|
||||
For example:
|
||||
|
||||
sym1: .long . # pc relative 2's complement
|
||||
sym1: .long foo # 2's complement not pc relative
|
||||
|
||||
self: movd @self, r0 # pc relative displacement
|
||||
movd foo, r0 # non pc relative displacement
|
||||
|
||||
self: movd self, r0 # pc relative immediate
|
||||
movd foo, r0 # non pc relative immediate
|
||||
|
||||
In addition, for historical reasons the encoding of the relocation types
|
||||
in the a.out format relocation entries is such that even the relocation
|
||||
methods which are standard are not encoded the standard way. */
|
||||
|
||||
reloc_howto_type MY(howto_table)[] =
|
||||
{
|
||||
/* ns32k immediate operands */
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 0, 8, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 1, 16, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 2, 32, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 0, 8, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_8",
|
||||
true, 0x000000ff, 0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 1, 16, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 2, 32, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
{
|
||||
/* ns32k immediate operands. */
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_8, 0, 0, 8, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_16, 0, 1, 16, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_32, 0, 2, 32, false, 0, true,
|
||||
_bfd_ns32k_reloc_imm, "NS32K_IMM_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_8_PCREL, 0, 0, 8, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_8",
|
||||
true, 0x000000ff, 0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_16_PCREL, 0, 1, 16, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_IMM_32_PCREL, 0, 2, 32, true, 0, false,
|
||||
_bfd_ns32k_reloc_imm, "PCREL_NS32K_IMM_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
|
||||
/* ns32k displacements */
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 0, 8, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 1, 16, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_16",
|
||||
true, 0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 2, 32, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_32",
|
||||
true, 0xffffffff, 0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 0, 8, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 1, 16, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 2, 32, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
/* ns32k displacements. */
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_8, 0, 0, 8, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_16, 0, 1, 16, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_16",
|
||||
true, 0x0000ffff, 0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_32, 0, 2, 32, false, 0, true,
|
||||
_bfd_ns32k_reloc_disp, "NS32K_DISP_32",
|
||||
true, 0xffffffff, 0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_8_PCREL, 0, 0, 8, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_8",
|
||||
true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_16_PCREL, 0, 1, 16, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_16",
|
||||
true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_NS32K_DISP_32_PCREL, 0, 2, 32, true, 0, false,
|
||||
_bfd_ns32k_reloc_disp, "PCREL_NS32K_DISP_32",
|
||||
true, 0xffffffff,0xffffffff, false),
|
||||
|
||||
/* Normal 2's complement */
|
||||
HOWTO (BFD_RELOC_8, 0, 0, 8, false, 0, complain_overflow_bitfield,0,
|
||||
"8", true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_16, 0, 1, 16, false, 0, complain_overflow_bitfield,0,
|
||||
"16", true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_32, 0, 2, 32, false, 0, complain_overflow_bitfield,0,
|
||||
"32", true, 0xffffffff,0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_8_PCREL, 0, 0, 8, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_8", true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_16_PCREL, 0, 1, 16, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_16", true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_32_PCREL, 0, 2, 32, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_32", true, 0xffffffff,0xffffffff, false),
|
||||
};
|
||||
/* Normal 2's complement. */
|
||||
HOWTO (BFD_RELOC_8, 0, 0, 8, false, 0, complain_overflow_bitfield,0,
|
||||
"8", true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_16, 0, 1, 16, false, 0, complain_overflow_bitfield,0,
|
||||
"16", true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_32, 0, 2, 32, false, 0, complain_overflow_bitfield,0,
|
||||
"32", true, 0xffffffff,0xffffffff, false),
|
||||
HOWTO (BFD_RELOC_8_PCREL, 0, 0, 8, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_8", true, 0x000000ff,0x000000ff, false),
|
||||
HOWTO (BFD_RELOC_16_PCREL, 0, 1, 16, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_16", true, 0x0000ffff,0x0000ffff, false),
|
||||
HOWTO (BFD_RELOC_32_PCREL, 0, 2, 32, true, 0, complain_overflow_signed, 0,
|
||||
"PCREL_32", true, 0xffffffff,0xffffffff, false),
|
||||
};
|
||||
|
||||
#define CTOR_TABLE_RELOC_HOWTO(BFD) (MY(howto_table) + 14)
|
||||
|
||||
@ -164,7 +166,8 @@ MY(reloc_howto) (abfd, rel, r_index, r_extern, r_pcrel)
|
||||
{
|
||||
unsigned int r_length;
|
||||
int r_ns32k_type;
|
||||
/* BFD_ASSERT(bfd_header_little_endian (abfd)); */
|
||||
|
||||
/* BFD_ASSERT(bfd_header_little_endian (abfd)); */
|
||||
*r_index = ((rel->r_index[2] << 16)
|
||||
| (rel->r_index[1] << 8)
|
||||
| rel->r_index[0] );
|
||||
@ -191,11 +194,13 @@ MY(put_reloc) (abfd, r_extern, r_index, value, howto, reloc)
|
||||
unsigned int r_length;
|
||||
int r_pcrel;
|
||||
int r_ns32k_type;
|
||||
|
||||
PUT_WORD (abfd, value, reloc->r_address);
|
||||
r_length = howto->size ; /* Size as a power of two */
|
||||
r_pcrel = (int) howto->pc_relative; /* Relative to PC? */
|
||||
r_length = howto->size ; /* Size as a power of two. */
|
||||
r_pcrel = (int) howto->pc_relative; /* Relative to PC? */
|
||||
r_ns32k_type = (howto - MY(howto_table) )/6;
|
||||
/* BFD_ASSERT (bfd_header_little_endian (abfd)); */
|
||||
|
||||
/* BFD_ASSERT (bfd_header_little_endian (abfd)); */
|
||||
reloc->r_index[2] = r_index >> 16;
|
||||
reloc->r_index[1] = r_index >> 8;
|
||||
reloc->r_index[0] = r_index;
|
||||
@ -233,6 +238,8 @@ MY(bfd_reloc_type_lookup) (abfd,code)
|
||||
case 32:
|
||||
code = BFD_RELOC_32;
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
switch (code)
|
||||
{
|
||||
@ -254,7 +261,8 @@ MY(bfd_reloc_type_lookup) (abfd,code)
|
||||
ENTRY(BFD_RELOC_8_PCREL, 15);
|
||||
ENTRY(BFD_RELOC_16_PCREL, 16);
|
||||
ENTRY(BFD_RELOC_32_PCREL, 17);
|
||||
default: return (reloc_howto_type *) NULL;
|
||||
default:
|
||||
return (reloc_howto_type *) NULL;
|
||||
}
|
||||
#undef ENTRY
|
||||
}
|
||||
@ -274,11 +282,10 @@ MY_swap_std_reloc_in (abfd, bytes, cache_ptr, symbols, symcount)
|
||||
|
||||
cache_ptr->address = bfd_h_get_32 (abfd, bytes->r_address);
|
||||
|
||||
/* now the fun stuff */
|
||||
|
||||
/* Now the fun stuff. */
|
||||
cache_ptr->howto = MY_reloc_howto(abfd, bytes, r_index, r_extern, r_pcrel);
|
||||
|
||||
MOVE_ADDRESS(0);
|
||||
MOVE_ADDRESS (0);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -295,7 +302,7 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
|
||||
r_addend = g->addend + (*(g->sym_ptr_ptr))->section->output_section->vma;
|
||||
|
||||
/* name was clobbered by aout_write_syms to be symbol index */
|
||||
/* Name was clobbered by aout_write_syms to be symbol index. */
|
||||
|
||||
/* If this relocation is relative to a symbol then set the
|
||||
r_index to the symbols index, and the r_extern bit.
|
||||
@ -303,7 +310,6 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
Absolute symbols can come in in two ways, either as an offset
|
||||
from the abs section, or as a symbol which has an abs value.
|
||||
Check for that here. */
|
||||
|
||||
if (bfd_is_com_section (output_section)
|
||||
|| output_section == &bfd_abs_section
|
||||
|| output_section == &bfd_und_section)
|
||||
@ -311,13 +317,13 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
if (bfd_abs_section.symbol == sym)
|
||||
{
|
||||
/* Whoops, looked like an abs symbol, but is really an offset
|
||||
from the abs section */
|
||||
from the abs section. */
|
||||
r_index = 0;
|
||||
r_extern = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Fill in symbol */
|
||||
/* Fill in symbol. */
|
||||
r_extern = 1;
|
||||
#undef KEEPIT
|
||||
#define KEEPIT udata.i
|
||||
@ -327,7 +333,7 @@ MY_swap_std_reloc_out (abfd, g, natptr)
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Just an ordinary section */
|
||||
/* Just an ordinary section. */
|
||||
r_extern = 0;
|
||||
r_index = output_section->target_index;
|
||||
}
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* BFD back-end for TMS320C30 a.out binaries.
|
||||
Copyright 1998, 1999, 2000 Free Software Foundation, Inc.
|
||||
Copyright 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
|
||||
Contributed by Steven Haworth (steve@pm.cse.rmit.edu.au)
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
@ -56,6 +56,12 @@ static bfd_reloc_status_type tic30_aout_final_link_relocate
|
||||
static const bfd_target *tic30_aout_object_p PARAMS ((bfd *));
|
||||
static boolean tic30_aout_write_object_contents PARAMS ((bfd *));
|
||||
static boolean tic30_aout_set_sizes PARAMS ((bfd *));
|
||||
static const bfd_target * tic30_aout_callback PARAMS ((bfd *));
|
||||
static boolean MY_bfd_copy_private_section_data PARAMS ((bfd *, asection *, bfd *, asection *));
|
||||
static boolean MY_bfd_final_link PARAMS ((bfd *, struct bfd_link_info *));
|
||||
reloc_howto_type * tic30_aout_reloc_type_lookup PARAMS ((bfd *, bfd_reloc_code_real_type));
|
||||
enum machine_type tic30_aout_machine_type PARAMS ((enum bfd_architecture, unsigned long, boolean *));
|
||||
boolean tic30_aout_set_arch_mach PARAMS ((bfd *, enum bfd_architecture, unsigned long));
|
||||
|
||||
#define MY_reloc_howto(BFD,REL,IN,EX,PC) tic30_aout_reloc_howto(BFD,REL,&IN,&EX,&PC)
|
||||
#define MY_final_link_relocate tic30_aout_final_link_relocate
|
||||
@ -130,26 +136,27 @@ static CONST struct aout_backend_data tic30_aout_backend_data =
|
||||
2) to get the 32-bit addresses in the format the TMS320C30 likes
|
||||
it. */
|
||||
reloc_howto_type tic30_aout_howto_table[] =
|
||||
{
|
||||
EMPTY_HOWTO (-1),
|
||||
HOWTO (1, 2, 1, 16, false, 0, 0, tic30_aout_fix_16,
|
||||
"16", false, 0x0000FFFF, 0x0000FFFF, false),
|
||||
HOWTO (2, 2, 2, 24, false, 0, complain_overflow_bitfield, NULL,
|
||||
"24", false, 0x00FFFFFF, 0x00FFFFFF, false),
|
||||
HOWTO (3, 18, 3, 24, false, 0, complain_overflow_bitfield, NULL,
|
||||
"LDP", false, 0x00FF0000, 0x000000FF, false),
|
||||
HOWTO (4, 2, 4, 32, false, 0, complain_overflow_bitfield, tic30_aout_fix_32,
|
||||
"32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
|
||||
HOWTO (5, 2, 1, 16, true, 0, complain_overflow_signed,
|
||||
tic30_aout_fix_pcrel_16, "PCREL", true, 0x0000FFFF, 0x0000FFFF, true),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1)
|
||||
};
|
||||
{
|
||||
EMPTY_HOWTO (-1),
|
||||
HOWTO (1, 2, 1, 16, false, 0, 0, tic30_aout_fix_16,
|
||||
"16", false, 0x0000FFFF, 0x0000FFFF, false),
|
||||
HOWTO (2, 2, 2, 24, false, 0, complain_overflow_bitfield, NULL,
|
||||
"24", false, 0x00FFFFFF, 0x00FFFFFF, false),
|
||||
HOWTO (3, 18, 3, 24, false, 0, complain_overflow_bitfield, NULL,
|
||||
"LDP", false, 0x00FF0000, 0x000000FF, false),
|
||||
HOWTO (4, 2, 4, 32, false, 0, complain_overflow_bitfield, tic30_aout_fix_32,
|
||||
"32", false, 0xFFFFFFFF, 0xFFFFFFFF, false),
|
||||
HOWTO (5, 2, 1, 16, true, 0, complain_overflow_signed,
|
||||
tic30_aout_fix_pcrel_16, "PCREL", true, 0x0000FFFF, 0x0000FFFF, true),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1),
|
||||
EMPTY_HOWTO (-1)
|
||||
};
|
||||
|
||||
extern reloc_howto_type *NAME (aout, reloc_type_lookup) ();
|
||||
extern reloc_howto_type *NAME (aout, reloc_type_lookup)
|
||||
PARAMS ((bfd *, bfd_reloc_code_real_type));
|
||||
|
||||
reloc_howto_type *
|
||||
tic30_aout_reloc_type_lookup (abfd, code)
|
||||
@ -317,10 +324,10 @@ tic30_aout_callback (abfd)
|
||||
unsigned int arch_align_power;
|
||||
unsigned long arch_align;
|
||||
|
||||
/* Calculate the file positions of the parts of a newly read aout header */
|
||||
/* Calculate the file positions of the parts of a newly read aout header. */
|
||||
obj_textsec (abfd)->_raw_size = N_TXTSIZE (*execp);
|
||||
|
||||
/* The virtual memory addresses of the sections */
|
||||
/* The virtual memory addresses of the sections. */
|
||||
obj_textsec (abfd)->vma = N_TXTADDR (*execp);
|
||||
obj_datasec (abfd)->vma = N_DATADDR (*execp);
|
||||
obj_bsssec (abfd)->vma = N_BSSADDR (*execp);
|
||||
@ -329,11 +336,11 @@ tic30_aout_callback (abfd)
|
||||
obj_datasec (abfd)->lma = obj_datasec (abfd)->vma;
|
||||
obj_bsssec (abfd)->lma = obj_bsssec (abfd)->vma;
|
||||
|
||||
/* The file offsets of the sections */
|
||||
/* The file offsets of the sections. */
|
||||
obj_textsec (abfd)->filepos = N_TXTOFF (*execp);
|
||||
obj_datasec (abfd)->filepos = N_DATOFF (*execp);
|
||||
|
||||
/* The file offsets of the relocation info */
|
||||
/* The file offsets of the relocation info. */
|
||||
obj_textsec (abfd)->rel_filepos = N_TRELOFF (*execp);
|
||||
obj_datasec (abfd)->rel_filepos = N_DRELOFF (*execp);
|
||||
|
||||
@ -429,7 +436,9 @@ tic30_aout_relocate_contents (howto, input_bfd, relocation, location)
|
||||
x = bfd_get_32 (input_bfd, location);
|
||||
break;
|
||||
}
|
||||
|
||||
overflow = false;
|
||||
|
||||
if (howto->complain_on_overflow != complain_overflow_dont)
|
||||
{
|
||||
bfd_vma check;
|
||||
@ -520,14 +529,14 @@ tic30_aout_relocate_contents (howto, input_bfd, relocation, location)
|
||||
return overflow ? bfd_reloc_overflow : bfd_reloc_ok;
|
||||
}
|
||||
|
||||
/* Finish up the reading of an a.out file header */
|
||||
/* Finish up the reading of an a.out file header. */
|
||||
|
||||
static const bfd_target *
|
||||
tic30_aout_object_p (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
struct external_exec exec_bytes; /* Raw exec header from file */
|
||||
struct internal_exec exec; /* Cleaned-up exec header */
|
||||
struct external_exec exec_bytes; /* Raw exec header from file. */
|
||||
struct internal_exec exec; /* Cleaned-up exec header. */
|
||||
const bfd_target *target;
|
||||
|
||||
if (bfd_read ((PTR) & exec_bytes, 1, EXEC_BYTES_SIZE, abfd)
|
||||
@ -562,10 +571,10 @@ tic30_aout_object_p (abfd)
|
||||
|
||||
#ifdef ENTRY_CAN_BE_ZERO
|
||||
/* The NEWSOS3 entry-point is/was 0, which (amongst other lossage)
|
||||
* means that it isn't obvious if EXEC_P should be set.
|
||||
* All of the following must be true for an executable:
|
||||
* There must be no relocations, the bfd can be neither an
|
||||
* archive nor an archive element, and the file must be executable. */
|
||||
means that it isn't obvious if EXEC_P should be set.
|
||||
All of the following must be true for an executable:
|
||||
There must be no relocations, the bfd can be neither an
|
||||
archive nor an archive element, and the file must be executable. */
|
||||
|
||||
if (exec.a_trsize + exec.a_drsize == 0
|
||||
&& bfd_get_format (abfd) == bfd_object && abfd->my_archive == NULL)
|
||||
@ -614,8 +623,9 @@ tic30_aout_write_object_contents (abfd)
|
||||
obj_reloc_entry_size (abfd) = RELOC_STD_SIZE;
|
||||
|
||||
{
|
||||
bfd_size_type text_size; /* dummy vars */
|
||||
bfd_size_type text_size; /* Dummy vars. */
|
||||
file_ptr text_end;
|
||||
|
||||
if (adata (abfd).magic == undecided_magic)
|
||||
NAME (aout, adjust_sizes_and_vmas) (abfd, &text_size, &text_end);
|
||||
|
||||
@ -633,8 +643,8 @@ tic30_aout_write_object_contents (abfd)
|
||||
if (bfd_write ((PTR) & exec_bytes, 1, adata (abfd).exec_bytes_size, abfd) != adata (abfd).exec_bytes_size)
|
||||
return false;
|
||||
}
|
||||
/* Now write out reloc info, followed by syms and strings */
|
||||
|
||||
/* Now write out reloc info, followed by syms and strings. */
|
||||
if (bfd_get_outsymbols (abfd) != (asymbol **) NULL
|
||||
&& bfd_get_symcount (abfd) != 0)
|
||||
{
|
||||
@ -745,10 +755,10 @@ MY_bfd_final_link (abfd, info)
|
||||
{
|
||||
obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
|
||||
}
|
||||
|
||||
if (obj_datasec (abfd)->vma < vma)
|
||||
{
|
||||
obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
|
||||
}
|
||||
obj_datasec (abfd)->vma = BFD_ALIGN (vma, 4);
|
||||
|
||||
obj_datasec (abfd)->user_set_vma = 1;
|
||||
vma = obj_datasec (abfd)->vma;
|
||||
obj_datasec (abfd)->filepos = vma + adata (abfd).exec_bytes_size;
|
||||
|
@ -139,6 +139,7 @@ static boolean translate_to_native_sym_flags
|
||||
static void adjust_o_magic PARAMS ((bfd *, struct internal_exec *));
|
||||
static void adjust_z_magic PARAMS ((bfd *, struct internal_exec *));
|
||||
static void adjust_n_magic PARAMS ((bfd *, struct internal_exec *));
|
||||
reloc_howto_type * NAME(aout,reloc_type_lookup) PARAMS ((bfd *, bfd_reloc_code_real_type));
|
||||
|
||||
/*
|
||||
SUBSECTION
|
||||
@ -2553,7 +2554,7 @@ NAME(aout,get_symtab_upper_bound) (abfd)
|
||||
return (bfd_get_symcount (abfd)+1) * (sizeof (aout_symbol_type *));
|
||||
}
|
||||
|
||||
alent *
|
||||
alent *
|
||||
NAME(aout,get_lineno) (ignore_abfd, ignore_symbol)
|
||||
bfd *ignore_abfd ATTRIBUTE_UNUSED;
|
||||
asymbol *ignore_symbol ATTRIBUTE_UNUSED;
|
||||
|
247
bfd/peXXigen.c
247
bfd/peXXigen.c
@ -95,8 +95,9 @@ static void add_data_entry
|
||||
PARAMS ((bfd *, struct internal_extra_pe_aouthdr *, int, char *, bfd_vma));
|
||||
static boolean pe_print_pdata PARAMS ((bfd *, PTR));
|
||||
static boolean pe_print_reloc PARAMS ((bfd *, PTR));
|
||||
|
||||
/**********************************************************************/
|
||||
static boolean pe_print_idata PARAMS ((bfd *, PTR));
|
||||
static boolean pe_print_edata PARAMS ((bfd *, PTR));
|
||||
|
||||
|
||||
void
|
||||
_bfd_XXi_swap_sym_in (abfd, ext1, in1)
|
||||
@ -114,20 +115,16 @@ _bfd_XXi_swap_sym_in (abfd, ext1, in1)
|
||||
bfd_h_get_32 (abfd, (bfd_byte *) ext->e.e.e_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (in->_n._n_name, ext->e.e_name, SYMNMLEN);
|
||||
}
|
||||
memcpy (in->_n._n_name, ext->e.e_name, SYMNMLEN);
|
||||
|
||||
in->n_value = bfd_h_get_32 (abfd, (bfd_byte *) ext->e_value);
|
||||
in->n_scnum = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_scnum);
|
||||
|
||||
if (sizeof (ext->e_type) == 2)
|
||||
{
|
||||
in->n_type = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_type);
|
||||
}
|
||||
in->n_type = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_type);
|
||||
else
|
||||
{
|
||||
in->n_type = bfd_h_get_32 (abfd, (bfd_byte *) ext->e_type);
|
||||
}
|
||||
in->n_type = bfd_h_get_32 (abfd, (bfd_byte *) ext->e_type);
|
||||
|
||||
in->n_sclass = bfd_h_get_8 (abfd, ext->e_sclass);
|
||||
in->n_numaux = bfd_h_get_8 (abfd, ext->e_numaux);
|
||||
|
||||
@ -166,6 +163,7 @@ _bfd_XXi_swap_sym_in (abfd, ext1, in1)
|
||||
if (in->n_scnum == 0)
|
||||
{
|
||||
asection *sec;
|
||||
|
||||
for (sec = abfd->sections; sec; sec = sec->next)
|
||||
{
|
||||
if (strcmp (sec->name, in->n_name) == 0)
|
||||
@ -175,11 +173,13 @@ _bfd_XXi_swap_sym_in (abfd, ext1, in1)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (in->n_scnum == 0)
|
||||
{
|
||||
int unused_section_number = 0;
|
||||
asection *sec;
|
||||
char *name;
|
||||
|
||||
for (sec = abfd->sections; sec; sec = sec->next)
|
||||
if (unused_section_number <= sec->target_index)
|
||||
unused_section_number = sec->target_index + 1;
|
||||
@ -229,26 +229,23 @@ _bfd_XXi_swap_sym_out (abfd, inp, extp)
|
||||
{
|
||||
struct internal_syment *in = (struct internal_syment *) inp;
|
||||
SYMENT *ext = (SYMENT *) extp;
|
||||
|
||||
if (in->_n._n_name[0] == 0)
|
||||
{
|
||||
bfd_h_put_32 (abfd, 0, (bfd_byte *) ext->e.e.e_zeroes);
|
||||
bfd_h_put_32 (abfd, in->_n._n_n._n_offset, (bfd_byte *) ext->e.e.e_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (ext->e.e_name, in->_n._n_name, SYMNMLEN);
|
||||
}
|
||||
memcpy (ext->e.e_name, in->_n._n_name, SYMNMLEN);
|
||||
|
||||
bfd_h_put_32 (abfd, in->n_value, (bfd_byte *) ext->e_value);
|
||||
bfd_h_put_16 (abfd, in->n_scnum, (bfd_byte *) ext->e_scnum);
|
||||
|
||||
if (sizeof (ext->e_type) == 2)
|
||||
{
|
||||
bfd_h_put_16 (abfd, in->n_type, (bfd_byte *) ext->e_type);
|
||||
}
|
||||
bfd_h_put_16 (abfd, in->n_type, (bfd_byte *) ext->e_type);
|
||||
else
|
||||
{
|
||||
bfd_h_put_32 (abfd, in->n_type, (bfd_byte *) ext->e_type);
|
||||
}
|
||||
bfd_h_put_32 (abfd, in->n_type, (bfd_byte *) ext->e_type);
|
||||
|
||||
bfd_h_put_8 (abfd, in->n_sclass, ext->e_sclass);
|
||||
bfd_h_put_8 (abfd, in->n_numaux, ext->e_numaux);
|
||||
|
||||
@ -278,9 +275,7 @@ _bfd_XXi_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
|
||||
bfd_h_get_32 (abfd, (bfd_byte *) ext->x_file.x_n.x_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
|
||||
}
|
||||
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
|
||||
return;
|
||||
|
||||
case C_STAT:
|
||||
@ -359,9 +354,8 @@ _bfd_XXi_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
|
||||
(bfd_byte *) ext->x_file.x_n.x_offset);
|
||||
}
|
||||
else
|
||||
{
|
||||
memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
|
||||
}
|
||||
memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
|
||||
|
||||
return AUXESZ;
|
||||
|
||||
case C_STAT:
|
||||
@ -499,6 +493,7 @@ _bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
||||
|
||||
{
|
||||
int idx;
|
||||
|
||||
for (idx = 0; idx < 16; idx++)
|
||||
{
|
||||
/* If data directory is empty, rva also should be 0. */
|
||||
@ -507,10 +502,8 @@ _bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
||||
a->DataDirectory[idx].Size = size;
|
||||
|
||||
if (size)
|
||||
{
|
||||
a->DataDirectory[idx].VirtualAddress =
|
||||
bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][0]);
|
||||
}
|
||||
a->DataDirectory[idx].VirtualAddress =
|
||||
bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][0]);
|
||||
else
|
||||
a->DataDirectory[idx].VirtualAddress = 0;
|
||||
}
|
||||
@ -523,6 +516,7 @@ _bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
||||
aouthdr_int->entry &= 0xffffffff;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (aouthdr_int->tsize)
|
||||
{
|
||||
aouthdr_int->text_start += a->ImageBase;
|
||||
@ -530,6 +524,7 @@ _bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
||||
aouthdr_int->text_start &= 0xffffffff;
|
||||
#endif
|
||||
}
|
||||
|
||||
#ifndef COFF_WITH_pep
|
||||
/* PE32+ does not have data_start member! */
|
||||
if (aouthdr_int->dsize)
|
||||
@ -547,7 +542,6 @@ _bfd_XXi_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
||||
thunk_size = a->DataDirectory[12].Size;
|
||||
import_table_size = a->DataDirectory[1].Size;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
/* A support function for below. */
|
||||
@ -562,12 +556,12 @@ add_data_entry (abfd, aout, idx, name, base)
|
||||
{
|
||||
asection *sec = bfd_get_section_by_name (abfd, name);
|
||||
|
||||
/* add import directory information if it exists */
|
||||
/* Add import directory information if it exists. */
|
||||
if ((sec != NULL)
|
||||
&& (coff_section_data (abfd, sec) != NULL)
|
||||
&& (pei_section_data (abfd, sec) != NULL))
|
||||
{
|
||||
/* If data directory is empty, rva also should be 0 */
|
||||
/* If data directory is empty, rva also should be 0. */
|
||||
int size = pei_section_data (abfd, sec)->virt_size;
|
||||
aout->DataDirectory[idx].Size = size;
|
||||
|
||||
@ -614,6 +608,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
|
||||
aouthdr_in->text_start &= 0xffffffff;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (aouthdr_in->dsize)
|
||||
{
|
||||
aouthdr_in->data_start -= ib;
|
||||
@ -621,6 +616,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
|
||||
aouthdr_in->data_start &= 0xffffffff;
|
||||
#endif
|
||||
}
|
||||
|
||||
if (aouthdr_in->entry)
|
||||
{
|
||||
aouthdr_in->entry -= ib;
|
||||
@ -758,6 +754,7 @@ _bfd_XXi_swap_aouthdr_out (abfd, in, out)
|
||||
(bfd_byte *) aouthdr_out->NumberOfRvaAndSizes);
|
||||
{
|
||||
int idx;
|
||||
|
||||
for (idx = 0; idx < 16; idx++)
|
||||
{
|
||||
bfd_h_put_32 (abfd, extra->DataDirectory[idx].VirtualAddress,
|
||||
@ -842,9 +839,9 @@ _bfd_XXi_only_swap_filehdr_out (abfd, in, out)
|
||||
bfd_h_put_16 (abfd, filehdr_in->f_opthdr, (bfd_byte *) filehdr_out->f_opthdr);
|
||||
bfd_h_put_16 (abfd, filehdr_in->f_flags, (bfd_byte *) filehdr_out->f_flags);
|
||||
|
||||
/* put in extra dos header stuff. This data remains essentially
|
||||
/* Put in extra dos header stuff. This data remains essentially
|
||||
constant, it just has to be tacked on to the beginning of all exes
|
||||
for NT */
|
||||
for NT. */
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_magic, (bfd_byte *) filehdr_out->e_magic);
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_cblp, (bfd_byte *) filehdr_out->e_cblp);
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_cp, (bfd_byte *) filehdr_out->e_cp);
|
||||
@ -862,29 +859,24 @@ _bfd_XXi_only_swap_filehdr_out (abfd, in, out)
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_cs, (bfd_byte *) filehdr_out->e_cs);
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_lfarlc, (bfd_byte *) filehdr_out->e_lfarlc);
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_ovno, (bfd_byte *) filehdr_out->e_ovno);
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < 4; idx++)
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res[idx],
|
||||
(bfd_byte *) filehdr_out->e_res[idx]);
|
||||
}
|
||||
|
||||
for (idx = 0; idx < 4; idx++)
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res[idx],
|
||||
(bfd_byte *) filehdr_out->e_res[idx]);
|
||||
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_oemid, (bfd_byte *) filehdr_out->e_oemid);
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_oeminfo,
|
||||
(bfd_byte *) filehdr_out->e_oeminfo);
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < 10; idx++)
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res2[idx],
|
||||
(bfd_byte *) filehdr_out->e_res2[idx]);
|
||||
}
|
||||
|
||||
for (idx = 0; idx < 10; idx++)
|
||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res2[idx],
|
||||
(bfd_byte *) filehdr_out->e_res2[idx]);
|
||||
|
||||
bfd_h_put_32 (abfd, filehdr_in->pe.e_lfanew, (bfd_byte *) filehdr_out->e_lfanew);
|
||||
|
||||
{
|
||||
int idx;
|
||||
for (idx = 0; idx < 16; idx++)
|
||||
bfd_h_put_32 (abfd, filehdr_in->pe.dos_message[idx],
|
||||
(bfd_byte *) filehdr_out->dos_message[idx]);
|
||||
}
|
||||
for (idx = 0; idx < 16; idx++)
|
||||
bfd_h_put_32 (abfd, filehdr_in->pe.dos_message[idx],
|
||||
(bfd_byte *) filehdr_out->dos_message[idx]);
|
||||
|
||||
/* Also put in the NT signature. */
|
||||
bfd_h_put_32 (abfd, filehdr_in->pe.nt_signature,
|
||||
@ -937,7 +929,6 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
|
||||
/* NT wants the size data to be rounded up to the next
|
||||
NT_FILE_ALIGNMENT, but zero if it has no content (as in .bss,
|
||||
sometimes). */
|
||||
|
||||
if ((scnhdr_int->s_flags & IMAGE_SCN_CNT_UNINITIALIZED_DATA) != 0)
|
||||
{
|
||||
ps = scnhdr_int->s_size;
|
||||
@ -978,6 +969,7 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
|
||||
|
||||
{
|
||||
int flags = scnhdr_int->s_flags;
|
||||
|
||||
bfd_h_put_32 (abfd, flags, (bfd_byte *) scnhdr_ext->s_flags);
|
||||
}
|
||||
|
||||
@ -1013,12 +1005,13 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
|
||||
bfd_h_put_16 (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nlnno);
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
if (scnhdr_int->s_nreloc <= 0xffff)
|
||||
bfd_h_put_16 (abfd, scnhdr_int->s_nreloc,
|
||||
(bfd_byte *) scnhdr_ext->s_nreloc);
|
||||
else
|
||||
{
|
||||
/* PE can deal with large #s of relocs, but not here */
|
||||
/* PE can deal with large #s of relocs, but not here. */
|
||||
bfd_h_put_16 (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc);
|
||||
scnhdr_int->s_flags |= IMAGE_SCN_LNK_NRELOC_OVFL;
|
||||
bfd_h_put_32 (abfd, scnhdr_int->s_flags,
|
||||
@ -1036,26 +1029,26 @@ _bfd_XXi_swap_scnhdr_out (abfd, in, out)
|
||||
return ret;
|
||||
}
|
||||
|
||||
static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] = {
|
||||
N_("Export Directory [.edata (or where ever we found it)]"),
|
||||
N_("Import Directory [parts of .idata]"),
|
||||
N_("Resource Directory [.rsrc]"),
|
||||
N_("Exception Directory [.pdata]"),
|
||||
N_("Security Directory"),
|
||||
N_("Base Relocation Directory [.reloc]"),
|
||||
N_("Debug Directory"),
|
||||
N_("Description Directory"),
|
||||
N_("Special Directory"),
|
||||
N_("Thread Storage Directory [.tls]"),
|
||||
N_("Load Configuration Directory"),
|
||||
N_("Bound Import Directory"),
|
||||
N_("Import Address Table Directory"),
|
||||
N_("Delay Import Directory"),
|
||||
N_("Reserved"),
|
||||
N_("Reserved")
|
||||
};
|
||||
static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] =
|
||||
{
|
||||
N_("Export Directory [.edata (or where ever we found it)]"),
|
||||
N_("Import Directory [parts of .idata]"),
|
||||
N_("Resource Directory [.rsrc]"),
|
||||
N_("Exception Directory [.pdata]"),
|
||||
N_("Security Directory"),
|
||||
N_("Base Relocation Directory [.reloc]"),
|
||||
N_("Debug Directory"),
|
||||
N_("Description Directory"),
|
||||
N_("Special Directory"),
|
||||
N_("Thread Storage Directory [.tls]"),
|
||||
N_("Load Configuration Directory"),
|
||||
N_("Bound Import Directory"),
|
||||
N_("Import Address Table Directory"),
|
||||
N_("Delay Import Directory"),
|
||||
N_("Reserved"),
|
||||
N_("Reserved")
|
||||
};
|
||||
|
||||
/**********************************************************************/
|
||||
#ifdef POWERPC_LE_PE
|
||||
/* The code for the PPC really falls in the "architecture dependent"
|
||||
category. However, it's not clear that anyone will ever care, so
|
||||
@ -1064,7 +1057,6 @@ static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] = {
|
||||
PPC- specific code. */
|
||||
#endif
|
||||
|
||||
/**********************************************************************/
|
||||
static boolean
|
||||
pe_print_idata (abfd, vfile)
|
||||
bfd *abfd;
|
||||
@ -1205,13 +1197,11 @@ pe_print_idata (abfd, vfile)
|
||||
|
||||
/* print (i + extra->DataDirectory[1].VirtualAddress) */
|
||||
fprintf (file, " %08lx\t", (unsigned long) (i + adj + dataoff));
|
||||
|
||||
#if 0
|
||||
if (i + 20 > datasize)
|
||||
{
|
||||
/* Check stuff. */
|
||||
;
|
||||
}
|
||||
|
||||
/* Check stuff. */
|
||||
;
|
||||
#endif
|
||||
hint_addr = bfd_get_32 (abfd, data + i + dataoff);
|
||||
time_stamp = bfd_get_32 (abfd, data + i + 4 + dataoff);
|
||||
forward_chain = bfd_get_32 (abfd, data + i + 8 + dataoff);
|
||||
@ -1299,11 +1289,10 @@ pe_print_idata (abfd, vfile)
|
||||
fprintf (file, _("\tvma: Hint/Ord Member-Name\n"));
|
||||
differ = 1;
|
||||
}
|
||||
|
||||
if (iat_member == 0)
|
||||
{
|
||||
fprintf (file,
|
||||
_("\t>>> Ran out of IAT members!\n"));
|
||||
}
|
||||
fprintf (file,
|
||||
_("\t>>> Ran out of IAT members!\n"));
|
||||
else
|
||||
{
|
||||
ordinal = bfd_get_16 (abfd, data + iat_member - adj);
|
||||
@ -1318,15 +1307,13 @@ pe_print_idata (abfd, vfile)
|
||||
if (hint_addr != 0 && hint_member == 0)
|
||||
break;
|
||||
}
|
||||
|
||||
if (differ == 0)
|
||||
{
|
||||
fprintf (file,
|
||||
_("\tThe Import Address Table is identical\n"));
|
||||
}
|
||||
fprintf (file,
|
||||
_("\tThe Import Address Table is identical\n"));
|
||||
}
|
||||
|
||||
fprintf (file, "\n");
|
||||
|
||||
}
|
||||
|
||||
free (data);
|
||||
@ -1342,24 +1329,23 @@ pe_print_edata (abfd, vfile)
|
||||
FILE *file = (FILE *) vfile;
|
||||
bfd_byte *data;
|
||||
asection *section;
|
||||
|
||||
bfd_size_type datasize = 0;
|
||||
bfd_size_type dataoff;
|
||||
bfd_size_type i;
|
||||
|
||||
bfd_signed_vma adj;
|
||||
struct EDT_type {
|
||||
long export_flags; /* reserved - should be zero */
|
||||
struct EDT_type
|
||||
{
|
||||
long export_flags; /* reserved - should be zero */
|
||||
long time_stamp;
|
||||
short major_ver;
|
||||
short minor_ver;
|
||||
bfd_vma name; /* rva - relative to image base */
|
||||
long base; /* ordinal base */
|
||||
unsigned long num_functions; /* Number in the export address table */
|
||||
unsigned long num_names; /* Number in the name pointer table */
|
||||
bfd_vma eat_addr; /* rva to the export address table */
|
||||
bfd_vma npt_addr; /* rva to the Export Name Pointer Table */
|
||||
bfd_vma ot_addr; /* rva to the Ordinal Table */
|
||||
bfd_vma name; /* rva - relative to image base */
|
||||
long base; /* ordinal base */
|
||||
unsigned long num_functions;/* Number in the export address table */
|
||||
unsigned long num_names; /* Number in the name pointer table */
|
||||
bfd_vma eat_addr; /* rva to the export address table */
|
||||
bfd_vma npt_addr; /* rva to the Export Name Pointer Table */
|
||||
bfd_vma ot_addr; /* rva to the Ordinal Table */
|
||||
} edt;
|
||||
|
||||
pe_data_type *pe = pe_data (abfd);
|
||||
@ -1384,9 +1370,11 @@ pe_print_edata (abfd, vfile)
|
||||
else
|
||||
{
|
||||
addr += extra->ImageBase;
|
||||
|
||||
for (section = abfd->sections; section != NULL; section = section->next)
|
||||
{
|
||||
datasize = bfd_section_size (abfd, section);
|
||||
|
||||
if (addr >= section->vma && addr < section->vma + datasize)
|
||||
break;
|
||||
}
|
||||
@ -1428,7 +1416,7 @@ pe_print_edata (abfd, vfile)
|
||||
|
||||
adj = section->vma - extra->ImageBase + dataoff;
|
||||
|
||||
/* Dump the EDT first first */
|
||||
/* Dump the EDT first. */
|
||||
fprintf (file,
|
||||
_("\nThe Export Tables (interpreted %s section contents)\n\n"),
|
||||
section->name);
|
||||
@ -1482,7 +1470,8 @@ pe_print_edata (abfd, vfile)
|
||||
/* The next table to find is the Export Address Table. It's basically
|
||||
a list of pointers that either locate a function in this dll, or
|
||||
forward the call to another dll. Something like:
|
||||
typedef union {
|
||||
typedef union
|
||||
{
|
||||
long export_rva;
|
||||
long forwarder_rva;
|
||||
} export_address_table_entry;
|
||||
@ -1631,10 +1620,8 @@ pe_print_pdata (abfd, vfile)
|
||||
|
||||
if (begin_addr == 0 && end_addr == 0 && eh_handler == 0
|
||||
&& eh_data == 0 && prolog_end_addr == 0)
|
||||
{
|
||||
/* We are probably into the padding of the section now. */
|
||||
break;
|
||||
}
|
||||
/* We are probably into the padding of the section now. */
|
||||
break;
|
||||
|
||||
em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
|
||||
eh_handler &= ~(bfd_vma) 0x3;
|
||||
@ -1687,21 +1674,22 @@ pe_print_pdata (abfd, vfile)
|
||||
}
|
||||
|
||||
#define IMAGE_REL_BASED_HIGHADJ 4
|
||||
static const char * const tbl[] = {
|
||||
"ABSOLUTE",
|
||||
"HIGH",
|
||||
"LOW",
|
||||
"HIGHLOW",
|
||||
"HIGHADJ",
|
||||
"MIPS_JMPADDR",
|
||||
"SECTION",
|
||||
"REL32",
|
||||
"RESERVED1",
|
||||
"MIPS_JMPADDR16",
|
||||
"DIR64",
|
||||
"HIGH3ADJ"
|
||||
"UNKNOWN", /* MUST be last */
|
||||
};
|
||||
static const char * const tbl[] =
|
||||
{
|
||||
"ABSOLUTE",
|
||||
"HIGH",
|
||||
"LOW",
|
||||
"HIGHLOW",
|
||||
"HIGHADJ",
|
||||
"MIPS_JMPADDR",
|
||||
"SECTION",
|
||||
"REL32",
|
||||
"RESERVED1",
|
||||
"MIPS_JMPADDR16",
|
||||
"DIR64",
|
||||
"HIGH3ADJ"
|
||||
"UNKNOWN", /* MUST be last */
|
||||
};
|
||||
|
||||
static boolean
|
||||
pe_print_reloc (abfd, vfile)
|
||||
@ -1745,16 +1733,13 @@ pe_print_reloc (abfd, vfile)
|
||||
long number, size;
|
||||
|
||||
/* The .reloc section is a sequence of blocks, with a header consisting
|
||||
of two 32 bit quantities, followed by a number of 16 bit entries */
|
||||
|
||||
of two 32 bit quantities, followed by a number of 16 bit entries. */
|
||||
virtual_address = bfd_get_32 (abfd, data+i);
|
||||
size = bfd_get_32 (abfd, data+i+4);
|
||||
number = (size - 8) / 2;
|
||||
|
||||
if (size == 0)
|
||||
{
|
||||
break;
|
||||
}
|
||||
break;
|
||||
|
||||
fprintf (file,
|
||||
_("\nVirtual Address: %08lx Chunk size %ld (0x%lx) Number of fixups %ld\n"),
|
||||
@ -1785,6 +1770,7 @@ pe_print_reloc (abfd, vfile)
|
||||
|
||||
fprintf (file, "\n");
|
||||
}
|
||||
|
||||
i += size;
|
||||
}
|
||||
|
||||
@ -1842,6 +1828,7 @@ _bfd_XX_print_private_bfd_data_common (abfd, vfile)
|
||||
fprintf (file, "SizeOfImage\t\t%08lx\n", i->SizeOfImage);
|
||||
fprintf (file, "SizeOfHeaders\t\t%08lx\n", i->SizeOfHeaders);
|
||||
fprintf (file, "CheckSum\t\t%08lx\n", i->CheckSum);
|
||||
|
||||
switch (i->Subsystem)
|
||||
{
|
||||
case IMAGE_SUBSYSTEM_UNKNOWN:
|
||||
@ -1872,6 +1859,7 @@ _bfd_XX_print_private_bfd_data_common (abfd, vfile)
|
||||
subsystem_name = "EFI runtime driver";
|
||||
break;
|
||||
}
|
||||
|
||||
fprintf (file, "Subsystem\t\t%08x", i->Subsystem);
|
||||
if (subsystem_name)
|
||||
fprintf (file, "\t(%s)", subsystem_name);
|
||||
@ -1919,7 +1907,7 @@ _bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd)
|
||||
pe_data (obfd)->pe_opthdr = pe_data (ibfd)->pe_opthdr;
|
||||
pe_data (obfd)->dll = pe_data (ibfd)->dll;
|
||||
|
||||
/* for strip: if we removed .reloc, we'll make a real mess of things
|
||||
/* For strip: if we removed .reloc, we'll make a real mess of things
|
||||
if we don't remove this entry as well. */
|
||||
if (! pe_data (obfd)->has_reloc_section)
|
||||
{
|
||||
@ -1930,6 +1918,7 @@ _bfd_XX_bfd_copy_private_bfd_data_common (ibfd, obfd)
|
||||
}
|
||||
|
||||
/* Copy private section data. */
|
||||
|
||||
boolean
|
||||
_bfd_XX_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
|
||||
bfd *ibfd;
|
||||
@ -1951,6 +1940,7 @@ _bfd_XX_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
|
||||
if (osec->used_by_bfd == NULL)
|
||||
return false;
|
||||
}
|
||||
|
||||
if (pei_section_data (obfd, osec) == NULL)
|
||||
{
|
||||
coff_section_data (obfd, osec)->tdata =
|
||||
@ -1958,6 +1948,7 @@ _bfd_XX_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
|
||||
if (coff_section_data (obfd, osec)->tdata == NULL)
|
||||
return false;
|
||||
}
|
||||
|
||||
pei_section_data (obfd, osec)->virt_size =
|
||||
pei_section_data (ibfd, isec)->virt_size;
|
||||
pei_section_data (obfd, osec)->pe_flags =
|
||||
|
Loading…
Reference in New Issue
Block a user