https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98618
--- Comment #6 from CVS Commits <cvs-commit at gcc dot gnu.org> --- The releases/gcc-9 branch has been updated by Wilco Dijkstra <wi...@gcc.gnu.org>: https://gcc.gnu.org/g:1e18f4bbd8318db1e606f7092a224e4bb21a8a26 commit r9-9193-g1e18f4bbd8318db1e606f7092a224e4bb21a8a26 Author: Wilco Dijkstra <wdijk...@arm.com> Date: Wed Oct 16 14:24:41 2019 +0000 [AArch64] Fix symbol offset limit (PR 98618) 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/ PR target/98618 * config/aarch64/aarch64.c (aarch64_classify_symbol): Apply reasonable limit to symbol offsets. gcc/testsuite/ PR target/98618 * gcc.target/aarch64/symbol-range.c: Improve testcase. * gcc.target/aarch64/symbol-range-tiny.c: Likewise. (cherry picked from commit 7d3b27ff12610fde9d6c4b56abc70c6ee9b6b3db)