This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
On Fri, Apr 24, 2009 at 2:58 PM, H.J. Lu <hjl.tools@gmail.com> wrote: > On Fri, Apr 24, 2009 at 6:41 AM, H.J. Lu <hjl.tools@gmail.com> wrote: >> On Fri, Apr 24, 2009 at 6:00 AM, Kai Tietz <ktietz70@googlemail.com> wrote: >>> Hello, >>> >>> 2009/4/24 Kai Tietz <ktietz70@googlemail.com>: >>>> Hello, >>>> >>>> The current implementation of objcopy/strip in binutils has problems, >>>> because for pe-coff targets. It assumes at the moment that it is an >>>> i386 version. This leads to issues (especially on strip) for PE+ >>>> target that binaries are getting corrupted. So I think we have here to >>>> move those target specific pe-coff parts into seperate files. (I >>>> assume that possibly for othe pe-coff targets then i386 the same >>>> problem exists). Of course we could use here target specific macros to >>>> change internal structures, but for a mulilib version of them this >>>> isn't suitable anymore. >>>> So possible somebody of you have a strong opinion about how this issue >>>> could be solved. I'll prepare a patch for it and post it soon. >>> >>> Ah, I found the major issue here >>> >>> 2009-04-17 ?H.J. Lu ?<hongjiu.lu@intel.com> >>> >>> ? ? ? ?PR binutils/10074 >>> >>> This patch made objcopy and strip for PE-Coff target 32-bit PE only >> >> I am trying to understand where the problem is. pe->pe_opthdr is >> supposed to target independent. Why doesn't it work for w64? > > The problem is > > #ifdef COFF_PAGE_SIZE > ? ?/* Clear D_PAGED if section alignment is smaller than > ? ? ? COFF_PAGE_SIZE. ?*/ > ? if (pe_data (abfd)->pe_opthdr.SectionAlignment < COFF_PAGE_SIZE) > ? ? abfd->flags &= ~D_PAGED; > #endif > > in coff_compute_section_file_positions. For objcopy, > pe_data (abfd)->pe_opthdr.SectionAlignment may not be set. To > change PE parameters, we should call bfd_copy_private_bfd_data > before changing PE parameters. This patch works for me on > both w32 and w64. > > > -- > H.J. > -- > 2009-04-24 ?H.J. Lu ?<hongjiu.lu@intel.com> > > ? ? ? ?* objcopy.c (copy_object): Call bfd_copy_private_bfd_data > ? ? ? ?before changing PE parameters. > We can't calll bfd_copy_private_bfd_data first. This patch only copies pe_opthdr. -- H.J. -- bfd/ 2009-04-24 H.J. Lu <hongjiu.lu@intel.com> * peXXigen.c (_bfd_XX_bfd_copy_private_bfd_data_common): Don't copy pe_opthdr. binutils/ 2009-04-24 H.J. Lu <hongjiu.lu@intel.com> * objcopy.c (copy_object): Copy pe_opthdr before changing PE parameters.
Attachment:
objcopy-pe-2.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |