# REQUIRES: ppc # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %s -o %t1.o # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input2.s -o %t2.o # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input3.s -o %t3.o # RUN: llvm-mc -filetype=obj -triple=powerpc64le-unknown-linux %p/Inputs/ppc64-sort-small-cm-relocs-input4.s -o %t4.o # RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -Map=%t.map # RUN: FileCheck %s < %t.map # Test an alternate link order. # RUN: ld.lld %t2.o %t3.o %t4.o %t1.o -o %t -Map=%t.map # RUN: FileCheck %s -check-prefix=ALTERNATE < %t.map # If a linker script has a sections command then allow that to override the # default sorting behavior. # RUN: echo "SECTIONS { \ # RUN: .toc : { \ # RUN: *ppc64-sort-small-cm-relocs.s.tmp4.o(.toc*) \ # RUN: *ppc64-sort-small-cm-relocs.s.tmp1.o(.toc*) \ # RUN: *(.toc*) \ # RUN: } \ # RUN: } " > %t.script # RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map # RUN: FileCheck %s -check-prefix=SEC-CMD < %t.map # RUN: echo "SECTIONS { .text : {*(.text*)} } " > %t.script # RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map # RUN: FileCheck %s -check-prefix=SEC-CMD2 < %t.map # Default sort if the linker script does not have a sections command. # RUN: echo "" > %t.script # RUN: ld.lld %t1.o %t2.o %t3.o %t4.o -o %t -script %t.script -Map=%t.map # RUN: FileCheck %s -check-prefix=NOSEC < %t.map .text .global _start .type _start,@function _start: li 3, 55 blr .type a,@object .data .global a a: .long 10 .size a, 4 .type c,@object .data .global c c: .long 55 .size c, 4 .type d,@object .global d d: .long 33 .size d, 4 # .toc section contains only some constants. .section .toc,"aw",@progbits .quad 0xa1a1a1a1a1a1a1a1 .quad 0xb2b2b2b2b2b2b2b2 # Input files tmp3.o and tmp4.o contain small code model relocs. # CHECK: .got # CHECK-NEXT: :(.got) # CHECK-NEXT: .toc # CHECK-NEXT: {{.*}}3.o:(.toc) # CHECK-NEXT: {{.*}}4.o:(.toc) # CHECK-NEXT: {{.*}}1.o:(.toc) # CHECK-NEXT: {{.*}}2.o:(.toc) # ALTERNATE: .got # ALTERNATE-NEXT: :(.got) # ALTERNATE-NEXT: .toc # ALTERNATE-NEXT: {{.*}}3.o:(.toc) # ALTERNATE-NEXT: {{.*}}4.o:(.toc) # ALTERNATE-NEXT: {{.*}}2.o:(.toc) # ALTERNATE-NEXT: {{.*}}1.o:(.toc) # SEC-CMD: .got # SEC-CMD-NEXT: :(.got) # SEC-CMD-NEXT: .toc # SEC-CMD-NEXT: {{.*}}4.o:(.toc) # SEC-CMD-NEXT: {{.*}}1.o:(.toc) # SEC-CMD-NEXT: {{.*}}2.o:(.toc) # SEC-CMD-NEXT: {{.*}}3.o:(.toc) # SEC-CMD2: .got # SEC-CMD2-NEXT: :(.got) # SEC-CMD2-NEXT: .toc # SEC-CMD2-NEXT: {{.*}}1.o:(.toc) # SEC-CMD2-NEXT: {{.*}}2.o:(.toc) # SEC-CMD2-NEXT: {{.*}}3.o:(.toc) # SEC-CMD2-NEXT: {{.*}}4.o:(.toc) # NOSEC: .got # NOSEC-NEXT: :(.got) # NOSEC-NEXT: .toc # NOSEC-NEXT: {{.*}}3.o:(.toc) # NOSEC-NEXT: {{.*}}4.o:(.toc) # NOSEC-NEXT: {{.*}}1.o:(.toc) # NOSEC-NEXT: {{.*}}2.o:(.toc)