mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-06-24 12:23:31 +08:00
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.
This commit is contained in:
@ -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>
|
2009-08-10 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
* elf32-arm.c (elf32_arm_size_stubs): Don't die on undefined local
|
* elf32-arm.c (elf32_arm_size_stubs): Don't die on undefined local
|
||||||
|
@ -141,8 +141,9 @@ adjust_filehdr_in_post (abfd, src, dst)
|
|||||||
|
|
||||||
ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
|
ADJUST_VAL (filehdr_dst->f_symptr, STUBSIZE);
|
||||||
|
|
||||||
/* Save now the stub to be used later. */
|
/* Save now the stub to be used later. FIXME: Memory leak as the caller
|
||||||
bfd_coff_go32stub (abfd) = (PTR) bfd_alloc (abfd, (bfd_size_type) STUBSIZE);
|
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
|
/* Since this function returns no status, I do not set here
|
||||||
any bfd_error_...
|
any bfd_error_...
|
||||||
@ -403,13 +404,18 @@ go32_stubbed_coff_bfd_copy_private_bfd_data (ibfd, obfd)
|
|||||||
if (ibfd->xvec != obfd->xvec)
|
if (ibfd->xvec != obfd->xvec)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
||||||
/* Check if both have a valid stub. */
|
/* Check if we have a source stub. */
|
||||||
if (bfd_coff_go32stub (ibfd) == NULL
|
if (bfd_coff_go32stub (ibfd) == NULL)
|
||||||
|| bfd_coff_go32stub (obfd) == NULL)
|
|
||||||
return TRUE;
|
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. */
|
/* 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;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1,3 +1,9 @@
|
|||||||
|
2009-08-10 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
2009-08-10 Nathan Sidwell <nathan@codesourcery.com>
|
2009-08-10 Nathan Sidwell <nathan@codesourcery.com>
|
||||||
|
|
||||||
* ld-powerpc/relax.s: New.
|
* ld-powerpc/relax.s: New.
|
||||||
|
@ -49,6 +49,54 @@ if {[istarget "i?86-*-vxworks"]} {
|
|||||||
run_dump_test "vxworks1-static"
|
run_dump_test "vxworks1-static"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if [istarget "*-*-go32*"] {
|
||||||
|
run_ld_link_tests {{"go32 stub" "" "" {zero.s} {} "go32stub"}}
|
||||||
|
|
||||||
|
set src "tmpdir/go32stub"
|
||||||
|
set dest "tmpdir/go32stub-copy"
|
||||||
|
|
||||||
|
set test "go32 stub patch the source"
|
||||||
|
set fi [open $src r+]
|
||||||
|
fconfigure $fi -translation binary
|
||||||
|
if {[read $fi 2] != "MZ"} {
|
||||||
|
fail $test
|
||||||
|
} else {
|
||||||
|
pass $test
|
||||||
|
seek $fi 0x40
|
||||||
|
puts -nonewline $fi "objcopy-test-go32stub"
|
||||||
|
}
|
||||||
|
close $fi
|
||||||
|
|
||||||
|
set test "go32 stub objcopy"
|
||||||
|
set status [remote_exec build $OBJCOPY "$OBJCOPYFLAGS $src $dest"]
|
||||||
|
set exec_output [lindex $status 1]
|
||||||
|
set exec_output [prune_warnings $exec_output]
|
||||||
|
if [string match "" $exec_output] then {
|
||||||
|
pass $test
|
||||||
|
} else {
|
||||||
|
send_log "$exec_output\n"
|
||||||
|
verbose "$exec_output" 1
|
||||||
|
fail $test
|
||||||
|
}
|
||||||
|
|
||||||
|
# cmp would compare the whole files and some data after the initial exe
|
||||||
|
# stub could differ.
|
||||||
|
set test "go32 stub comparison after objcopy"
|
||||||
|
set fi [open $src]
|
||||||
|
fconfigure $fi -translation binary
|
||||||
|
set src_stub [read $fi 2048]
|
||||||
|
close $fi
|
||||||
|
set fi [open $dest]
|
||||||
|
fconfigure $fi -translation binary
|
||||||
|
set dest_stub [read $fi 2048]
|
||||||
|
close $fi
|
||||||
|
if {$src_stub == $dest_stub} {
|
||||||
|
pass $test
|
||||||
|
} else {
|
||||||
|
fail $test
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if { !([istarget "i?86-*-elf*"]
|
if { !([istarget "i?86-*-elf*"]
|
||||||
|| ([istarget "i?86-*-linux*"]
|
|| ([istarget "i?86-*-linux*"]
|
||||||
&& ![istarget "*-*-*aout*"]
|
&& ![istarget "*-*-*aout*"]
|
||||||
|
Reference in New Issue
Block a user