# REQUIRES: systemz ## Verify that R_390_GOTENT optimization is not performed on misaligned symbols. # RUN: llvm-mc -filetype=obj -relax-relocations -triple=s390x-unknown-linux %s -o %t.o # RUN: ld.lld %t.o -o %t1 # RUN: llvm-readelf -S -r -x .got -x .got.plt %t1 | FileCheck --check-prefixes=CHECK %s # RUN: llvm-objdump --no-print-imm-hex -d %t1 | FileCheck --check-prefix=DISASM %s ## We retain one .got entry for the unaligned symbol. # CHECK: Name Type Address Off Size ES Flg Lk Inf Al # CHECK: .got PROGBITS 00000000010021e0 0001e0 000020 00 WA 0 0 8 # CHECK-NEXT: .relro_padding NOBITS 0000000001002200 000200 000e00 00 WA 0 0 1 # CHECK-NEXT: .data PROGBITS 0000000001003200 000200 000006 00 WA 0 0 2 # CHECK-LABEL: Hex dump of section '.got': # CHECK-NEXT: 0x010021e0 00000000 00000000 00000000 00000000 # CHECK-NEXT: 0x010021f0 00000000 00000000 00000000 01003205 # DISASM: Disassembly of section .text: # DISASM: <_start>: # DISASM-NEXT: larl %r1, 0x1003200 # DISASM-NEXT: larl %r1, 0x1003200 # DISASM-NEXT: lgrl %r1, 0x10021f8 # DISASM-NEXT: lgrl %r1, 0x10021f8 .data .globl var_align .hidden var_align .align 2 var_align: .long 0 .data .globl var_unalign .hidden var_unalign .align 2 .byte 0 var_unalign: .byte 0 .text .globl _start .type _start, @function _start: lgrl %r1, var_align@GOT lgrl %r1, var_align@GOT lgrl %r1, var_unalign@GOT lgrl %r1, var_unalign@GOT