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]

Re: SEC_NEVER_LOAD cleanup


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]