mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-01 14:31:54 +00:00
2000-12-14 Kazu Hirata <kazu@hxi.com>
* peigen.c: Fix formatting. * som.c: Likewise. * som.h: Likewise.
This commit is contained in:
parent
b8f080d6a8
commit
6fa957a9b9
@ -1,3 +1,9 @@
|
|||||||
|
2000-12-14 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
|
* peigen.c: Fix formatting.
|
||||||
|
* som.c: Likewise.
|
||||||
|
* som.h: Likewise.
|
||||||
|
|
||||||
2000-12-13 Kazu Hirata <kazu@hxi.com>
|
2000-12-13 Kazu Hirata <kazu@hxi.com>
|
||||||
|
|
||||||
* peigen.c: Fix formatting.
|
* peigen.c: Fix formatting.
|
||||||
|
566
bfd/peigen.c
566
bfd/peigen.c
@ -18,12 +18,10 @@ You should have received a copy of the GNU General Public License
|
|||||||
along with this program; if not, write to the Free Software
|
along with this program; if not, write to the Free Software
|
||||||
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
/*
|
/* Most of this hacked by Steve Chamberlain <sac@cygnus.com>.
|
||||||
Most of this hacked by Steve Chamberlain,
|
|
||||||
sac@cygnus.com
|
|
||||||
|
|
||||||
PE/PEI rearrangement (and code added): Donn Terry
|
PE/PEI rearrangement (and code added): Donn Terry
|
||||||
Softway Systems, Inc.
|
Softway Systems, Inc.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* Hey look, some documentation [and in a place you expect to find it]!
|
/* Hey look, some documentation [and in a place you expect to find it]!
|
||||||
@ -91,30 +89,35 @@ _bfd_pei_swap_sym_in (abfd, ext1, in1)
|
|||||||
PTR ext1;
|
PTR ext1;
|
||||||
PTR in1;
|
PTR in1;
|
||||||
{
|
{
|
||||||
SYMENT *ext = (SYMENT *)ext1;
|
SYMENT *ext = (SYMENT *) ext1;
|
||||||
struct internal_syment *in = (struct internal_syment *)in1;
|
struct internal_syment *in = (struct internal_syment *) in1;
|
||||||
|
|
||||||
if( ext->e.e_name[0] == 0) {
|
if (ext->e.e_name[0] == 0)
|
||||||
in->_n._n_n._n_zeroes = 0;
|
{
|
||||||
in->_n._n_n._n_offset = bfd_h_get_32 (abfd, (bfd_byte *) ext->e.e.e_offset);
|
in->_n._n_n._n_zeroes = 0;
|
||||||
}
|
in->_n._n_n._n_offset =
|
||||||
else {
|
bfd_h_get_32 (abfd, (bfd_byte *) ext->e.e.e_offset);
|
||||||
memcpy(in->_n._n_name, ext->e.e_name, SYMNMLEN);
|
}
|
||||||
}
|
else
|
||||||
|
{
|
||||||
|
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_value = bfd_h_get_32 (abfd, (bfd_byte *) ext->e_value);
|
||||||
in->n_scnum = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_scnum);
|
in->n_scnum = bfd_h_get_16 (abfd, (bfd_byte *) ext->e_scnum);
|
||||||
if (sizeof (ext->e_type) == 2){
|
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);
|
else
|
||||||
}
|
{
|
||||||
|
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_sclass = bfd_h_get_8 (abfd, ext->e_sclass);
|
||||||
in->n_numaux = bfd_h_get_8 (abfd, ext->e_numaux);
|
in->n_numaux = bfd_h_get_8 (abfd, ext->e_numaux);
|
||||||
|
|
||||||
#ifndef STRICT_PE_FORMAT
|
#ifndef STRICT_PE_FORMAT
|
||||||
/* This is for Gnu-created DLLs */
|
/* This is for Gnu-created DLLs. */
|
||||||
|
|
||||||
/* The section symbols for the .idata$ sections have class 0x68
|
/* The section symbols for the .idata$ sections have class 0x68
|
||||||
(C_SECTION), which MS documentation indicates is a section
|
(C_SECTION), which MS documentation indicates is a section
|
||||||
@ -136,17 +139,19 @@ _bfd_pei_swap_sym_in (abfd, ext1, in1)
|
|||||||
/* I have tried setting the class to 3 and using the following
|
/* I have tried setting the class to 3 and using the following
|
||||||
to set the section number. This will put the address of the
|
to set the section number. This will put the address of the
|
||||||
pointer to the string kernel32.dll at addresses 0 and 0x10
|
pointer to the string kernel32.dll at addresses 0 and 0x10
|
||||||
off start of idata section which is not correct */
|
off start of idata section which is not correct. */
|
||||||
/* if (strcmp (in->_n._n_name, ".idata$4") == 0) */
|
#if 0
|
||||||
/* in->n_scnum = 3; */
|
if (strcmp (in->_n._n_name, ".idata$4") == 0)
|
||||||
/* else */
|
in->n_scnum = 3;
|
||||||
/* in->n_scnum = 2; */
|
else
|
||||||
|
in->n_scnum = 2;
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
/* Create synthetic empty sections as needed. DJ */
|
/* Create synthetic empty sections as needed. DJ */
|
||||||
if (in->n_scnum == 0)
|
if (in->n_scnum == 0)
|
||||||
{
|
{
|
||||||
asection *sec;
|
asection *sec;
|
||||||
for (sec=abfd->sections; sec; sec=sec->next)
|
for (sec = abfd->sections; sec; sec = sec->next)
|
||||||
{
|
{
|
||||||
if (strcmp (sec->name, in->n_name) == 0)
|
if (strcmp (sec->name, in->n_name) == 0)
|
||||||
{
|
{
|
||||||
@ -160,9 +165,9 @@ _bfd_pei_swap_sym_in (abfd, ext1, in1)
|
|||||||
int unused_section_number = 0;
|
int unused_section_number = 0;
|
||||||
asection *sec;
|
asection *sec;
|
||||||
char *name;
|
char *name;
|
||||||
for (sec=abfd->sections; sec; sec=sec->next)
|
for (sec = abfd->sections; sec; sec = sec->next)
|
||||||
if (unused_section_number <= sec->target_index)
|
if (unused_section_number <= sec->target_index)
|
||||||
unused_section_number = sec->target_index+1;
|
unused_section_number = sec->target_index + 1;
|
||||||
|
|
||||||
name = bfd_alloc (abfd, strlen (in->n_name) + 10);
|
name = bfd_alloc (abfd, strlen (in->n_name) + 10);
|
||||||
if (name == NULL)
|
if (name == NULL)
|
||||||
@ -197,7 +202,7 @@ _bfd_pei_swap_sym_in (abfd, ext1, in1)
|
|||||||
#ifdef coff_swap_sym_in_hook
|
#ifdef coff_swap_sym_in_hook
|
||||||
/* This won't work in peigen.c, but since it's for PPC PE, it's not
|
/* This won't work in peigen.c, but since it's for PPC PE, it's not
|
||||||
worth fixing. */
|
worth fixing. */
|
||||||
coff_swap_sym_in_hook(abfd, ext1, in1);
|
coff_swap_sym_in_hook (abfd, ext1, in1);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,15 +212,17 @@ _bfd_pei_swap_sym_out (abfd, inp, extp)
|
|||||||
PTR inp;
|
PTR inp;
|
||||||
PTR extp;
|
PTR extp;
|
||||||
{
|
{
|
||||||
struct internal_syment *in = (struct internal_syment *)inp;
|
struct internal_syment *in = (struct internal_syment *) inp;
|
||||||
SYMENT *ext =(SYMENT *)extp;
|
SYMENT *ext = (SYMENT *) extp;
|
||||||
if(in->_n._n_name[0] == 0) {
|
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);
|
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);
|
else
|
||||||
}
|
{
|
||||||
|
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_32 (abfd, in->n_value, (bfd_byte *) ext->e_value);
|
||||||
bfd_h_put_16 (abfd, in->n_scnum, (bfd_byte *) ext->e_scnum);
|
bfd_h_put_16 (abfd, in->n_scnum, (bfd_byte *) ext->e_scnum);
|
||||||
@ -243,37 +250,42 @@ _bfd_pei_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
|
|||||||
int numaux ATTRIBUTE_UNUSED;
|
int numaux ATTRIBUTE_UNUSED;
|
||||||
PTR in1;
|
PTR in1;
|
||||||
{
|
{
|
||||||
AUXENT *ext = (AUXENT *)ext1;
|
AUXENT *ext = (AUXENT *) ext1;
|
||||||
union internal_auxent *in = (union internal_auxent *)in1;
|
union internal_auxent *in = (union internal_auxent *) in1;
|
||||||
|
|
||||||
switch (class) {
|
switch (class)
|
||||||
case C_FILE:
|
{
|
||||||
if (ext->x_file.x_fname[0] == 0) {
|
case C_FILE:
|
||||||
in->x_file.x_n.x_zeroes = 0;
|
if (ext->x_file.x_fname[0] == 0)
|
||||||
in->x_file.x_n.x_offset =
|
{
|
||||||
bfd_h_get_32 (abfd, (bfd_byte *) ext->x_file.x_n.x_offset);
|
in->x_file.x_n.x_zeroes = 0;
|
||||||
} else {
|
in->x_file.x_n.x_offset =
|
||||||
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
|
bfd_h_get_32 (abfd, (bfd_byte *) ext->x_file.x_n.x_offset);
|
||||||
}
|
}
|
||||||
return;
|
else
|
||||||
|
{
|
||||||
case C_STAT:
|
memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
|
||||||
case C_LEAFSTAT:
|
}
|
||||||
case C_HIDDEN:
|
|
||||||
if (type == T_NULL) {
|
|
||||||
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);
|
|
||||||
in->x_scn.x_checksum = bfd_h_get_32 (abfd,
|
|
||||||
(bfd_byte *) ext->x_scn.x_checksum);
|
|
||||||
in->x_scn.x_associated =
|
|
||||||
bfd_h_get_16 (abfd, (bfd_byte *) ext->x_scn.x_associated);
|
|
||||||
in->x_scn.x_comdat = bfd_h_get_8 (abfd,
|
|
||||||
(bfd_byte *) ext->x_scn.x_comdat);
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
case C_STAT:
|
||||||
|
case C_LEAFSTAT:
|
||||||
|
case C_HIDDEN:
|
||||||
|
if (type == T_NULL)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
in->x_scn.x_checksum =
|
||||||
|
bfd_h_get_32 (abfd, (bfd_byte *) ext->x_scn.x_checksum);
|
||||||
|
in->x_scn.x_associated =
|
||||||
|
bfd_h_get_16 (abfd, (bfd_byte *) ext->x_scn.x_associated);
|
||||||
|
in->x_scn.x_comdat =
|
||||||
|
bfd_h_get_8 (abfd, (bfd_byte *) ext->x_scn.x_comdat);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
in->x_sym.x_tagndx.l = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_sym.x_tagndx);
|
in->x_sym.x_tagndx.l = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||||
in->x_sym.x_tvndx = bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_tvndx);
|
in->x_sym.x_tvndx = bfd_h_get_16 (abfd, (bfd_byte *) ext->x_sym.x_tvndx);
|
||||||
@ -295,13 +307,16 @@ _bfd_pei_swap_aux_in (abfd, ext1, type, class, indx, numaux, in1)
|
|||||||
bfd_h_get_16 (abfd, (bfd_byte *) ext->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]);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ISFCN(type)) {
|
if (ISFCN (type))
|
||||||
in->x_sym.x_misc.x_fsize = bfd_h_get_32 (abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
{
|
||||||
}
|
in->x_sym.x_misc.x_fsize =
|
||||||
else {
|
bfd_h_get_32 (abfd, (bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||||
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);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
@ -314,48 +329,52 @@ _bfd_pei_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
|
|||||||
int numaux ATTRIBUTE_UNUSED;
|
int numaux ATTRIBUTE_UNUSED;
|
||||||
PTR extp;
|
PTR extp;
|
||||||
{
|
{
|
||||||
union internal_auxent *in = (union internal_auxent *)inp;
|
union internal_auxent *in = (union internal_auxent *) inp;
|
||||||
AUXENT *ext = (AUXENT *)extp;
|
AUXENT *ext = (AUXENT *) extp;
|
||||||
|
|
||||||
memset((PTR)ext, 0, AUXESZ);
|
memset ((PTR) ext, 0, AUXESZ);
|
||||||
switch (class) {
|
switch (class)
|
||||||
case C_FILE:
|
{
|
||||||
if (in->x_file.x_fname[0] == 0) {
|
case C_FILE:
|
||||||
bfd_h_put_32 (abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes);
|
if (in->x_file.x_fname[0] == 0)
|
||||||
bfd_h_put_32 (abfd,
|
{
|
||||||
in->x_file.x_n.x_offset,
|
bfd_h_put_32 (abfd, 0, (bfd_byte *) ext->x_file.x_n.x_zeroes);
|
||||||
(bfd_byte *) ext->x_file.x_n.x_offset);
|
bfd_h_put_32 (abfd,
|
||||||
}
|
in->x_file.x_n.x_offset,
|
||||||
else {
|
(bfd_byte *) ext->x_file.x_n.x_offset);
|
||||||
memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
|
}
|
||||||
}
|
else
|
||||||
return AUXESZ;
|
{
|
||||||
|
memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
|
||||||
case C_STAT:
|
}
|
||||||
case C_LEAFSTAT:
|
|
||||||
case C_HIDDEN:
|
|
||||||
if (type == T_NULL) {
|
|
||||||
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);
|
|
||||||
bfd_h_put_32 (abfd, in->x_scn.x_checksum,
|
|
||||||
(bfd_byte *) ext->x_scn.x_checksum);
|
|
||||||
bfd_h_put_16 (abfd, in->x_scn.x_associated,
|
|
||||||
(bfd_byte *) ext->x_scn.x_associated);
|
|
||||||
bfd_h_put_8 (abfd, in->x_scn.x_comdat,
|
|
||||||
(bfd_byte *) ext->x_scn.x_comdat);
|
|
||||||
return AUXESZ;
|
return AUXESZ;
|
||||||
|
|
||||||
|
case C_STAT:
|
||||||
|
case C_LEAFSTAT:
|
||||||
|
case C_HIDDEN:
|
||||||
|
if (type == T_NULL)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
bfd_h_put_32 (abfd, in->x_scn.x_checksum,
|
||||||
|
(bfd_byte *) ext->x_scn.x_checksum);
|
||||||
|
bfd_h_put_16 (abfd, in->x_scn.x_associated,
|
||||||
|
(bfd_byte *) ext->x_scn.x_associated);
|
||||||
|
bfd_h_put_8 (abfd, in->x_scn.x_comdat,
|
||||||
|
(bfd_byte *) ext->x_scn.x_comdat);
|
||||||
|
return AUXESZ;
|
||||||
|
}
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
bfd_h_put_32 (abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
|
bfd_h_put_32 (abfd, in->x_sym.x_tagndx.l, (bfd_byte *) ext->x_sym.x_tagndx);
|
||||||
bfd_h_put_16 (abfd, in->x_sym.x_tvndx, (bfd_byte *) ext->x_sym.x_tvndx);
|
bfd_h_put_16 (abfd, in->x_sym.x_tvndx, (bfd_byte *) ext->x_sym.x_tvndx);
|
||||||
|
|
||||||
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
||||||
{
|
{
|
||||||
PUT_FCN_LNNOPTR(abfd, in->x_sym.x_fcnary.x_fcn.x_lnnoptr, ext);
|
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);
|
PUT_FCN_ENDNDX (abfd, in->x_sym.x_fcnary.x_fcn.x_endndx.l, ext);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -371,7 +390,7 @@ _bfd_pei_swap_aux_out (abfd, inp, type, class, indx, numaux, extp)
|
|||||||
|
|
||||||
if (ISFCN (type))
|
if (ISFCN (type))
|
||||||
bfd_h_put_32 (abfd, in->x_sym.x_misc.x_fsize,
|
bfd_h_put_32 (abfd, in->x_sym.x_misc.x_fsize,
|
||||||
(bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
(bfd_byte *) ext->x_sym.x_misc.x_fsize);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
PUT_LNSZ_LNNO (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
|
PUT_LNSZ_LNNO (abfd, in->x_sym.x_misc.x_lnsz.x_lnno, ext);
|
||||||
@ -387,11 +406,11 @@ _bfd_pei_swap_lineno_in (abfd, ext1, in1)
|
|||||||
PTR ext1;
|
PTR ext1;
|
||||||
PTR in1;
|
PTR in1;
|
||||||
{
|
{
|
||||||
LINENO *ext = (LINENO *)ext1;
|
LINENO *ext = (LINENO *) ext1;
|
||||||
struct internal_lineno *in = (struct internal_lineno *)in1;
|
struct internal_lineno *in = (struct internal_lineno *) in1;
|
||||||
|
|
||||||
in->l_addr.l_symndx = bfd_h_get_32 (abfd, (bfd_byte *) ext->l_addr.l_symndx);
|
in->l_addr.l_symndx = bfd_h_get_32 (abfd, (bfd_byte *) ext->l_addr.l_symndx);
|
||||||
in->l_lnno = GET_LINENO_LNNO(abfd, ext);
|
in->l_lnno = GET_LINENO_LNNO (abfd, ext);
|
||||||
}
|
}
|
||||||
|
|
||||||
unsigned int
|
unsigned int
|
||||||
@ -400,8 +419,8 @@ _bfd_pei_swap_lineno_out (abfd, inp, outp)
|
|||||||
PTR inp;
|
PTR inp;
|
||||||
PTR outp;
|
PTR outp;
|
||||||
{
|
{
|
||||||
struct internal_lineno *in = (struct internal_lineno *)inp;
|
struct internal_lineno *in = (struct internal_lineno *) inp;
|
||||||
struct external_lineno *ext = (struct external_lineno *)outp;
|
struct external_lineno *ext = (struct external_lineno *) outp;
|
||||||
bfd_h_put_32 (abfd, in->l_addr.l_symndx, (bfd_byte *)
|
bfd_h_put_32 (abfd, in->l_addr.l_symndx, (bfd_byte *)
|
||||||
ext->l_addr.l_symndx);
|
ext->l_addr.l_symndx);
|
||||||
|
|
||||||
@ -439,44 +458,45 @@ _bfd_pei_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
a = &aouthdr_int->pe;
|
a = &aouthdr_int->pe;
|
||||||
a->ImageBase = GET_OPTHDR_IMAGE_BASE (abfd, (bfd_byte *)src->ImageBase);
|
a->ImageBase = GET_OPTHDR_IMAGE_BASE (abfd, (bfd_byte *) src->ImageBase);
|
||||||
a->SectionAlignment = bfd_h_get_32 (abfd, (bfd_byte *)src->SectionAlignment);
|
a->SectionAlignment = bfd_h_get_32 (abfd, (bfd_byte *) src->SectionAlignment);
|
||||||
a->FileAlignment = bfd_h_get_32 (abfd, (bfd_byte *)src->FileAlignment);
|
a->FileAlignment = bfd_h_get_32 (abfd, (bfd_byte *) src->FileAlignment);
|
||||||
a->MajorOperatingSystemVersion =
|
a->MajorOperatingSystemVersion =
|
||||||
bfd_h_get_16 (abfd, (bfd_byte *)src->MajorOperatingSystemVersion);
|
bfd_h_get_16 (abfd, (bfd_byte *) src->MajorOperatingSystemVersion);
|
||||||
a->MinorOperatingSystemVersion =
|
a->MinorOperatingSystemVersion =
|
||||||
bfd_h_get_16 (abfd, (bfd_byte *)src->MinorOperatingSystemVersion);
|
bfd_h_get_16 (abfd, (bfd_byte *) src->MinorOperatingSystemVersion);
|
||||||
a->MajorImageVersion = bfd_h_get_16 (abfd, (bfd_byte *)src->MajorImageVersion);
|
a->MajorImageVersion = bfd_h_get_16 (abfd, (bfd_byte *) src->MajorImageVersion);
|
||||||
a->MinorImageVersion = bfd_h_get_16 (abfd, (bfd_byte *)src->MinorImageVersion);
|
a->MinorImageVersion = bfd_h_get_16 (abfd, (bfd_byte *) src->MinorImageVersion);
|
||||||
a->MajorSubsystemVersion = bfd_h_get_16 (abfd, (bfd_byte *)src->MajorSubsystemVersion);
|
a->MajorSubsystemVersion = bfd_h_get_16 (abfd, (bfd_byte *) src->MajorSubsystemVersion);
|
||||||
a->MinorSubsystemVersion = bfd_h_get_16 (abfd, (bfd_byte *)src->MinorSubsystemVersion);
|
a->MinorSubsystemVersion = bfd_h_get_16 (abfd, (bfd_byte *) src->MinorSubsystemVersion);
|
||||||
a->Reserved1 = bfd_h_get_32 (abfd, (bfd_byte *)src->Reserved1);
|
a->Reserved1 = bfd_h_get_32 (abfd, (bfd_byte *) src->Reserved1);
|
||||||
a->SizeOfImage = bfd_h_get_32 (abfd, (bfd_byte *)src->SizeOfImage);
|
a->SizeOfImage = bfd_h_get_32 (abfd, (bfd_byte *) src->SizeOfImage);
|
||||||
a->SizeOfHeaders = bfd_h_get_32 (abfd, (bfd_byte *)src->SizeOfHeaders);
|
a->SizeOfHeaders = bfd_h_get_32 (abfd, (bfd_byte *) src->SizeOfHeaders);
|
||||||
a->CheckSum = bfd_h_get_32 (abfd, (bfd_byte *)src->CheckSum);
|
a->CheckSum = bfd_h_get_32 (abfd, (bfd_byte *) src->CheckSum);
|
||||||
a->Subsystem = bfd_h_get_16 (abfd, (bfd_byte *)src->Subsystem);
|
a->Subsystem = bfd_h_get_16 (abfd, (bfd_byte *) src->Subsystem);
|
||||||
a->DllCharacteristics = bfd_h_get_16 (abfd, (bfd_byte *)src->DllCharacteristics);
|
a->DllCharacteristics = bfd_h_get_16 (abfd, (bfd_byte *) src->DllCharacteristics);
|
||||||
a->SizeOfStackReserve = GET_OPTHDR_SIZE_OF_STACK_RESERVE (abfd, (bfd_byte *)src->SizeOfStackReserve);
|
a->SizeOfStackReserve = GET_OPTHDR_SIZE_OF_STACK_RESERVE (abfd, (bfd_byte *) src->SizeOfStackReserve);
|
||||||
a->SizeOfStackCommit = GET_OPTHDR_SIZE_OF_STACK_COMMIT (abfd, (bfd_byte *)src->SizeOfStackCommit);
|
a->SizeOfStackCommit = GET_OPTHDR_SIZE_OF_STACK_COMMIT (abfd, (bfd_byte *) src->SizeOfStackCommit);
|
||||||
a->SizeOfHeapReserve = GET_OPTHDR_SIZE_OF_HEAP_RESERVE (abfd, (bfd_byte *)src->SizeOfHeapReserve);
|
a->SizeOfHeapReserve = GET_OPTHDR_SIZE_OF_HEAP_RESERVE (abfd, (bfd_byte *) src->SizeOfHeapReserve);
|
||||||
a->SizeOfHeapCommit = GET_OPTHDR_SIZE_OF_HEAP_COMMIT (abfd, (bfd_byte *)src->SizeOfHeapCommit);
|
a->SizeOfHeapCommit = GET_OPTHDR_SIZE_OF_HEAP_COMMIT (abfd, (bfd_byte *) src->SizeOfHeapCommit);
|
||||||
a->LoaderFlags = bfd_h_get_32 (abfd, (bfd_byte *)src->LoaderFlags);
|
a->LoaderFlags = bfd_h_get_32 (abfd, (bfd_byte *) src->LoaderFlags);
|
||||||
a->NumberOfRvaAndSizes = bfd_h_get_32 (abfd, (bfd_byte *)src->NumberOfRvaAndSizes);
|
a->NumberOfRvaAndSizes = bfd_h_get_32 (abfd, (bfd_byte *) src->NumberOfRvaAndSizes);
|
||||||
|
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
for (idx=0; idx < 16; idx++)
|
for (idx = 0; idx < 16; idx++)
|
||||||
{
|
{
|
||||||
/* If data directory is empty, rva also should be 0 */
|
/* If data directory is empty, rva also should be 0. */
|
||||||
int size = bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][1]);
|
int size =
|
||||||
|
bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][1]);
|
||||||
a->DataDirectory[idx].Size = size;
|
a->DataDirectory[idx].Size = size;
|
||||||
|
|
||||||
if (size)
|
if (size)
|
||||||
{
|
{
|
||||||
a->DataDirectory[idx].VirtualAddress =
|
a->DataDirectory[idx].VirtualAddress =
|
||||||
bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][0]);
|
bfd_h_get_32 (abfd, (bfd_byte *) src->DataDirectory[idx][0]);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
a->DataDirectory[idx].VirtualAddress = 0;
|
a->DataDirectory[idx].VirtualAddress = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -508,7 +528,7 @@ _bfd_pei_swap_aouthdr_in (abfd, aouthdr_ext1, aouthdr_int1)
|
|||||||
/* These three fields are normally set up by ppc_relocate_section.
|
/* These three fields are normally set up by ppc_relocate_section.
|
||||||
In the case of reading a file in, we can pick them up from the
|
In the case of reading a file in, we can pick them up from the
|
||||||
DataDirectory. */
|
DataDirectory. */
|
||||||
first_thunk_address = a->DataDirectory[12].VirtualAddress ;
|
first_thunk_address = a->DataDirectory[12].VirtualAddress;
|
||||||
thunk_size = a->DataDirectory[12].Size;
|
thunk_size = a->DataDirectory[12].Size;
|
||||||
import_table_size = a->DataDirectory[1].Size;
|
import_table_size = a->DataDirectory[1].Size;
|
||||||
#endif
|
#endif
|
||||||
@ -537,11 +557,11 @@ add_data_entry (abfd, aout, idx, name, base)
|
|||||||
aout->DataDirectory[idx].Size = size;
|
aout->DataDirectory[idx].Size = size;
|
||||||
|
|
||||||
if (size)
|
if (size)
|
||||||
{
|
{
|
||||||
aout->DataDirectory[idx].VirtualAddress =
|
aout->DataDirectory[idx].VirtualAddress =
|
||||||
(sec->vma - base) & 0xffffffff;
|
(sec->vma - base) & 0xffffffff;
|
||||||
sec->flags |= SEC_DATA;
|
sec->flags |= SEC_DATA;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -551,9 +571,9 @@ _bfd_pei_swap_aouthdr_out (abfd, in, out)
|
|||||||
PTR in;
|
PTR in;
|
||||||
PTR out;
|
PTR out;
|
||||||
{
|
{
|
||||||
struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *)in;
|
struct internal_aouthdr *aouthdr_in = (struct internal_aouthdr *) in;
|
||||||
struct internal_extra_pe_aouthdr *extra = &pe_data (abfd)->pe_opthdr;
|
struct internal_extra_pe_aouthdr *extra = &pe_data (abfd)->pe_opthdr;
|
||||||
PEAOUTHDR *aouthdr_out = (PEAOUTHDR *)out;
|
PEAOUTHDR *aouthdr_out = (PEAOUTHDR *) out;
|
||||||
bfd_vma sa, fa, ib;
|
bfd_vma sa, fa, ib;
|
||||||
|
|
||||||
/* The following definitely is required for EFI applications.
|
/* The following definitely is required for EFI applications.
|
||||||
@ -593,10 +613,10 @@ _bfd_pei_swap_aouthdr_out (abfd, in, out)
|
|||||||
aouthdr_in->entry &= 0xffffffff;
|
aouthdr_in->entry &= 0xffffffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define FA(x) (((x) + fa -1 ) & (- fa))
|
#define FA(x) (((x) + fa -1 ) & (- fa))
|
||||||
#define SA(x) (((x) + sa -1 ) & (- sa))
|
#define SA(x) (((x) + sa -1 ) & (- sa))
|
||||||
|
|
||||||
/* We like to have the sizes aligned */
|
/* We like to have the sizes aligned. */
|
||||||
|
|
||||||
aouthdr_in->bsize = FA (aouthdr_in->bsize);
|
aouthdr_in->bsize = FA (aouthdr_in->bsize);
|
||||||
|
|
||||||
@ -629,9 +649,9 @@ _bfd_pei_swap_aouthdr_out (abfd, in, out)
|
|||||||
|
|
||||||
{
|
{
|
||||||
asection *sec;
|
asection *sec;
|
||||||
bfd_vma dsize= 0;
|
bfd_vma dsize = 0;
|
||||||
bfd_vma isize = SA(abfd->sections->filepos);
|
bfd_vma isize = SA(abfd->sections->filepos);
|
||||||
bfd_vma tsize= 0;
|
bfd_vma tsize = 0;
|
||||||
|
|
||||||
for (sec = abfd->sections; sec; sec = sec->next)
|
for (sec = abfd->sections; sec; sec = sec->next)
|
||||||
{
|
{
|
||||||
@ -722,7 +742,7 @@ _bfd_pei_swap_aouthdr_out (abfd, in, out)
|
|||||||
(bfd_byte *) aouthdr_out->NumberOfRvaAndSizes);
|
(bfd_byte *) aouthdr_out->NumberOfRvaAndSizes);
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
for (idx=0; idx < 16; idx++)
|
for (idx = 0; idx < 16; idx++)
|
||||||
{
|
{
|
||||||
bfd_h_put_32 (abfd, extra->DataDirectory[idx].VirtualAddress,
|
bfd_h_put_32 (abfd, extra->DataDirectory[idx].VirtualAddress,
|
||||||
(bfd_byte *) aouthdr_out->DataDirectory[idx][0]);
|
(bfd_byte *) aouthdr_out->DataDirectory[idx][0]);
|
||||||
@ -741,8 +761,8 @@ _bfd_pei_only_swap_filehdr_out (abfd, in, out)
|
|||||||
PTR out;
|
PTR out;
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
struct internal_filehdr *filehdr_in = (struct internal_filehdr *)in;
|
struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
|
||||||
struct external_PEI_filehdr *filehdr_out = (struct external_PEI_filehdr *)out;
|
struct external_PEI_filehdr *filehdr_out = (struct external_PEI_filehdr *) out;
|
||||||
|
|
||||||
if (pe_data (abfd)->has_reloc_section)
|
if (pe_data (abfd)->has_reloc_section)
|
||||||
filehdr_in->f_flags &= ~F_RELFLG;
|
filehdr_in->f_flags &= ~F_RELFLG;
|
||||||
@ -765,19 +785,19 @@ _bfd_pei_only_swap_filehdr_out (abfd, in, out)
|
|||||||
filehdr_in->pe.e_lfarlc = 0x40;
|
filehdr_in->pe.e_lfarlc = 0x40;
|
||||||
filehdr_in->pe.e_ovno = 0x0;
|
filehdr_in->pe.e_ovno = 0x0;
|
||||||
|
|
||||||
for (idx=0; idx < 4; idx++)
|
for (idx = 0; idx < 4; idx++)
|
||||||
filehdr_in->pe.e_res[idx] = 0x0;
|
filehdr_in->pe.e_res[idx] = 0x0;
|
||||||
|
|
||||||
filehdr_in->pe.e_oemid = 0x0;
|
filehdr_in->pe.e_oemid = 0x0;
|
||||||
filehdr_in->pe.e_oeminfo = 0x0;
|
filehdr_in->pe.e_oeminfo = 0x0;
|
||||||
|
|
||||||
for (idx=0; idx < 10; idx++)
|
for (idx = 0; idx < 10; idx++)
|
||||||
filehdr_in->pe.e_res2[idx] = 0x0;
|
filehdr_in->pe.e_res2[idx] = 0x0;
|
||||||
|
|
||||||
filehdr_in->pe.e_lfanew = 0x80;
|
filehdr_in->pe.e_lfanew = 0x80;
|
||||||
|
|
||||||
/* this next collection of data are mostly just characters. It appears
|
/* This next collection of data are mostly just characters. It
|
||||||
to be constant within the headers put on NT exes */
|
appears to be constant within the headers put on NT exes. */
|
||||||
filehdr_in->pe.dos_message[0] = 0x0eba1f0e;
|
filehdr_in->pe.dos_message[0] = 0x0eba1f0e;
|
||||||
filehdr_in->pe.dos_message[1] = 0xcd09b400;
|
filehdr_in->pe.dos_message[1] = 0xcd09b400;
|
||||||
filehdr_in->pe.dos_message[2] = 0x4c01b821;
|
filehdr_in->pe.dos_message[2] = 0x4c01b821;
|
||||||
@ -828,31 +848,31 @@ _bfd_pei_only_swap_filehdr_out (abfd, in, out)
|
|||||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_ovno, (bfd_byte *) filehdr_out->e_ovno);
|
bfd_h_put_16 (abfd, filehdr_in->pe.e_ovno, (bfd_byte *) filehdr_out->e_ovno);
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
for (idx=0; idx < 4; idx++)
|
for (idx = 0; idx < 4; idx++)
|
||||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res[idx],
|
bfd_h_put_16 (abfd, filehdr_in->pe.e_res[idx],
|
||||||
(bfd_byte *) filehdr_out->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_oemid, (bfd_byte *) filehdr_out->e_oemid);
|
||||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_oeminfo,
|
bfd_h_put_16 (abfd, filehdr_in->pe.e_oeminfo,
|
||||||
(bfd_byte *) filehdr_out->e_oeminfo);
|
(bfd_byte *) filehdr_out->e_oeminfo);
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
for (idx=0; idx < 10; idx++)
|
for (idx = 0; idx < 10; idx++)
|
||||||
bfd_h_put_16 (abfd, filehdr_in->pe.e_res2[idx],
|
bfd_h_put_16 (abfd, filehdr_in->pe.e_res2[idx],
|
||||||
(bfd_byte *) filehdr_out->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);
|
bfd_h_put_32 (abfd, filehdr_in->pe.e_lfanew, (bfd_byte *) filehdr_out->e_lfanew);
|
||||||
|
|
||||||
{
|
{
|
||||||
int idx;
|
int idx;
|
||||||
for (idx=0; idx < 16; idx++)
|
for (idx = 0; idx < 16; idx++)
|
||||||
bfd_h_put_32 (abfd, filehdr_in->pe.dos_message[idx],
|
bfd_h_put_32 (abfd, filehdr_in->pe.dos_message[idx],
|
||||||
(bfd_byte *) filehdr_out->dos_message[idx]);
|
(bfd_byte *) filehdr_out->dos_message[idx]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* also put in the NT signature */
|
/* Also put in the NT signature. */
|
||||||
bfd_h_put_32 (abfd, filehdr_in->pe.nt_signature,
|
bfd_h_put_32 (abfd, filehdr_in->pe.nt_signature,
|
||||||
(bfd_byte *) filehdr_out->nt_signature);
|
(bfd_byte *) filehdr_out->nt_signature);
|
||||||
|
|
||||||
return FILHSZ;
|
return FILHSZ;
|
||||||
}
|
}
|
||||||
@ -863,8 +883,8 @@ _bfd_pe_only_swap_filehdr_out (abfd, in, out)
|
|||||||
PTR in;
|
PTR in;
|
||||||
PTR out;
|
PTR out;
|
||||||
{
|
{
|
||||||
struct internal_filehdr *filehdr_in = (struct internal_filehdr *)in;
|
struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
|
||||||
FILHDR *filehdr_out = (FILHDR *)out;
|
FILHDR *filehdr_out = (FILHDR *) out;
|
||||||
|
|
||||||
bfd_h_put_16 (abfd, filehdr_in->f_magic, (bfd_byte *) filehdr_out->f_magic);
|
bfd_h_put_16 (abfd, filehdr_in->f_magic, (bfd_byte *) filehdr_out->f_magic);
|
||||||
bfd_h_put_16 (abfd, filehdr_in->f_nscns, (bfd_byte *) filehdr_out->f_nscns);
|
bfd_h_put_16 (abfd, filehdr_in->f_nscns, (bfd_byte *) filehdr_out->f_nscns);
|
||||||
@ -884,17 +904,17 @@ _bfd_pei_swap_scnhdr_out (abfd, in, out)
|
|||||||
PTR in;
|
PTR in;
|
||||||
PTR out;
|
PTR out;
|
||||||
{
|
{
|
||||||
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *)in;
|
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
|
||||||
SCNHDR *scnhdr_ext = (SCNHDR *)out;
|
SCNHDR *scnhdr_ext = (SCNHDR *) out;
|
||||||
unsigned int ret = SCNHSZ;
|
unsigned int ret = SCNHSZ;
|
||||||
bfd_vma ps;
|
bfd_vma ps;
|
||||||
bfd_vma ss;
|
bfd_vma ss;
|
||||||
|
|
||||||
memcpy(scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
|
memcpy (scnhdr_ext->s_name, scnhdr_int->s_name, sizeof (scnhdr_int->s_name));
|
||||||
|
|
||||||
PUT_SCNHDR_VADDR (abfd,
|
PUT_SCNHDR_VADDR (abfd,
|
||||||
((scnhdr_int->s_vaddr
|
((scnhdr_int->s_vaddr
|
||||||
- pe_data(abfd)->pe_opthdr.ImageBase)
|
- pe_data (abfd)->pe_opthdr.ImageBase)
|
||||||
& 0xffffffff),
|
& 0xffffffff),
|
||||||
(bfd_byte *) scnhdr_ext->s_vaddr);
|
(bfd_byte *) scnhdr_ext->s_vaddr);
|
||||||
|
|
||||||
@ -986,7 +1006,7 @@ _bfd_pei_swap_scnhdr_out (abfd, in, out)
|
|||||||
bfd_h_put_16 (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc);
|
bfd_h_put_16 (abfd, 0xffff, (bfd_byte *) scnhdr_ext->s_nreloc);
|
||||||
scnhdr_int->s_flags |= IMAGE_SCN_LNK_NRELOC_OVFL;
|
scnhdr_int->s_flags |= IMAGE_SCN_LNK_NRELOC_OVFL;
|
||||||
bfd_h_put_32 (abfd, scnhdr_int->s_flags,
|
bfd_h_put_32 (abfd, scnhdr_int->s_flags,
|
||||||
(bfd_byte *) scnhdr_ext->s_flags);
|
(bfd_byte *) scnhdr_ext->s_flags);
|
||||||
#if 0
|
#if 0
|
||||||
(*_bfd_error_handler) (_("%s: reloc overflow 1: 0x%lx > 0xffff"),
|
(*_bfd_error_handler) (_("%s: reloc overflow 1: 0x%lx > 0xffff"),
|
||||||
bfd_get_filename (abfd),
|
bfd_get_filename (abfd),
|
||||||
@ -1000,8 +1020,7 @@ _bfd_pei_swap_scnhdr_out (abfd, in, out)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] =
|
static char * dir_names[IMAGE_NUMBEROF_DIRECTORY_ENTRIES] = {
|
||||||
{
|
|
||||||
N_("Export Directory [.edata (or where ever we found it)]"),
|
N_("Export Directory [.edata (or where ever we found it)]"),
|
||||||
N_("Import Directory [parts of .idata]"),
|
N_("Import Directory [parts of .idata]"),
|
||||||
N_("Resource Directory [.rsrc]"),
|
N_("Resource Directory [.rsrc]"),
|
||||||
@ -1125,8 +1144,8 @@ pe_print_idata (abfd, vfile)
|
|||||||
toc_address = loadable_toc_address - 32768;
|
toc_address = loadable_toc_address - 32768;
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\nFunction descriptor located at the start address: %04lx\n"),
|
_("\nFunction descriptor located at the start address: %04lx\n"),
|
||||||
(unsigned long int) (abfd->start_address));
|
(unsigned long int) (abfd->start_address));
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"),
|
_("\tcode-base %08lx toc (loadable/actual) %08lx/%08lx\n"),
|
||||||
start_address, loadable_toc_address, toc_address);
|
start_address, loadable_toc_address, toc_address);
|
||||||
@ -1134,17 +1153,17 @@ pe_print_idata (abfd, vfile)
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\nNo reldata section! Function descriptor not decoded.\n"));
|
_("\nNo reldata section! Function descriptor not decoded.\n"));
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\nThe Import Tables (interpreted %s section contents)\n"),
|
_("\nThe Import Tables (interpreted %s section contents)\n"),
|
||||||
section->name);
|
section->name);
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_(" vma: Hint Time Forward DLL First\n"));
|
_(" vma: Hint Time Forward DLL First\n"));
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_(" Table Stamp Chain Name Thunk\n"));
|
_(" Table Stamp Chain Name Thunk\n"));
|
||||||
|
|
||||||
data = (bfd_byte *) bfd_malloc (dataoff + datasize);
|
data = (bfd_byte *) bfd_malloc (dataoff + datasize);
|
||||||
if (data == NULL)
|
if (data == NULL)
|
||||||
@ -1173,7 +1192,7 @@ pe_print_idata (abfd, vfile)
|
|||||||
|
|
||||||
if (i + 20 > datasize)
|
if (i + 20 > datasize)
|
||||||
{
|
{
|
||||||
/* check stuff */
|
/* Check stuff. */
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1313,20 +1332,19 @@ pe_print_edata (abfd, vfile)
|
|||||||
bfd_size_type i;
|
bfd_size_type i;
|
||||||
|
|
||||||
bfd_signed_vma adj;
|
bfd_signed_vma adj;
|
||||||
struct EDT_type
|
struct EDT_type {
|
||||||
{
|
long export_flags; /* reserved - should be zero */
|
||||||
long export_flags; /* reserved - should be zero */
|
long time_stamp;
|
||||||
long time_stamp;
|
short major_ver;
|
||||||
short major_ver;
|
short minor_ver;
|
||||||
short minor_ver;
|
bfd_vma name; /* rva - relative to image base */
|
||||||
bfd_vma name; /* rva - relative to image base */
|
long base; /* ordinal base */
|
||||||
long base; /* ordinal base */
|
unsigned long num_functions; /* Number in the export address table */
|
||||||
unsigned long num_functions; /* Number in the export address table */
|
unsigned long num_names; /* Number in the name pointer table */
|
||||||
unsigned long num_names; /* Number in the name pointer table */
|
bfd_vma eat_addr; /* rva to the export address table */
|
||||||
bfd_vma eat_addr; /* rva to the export address table */
|
bfd_vma npt_addr; /* rva to the Export Name Pointer Table */
|
||||||
bfd_vma npt_addr; /* rva to the Export Name Pointer Table */
|
bfd_vma ot_addr; /* rva to the Ordinal Table */
|
||||||
bfd_vma ot_addr; /* rva to the Ordinal Table */
|
} edt;
|
||||||
} edt;
|
|
||||||
|
|
||||||
pe_data_type *pe = pe_data (abfd);
|
pe_data_type *pe = pe_data (abfd);
|
||||||
struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
|
struct internal_extra_pe_aouthdr *extra = &pe->pe_opthdr;
|
||||||
@ -1379,34 +1397,34 @@ pe_print_edata (abfd, vfile)
|
|||||||
datasize))
|
datasize))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
/* Go get Export Directory Table */
|
/* Go get Export Directory Table. */
|
||||||
edt.export_flags = bfd_get_32 (abfd, data+0);
|
edt.export_flags = bfd_get_32 (abfd, data + 0);
|
||||||
edt.time_stamp = bfd_get_32 (abfd, data+4);
|
edt.time_stamp = bfd_get_32 (abfd, data + 4);
|
||||||
edt.major_ver = bfd_get_16 (abfd, data+8);
|
edt.major_ver = bfd_get_16 (abfd, data + 8);
|
||||||
edt.minor_ver = bfd_get_16 (abfd, data+10);
|
edt.minor_ver = bfd_get_16 (abfd, data + 10);
|
||||||
edt.name = bfd_get_32 (abfd, data+12);
|
edt.name = bfd_get_32 (abfd, data + 12);
|
||||||
edt.base = bfd_get_32 (abfd, data+16);
|
edt.base = bfd_get_32 (abfd, data + 16);
|
||||||
edt.num_functions = bfd_get_32 (abfd, data+20);
|
edt.num_functions = bfd_get_32 (abfd, data + 20);
|
||||||
edt.num_names = bfd_get_32 (abfd, data+24);
|
edt.num_names = bfd_get_32 (abfd, data + 24);
|
||||||
edt.eat_addr = bfd_get_32 (abfd, data+28);
|
edt.eat_addr = bfd_get_32 (abfd, data + 28);
|
||||||
edt.npt_addr = bfd_get_32 (abfd, data+32);
|
edt.npt_addr = bfd_get_32 (abfd, data + 32);
|
||||||
edt.ot_addr = bfd_get_32 (abfd, data+36);
|
edt.ot_addr = bfd_get_32 (abfd, data + 36);
|
||||||
|
|
||||||
adj = section->vma - extra->ImageBase + dataoff;
|
adj = section->vma - extra->ImageBase + dataoff;
|
||||||
|
|
||||||
/* Dump the EDT first first */
|
/* Dump the EDT first first */
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\nThe Export Tables (interpreted %s section contents)\n\n"),
|
_("\nThe Export Tables (interpreted %s section contents)\n\n"),
|
||||||
section->name);
|
section->name);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Export Flags \t\t\t%lx\n"), (unsigned long) edt.export_flags);
|
_("Export Flags \t\t\t%lx\n"), (unsigned long) edt.export_flags);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Time/Date stamp \t\t%lx\n"), (unsigned long) edt.time_stamp);
|
_("Time/Date stamp \t\t%lx\n"), (unsigned long) edt.time_stamp);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Major/Minor \t\t\t%d/%d\n"), edt.major_ver, edt.minor_ver);
|
_("Major/Minor \t\t\t%d/%d\n"), edt.major_ver, edt.minor_ver);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Name \t\t\t\t"));
|
_("Name \t\t\t\t"));
|
||||||
@ -1415,20 +1433,20 @@ pe_print_edata (abfd, vfile)
|
|||||||
" %s\n", data + edt.name - adj);
|
" %s\n", data + edt.name - adj);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Ordinal Base \t\t\t%ld\n"), edt.base);
|
_("Ordinal Base \t\t\t%ld\n"), edt.base);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Number in:\n"));
|
_("Number in:\n"));
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\tExport Address Table \t\t%08lx\n"),
|
_("\tExport Address Table \t\t%08lx\n"),
|
||||||
edt.num_functions);
|
edt.num_functions);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\t[Name Pointer/Ordinal] Table\t%08lx\n"), edt.num_names);
|
_("\t[Name Pointer/Ordinal] Table\t%08lx\n"), edt.num_names);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("Table Addresses\n"));
|
_("Table Addresses\n"));
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\tExport Address Table \t\t"));
|
_("\tExport Address Table \t\t"));
|
||||||
@ -1436,7 +1454,7 @@ pe_print_edata (abfd, vfile)
|
|||||||
fprintf (file, "\n");
|
fprintf (file, "\n");
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\tName Pointer Table \t\t"));
|
_("\tName Pointer Table \t\t"));
|
||||||
fprintf_vma (file, edt.npt_addr);
|
fprintf_vma (file, edt.npt_addr);
|
||||||
fprintf (file, "\n");
|
fprintf (file, "\n");
|
||||||
|
|
||||||
@ -1448,8 +1466,7 @@ pe_print_edata (abfd, vfile)
|
|||||||
/* The next table to find is the Export Address Table. It's basically
|
/* 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
|
a list of pointers that either locate a function in this dll, or
|
||||||
forward the call to another dll. Something like:
|
forward the call to another dll. Something like:
|
||||||
typedef union
|
typedef union {
|
||||||
{
|
|
||||||
long export_rva;
|
long export_rva;
|
||||||
long forwarder_rva;
|
long forwarder_rva;
|
||||||
} export_address_table_entry;
|
} export_address_table_entry;
|
||||||
@ -1469,7 +1486,7 @@ pe_print_edata (abfd, vfile)
|
|||||||
if (eat_member - adj <= datasize)
|
if (eat_member - adj <= datasize)
|
||||||
{
|
{
|
||||||
/* This rva is to a name (forwarding function) in our section. */
|
/* This rva is to a name (forwarding function) in our section. */
|
||||||
/* Should locate a function descriptor */
|
/* Should locate a function descriptor. */
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
"\t[%4ld] +base[%4ld] %04lx %s -- %s\n",
|
"\t[%4ld] +base[%4ld] %04lx %s -- %s\n",
|
||||||
(long) i,
|
(long) i,
|
||||||
@ -1480,7 +1497,7 @@ pe_print_edata (abfd, vfile)
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* Should locate a function descriptor in the reldata section */
|
/* Should locate a function descriptor in the reldata section. */
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
"\t[%4ld] +base[%4ld] %04lx %s\n",
|
"\t[%4ld] +base[%4ld] %04lx %s\n",
|
||||||
(long) i,
|
(long) i,
|
||||||
@ -1490,10 +1507,10 @@ pe_print_edata (abfd, vfile)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* The Export Name Pointer Table is paired with the Export Ordinal Table */
|
/* The Export Name Pointer Table is paired with the Export Ordinal Table. */
|
||||||
/* Dump them in parallel for clarity */
|
/* Dump them in parallel for clarity. */
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\n[Ordinal/Name Pointer] Table\n"));
|
_("\n[Ordinal/Name Pointer] Table\n"));
|
||||||
|
|
||||||
for (i = 0; i < edt.num_names; ++i)
|
for (i = 0; i < edt.num_names; ++i)
|
||||||
{
|
{
|
||||||
@ -1510,7 +1527,6 @@ pe_print_edata (abfd, vfile)
|
|||||||
+ (i*2) - adj);
|
+ (i*2) - adj);
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
"\t[%4ld] %s\n", (long) ord, name);
|
"\t[%4ld] %s\n", (long) ord, name);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
free (data);
|
free (data);
|
||||||
@ -1522,9 +1538,10 @@ pe_print_edata (abfd, vfile)
|
|||||||
consists of three dwords containing relative virtual addresses that
|
consists of three dwords containing relative virtual addresses that
|
||||||
specify the start and end address of the code range the entry
|
specify the start and end address of the code range the entry
|
||||||
covers and the address of the corresponding unwind info data. */
|
covers and the address of the corresponding unwind info data. */
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
pe_print_pdata (abfd, vfile)
|
pe_print_pdata (abfd, vfile)
|
||||||
bfd *abfd;
|
bfd *abfd;
|
||||||
PTR vfile;
|
PTR vfile;
|
||||||
{
|
{
|
||||||
#ifdef COFF_WITH_PEP64
|
#ifdef COFF_WITH_PEP64
|
||||||
@ -1543,18 +1560,19 @@ pe_print_pdata (abfd, vfile)
|
|||||||
if (section == NULL
|
if (section == NULL
|
||||||
|| coff_section_data (abfd, section) == NULL
|
|| coff_section_data (abfd, section) == NULL
|
||||||
|| pei_section_data (abfd, section) == NULL)
|
|| pei_section_data (abfd, section) == NULL)
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
stop = pei_section_data (abfd, section)->virt_size;
|
stop = pei_section_data (abfd, section)->virt_size;
|
||||||
if ((stop % onaline) != 0)
|
if ((stop % onaline) != 0)
|
||||||
fprintf (file, _("Warning, .pdata section size (%ld) is not a multiple of %d\n"),
|
fprintf (file,
|
||||||
(long)stop, onaline);
|
_("Warning, .pdata section size (%ld) is not a multiple of %d\n"),
|
||||||
|
(long) stop, onaline);
|
||||||
|
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_("\nThe Function Table (interpreted .pdata section contents)\n"));
|
_("\nThe Function Table (interpreted .pdata section contents)\n"));
|
||||||
#ifdef COFF_WITH_PEP64
|
#ifdef COFF_WITH_PEP64
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_(" vma:\t\t\tBegin Address End Address Unwind Info\n"));
|
_(" vma:\t\t\tBegin Address End Address Unwind Info\n"));
|
||||||
#else
|
#else
|
||||||
fprintf (file,
|
fprintf (file,
|
||||||
_(" vma:\t\tBegin End EH EH PrologEnd Exception\n"));
|
_(" vma:\t\tBegin End EH EH PrologEnd Exception\n"));
|
||||||
@ -1589,11 +1607,11 @@ pe_print_pdata (abfd, vfile)
|
|||||||
if (i + PDATA_ROW_SIZE > stop)
|
if (i + PDATA_ROW_SIZE > stop)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
begin_addr = GET_PDATA_ENTRY(abfd, data+i);
|
begin_addr = GET_PDATA_ENTRY (abfd, data + i );
|
||||||
end_addr = GET_PDATA_ENTRY(abfd, data+i+4);
|
end_addr = GET_PDATA_ENTRY (abfd, data + i + 4);
|
||||||
eh_handler = GET_PDATA_ENTRY(abfd, data+i+8);
|
eh_handler = GET_PDATA_ENTRY (abfd, data + i + 8);
|
||||||
eh_data = GET_PDATA_ENTRY(abfd, data+i+12);
|
eh_data = GET_PDATA_ENTRY (abfd, data + i + 12);
|
||||||
prolog_end_addr = GET_PDATA_ENTRY(abfd, data+i+16);
|
prolog_end_addr = GET_PDATA_ENTRY (abfd, data + i + 16);
|
||||||
|
|
||||||
if (begin_addr == 0 && end_addr == 0 && eh_handler == 0
|
if (begin_addr == 0 && end_addr == 0 && eh_handler == 0
|
||||||
&& eh_data == 0 && prolog_end_addr == 0)
|
&& eh_data == 0 && prolog_end_addr == 0)
|
||||||
@ -1603,8 +1621,8 @@ pe_print_pdata (abfd, vfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
|
em_data = ((eh_handler & 0x1) << 2) | (prolog_end_addr & 0x3);
|
||||||
eh_handler &= ~ (bfd_vma) 0x3;
|
eh_handler &= ~(bfd_vma) 0x3;
|
||||||
prolog_end_addr &= ~ (bfd_vma) 0x3;
|
prolog_end_addr &= ~(bfd_vma) 0x3;
|
||||||
|
|
||||||
fputc (' ', file);
|
fputc (' ', file);
|
||||||
fprintf_vma (file, i + section->vma); fputc ('\t', file);
|
fprintf_vma (file, i + section->vma); fputc ('\t', file);
|
||||||
@ -1621,9 +1639,8 @@ pe_print_pdata (abfd, vfile)
|
|||||||
#ifdef POWERPC_LE_PE
|
#ifdef POWERPC_LE_PE
|
||||||
if (eh_handler == 0 && eh_data != 0)
|
if (eh_handler == 0 && eh_data != 0)
|
||||||
{
|
{
|
||||||
/* Special bits here, although the meaning may */
|
/* Special bits here, although the meaning may be a little
|
||||||
/* be a little mysterious. The only one I know */
|
mysterious. The only one I know for sure is 0x03. */
|
||||||
/* for sure is 0x03. */
|
|
||||||
/* Code Significance */
|
/* Code Significance */
|
||||||
/* 0x00 None */
|
/* 0x00 None */
|
||||||
/* 0x01 Register Save Millicode */
|
/* 0x01 Register Save Millicode */
|
||||||
@ -1654,21 +1671,20 @@ pe_print_pdata (abfd, vfile)
|
|||||||
}
|
}
|
||||||
|
|
||||||
#define IMAGE_REL_BASED_HIGHADJ 4
|
#define IMAGE_REL_BASED_HIGHADJ 4
|
||||||
static const char * const tbl[] =
|
static const char * const tbl[] = {
|
||||||
{
|
"ABSOLUTE",
|
||||||
"ABSOLUTE",
|
"HIGH",
|
||||||
"HIGH",
|
"LOW",
|
||||||
"LOW",
|
"HIGHLOW",
|
||||||
"HIGHLOW",
|
"HIGHADJ",
|
||||||
"HIGHADJ",
|
"MIPS_JMPADDR",
|
||||||
"MIPS_JMPADDR",
|
"SECTION",
|
||||||
"SECTION",
|
"REL32",
|
||||||
"REL32",
|
"RESERVED1",
|
||||||
"RESERVED1",
|
"MIPS_JMPADDR16",
|
||||||
"MIPS_JMPADDR16",
|
"DIR64",
|
||||||
"DIR64",
|
"HIGH3ADJ"
|
||||||
"HIGH3ADJ"
|
"UNKNOWN", /* MUST be last */
|
||||||
"UNKNOWN", /* MUST be last */
|
|
||||||
};
|
};
|
||||||
|
|
||||||
static boolean
|
static boolean
|
||||||
@ -1745,10 +1761,10 @@ pe_print_reloc (abfd, vfile)
|
|||||||
low 16 bits of addend. */
|
low 16 bits of addend. */
|
||||||
if (t == IMAGE_REL_BASED_HIGHADJ)
|
if (t == IMAGE_REL_BASED_HIGHADJ)
|
||||||
{
|
{
|
||||||
fprintf (file, " (%4x)",
|
fprintf (file, " (%4x)",
|
||||||
((unsigned int)
|
((unsigned int)
|
||||||
bfd_get_16 (abfd, data + i + 8 + j * 2 + 2)));
|
bfd_get_16 (abfd, data + i + 8 + j * 2 + 2)));
|
||||||
j++;
|
j++;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf (file, "\n");
|
fprintf (file, "\n");
|
||||||
@ -1779,7 +1795,7 @@ _bfd_pe_print_private_bfd_data_common (abfd, vfile)
|
|||||||
emulate it here. */
|
emulate it here. */
|
||||||
fprintf (file, _("\nCharacteristics 0x%x\n"), pe->real_flags);
|
fprintf (file, _("\nCharacteristics 0x%x\n"), pe->real_flags);
|
||||||
#undef PF
|
#undef PF
|
||||||
#define PF(x, y) if (pe->real_flags & x) { fprintf (file, "\t%s\n", y); }
|
#define PF(x, y) if (pe->real_flags & x) { fprintf (file, "\t%s\n", y); }
|
||||||
PF (F_RELFLG, "relocations stripped");
|
PF (F_RELFLG, "relocations stripped");
|
||||||
PF (F_EXEC, "executable");
|
PF (F_EXEC, "executable");
|
||||||
PF (F_LNNO, "line numbers stripped");
|
PF (F_LNNO, "line numbers stripped");
|
||||||
@ -1891,8 +1907,8 @@ _bfd_pe_bfd_copy_private_bfd_data_common (ibfd, obfd)
|
|||||||
if we don't remove this entry as well. */
|
if we don't remove this entry as well. */
|
||||||
if (! pe_data (obfd)->has_reloc_section)
|
if (! pe_data (obfd)->has_reloc_section)
|
||||||
{
|
{
|
||||||
pe_data(obfd)->pe_opthdr.DataDirectory[5].VirtualAddress = 0;
|
pe_data (obfd)->pe_opthdr.DataDirectory[5].VirtualAddress = 0;
|
||||||
pe_data(obfd)->pe_opthdr.DataDirectory[5].Size = 0;
|
pe_data (obfd)->pe_opthdr.DataDirectory[5].Size = 0;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -1929,7 +1945,7 @@ _bfd_pe_bfd_copy_private_section_data (ibfd, isec, obfd, osec)
|
|||||||
pei_section_data (obfd, osec)->virt_size =
|
pei_section_data (obfd, osec)->virt_size =
|
||||||
pei_section_data (ibfd, isec)->virt_size;
|
pei_section_data (ibfd, isec)->virt_size;
|
||||||
pei_section_data (obfd, osec)->pe_flags =
|
pei_section_data (obfd, osec)->pe_flags =
|
||||||
pei_section_data (ibfd, isec)->pe_flags;
|
pei_section_data (ibfd, isec)->pe_flags;
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
@ -1973,7 +1989,7 @@ _bfd_pei_final_link_postscript (abfd, pfinfo)
|
|||||||
".idata$2", false, false, true);
|
".idata$2", false, false, true);
|
||||||
if (h1 != NULL)
|
if (h1 != NULL)
|
||||||
{
|
{
|
||||||
pe_data(abfd)->pe_opthdr.DataDirectory[1].VirtualAddress =
|
pe_data (abfd)->pe_opthdr.DataDirectory[1].VirtualAddress =
|
||||||
(h1->root.u.def.value
|
(h1->root.u.def.value
|
||||||
+ h1->root.u.def.section->output_section->vma
|
+ h1->root.u.def.section->output_section->vma
|
||||||
+ h1->root.u.def.section->output_offset);
|
+ h1->root.u.def.section->output_offset);
|
||||||
@ -1983,7 +1999,7 @@ _bfd_pei_final_link_postscript (abfd, pfinfo)
|
|||||||
((h1->root.u.def.value
|
((h1->root.u.def.value
|
||||||
+ h1->root.u.def.section->output_section->vma
|
+ h1->root.u.def.section->output_section->vma
|
||||||
+ h1->root.u.def.section->output_offset)
|
+ h1->root.u.def.section->output_offset)
|
||||||
- pe_data(abfd)->pe_opthdr.DataDirectory[1].VirtualAddress);
|
- pe_data (abfd)->pe_opthdr.DataDirectory[1].VirtualAddress);
|
||||||
|
|
||||||
/* The import address table. This is the size/address of
|
/* The import address table. This is the size/address of
|
||||||
.idata$5. */
|
.idata$5. */
|
||||||
@ -1999,7 +2015,7 @@ _bfd_pei_final_link_postscript (abfd, pfinfo)
|
|||||||
((h1->root.u.def.value
|
((h1->root.u.def.value
|
||||||
+ h1->root.u.def.section->output_section->vma
|
+ h1->root.u.def.section->output_section->vma
|
||||||
+ h1->root.u.def.section->output_offset)
|
+ h1->root.u.def.section->output_offset)
|
||||||
- pe_data(abfd)->pe_opthdr.DataDirectory[12].VirtualAddress);
|
- pe_data (abfd)->pe_opthdr.DataDirectory[12].VirtualAddress);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we couldn't find idata$2, we either have an excessively
|
/* If we couldn't find idata$2, we either have an excessively
|
||||||
|
13
bfd/som.h
13
bfd/som.h
@ -46,8 +46,8 @@
|
|||||||
#define _PA_RISC_ID(__m_num) 1
|
#define _PA_RISC_ID(__m_num) 1
|
||||||
#endif /* HOST_HPPABSD */
|
#endif /* HOST_HPPABSD */
|
||||||
|
|
||||||
#define FILE_HDR_SIZE sizeof(struct header)
|
#define FILE_HDR_SIZE sizeof (struct header)
|
||||||
#define AUX_HDR_SIZE sizeof(struct som_exec_auxhdr)
|
#define AUX_HDR_SIZE sizeof (struct som_exec_auxhdr)
|
||||||
|
|
||||||
typedef struct som_symbol
|
typedef struct som_symbol
|
||||||
{
|
{
|
||||||
@ -77,7 +77,7 @@ typedef struct som_symbol
|
|||||||
int reloc_count;
|
int reloc_count;
|
||||||
|
|
||||||
/* During object file writing, the offset of the name of this symbol
|
/* During object file writing, the offset of the name of this symbol
|
||||||
in the SOM string table. */
|
in the SOM string table. */
|
||||||
int stringtab_offset;
|
int stringtab_offset;
|
||||||
}
|
}
|
||||||
som_symbol_type;
|
som_symbol_type;
|
||||||
@ -159,7 +159,7 @@ struct som_copyable_section_data_struct
|
|||||||
int space_number;
|
int space_number;
|
||||||
|
|
||||||
/* Add more stuff here as needed. Good examples of information
|
/* Add more stuff here as needed. Good examples of information
|
||||||
we might want to pass would be initialization pointers,
|
we might want to pass would be initialization pointers,
|
||||||
and the many subspace flags we do not represent yet. */
|
and the many subspace flags we do not represent yet. */
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -167,7 +167,7 @@ struct som_copyable_section_data_struct
|
|||||||
|
|
||||||
reloc_size holds the size of the relocation stream, note this
|
reloc_size holds the size of the relocation stream, note this
|
||||||
is very different from the number of relocations as SOM relocations
|
is very different from the number of relocations as SOM relocations
|
||||||
are variable length.
|
are variable length.
|
||||||
|
|
||||||
reloc_stream is the actual stream of relocation entries. */
|
reloc_stream is the actual stream of relocation entries. */
|
||||||
|
|
||||||
@ -198,14 +198,13 @@ struct som_section_data_struct
|
|||||||
((struct som_section_data_struct *)sec->used_by_bfd)
|
((struct som_section_data_struct *)sec->used_by_bfd)
|
||||||
#define som_symbol_data(symbol) ((som_symbol_type *) symbol)
|
#define som_symbol_data(symbol) ((som_symbol_type *) symbol)
|
||||||
|
|
||||||
|
|
||||||
/* Defines groups of basic relocations. FIXME: These should
|
/* Defines groups of basic relocations. FIXME: These should
|
||||||
be the only basic relocations created by GAS. The rest
|
be the only basic relocations created by GAS. The rest
|
||||||
should be internal to the BFD backend.
|
should be internal to the BFD backend.
|
||||||
|
|
||||||
The idea is both SOM and ELF define these basic relocation
|
The idea is both SOM and ELF define these basic relocation
|
||||||
types so they map into a SOM or ELF specific reloation as
|
types so they map into a SOM or ELF specific reloation as
|
||||||
appropriate. This allows GAS to share much more code
|
appropriate. This allows GAS to share much more code
|
||||||
between the two object formats. */
|
between the two object formats. */
|
||||||
|
|
||||||
#define R_HPPA_NONE R_NO_RELOCATION
|
#define R_HPPA_NONE R_NO_RELOCATION
|
||||||
|
Loading…
x
Reference in New Issue
Block a user