4106101c44
Some early revisions of the Cortex-A53 have an erratum (843419). The details of the erratum are quite complex and involve dynamic conditions. For the purposes of the workaround we have simplified the static conditions to an ADRP in the last two instructions of a 4KByte page, followed within four instructions by a load/store dependent on the ADRP. This patch adds support to conservatively scan for and workaround Cortex A53 erratum 843419. There are two different workaround strategies used. The first is to rewrite ADRP instructions which form part of an erratum sequence with an ADR instruction. In situations where the ADR provides insufficient offset the dependent load or store instruction from the sequence is moved to a stub section and branches are inserted from the original sequence to the relocated instruction and back again. Stub section sizes are rounded up to a multiple of 4096 in order to ensure that the act of inserting work around stubs does not create more errata sequences. Workaround stubs are always inserted into the stub section associated with the input section containing the erratum sequence. This ensures that the fully relocated form of the veneered load store instruction is available at the point in time when the stub section is written.
198 lines
6.1 KiB
Text
198 lines
6.1 KiB
Text
# Expect script for various AARCH64 ELF tests.
|
|
# Copyright (C) 2009-2015 Free Software Foundation, Inc.
|
|
#
|
|
# This file is part of the GNU Binutils.
|
|
#
|
|
# This program is free software; you can redistribute it and/or modify
|
|
# it under the terms of the GNU General Public License as published by
|
|
# the Free Software Foundation; either version 3 of the License, or
|
|
# (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU General Public License
|
|
# along with this program; if not, write to the Free Software
|
|
# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
|
|
# MA 02110-1301, USA.
|
|
|
|
# Exclude non-aarch64-ELF targets.
|
|
if { ![is_elf_format] || ![istarget "aarch64*-*-*"] } {
|
|
return
|
|
}
|
|
|
|
# List contains test-items with 3 items followed by 2 lists:
|
|
# 0:name 1:ld early options 2:ld late options 3:assembler options
|
|
# 4:filenames of assembler files 5: action and options. 6: name of output file
|
|
|
|
# Actions:
|
|
# objdump: Apply objdump options on result. Compare with regex (last arg).
|
|
# nm: Apply nm options on result. Compare with regex (last arg).
|
|
# readelf: Apply readelf options on result. Compare with regex (last arg).
|
|
|
|
set aarch64elftests {
|
|
{"EH Frame merge" "-Ttext 0x8000" "" "" {eh-frame-bar.s eh-frame-foo.s}
|
|
{{objdump --dwarf=frames eh-frame.d}} "eh-frame"}
|
|
{"Erratum 835769 dump test"
|
|
"--fix-cortex-a53-835769" "" "" {erratum835769.s}
|
|
{{objdump -dr erratum835769.d}}
|
|
"erratum835769"}
|
|
{"Erratum 835769 dump test -shared"
|
|
"--fix-cortex-a53-835769 -shared" "" "" {erratum835769.s}
|
|
{{objdump -dr erratum835769.d}}
|
|
"erratum835769"}
|
|
}
|
|
|
|
run_ld_link_tests $aarch64elftests
|
|
run_dump_test "erratum843419"
|
|
|
|
# Relocation Tests
|
|
run_dump_test "weak-undefined"
|
|
run_dump_test "emit-relocs-257"
|
|
run_dump_test "emit-relocs-257-be"
|
|
# 258 is tested in 257
|
|
# 259 is tested in 257
|
|
run_dump_test "emit-relocs-260"
|
|
run_dump_test "emit-relocs-260-be"
|
|
# 261 is tested by 260
|
|
run_dump_test "emit-relocs-262"
|
|
run_dump_test "emit-relocs-263"
|
|
run_dump_test "emit-relocs-264"
|
|
run_dump_test "emit-relocs-264-bad"
|
|
run_dump_test "emit-relocs-265"
|
|
run_dump_test "emit-relocs-266"
|
|
run_dump_test "emit-relocs-266-bad"
|
|
run_dump_test "emit-relocs-267"
|
|
run_dump_test "emit-relocs-268"
|
|
run_dump_test "emit-relocs-268-bad"
|
|
run_dump_test "emit-relocs-269"
|
|
run_dump_test "emit-relocs-269-bad"
|
|
run_dump_test "emit-relocs-270"
|
|
run_dump_test "emit-relocs-270-bad"
|
|
run_dump_test "emit-relocs-271"
|
|
run_dump_test "emit-relocs-272"
|
|
run_dump_test "emit-relocs-273"
|
|
run_dump_test "emit-relocs-274"
|
|
run_dump_test "emit-relocs-275"
|
|
run_dump_test "emit-relocs-276"
|
|
run_dump_test "emit-relocs-277"
|
|
run_dump_test "emit-relocs-278"
|
|
run_dump_test "emit-relocs-279"
|
|
run_dump_test "emit-relocs-279-bad"
|
|
run_dump_test "emit-relocs-280"
|
|
# 281 is unused
|
|
run_dump_test "emit-relocs-282"
|
|
run_dump_test "emit-relocs-283"
|
|
run_dump_test "emit-relocs-284"
|
|
run_dump_test "emit-relocs-285"
|
|
run_dump_test "emit-relocs-286"
|
|
run_dump_test "emit-relocs-286-bad"
|
|
# 287-298 are not done yet
|
|
run_dump_test "emit-relocs-299"
|
|
# 300-308 are not done yet
|
|
run_dump_test "emit-relocs-309-up"
|
|
run_dump_test "emit-relocs-309-low"
|
|
run_dump_test "emit-relocs-309-up-bad"
|
|
run_dump_test "emit-relocs-309-low-bad"
|
|
# 310 not done yet
|
|
run_dump_test "emit-relocs-311"
|
|
run_dump_test "emit-relocs-312"
|
|
|
|
# test addend correctness when --emit-relocs specified for non-relocatable obj.
|
|
run_dump_test "emit-relocs-local-addend"
|
|
# test addend correctness when -r specified.
|
|
run_dump_test "local-addend-r"
|
|
|
|
run_dump_test "limit-b"
|
|
run_dump_test "limit-bl"
|
|
run_dump_test "farcall-section"
|
|
run_dump_test "farcall-back"
|
|
run_dump_test "farcall-bl"
|
|
run_dump_test "farcall-b"
|
|
run_dump_test "farcall-b-none-function"
|
|
run_dump_test "farcall-bl-none-function"
|
|
|
|
run_dump_test "tls-relax-all"
|
|
run_dump_test "tls-relax-gd-le"
|
|
run_dump_test "tls-relax-gdesc-le"
|
|
run_dump_test "tls-relax-gd-ie"
|
|
run_dump_test "tls-relax-gdesc-ie"
|
|
run_dump_test "tls-relax-ie-le"
|
|
run_dump_test "tls-desc-ie"
|
|
run_dump_test "tls-relax-gdesc-ie-2"
|
|
run_dump_test "tls-relax-gdesc-le-2"
|
|
run_dump_test "tls-relax-ie-le-2"
|
|
run_dump_test "tls-relax-ie-le-3"
|
|
run_dump_test "tls-tiny-gd"
|
|
run_dump_test "tls-tiny-gd-ie"
|
|
run_dump_test "tls-tiny-gd-le"
|
|
run_dump_test "tls-tiny-desc"
|
|
run_dump_test "tls-tiny-desc-ie"
|
|
run_dump_test "tls-tiny-desc-le"
|
|
run_dump_test "tls-tiny-ie"
|
|
run_dump_test "tlsle"
|
|
run_dump_test "tlsle-symbol-offset"
|
|
run_dump_test "gc-got-relocs"
|
|
run_dump_test "gc-tls-relocs"
|
|
run_dump_test "gc-plt-relocs"
|
|
run_dump_test "gc-relocs-257-dyn"
|
|
run_dump_test "gc-relocs-257"
|
|
run_dump_test "pr17415"
|
|
run_dump_test "tprel_g2_overflow"
|
|
|
|
# ifunc tests
|
|
run_dump_test "ifunc-1"
|
|
run_dump_test "ifunc-1-local"
|
|
run_dump_test "ifunc-2"
|
|
run_dump_test "ifunc-2-local"
|
|
run_dump_test "ifunc-3a"
|
|
run_dump_test "ifunc-3b"
|
|
run_dump_test "ifunc-4"
|
|
run_dump_test "ifunc-4a"
|
|
run_dump_test "ifunc-5a"
|
|
run_dump_test "ifunc-5b"
|
|
run_dump_test "ifunc-5a-local"
|
|
run_dump_test "ifunc-5b-local"
|
|
run_dump_test "ifunc-5r-local"
|
|
run_dump_test "ifunc-6a"
|
|
run_dump_test "ifunc-6b"
|
|
run_dump_test "ifunc-7a"
|
|
run_dump_test "ifunc-7b"
|
|
run_dump_test "ifunc-7c"
|
|
run_dump_test "ifunc-8"
|
|
run_dump_test "ifunc-9"
|
|
run_dump_test "ifunc-10"
|
|
run_dump_test "ifunc-11"
|
|
run_dump_test "ifunc-12"
|
|
run_dump_test "ifunc-13"
|
|
run_dump_test "ifunc-14a"
|
|
run_dump_test "ifunc-14b"
|
|
run_dump_test "ifunc-14c"
|
|
run_dump_test "ifunc-14d"
|
|
run_dump_test "ifunc-14e"
|
|
run_dump_test "ifunc-14f"
|
|
run_dump_test "ifunc-15"
|
|
run_dump_test "ifunc-16"
|
|
run_dump_test "ifunc-17a"
|
|
run_dump_test "ifunc-17b"
|
|
run_dump_test "ifunc-18a"
|
|
run_dump_test "ifunc-18b"
|
|
run_dump_test "ifunc-19a"
|
|
run_dump_test "ifunc-19b"
|
|
run_dump_test "ifunc-20"
|
|
run_dump_test "ifunc-21"
|
|
run_dump_test "ifunc-22"
|
|
|
|
run_dump_test "relasz"
|
|
run_dump_test "relocs-257-symbolic-func"
|
|
|
|
set aarch64elflinktests {
|
|
{"ld-aarch64/so with global symbol" "-shared" "" "" {copy-reloc-so.s}
|
|
{} "copy-reloc-so.so"}
|
|
{"ld-aarch64/exe with copy relocation" "-e0 tmpdir/copy-reloc-so.so" "" ""
|
|
{copy-reloc-exe.s} {{objdump -R copy-reloc.d}} "copy-reloc"}
|
|
}
|
|
|
|
run_ld_link_tests $aarch64elflinktests
|