mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-09-09 17:02:22 +08:00
bfd/
Stop using bfd_usrdata in libbfd. * coff-stgo32.c (bfd_coff_go32stub): Remove. (stub_bytes, comment): Replace STUBSIZE by GO32_STUBSIZE. (adjust_filehdr_in_post): Declare the abfd parameter as unused. Replace STUBSIZE by GO32_STUBSIZE. Save now the stub in filehdr_dst->u.go32.stub. New comment with the reason. (adjust_filehdr_out_pre): Replace STUBSIZE by GO32_STUBSIZE. Substitute the removed macro bfd_coff_go32stub. (adjust_filehdr_out_post, adjust_scnhdr_in_post, adjust_scnhdr_out_pre) (adjust_scnhdr_out_post, adjust_aux_in_post, adjust_aux_out_pre) (adjust_aux_out_post): Replace STUBSIZE by GO32_STUBSIZE. (create_go32_stub, go32_stubbed_coff_bfd_copy_private_bfd_data): Replace STUBSIZE by GO32_STUBSIZE. Substitute the removed macro bfd_coff_go32stub. * coffcode.h (coff_mkobject_hook): Initialize coff->go32stub. * libcoff-in.h (coff_data_type): New field go32stub. * libcoff.h: Regenerated. include/coff/ Stop using bfd_usrdata in libbfd. * go32exe.h (struct external_filehdr_go32_exe <stub>, FILHSZ): Replace STUBSIZE by GO32_STUBSIZE. (STUBSIZE): Move the definition ... * internal.h (GO32_STUBSIZE): ... here and rename it. (struct internal_filehdr <go32stub>, F_GO32STUB): New.
This commit is contained in:
@ -102,9 +102,6 @@ static bfd_boolean
|
||||
|
||||
#include "coff-i386.c"
|
||||
|
||||
/* I hold in the usrdata the stub. */
|
||||
#define bfd_coff_go32stub bfd_usrdata
|
||||
|
||||
/* This macro is used, because I cannot assume the endianess of the
|
||||
host system. */
|
||||
#define _H(index) (H_GET_16 (abfd, (header+index*2)))
|
||||
@ -112,7 +109,7 @@ static bfd_boolean
|
||||
/* These bytes are a 2048-byte DOS executable, which loads the COFF
|
||||
image into memory and then runs it. It is called 'stub'. */
|
||||
|
||||
static const unsigned char stub_bytes[STUBSIZE] =
|
||||
static const unsigned char stub_bytes[GO32_STUBSIZE] =
|
||||
{
|
||||
#include "go32stub.h"
|
||||
};
|
||||
@ -120,7 +117,7 @@ static const unsigned char stub_bytes[STUBSIZE] =
|
||||
/*
|
||||
I have not commented each swap function below, because the
|
||||
technique is in any function the same. For the ...in function,
|
||||
all the pointers are adjusted by adding STUBSIZE and for the
|
||||
all the pointers are adjusted by adding GO32_STUBSIZE and for the
|
||||
...out function, it is subtracted first and after calling the
|
||||
standard swap function it is reset to the old value. */
|
||||
|
||||
@ -132,26 +129,20 @@ static const unsigned char stub_bytes[STUBSIZE] =
|
||||
|
||||
static void
|
||||
adjust_filehdr_in_post (abfd, src, dst)
|
||||
bfd *abfd;
|
||||
bfd *abfd ATTRIBUTE_UNUSED;
|
||||
PTR src;
|
||||
PTR dst;
|
||||
{
|
||||
FILHDR *filehdr_src = (FILHDR *) src;
|
||||
struct internal_filehdr *filehdr_dst = (struct internal_filehdr *) dst;
|
||||
|
||||
ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
|
||||
ADJUST_VAL (filehdr_dst->f_symptr, GO32_STUBSIZE);
|
||||
|
||||
/* Save now the stub to be used later. FIXME: Memory leak as the caller
|
||||
coff_object_p does bfd_release afterwards. */
|
||||
bfd_coff_go32stub (abfd) = bfd_malloc ((bfd_size_type) STUBSIZE);
|
||||
|
||||
/* Since this function returns no status, I do not set here
|
||||
any bfd_error_...
|
||||
That means, before the use of bfd_coff_go32stub (), this value
|
||||
should be checked if it is != NULL. */
|
||||
if (bfd_coff_go32stub (abfd) == NULL)
|
||||
return;
|
||||
memcpy (bfd_coff_go32stub (abfd), filehdr_src->stub, STUBSIZE);
|
||||
/* Save now the stub to be used later. Put the stub data to FILEHDR_DST
|
||||
first as coff_data (abfd) still does not exist. It may not even be ever
|
||||
created as we are just checking the file format of ABFD. */
|
||||
memcpy (filehdr_dst->go32stub, filehdr_src->stub, GO32_STUBSIZE);
|
||||
filehdr_dst->f_flags |= F_GO32STUB;
|
||||
}
|
||||
|
||||
static void
|
||||
@ -167,13 +158,13 @@ adjust_filehdr_out_pre (abfd, in, out)
|
||||
create_go32_stub (abfd);
|
||||
|
||||
/* Copy the stub to the file header. */
|
||||
if (bfd_coff_go32stub (abfd) != NULL)
|
||||
memcpy (filehdr_out->stub, bfd_coff_go32stub (abfd), STUBSIZE);
|
||||
if (coff_data (abfd)->go32stub != NULL)
|
||||
memcpy (filehdr_out->stub, coff_data (abfd)->go32stub, GO32_STUBSIZE);
|
||||
else
|
||||
/* Use the default. */
|
||||
memcpy (filehdr_out->stub, stub_bytes, STUBSIZE);
|
||||
memcpy (filehdr_out->stub, stub_bytes, GO32_STUBSIZE);
|
||||
|
||||
ADJUST_VAL (filehdr_in->f_symptr, -STUBSIZE);
|
||||
ADJUST_VAL (filehdr_in->f_symptr, -GO32_STUBSIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -184,7 +175,7 @@ adjust_filehdr_out_post (abfd, in, out)
|
||||
{
|
||||
struct internal_filehdr *filehdr_in = (struct internal_filehdr *) in;
|
||||
/* Undo the above change. */
|
||||
ADJUST_VAL (filehdr_in->f_symptr, STUBSIZE);
|
||||
ADJUST_VAL (filehdr_in->f_symptr, GO32_STUBSIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -195,9 +186,9 @@ adjust_scnhdr_in_post (abfd, ext, in)
|
||||
{
|
||||
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
|
||||
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -208,9 +199,9 @@ adjust_scnhdr_out_pre (abfd, in, out)
|
||||
{
|
||||
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
|
||||
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, -STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, -STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, -STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, -GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, -GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, -GO32_STUBSIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -221,9 +212,9 @@ adjust_scnhdr_out_post (abfd, in, out)
|
||||
{
|
||||
struct internal_scnhdr *scnhdr_int = (struct internal_scnhdr *) in;
|
||||
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_scnptr, GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_relptr, GO32_STUBSIZE);
|
||||
ADJUST_VAL (scnhdr_int->s_lnnoptr, GO32_STUBSIZE);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -240,7 +231,7 @@ adjust_aux_in_post (abfd, ext1, type, class, indx, numaux, in1)
|
||||
|
||||
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
||||
{
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE);
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -258,7 +249,7 @@ adjust_aux_out_pre (abfd, inp, type, class, indx, numaux, extp)
|
||||
|
||||
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
||||
{
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -STUBSIZE);
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, -GO32_STUBSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -276,7 +267,7 @@ adjust_aux_out_post (abfd, inp, type, class, indx, numaux, extp)
|
||||
|
||||
if (class == C_BLOCK || class == C_FCN || ISFCN (type) || ISTAG (class))
|
||||
{
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, STUBSIZE);
|
||||
ADJUST_VAL (in->x_sym.x_fcnary.x_fcn.x_lnnoptr, GO32_STUBSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -297,7 +288,7 @@ create_go32_stub (abfd)
|
||||
bfd *abfd;
|
||||
{
|
||||
/* Do it only once. */
|
||||
if (bfd_coff_go32stub (abfd) == NULL)
|
||||
if (coff_data (abfd)->go32stub == NULL)
|
||||
{
|
||||
char *stub;
|
||||
struct stat st;
|
||||
@ -363,32 +354,31 @@ create_go32_stub (abfd)
|
||||
goto stub_end;
|
||||
}
|
||||
/* Now we found a correct stub (hopefully). */
|
||||
bfd_coff_go32stub (abfd)
|
||||
= (PTR) bfd_alloc (abfd, (bfd_size_type) coff_start);
|
||||
if (bfd_coff_go32stub (abfd) == NULL)
|
||||
coff_data (abfd)->go32stub = bfd_alloc (abfd, (bfd_size_type) coff_start);
|
||||
if (coff_data (abfd)->go32stub == NULL)
|
||||
{
|
||||
close (f);
|
||||
return;
|
||||
}
|
||||
lseek (f, 0L, SEEK_SET);
|
||||
if ((unsigned long) read (f, bfd_coff_go32stub (abfd), coff_start)
|
||||
if ((unsigned long) read (f, coff_data (abfd)->go32stub, coff_start)
|
||||
!= coff_start)
|
||||
{
|
||||
bfd_release (abfd, bfd_coff_go32stub (abfd));
|
||||
bfd_coff_go32stub (abfd) = NULL;
|
||||
bfd_release (abfd, coff_data (abfd)->go32stub);
|
||||
coff_data (abfd)->go32stub = NULL;
|
||||
}
|
||||
close (f);
|
||||
}
|
||||
stub_end:
|
||||
/* There was something wrong above, so use now the standard builtin
|
||||
stub. */
|
||||
if (bfd_coff_go32stub (abfd) == NULL)
|
||||
if (coff_data (abfd)->go32stub == NULL)
|
||||
{
|
||||
bfd_coff_go32stub (abfd)
|
||||
= (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE);
|
||||
if (bfd_coff_go32stub (abfd) == NULL)
|
||||
coff_data (abfd)->go32stub
|
||||
= bfd_alloc (abfd, (bfd_size_type) GO32_STUBSIZE);
|
||||
if (coff_data (abfd)->go32stub == NULL)
|
||||
return;
|
||||
memcpy (bfd_coff_go32stub (abfd), stub_bytes, STUBSIZE);
|
||||
memcpy (coff_data (abfd)->go32stub, stub_bytes, GO32_STUBSIZE);
|
||||
}
|
||||
}
|
||||
|
||||
@ -405,17 +395,19 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd)
|
||||
return TRUE;
|
||||
|
||||
/* Check if we have a source stub. */
|
||||
if (bfd_coff_go32stub (ibfd) == NULL)
|
||||
if (coff_data (ibfd)->go32stub == NULL)
|
||||
return TRUE;
|
||||
|
||||
/* As adjust_filehdr_out_pre may get called only after this function,
|
||||
optionally allocate the output stub. */
|
||||
if (bfd_coff_go32stub (obfd) == NULL)
|
||||
bfd_coff_go32stub (obfd) = bfd_alloc (obfd, (bfd_size_type) STUBSIZE);
|
||||
if (coff_data (obfd)->go32stub == NULL)
|
||||
coff_data (obfd)->go32stub = bfd_alloc (obfd,
|
||||
(bfd_size_type) GO32_STUBSIZE);
|
||||
|
||||
/* Now copy the stub. */
|
||||
if (bfd_coff_go32stub (obfd) != NULL)
|
||||
memcpy (bfd_coff_go32stub (obfd), bfd_coff_go32stub (ibfd), STUBSIZE);
|
||||
if (coff_data (obfd)->go32stub != NULL)
|
||||
memcpy (coff_data (obfd)->go32stub, coff_data (ibfd)->go32stub,
|
||||
GO32_STUBSIZE);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
Reference in New Issue
Block a user