-
- Downloads
[AArch64] Fix symbol offset limit
In aarch64_classify_symbol symbols are allowed large offsets on relocations. This means the offset can use all of the +/-4GB offset, leaving no offset available for the symbol itself. This results in relocation overflow and link-time errors for simple expressions like &global_array + 0xffffff00. To avoid this, unless the offset_within_block_p is true, limit the offset to +/-1MB so that the symbol needs to be within a 3.9GB offset from its references. For the tiny code model use a 64KB offset, allowing most of the 1MB range for code/data between the symbol and its references. gcc/ * config/aarch64/aarch64.c (aarch64_classify_symbol): Apply reasonable limit to symbol offsets. testsuite/ * gcc.target/aarch64/symbol-range.c: Improve testcase. * gcc.target/aarch64/symbol-range-tiny.c: Likewise. From-SVN: r277068
Showing
- gcc/ChangeLog 5 additions, 0 deletionsgcc/ChangeLog
- gcc/config/aarch64/aarch64.c 19 additions, 14 deletionsgcc/config/aarch64/aarch64.c
- gcc/testsuite/ChangeLog 5 additions, 0 deletionsgcc/testsuite/ChangeLog
- gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c 4 additions, 4 deletionsgcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
- gcc/testsuite/gcc.target/aarch64/symbol-range.c 4 additions, 4 deletionsgcc/testsuite/gcc.target/aarch64/symbol-range.c
Loading
Please register or sign in to comment