| # REQUIRES: mips | 
 | # Check creating of R_MIPS_COPY and R_MIPS_JUMP_SLOT dynamic relocations | 
 | # and corresponding PLT entries. | 
 |  | 
 | # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux %s -o %t.o | 
 | # RUN: llvm-mc -filetype=obj -triple=mips-unknown-linux \ | 
 | # RUN:         %S/Inputs/mips-dynamic.s -o %t.so.o | 
 | # RUN: ld.lld %t.so.o -shared -o %t.so | 
 | # RUN: ld.lld %t.o %t.so -o %t.exe | 
 | # RUN: llvm-readobj -r -mips-plt-got %t.exe | FileCheck %s | 
 |  | 
 | # CHECK:      Relocations [ | 
 | # CHECK-NEXT:   Section ({{.*}}) .rel.dyn { | 
 | # CHECK-DAG:      0x{{[0-9A-F]+}} R_MIPS_COPY data0 0x0 | 
 | # CHECK-DAG:      0x{{[0-9A-F]+}} R_MIPS_COPY data1 0x0 | 
 | # CHECK-NEXT:   } | 
 | # CHECK-NEXT:   Section ({{.*}}) .rel.plt { | 
 | # CHECK-DAG:      0x{{[0-9A-F]+}} R_MIPS_JUMP_SLOT foo0 0x0 | 
 | # CHECK-DAG:      0x{{[0-9A-F]+}} R_MIPS_JUMP_SLOT foo1 0x0 | 
 | # CHECK-NEXT:   } | 
 | # CHECK-NEXT: ] | 
 |  | 
 | # CHECK:      Primary GOT { | 
 | # CHECK:        Local entries [ | 
 | # CHECK-NEXT:   ] | 
 | # CHECK-NEXT:   Global entries [ | 
 | # CHECK-NEXT:   ] | 
 | # CHECK-NEXT:   Number of TLS and multi-GOT entries: 0 | 
 | # CHECK-NEXT: } | 
 |  | 
 | # CHECK:      PLT GOT { | 
 | # CHECK:        Entries [ | 
 | # CHECK-NEXT:     Entry { | 
 | # CHECK-NEXT:       Address: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Initial: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Value: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Type: Function | 
 | # CHECK-NEXT:       Section: Undefined | 
 | # CHECK-NEXT:       Name: foo0 | 
 | # CHECK-NEXT:     } | 
 | # CHECK-NEXT:     Entry { | 
 | # CHECK-NEXT:       Address: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Initial: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Value: 0x{{[0-9A-F]+}} | 
 | # CHECK-NEXT:       Type: Function | 
 | # CHECK-NEXT:       Section: Undefined | 
 | # CHECK-NEXT:       Name: foo1 | 
 | # CHECK-NEXT:     } | 
 | # CHECK-NEXT:   ] | 
 | # CHECK-NEXT: } | 
 |  | 
 |   .text | 
 |   .globl __start | 
 | __start: | 
 |   lui    $t0,%hi(foo0)     # R_MIPS_HI16 requires JUMP_SLOT/PLT entry | 
 |                            # for DSO defined func. | 
 |   addi   $t0,$t0,%lo(foo0) | 
 |   lui    $t0,%hi(bar)      # Does not require PLT for locally defined func. | 
 |   addi   $t0,$t0,%lo(bar) | 
 |   lui    $t0,%hi(loc)      # Does not require PLT for local func. | 
 |   addi   $t0,$t0,%lo(loc) | 
 |  | 
 |   lui    $t0,%hi(data0)    # R_MIPS_HI16 requires COPY rel for DSO defined data. | 
 |   addi   $t0,$t0,%lo(data0) | 
 |   lui    $t0,%hi(gd)       # Does not require COPY rel for locally defined data. | 
 |   addi   $t0,$t0,%lo(gd) | 
 |   lui    $t0,%hi(ld)       # Does not require COPY rel for local data. | 
 |   addi   $t0,$t0,%lo(ld) | 
 |  | 
 |   .globl bar | 
 |   .type  bar, @function | 
 | bar: | 
 |   nop | 
 | loc: | 
 |   nop | 
 |  | 
 |   .rodata | 
 |   .globl gd | 
 | gd: | 
 |   .word 0 | 
 | ld: | 
 |   .word data1+8            # R_MIPS_32 requires REL32 dnamic relocation | 
 |                            # for DSO defined data. For now we generate COPY one. | 
 |   .word foo1+8             # R_MIPS_32 requires PLT entry for DSO defined func. |