2011/4/18 H.J. Lu : > On Mon, Apr 18, 2011 at 2:33 AM, Kai Tietz wrote: >> Hello, >> >> The recent patch about this subject I withdraw and replace it by the >> more enhanced version.  I noticed that a bit more checkings and a >> different approach on writing eh_frame/debug_frame sections out, was >> necessary.  Additionally this patch allows for PE-COFF targets, that >> debugging sections can have link-once flags active. >> >> >> ChangeLog bfd/ >> >> 2011-04-18  Kai Tietz >> >>        * coffcode.h (sec_to_styp_flags): Allow linkonce for >>        debugging sections. >> >> ChangeLog gas/ >> >> 2011-04-18  Kai Tietz >> >>       * dw2gencfi.c (dwcfi_seg_list): New struct. >>       (dwcfi_hash): New static hash variable. >>       (get_debugseg_name): New. >>       (alloc_debugseg_item): New. >>       (make_debug_seg): New. >>       (dwcfi_hash_insert): New. >>       (dwcfi_hash_find): New. >>       (dwcfi_hash_find_or_make): New. >>       (cfi_insn_data): New member cur_seg. >>       (cie_entry): Likewise. >>       (fde_entry): New cseg and handled members. >>       (alloc_fde_entry): Initialize cseg member. >>       (alloc_cfi_insn_data): Initialize cur_seg member. >>       (dot_cfi_sections): Compare for beginning of >>       section names via strncmp. >>       (get_cfi_seg): New. >>       (cfi_finish): Treat link-once sections. >>       (is_now_linkonce_segment): New local helper. >>       (output_cie): Ignore cie entries not member of current >>       segment. >>       (output_fde): Likewise. >>       (select_cie_for_fde): Likewise. >>       (cfi_change_reg_numbers): Add new argument for current segment >>       and ignore insn elements, if not part of current segment. >>       * ehopt.c (get_cie_info): Use strncmp for >>       section name matching. >>       (heck_eh_frame): Likewise. >> >> ChangeLog ld/ >> >> 2011-04-18  Kai Tietz >> >>       * scripttempl/alphavms.sc: Handle .eh_frame($|.)* sections. >>       * scripttempl/armbpabi.sc: Likewise. >>       * scripttempl/avr.sc: Likewise. >>       * scripttempl/crisaout.sc: Likewise. >>       * scripttempl/elf.sc: Likewise. >>       * scripttempl/elf32cr16.sc: Likewise. >>       * scripttempl/elf32crx.sc: Likewise. >>       * scripttempl/elf32msp430.sc: Likewise. >>       * scripttempl/elf32msp430_3.sc: Likewise. >>       * scripttempl/elf32sh-symbian.sc: Likewise. >>       * scripttempl/elf64hppa.sc: Likewise. >>       * scripttempl/elf_chaos.sc: Likewise. >>       * scripttempl/elfd10v.sc: Likewise. >>       * scripttempl/elfd30v.sc: Likewise. >>       * scripttempl/elfi370.sc: Likewise. >>       * scripttempl/elfm68hc11.sc: Likewise. >>       * scripttempl/elfm68hc12.sc: Likewise. >>       * scripttempl/elfmicroblaze.sc: Likewise. >>       * scripttempl/elfxtensa.sc: Likewise. >>       * scripttempl/epocpe.sc: Likewise. >>       * scripttempl/i386beos.sc: Likewise. >>       * scripttempl/i386go32.sc: Likewise. >>       * scripttempl/ip2k.sc: Likewise. >>       * scripttempl/iq2000.sc: Likewise. >>       * scripttempl/mcorepe.sc: Likewise. >>       * scripttempl/mep.sc: Likewise. >>       * scripttempl/mmo.sc: Likewise. >>       * scripttempl/pe.sc: Likewise. >>       * scripttempl/pep.sc: Likewise. >>       * scripttempl/v850.sc: Likewise. >>       * scripttempl/xstormy16.sc: Likewise. >> >> Tested for x86_64-w64-mingw32, i686-w64-mingw32, and i686-pc-cygwin. >> Ok for apply? > > 2 comments: > > 1. You should test Linux/x86 since you change ELF targets. > 2. You should add some testcases to show gas/ld work correctly. > > > -- > H.J. > I tested things for x86_64-pc-linux-gnu and found that the linkonce code collides with eh_frame_hdr code in bfd. So I removed complete ELF handling here and just enable cfi linkonce handling for PE-COFF targets. ChangeLog bfd/ 2011-04-18 Kai Tietz * coffcode.h (sec_to_styp_flags): Allow linkonce for debugging sections. ChangeLog gas/ 2011-04-18 Kai Tietz * dw2gencfi.c (dwcfi_seg_list): New struct. (dwcfi_hash): New static hash variable. (get_debugseg_name): New. (alloc_debugseg_item): New. (make_debug_seg): New. (dwcfi_hash_insert): New. (dwcfi_hash_find): New. (dwcfi_hash_find_or_make): New. (cfi_insn_data): New member cur_seg. (cie_entry): Likewise. (fde_entry): New cseg and handled members. (alloc_fde_entry): Initialize cseg member. (alloc_cfi_insn_data): Initialize cur_seg member. (dot_cfi_sections): Compare for beginning of section names via strncmp. (get_cfi_seg): New. (cfi_finish): Treat link-once sections. (is_now_linkonce_segment): New local helper. (output_cie): Ignore cie entries not member of current segment. (output_fde): Likewise. (select_cie_for_fde): Likewise. (cfi_change_reg_numbers): Add new argument for current segment and ignore insn elements, if not part of current segment. * ehopt.c (get_cie_info): Use strncmp for section name matching. (heck_eh_frame): Likewise. ChangeLog ld/ 2011-04-18 Kai Tietz * scripttempl/pe.sc: Likewise. * scripttempl/pep.sc: Likewise. ChangeLog ld/testsuite/ 2011-04-18 Kai Tietz * ld-pe/pe.exp: Add cfi/cfi32 tests. * ld-pe/cfi.d: New. * ld-pe/cfi32.d: New. * ld-pe/cfia.s: New. * ld-pe/cfib.s: New. I added a testcase for pe and pe+ and regression tested it for i686-w64-mingw32, i686-pc-cygwin, x86_64-w64-mingw32, and x86_64-pc-linux-gnu. Ok for apply? Regards, Kai