[ELF][PPC][X86] Use [-2**(n-1), 2**n) to check overflows for R_PPC_ADDR16, R_PPC64_ADDR{16,32}, R_X86_64_{8,16}
Similar to R_AARCH64_ABS32, R_PPC64_ADDR32 can represent either a signed
value or unsigned value, thus we should use `[-2**(n-1), 2**n)` instead of
`[-2**(n-1), 2**(n-1))` to check overflows.
The issue manifests as a bogus linker error when linking the powerpc64le Linux kernel.
The new behavior is compatible with ld.bfd's complain_overflow_bitfield.
The upper bound of the error message is not correct. Fix it as well.
The changes to R_PPC_ADDR16, R_PPC64_ADDR16, R_X86_64_8 and R_X86_64_16 are similar.
Reviewed By: ruiu
Differential Revision: https://reviews.llvm.org/D63690
llvm-svn: 364164
2019-06-24 13:37:20 +08:00
|
|
|
# REQUIRES: ppc
|
2021-01-20 03:32:53 +08:00
|
|
|
# RUN: llvm-mc -filetype=obj -triple=ppc64le %s -o %t.o
|
|
|
|
# RUN: ld.lld %t.o --defsym=a=0x0123456789abcdef --defsym=b=0x76543210 -o %t
|
|
|
|
# RUN: llvm-objdump -d --no-show-raw-insn %t | FileCheck %s
|
|
|
|
# RUN: llvm-objdump -s --no-show-raw-insn %t | FileCheck --check-prefixes=HEX,HEXLE %s
|
|
|
|
|
|
|
|
# HEX-LABEL: section .R_PPC64_ADDR32:
|
|
|
|
# HEXLE-NEXT: 10325476
|
|
|
|
# HEXBE-NEXT: 76543210
|
|
|
|
.section .R_PPC64_ADDR32,"a",@progbits
|
|
|
|
.long b
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_LO>:
|
|
|
|
# CHECK-NEXT: addi 4, 4, 12816
|
|
|
|
.section .R_PPC64_ADDR16_LO,"ax",@progbits
|
|
|
|
addi 4, 4, b@l
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HI>:
|
|
|
|
# CHECK-NEXT: lis 4, 30292
|
|
|
|
.section .R_PPC64_ADDR16_HI,"ax",@progbits
|
|
|
|
lis 4, b@h
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HA>:
|
|
|
|
# CHECK-NEXT: lis 4, 30292
|
|
|
|
.section .R_PPC64_ADDR16_HA,"ax",@progbits
|
|
|
|
lis 4, b@ha
|
|
|
|
|
2021-01-20 03:42:52 +08:00
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HIGH>:
|
|
|
|
# CHECK-NEXT: lis 4, -30293
|
|
|
|
.section .R_PPC64_ADDR16_HIGH,"ax",@progbits
|
|
|
|
lis 4, a@high
|
|
|
|
|
2021-01-20 03:32:53 +08:00
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HIGHER>:
|
|
|
|
# CHECK-NEXT: li 3, 17767
|
|
|
|
.section .R_PPC64_ADDR16_HIGHER,"ax",@progbits
|
|
|
|
li 3, a@higher
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HIGHERA>:
|
|
|
|
# CHECK-NEXT: li 3, 17767
|
|
|
|
.section .R_PPC64_ADDR16_HIGHERA,"ax",@progbits
|
|
|
|
li 3, a@highera
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HIGHEST>:
|
|
|
|
# CHECK-NEXT: li 3, 291
|
|
|
|
.section .R_PPC64_ADDR16_HIGHEST,"ax",@progbits
|
|
|
|
li 3, a@highest
|
|
|
|
|
|
|
|
# CHECK-LABEL: <.R_PPC64_ADDR16_HIGHESTA>:
|
|
|
|
# CHECK-NEXT: li 3, 291
|
|
|
|
.section .R_PPC64_ADDR16_HIGHESTA,"ax",@progbits
|
|
|
|
li 3, a@highesta
|