aboutsummaryrefslogtreecommitdiff
path: root/bfd/coff-i386.c
diff options
context:
space:
mode:
authorJan W. Jagersma <jwjagersma@gmail.com>2020-04-02 14:31:43 +0100
committerNick Clifton <nickc@redhat.com>2020-04-02 14:31:43 +0100
commit4d095f5b5e57584133f85df42da2123e20834aec (patch)
treed7368d31a7417cb1295596aa0e89567c15a0af63 /bfd/coff-i386.c
parent0dd7b52ede3de7c5e43cc7c0a52a4e2f2b4297b7 (diff)
downloadbinutils-4d095f5b5e57584133f85df42da2123e20834aec.zip
binutils-4d095f5b5e57584133f85df42da2123e20834aec.tar.gz
binutils-4d095f5b5e57584133f85df42da2123e20834aec.tar.bz2
coff-go32-exe: support variable-length stubs
The stub size in GO32 executables has historically been fixed at 2048 bytes, due to hardcoded limitations in bfd. Recent patches to djgpp by Stas Sergeev (CC'd) have pushed the stub right up to this limit, so if any further expansion is desired, this must first be patched in bfd. This series includes three patches: The first changes the meaning of the bfd->origin field slightly, so that target code can use this to specify an offset into the file where the actual bfd is located. The second patch then uses this to enable support for variable-sized stubs in the coff-go32-exe format. The final patch is only a cleanup, it normalizes function and variable names in coff-stgo32.c so that they all begin with the same prefix. bfd * bfdio.c (bfd_bread, bfd_tell, bfd_seek, bfd_mmap): Always add bfd->origin to file offset. * bfdwin.c (bfd_get_file_window): Likewise. * bfd.c: Clarify the use of the bfd->origin field. * bfd-in2.h: Regenerate. * coff-i386.c: Don't include go32exe.h. Allow overriding coff_write_object_contents via COFF_WRITE_CONTENTS. * coff-stgo32.c (go32exe_cleanup, go32exe_mkobject) (go32exe_write_object_contents): New functions. (go32exe_temp_stub, go32exe_temp_stub_size): New static globals. (COFF_WRITE_CONTENTS, GO32EXE_DEFAULT_STUB_SIZE): Define. (create_go32_stub): Remove check for 2k size limit. Read stub from go32exe_temp_stub if present. (go32_stubbed_coff_bfd_copy_private_bfd_data): Allocate and copy variable-length stub. (go32_check_format): Read stub to go32exe_temp_stub, set origin, return go32exe_cleanup. (adjust_filehdr_in_post, adjust_filehdr_out_pre) (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): Remove functions and their associated #defines. * coffcode.h (coff_mkobject_hook): Remove stub copying code. * libcoff-in.h: (struct coff_tdata): New field stub_size. Rename field go32stub to stub. * libcoff.h: Regenerate. * coff-stgo32.c (go32_check_format): Rename to... (go32exe_check_format): ...this. (go32_stubbed_coff_bfd_copy_private_bfd_data): Rename to... (go32exe_copy_private_bfd_data): ...this. (stub_bytes): Rename to... (go32exe_default_stub): ...this. (create_go32_stub): Rename to... (go32exe_create_stub): ...this. * coff-stgo32.c (go32exe_copy_private_bfd_data): Avoid realloc when possible. include * coff/go32exe.h: Remove file. * coff/internal.h (struct internal_filehdr): Remove field go32stub. Remove flag F_GO32STUB.
Diffstat (limited to 'bfd/coff-i386.c')
-rw-r--r--bfd/coff-i386.c22
1 files changed, 8 insertions, 14 deletions
diff --git a/bfd/coff-i386.c b/bfd/coff-i386.c
index 7fb59dd..d3075f5 100644
--- a/bfd/coff-i386.c
+++ b/bfd/coff-i386.c
@@ -31,10 +31,6 @@
#include "coff/pe.h"
#endif
-#ifdef COFF_GO32_EXE
-#include "coff/go32exe.h"
-#endif
-
#ifndef bfd_pe_print_pdata
#define bfd_pe_print_pdata NULL
#endif
@@ -663,23 +659,21 @@ const bfd_target
bfd_getl32, bfd_getl_signed_32, bfd_putl32,
bfd_getl16, bfd_getl_signed_16, bfd_putl16, /* hdrs */
+#ifndef COFF_CHECK_FORMAT
+#define COFF_CHECK_FORMAT coff_object_p
+#endif
+#ifndef COFF_WRITE_CONTENTS
+#define COFF_WRITE_CONTENTS coff_write_object_contents
+#endif
+
/* Note that we allow an object file to be treated as a core file as well. */
-#ifdef COFF_CHECK_FORMAT
{ /* bfd_check_format */
_bfd_dummy_target,
COFF_CHECK_FORMAT,
bfd_generic_archive_p,
COFF_CHECK_FORMAT
},
-#else
- {
- _bfd_dummy_target,
- coff_object_p,
- bfd_generic_archive_p,
- coff_object_p
- },
-#endif
{ /* bfd_set_format */
_bfd_bool_bfd_false_error,
coff_mkobject,
@@ -688,7 +682,7 @@ const bfd_target
},
{ /* bfd_write_contents */
_bfd_bool_bfd_false_error,
- coff_write_object_contents,
+ COFF_WRITE_CONTENTS,
_bfd_write_archive_contents,
_bfd_bool_bfd_false_error
},