]> git.ipfire.org Git - thirdparty/gcc.git/commit
[AArch64] Fix symbol offset limit
authorwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Oct 2019 14:24:41 +0000 (14:24 +0000)
committerwilco <wilco@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 16 Oct 2019 14:24:41 +0000 (14:24 +0000)
commitf4d984e4b92aaeb67f9c8f72082542f6d979a330
tree2c2ebc761a61533c8bc20a4cc3ae61decee73ab5
parentc85816f10d4813d50a8a30a1263fd76a87feb357
[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.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@277068 138bc75d-0d04-0410-961f-82ee72b054a4
gcc/ChangeLog
gcc/config/aarch64/aarch64.c
gcc/testsuite/ChangeLog
gcc/testsuite/gcc.target/aarch64/symbol-range-tiny.c
gcc/testsuite/gcc.target/aarch64/symbol-range.c