[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Bug ld/21404] [avr] assertion fail in bfd/elf32-avr.c:2145

From: cvs-commit at gcc dot gnu.org
Subject: [Bug ld/21404] [avr] assertion fail in bfd/elf32-avr.c:2145
Date: Thu, 11 May 2017 07:18:06 +0000


--- Comment #6 from cvs-commit at gcc dot gnu.org <cvs-commit at gcc dot 
gnu.org> ---
The binutils-2_28-branch branch has been updated by Senthil Kumar Selvaraj


commit e568fc190ac96d6ab427d018613361e03e4bd22b
Author: Senthil Kumar Selvaraj <address@hidden>
Date:   Mon Apr 24 15:17:14 2017 +0530

    Fix PR21404 - assertion fail when calculating symbol size

    Fix a host of problems related to adjustment of
    symbol values and sizes when relaxing for avr.

    1. Adjust symbol size first before adjusting symbol
    value. Otherwise, a symbol whose value just got adjusted to the
    relaxed address also ends up getting resized. See pr21404-1.s.

    2. Reduce symbol sizes only if their span is below an
    alignment boundary. Otherwise, the size gets decremented once when the
    actual instruction is relaxed and padding bytes are added, and again
    when the padding bytes are deleted (if padding ends up being unnecessary).
    pr21404-2.s addresses that, and this bug is really the root cause of

    3. Adjust all symbol values before an alignment boundary.
    Previous code did not adjust symbol values if they fell in the
    would-be padded area, resulting in incorrect symbol values in some
    cases (see pr21404-3.s).

    4. Increase symbol sizes if alignment directives require so.
    As pr21404-4.s shows
    .global nonzero_sym
        jmp  L1
        .p2align 2
    .size nonzero_sym, .-nonzero_sym

    The two nops satisfy the 4 byte alignment at assembly time and
    therefore the size of nonzero_sym is 4. Relaxation shortens
    the 4 byte jmp to a 2 byte rjmp, and to satisfy 4 byte alignment
    the code places 2 extra padding bytes after the nops, increasing
    nonzero_sym's size by 2. This wasn't handled before.

    If the assembly code does not have any align directives, then the
    boundary is the section size, and symbol values and sizes == boundary
    should also get adjusted. To handle that case, add a did_pad variable
    and use that to determine whether it should use < boundary or <= boundary.

    Also get rid of reloc_toaddr, which is now redundant.  toaddr is now not
    adjusted to handle the above case - the newly added
    did_pad variable does the job.

    pr21404-{5,6,7,8} are the same testcases written for local symbols, as
    the code handles them slightly differently.

    2017-05-01  Senthil Kumar Selvaraj  <address@hidden>

        PR ld/21404
        * elf32-avr.c (avr_should_move_sym): New function.
        (avr_should_reduce_sym_size): Likewise.
        (avr_should_increase_sym_size): Likewise.
        (elf32_avr_relax_delete_bytes): Adjust symbol values
        and sizes by calling new functions.

    2017-04-28  Senthil Kumar Selvaraj  <address@hidden>

        PR ld/21404
        * testsuite/ld-avr/pr21404-1.d: New test.
        * testsuite/ld-avr/pr21404-1.s: New test.
        * testsuite/ld-avr/pr21404-2.d: New test.
        * testsuite/ld-avr/pr21404-2.s: New test.
        * testsuite/ld-avr/pr21404-3.d: New test.
        * testsuite/ld-avr/pr21404-3.s: New test.
        * testsuite/ld-avr/pr21404-4.d: New test.
        * testsuite/ld-avr/pr21404-4.s: New test.
        * testsuite/ld-avr/pr21404-5.d: New test.
        * testsuite/ld-avr/pr21404-5.s: New test.
        * testsuite/ld-avr/pr21404-6.d: New test.
        * testsuite/ld-avr/pr21404-6.s: New test.
        * testsuite/ld-avr/pr21404-7.d: New test.
        * testsuite/ld-avr/pr21404-7.s: New test.
        * testsuite/ld-avr/pr21404-8.d: New test.
        * testsuite/ld-avr/pr21404-8.s: New test.

You are receiving this mail because:
You are on the CC list for the bug.

reply via email to

[Prev in Thread] Current Thread [Next in Thread]