68 lines · plain
1# RUN: llvm-mc -filetype=obj -triple x86_64 %s -o %t2# RUN: llvm-objdump --no-print-imm-hex -dr %t | FileCheck %s3# RUN: llvm-readelf -s %t | FileCheck %s --check-prefix=SYM4 5# RUN: not llvm-mc -filetype=obj -triple x86_64 --defsym ERR0=1 %s -o %t 2>&1 | FileCheck %s --check-prefix=ERR0 --implicit-check-not=error:6# RUN: not llvm-mc -filetype=obj -triple x86_64 --defsym ERR=1 %s -o %t 2>&1 | FileCheck %s --check-prefix=ERR7 8## If a fixup symbol is equated to an undefined symbol, convert the fixup9## to be against the target symbol, even if there is a variant (@PLT).10# CHECK: callq {{.*}}11# CHECK-NEXT: R_X86_64_PLT32 __GI_memcpy-0x412# CHECK: movabsq $0, %rax13# CHECK-NEXT: R_X86_64_64 __GI_memcpy+0x214memcpy = __GI_memcpy15call memcpy@PLT16movabsq $memcpy+2, %rax17 18# CHECK: movq (%rip), %rax19# CHECK-NEXT: R_X86_64_REX_GOTPCRELX abs-0x420# CHECK: movq (%rip), %r1621# CHECK-NEXT: R_X86_64_CODE_4_GOTPCRELX abs-0x422movq abs@GOTPCREL(%rip), %rax23movq abs@GOTPCREL(%rip), %r1624abs = 4225 26# CHECK: movabsq $0, %rbx27# CHECK-NEXT: R_X86_64_64 data_alias28.globl data_alias29.set data_alias, data30movabsq $data_alias, %rbx31 32## A local alias to a defined symbol still references a section symbol.33# CHECK: movabsq $0, %rbx34# CHECK-NEXT: R_X86_64_64 .data+0x135.set data_alias_l, data36movabsq $data_alias_l, %rbx37 38.data39.byte 040.globl data41data:42 43.ifdef ERR044# ERR0: {{.*}}.s:[[#@LINE+1]]:15: error: relocation specifier not permitted in symbol equating45memcpy_spec = __GI_memcpy@PLT46 47## Should be rejected as well48memcpy_spec1 = __GI_memcpy@PLT+149.endif50 51.ifdef ERR52.text53## Note, GNU as emits a relocation for this erroneous fixup.54# ERR: {{.*}}.s:[[#@LINE+2]]:6: error: expected relocatable expression55memcpy_plus_1 = __GI_memcpy+156call memcpy_plus_1@PLT57.endif58 59## Redirected symbols do not have a symbol table entry.60# SYM: NOTYPE LOCAL DEFAULT UND61# SYM-NEXT: NOTYPE LOCAL DEFAULT ABS abs62# SYM-NEXT: NOTYPE LOCAL DEFAULT 4 data_alias_l63# SYM-NEXT: SECTION LOCAL DEFAULT 4 .data64# SYM-NEXT: NOTYPE GLOBAL DEFAULT UND __GI_memcpy65# SYM-NEXT: NOTYPE GLOBAL DEFAULT 4 data_alias66# SYM-NEXT: NOTYPE GLOBAL DEFAULT 4 data67# SYM-NOT: {{.}}68