diff options
-rw-r--r-- | ld/emultempl/loongarchelf.em | 16 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/relax-ttext.s | 13 | ||||
-rw-r--r-- | ld/testsuite/ld-loongarch-elf/relax.exp | 12 |
3 files changed, 41 insertions, 0 deletions
diff --git a/ld/emultempl/loongarchelf.em b/ld/emultempl/loongarchelf.em index 3bb5ddf0db4..2da40582008 100644 --- a/ld/emultempl/loongarchelf.em +++ b/ld/emultempl/loongarchelf.em @@ -25,6 +25,22 @@ fragment <<EOF #include "elf/loongarch.h" #include "elfxx-loongarch.h" +EOF + +# Disable linker relaxation if set address of section or segment. +PARSE_AND_LIST_ARGS_CASES=${PARSE_AND_LIST_ARGS_CASES}' + case OPTION_SECTION_START: + case OPTION_TTEXT: + case OPTION_TBSS: + case OPTION_TDATA: + case OPTION_TTEXT_SEGMENT: + case OPTION_TRODATA_SEGMENT: + case OPTION_TLDATA_SEGMENT: + link_info.disable_target_specific_optimizations = 2; + return false; +' + +fragment <<EOF static void larch_elf_before_allocation (void) { diff --git a/ld/testsuite/ld-loongarch-elf/relax-ttext.s b/ld/testsuite/ld-loongarch-elf/relax-ttext.s new file mode 100644 index 00000000000..1bbd85a04bb --- /dev/null +++ b/ld/testsuite/ld-loongarch-elf/relax-ttext.s @@ -0,0 +1,13 @@ +# At relax pass 0, offset is 0x120204000-0x12000bff8=0x1f8008 < 0x200000 +# At relax pass 1, delete 0x7ff8 bytes NOP, +# offset is 0x120204000-0x120004000=0x200000 >= 0x200000, overflow +.text +.align 14 # delete at relax pass 1 +.fill 0x4000 +.align 14 # delete at relax pass 1 +la.local $t2, a # relax to pcaddi at relax pass 0 + +.section ".text1", "ax" + .fill 0x4000 +a: # 0x120204000 + ret diff --git a/ld/testsuite/ld-loongarch-elf/relax.exp b/ld/testsuite/ld-loongarch-elf/relax.exp index 35caa73c11d..4771f1eb429 100644 --- a/ld/testsuite/ld-loongarch-elf/relax.exp +++ b/ld/testsuite/ld-loongarch-elf/relax.exp @@ -51,6 +51,18 @@ if [istarget loongarch64-*-*] { run_dump_test "relax-align-ignore-start" run_partial_linking_align_test + run_ld_link_tests \ + [list \ + [list \ + "loongarch relax ttext" \ + "" "" \ + "" \ + {relax-ttext.s} \ + {} \ + "relax-ttext" \ + ] \ + ] + set testname "loongarch relax .exe build" set pre_builds [list \ [list \ |