bug-binutils
[Top][All Lists]
Advanced

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

[Bug ld/19979] New: Linker arithmetic behavior changed between 2.25 and


From: stefan.reinauer at coreboot dot org
Subject: [Bug ld/19979] New: Linker arithmetic behavior changed between 2.25 and 2.26
Date: Thu, 21 Apr 2016 19:39:42 +0000

https://sourceware.org/bugzilla/show_bug.cgi?id=19979

            Bug ID: 19979
           Summary: Linker arithmetic behavior changed between 2.25 and
                    2.26
           Product: binutils
           Version: 2.26
            Status: NEW
          Severity: normal
          Priority: P2
         Component: ld
          Assignee: unassigned at sourceware dot org
          Reporter: stefan.reinauer at coreboot dot org
  Target Milestone: ---

We used to have the following assert in our linker script:

/* SRAM memory is mapped in two different locations. Define regions in both for
 * full overlap checking and use this to guarantee they're kept in sync. */
#define ASSERT_MIRRORED(r1, r2) \
        _ = ASSERT(_e##r1 - _##r1 == _e##r2 - _##r2 && \
                   _##r1 & 0x7fffffff == _##r2 & 0x7fffffff, \
                   STR(r1 and r2 do not match!));
[..]
ASSERT_MIRRORED(bootblock, gram_bootblock)

With binutils 2.25 everything was fine, but the assert started triggering with
2.26.

As a fix in our code base I changed the code to:
#define ASSERT_MIRRORED(r1, r2) \
        _ = ASSERT((_e##r1 - _##r1) == (_e##r2 - _##r2) && \
                   (_##r1 & 0x7fffffff) == (_##r2 & 0x7fffffff), \
                   STR(r1 and r2 do not match!));

which seems like a good idea anyways, but I think binutils 2.26 is still doing
the wrong thing by grouping the parts of the expression differently than it
should.

Here's the link to the code change:
https://review.coreboot.org/#/c/14440

-- 
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]