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] |
Gas in binutils 2.21 used to aggressively set the Tag_DIV_use flag to 1 (ie "Not allowed"), which will be propagated through the attribute handling code in bfd/elf32-arm.c and gold/arm.cc and serve as the big hammer to set Tag_DIV_use to 1 in the final output. In 2.22 changes were made into gas and bfd to correctly allow 0 (ie "Allowed in Thumb-ISA, v7-R or v7-M") and 2 (ie "Allowed in v7-A with integer division extension") to co-exist, but gold is not picking up the corresponding fix and it still strictly expects identical Tag_DIV_use values across all binary files or at least a 1 to unify the attribute. Following are two simple test functions used to reproduce the problem: div.c: int div(int i, int j) { return i/j; } main.c: include <stdio.h> extern int div(int, int); int main() { printf("4 / 2 = %d\n", div(4, 2)); return 0; } If div.c is compiled with -mcpu=cortex-a15 and main.c is compiled with -mcpu=cortex-a9, only div.o will have Tag_DIV_use set to 2 and main.o will use the default value 0, but gold will fail to link them with the DIV usage mismatch error. This patch basically ports the new logic from bfd/elf32_arm.c over to gold/arm.cc and with it the linker is able to link the program.
Attachment:
div.o
Description: Binary data
Attachment:
main.o
Description: Binary data
Attachment:
gold_Tag_DIV_use.patch
Description: Binary data
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |