summaryrefslogtreecommitdiff
path: root/bfd
diff options
context:
space:
mode:
authorJan Kratochvil <jan.kratochvil@redhat.com>2009-08-10 21:38:35 +0000
committerJan Kratochvil <jan.kratochvil@redhat.com>2009-08-10 21:38:35 +0000
commita4c38b28019d1ebdf7878b3968fb5801a499bd59 (patch)
tree9aa57092f87a4dce45fce685c39c29c0352e35a7 /bfd
parent6e6929cb64d47bea3352ff5ea4dff2701aa70242 (diff)
downloadgdb-a4c38b28019d1ebdf7878b3968fb5801a499bd59.tar.gz
bfd/
Fix go32 stub preservation by objcopy. * coff-stgo32.c (adjust_filehdr_in_post): Use bfd_malloc. (go32_stubbed_coff_bfd_copy_private_bfd_data): Optionally allocate OBFD go32stub. ld/testsuite/ Test go32 stub preservation by objcopy. * ld-i386/i386.exp (go32 stub, go32 stub patch the source) (go32 stub objcopy, go32 stub comparison after objcopy): New.
Diffstat (limited to 'bfd')
-rw-r--r--bfd/ChangeLog7
-rw-r--r--bfd/coff-stgo32.c18
2 files changed, 19 insertions, 6 deletions
diff --git a/bfd/ChangeLog b/bfd/ChangeLog
index 779768c7e95..d34a4f27dc8 100644
--- a/bfd/ChangeLog
+++ b/bfd/ChangeLog
@@ -1,3 +1,10 @@
+2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ Fix go32 stub preservation by objcopy.
+ * coff-stgo32.c (adjust_filehdr_in_post): Use bfd_malloc.
+ (go32_stubbed_coff_bfd_copy_private_bfd_data): Optionally allocate OBFD
+ go32stub.
+
2009-08-10 Nathan Sidwell <nathan@codesourcery.com>
* elf32-arm.c (elf32_arm_size_stubs): Don't die on undefined local
diff --git a/bfd/coff-stgo32.c b/bfd/coff-stgo32.c
index b8928befa68..51ea732ed97 100644
--- a/bfd/coff-stgo32.c
+++ b/bfd/coff-stgo32.c
@@ -141,8 +141,9 @@ adjust_filehdr_in_post (abfd, src, dst)
ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
- /* Save now the stub to be used later. */
- bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, (bfd_size_type) 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_...
@@ -403,13 +404,18 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd)
if (ibfd->xvec != obfd->xvec)
return TRUE;
- /* Check if both have a valid stub. */
- if (bfd_coff_go32stub (ibfd) == NULL
- || bfd_coff_go32stub (obfd) == NULL)
+ /* Check if we have a source stub. */
+ if (bfd_coff_go32stub (ibfd) == 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);
+
/* Now copy the stub. */
- memcpy (bfd_coff_go32stub (obfd), bfd_coff_go32stub (ibfd), STUBSIZE);
+ if (bfd_coff_go32stub (obfd) != NULL)
+ memcpy (bfd_coff_go32stub (obfd), bfd_coff_go32stub (ibfd), STUBSIZE);
return TRUE;
}