diff options
author | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-08-10 21:38:35 +0000 |
---|---|---|
committer | Jan Kratochvil <jan.kratochvil@redhat.com> | 2009-08-10 21:38:35 +0000 |
commit | a4c38b28019d1ebdf7878b3968fb5801a499bd59 (patch) | |
tree | 9aa57092f87a4dce45fce685c39c29c0352e35a7 /bfd | |
parent | 6e6929cb64d47bea3352ff5ea4dff2701aa70242 (diff) | |
download | gdb-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/ChangeLog | 7 | ||||
-rw-r--r-- | bfd/coff-stgo32.c | 18 |
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; } |