SEC_NEVER_LOAD cleanup
Kai Tietz
ktietz70@googlemail.com
Fri Oct 15 20:36:00 GMT 2010
More information about the Binutils mailing list
Fri Oct 15 20:36:00 GMT 2010
- Previous message (by thread): SEC_NEVER_LOAD cleanup
- Next message (by thread): SEC_NEVER_LOAD cleanup
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
2010/10/15 Dave Korn <dave.korn.cygwin@gmail.com>: > > Hi Alan, > > On 16/09/2010 01:03, Alan Modra wrote: >> This gets rid of SEC_NEVER_LOAD in ELF code, curing these failures: > >> I spent quite a lot of time going through changes related to >> SEC_NEVER_LOAD. Testcases in various bug reports behave reasonably >> after this patch, and I think the COFF support should work too but I'm >> less sure of this since I don't have any reason to use COFF/ECOFF/PE >> myself. > >> bfd/ >> * elf.c (bfd_elf_get_default_section_type): Don't test SEC_NEVER_LOAD. >> * elflink.c (elf_link_input_bfd): Likewise. >> ld/ >> * ld.texinfo (NOLOAD): Do not erroneously state that contents will >> appear in output file. >> * ldlang.c (lang_add_section): Clear SEC_HAS_CONTENTS on noload >> unless SEC_COFF_SHARED_LIBRARY. >> (map_input_to_output_sections): Don't set SEC_HAS_CONTENTS for noload >> output sections. >> (lang_size_sections_1): Don't test SEC_NEVER_LOAD when deciding >> to update dot in region. Ditto when setting SEC_ALLOC if dot >> advanced due to assignment. >> * ldwrite.c (build_link_order): Don't test SEC_NEVER_LOAD. > > This patch causes a failure building the cygwin dll: > >> GNU ld (GNU Binutils) 2.20.51.20100916 >> Creating library file: cygdll.a >> /gnu/binutils/git.repo/obj/ld/.libs/ld-new: BFD (GNU Binutils) 2.20.51.20100916 >> assertion fail /gnu/binutils/git.repo/binutils/bfd/linker.c:2678 >> /gnu/binutils/git.repo/obj/ld/.libs/ld-new: final link failed: Section has no contents > > Which appears to be from here: > >> static bfd_boolean >> default_data_link_order (bfd *abfd, >> struct bfd_link_info *info ATTRIBUTE_UNUSED, >> asection *sec, >> struct bfd_link_order *link_order) >> { >> bfd_size_type size; >> size_t fill_size; >> bfd_byte *fill; >> file_ptr loc; >> bfd_boolean result; >> >> BFD_ASSERT ((sec->flags & SEC_HAS_CONTENTS) != 0); > > That's triggered by the ".gnu_debuglink_overlay" section. It has flags = > 512 - SEC_NEVER_LOAD is set and nothing else. It's getting added to the link > via a bit of custom linker script in the cygwin dll build system that looks > like so: > >> .gnu_debuglink_overlay ALIGN(__section_alignment__) (NOLOAD): >> { >> BYTE(0) /* c */ >> BYTE(0) /* y */ >> BYTE(0) /* g */ >> BYTE(0) /* w */ >> BYTE(0) /* i */ >> BYTE(0) /* n */ >> BYTE(0) /* 1 */ >> BYTE(0) /* . */ >> BYTE(0) /* d */ >> BYTE(0) /* b */ >> BYTE(0) /* g */ >> BYTE(0) /* \0 */ >> LONG(0) /* checksum */ >> } > > I think (haven't checked yet) that this looks like a consequence of the > ldlang.c changes. Any thoughts on how to fix it? > > cheers, > DaveK > > Well, you can add this section to the comparison for debugging section in bfd's coffcode.h (like done there for the others - .debug*, comment, etc). Should work then. Cheers, Kai -- | (\_/) This is Bunny. Copy and paste | (='.'=) Bunny into your signature to help | (")_(") him gain world domination
- Previous message (by thread): SEC_NEVER_LOAD cleanup
- Next message (by thread): SEC_NEVER_LOAD cleanup
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Binutils mailing list