Fix objcopy's --preserve-dates command line option so that it will work with PE format files.
PR binutils/pr25662 bfd * libcoff-in.h (struct pe_tdata): Rename the insert_timestamp field to timestamp and make it an integer. * libcoff.h: Regenerate. * peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Test the timestamp field in the pe_data structure rather than the insert_timestamp field. binutils* objcopy.c (copy_object): When copying PE format files set the timestamp field in the pe_data structure if the preserve_dates flag is set. * testsuite/binutils-all/objcopy.exp (objcopy_test) Use --preserve-dates in place of the -p option, in order to make its effect more obvious. ld * emultempl/pe.em (after_open): Replace initialisation of the insert_timestamp field in the pe_data structure with an initialisation of the timestamp field. * emultemp/pep.em: Likewise. * pe-dll.c (fill_edata): Use the timestamp field in the pe_data structure instead of the insert_timestamp field.
This commit is contained in:
parent
227c0bf4b3
commit
00386881a3
@ -1,3 +1,13 @@
|
|||||||
|
2020-03-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR binutils/pr25662
|
||||||
|
* libcoff-in.h (struct pe_tdata): Rename the insert_timestamp
|
||||||
|
field to timestamp and make it an integer.
|
||||||
|
* libcoff.h: Regenerate.
|
||||||
|
* peXXigen.c (_bfd_XXi_only_swap_filehdr_out): Test the timestamp
|
||||||
|
field in the pe_data structure rather than the insert_timestamp
|
||||||
|
field.
|
||||||
|
|
||||||
2020-03-30 Alan Modra <amodra@gmail.com>
|
2020-03-30 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
PR 25745
|
PR 25745
|
||||||
|
@ -128,7 +128,9 @@ typedef struct pe_tdata
|
|||||||
int has_reloc_section;
|
int has_reloc_section;
|
||||||
int dont_strip_reloc;
|
int dont_strip_reloc;
|
||||||
int dos_message[16];
|
int dos_message[16];
|
||||||
bfd_boolean insert_timestamp;
|
/* The timestamp to insert into the output file.
|
||||||
|
If the timestamp is -1 then the current time is used. */
|
||||||
|
int timestamp;
|
||||||
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
|
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
|
||||||
flagword real_flags;
|
flagword real_flags;
|
||||||
|
|
||||||
|
@ -132,7 +132,9 @@ typedef struct pe_tdata
|
|||||||
int has_reloc_section;
|
int has_reloc_section;
|
||||||
int dont_strip_reloc;
|
int dont_strip_reloc;
|
||||||
int dos_message[16];
|
int dos_message[16];
|
||||||
bfd_boolean insert_timestamp;
|
/* The timestamp to insert into the output file.
|
||||||
|
If the timestamp is -1 then the current time is used. */
|
||||||
|
int timestamp;
|
||||||
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
|
bfd_boolean (*in_reloc_p) (bfd *, reloc_howto_type *);
|
||||||
flagword real_flags;
|
flagword real_flags;
|
||||||
|
|
||||||
|
@ -876,10 +876,10 @@ _bfd_XXi_only_swap_filehdr_out (bfd * abfd, void * in, void * out)
|
|||||||
|
|
||||||
/* Use a real timestamp by default, unless the no-insert-timestamp
|
/* Use a real timestamp by default, unless the no-insert-timestamp
|
||||||
option was chosen. */
|
option was chosen. */
|
||||||
if ((pe_data (abfd)->insert_timestamp))
|
if ((pe_data (abfd)->timestamp) == -1)
|
||||||
H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
|
H_PUT_32 (abfd, time (0), filehdr_out->f_timdat);
|
||||||
else
|
else
|
||||||
H_PUT_32 (abfd, 0, filehdr_out->f_timdat);
|
H_PUT_32 (abfd, pe_data (abfd)->timestamp, filehdr_out->f_timdat);
|
||||||
|
|
||||||
PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
|
PUT_FILEHDR_SYMPTR (abfd, filehdr_in->f_symptr,
|
||||||
filehdr_out->f_symptr);
|
filehdr_out->f_symptr);
|
||||||
|
@ -1,3 +1,13 @@
|
|||||||
|
2020-03-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR binutils/25662
|
||||||
|
* objcopy.c (copy_object): When copying PE format files set the
|
||||||
|
timestamp field in the pe_data structure if the preserve_dates
|
||||||
|
flag is set.
|
||||||
|
* testsuite/binutils-all/objcopy.exp (objcopy_test) Use
|
||||||
|
--preserve-dates in place of the -p option, in order to make its
|
||||||
|
effect more obvious.
|
||||||
|
|
||||||
2020-03-28 Alan Modra <amodra@gmail.com>
|
2020-03-28 Alan Modra <amodra@gmail.com>
|
||||||
|
|
||||||
* testsuite/binutils-all/objcopy.exp (objcopy_test): Only
|
* testsuite/binutils-all/objcopy.exp (objcopy_test): Only
|
||||||
|
@ -2774,6 +2774,11 @@ copy_object (bfd *ibfd, bfd *obfd, const bfd_arch_info_type *input_arch)
|
|||||||
|
|
||||||
file_alignment, section_alignment);
|
file_alignment, section_alignment);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (preserve_dates
|
||||||
|
&& bfd_get_flavour (ibfd) == bfd_target_coff_flavour
|
||||||
|
&& bfd_pei_p (ibfd))
|
||||||
|
pe->timestamp = pe_data (ibfd)->coff.timestamp;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isympp)
|
if (isympp)
|
||||||
|
@ -76,7 +76,7 @@ proc objcopy_test {testname srcfile type asflags ldflags} {
|
|||||||
unresolved "objcopy $type ($testname)"
|
unresolved "objcopy $type ($testname)"
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
set xflags "-p"
|
set xflags "--preserve-dates"
|
||||||
}
|
}
|
||||||
|
|
||||||
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $xflags $t_tempfile $t_copyfile"]
|
set got [binutils_run $OBJCOPY "$OBJCOPYFLAGS $xflags $t_tempfile $t_copyfile"]
|
||||||
|
10
ld/ChangeLog
10
ld/ChangeLog
@ -1,3 +1,13 @@
|
|||||||
|
2020-03-30 Nick Clifton <nickc@redhat.com>
|
||||||
|
|
||||||
|
PR binutils/25662
|
||||||
|
* emultempl/pe.em (after_open): Replace initialisation of the
|
||||||
|
insert_timestamp field in the pe_data structure with an
|
||||||
|
initialisation of the timestamp field.
|
||||||
|
* emultemp/pep.em: Likewise.
|
||||||
|
* pe-dll.c (fill_edata): Use the timestamp field in the pe_data
|
||||||
|
structure instead of the insert_timestamp field.
|
||||||
|
|
||||||
2020-03-28 H.J. Lu <hongjiu.lu@intel.com>
|
2020-03-28 H.J. Lu <hongjiu.lu@intel.com>
|
||||||
|
|
||||||
PR 25732
|
PR 25732
|
||||||
|
@ -1375,7 +1375,10 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
pe_data (link_info.output_bfd)->pe_opthdr = pe;
|
pe_data (link_info.output_bfd)->pe_opthdr = pe;
|
||||||
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
||||||
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
||||||
pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
|
if (insert_timestamp)
|
||||||
|
pe_data (link_info.output_bfd)->timestamp = -1;
|
||||||
|
else
|
||||||
|
pe_data (link_info.output_bfd)->timestamp = 0;
|
||||||
|
|
||||||
/* At this point we must decide whether to use long section names
|
/* At this point we must decide whether to use long section names
|
||||||
in the output or not. If the user hasn't explicitly specified
|
in the output or not. If the user hasn't explicitly specified
|
||||||
|
@ -1364,7 +1364,10 @@ gld_${EMULATION_NAME}_after_open (void)
|
|||||||
pe_data (link_info.output_bfd)->pe_opthdr = pep;
|
pe_data (link_info.output_bfd)->pe_opthdr = pep;
|
||||||
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
pe_data (link_info.output_bfd)->dll = init[DLLOFF].value;
|
||||||
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
pe_data (link_info.output_bfd)->real_flags |= real_flags;
|
||||||
pe_data (link_info.output_bfd)->insert_timestamp = insert_timestamp;
|
if (insert_timestamp)
|
||||||
|
pe_data (link_info.output_bfd)->timestamp = -1;
|
||||||
|
else
|
||||||
|
pe_data (link_info.output_bfd)->timestamp = 0;
|
||||||
|
|
||||||
/* At this point we must decide whether to use long section names
|
/* At this point we must decide whether to use long section names
|
||||||
in the output or not. If the user hasn't explicitly specified
|
in the output or not. If the user hasn't explicitly specified
|
||||||
|
@ -1211,8 +1211,10 @@ fill_edata (bfd *abfd, struct bfd_link_info *info ATTRIBUTE_UNUSED)
|
|||||||
|
|
||||||
memset (edata_d, 0, edata_sz);
|
memset (edata_d, 0, edata_sz);
|
||||||
|
|
||||||
if (pe_data (abfd)->insert_timestamp)
|
if (pe_data (abfd)->timestamp == -1)
|
||||||
H_PUT_32 (abfd, time (0), edata_d + 4);
|
H_PUT_32 (abfd, time (0), edata_d + 4);
|
||||||
|
else
|
||||||
|
H_PUT_32 (abfd, pe_data (abfd)->timestamp, edata_d + 4);
|
||||||
|
|
||||||
if (pe_def_file->version_major != -1)
|
if (pe_def_file->version_major != -1)
|
||||||
{
|
{
|
||||||
|
Loading…
Reference in New Issue
Block a user