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.
_______________________________________________
bug-binutils mailing list
[email protected]
https://lists.gnu.org/mailman/listinfo/bug-binutils