Skip to content

Commit 3206d73

Browse files
nikicakadutta
authored andcommitted
[Constants] Handle ptrtoaddr in getRelocationInfo()
Treat it the same way as ptrtoint.
1 parent ebee4ff commit 3206d73

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

llvm/lib/IR/Constants.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -667,8 +667,11 @@ Constant::PossibleRelocationsTy Constant::getRelocationInfo() const {
667667
if (CE->getOpcode() == Instruction::Sub) {
668668
ConstantExpr *LHS = dyn_cast<ConstantExpr>(CE->getOperand(0));
669669
ConstantExpr *RHS = dyn_cast<ConstantExpr>(CE->getOperand(1));
670-
if (LHS && RHS && LHS->getOpcode() == Instruction::PtrToInt &&
671-
RHS->getOpcode() == Instruction::PtrToInt) {
670+
if (LHS && RHS &&
671+
(LHS->getOpcode() == Instruction::PtrToInt ||
672+
LHS->getOpcode() == Instruction::PtrToAddr) &&
673+
(RHS->getOpcode() == Instruction::PtrToInt ||
674+
RHS->getOpcode() == Instruction::PtrToAddr)) {
672675
Constant *LHSOp0 = LHS->getOperand(0);
673676
Constant *RHSOp0 = RHS->getOperand(0);
674677

llvm/test/CodeGen/X86/relptr-rodata.ll

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,31 @@ target triple = "x86_64-unknown-linux-gnu"
1010
; CHECK: .long hidden-rodata
1111
@rodata = hidden constant i32 trunc (i64 sub (i64 ptrtoint (ptr @hidden to i64), i64 ptrtoint (ptr @rodata to i64)) to i32)
1212

13+
; CHECK: .section .rodata.rodata_ptrtoaddr
14+
; CHECK: rodata_ptrtoaddr:
15+
; CHECK: .long hidden-rodata_ptrtoaddr
16+
@rodata_ptrtoaddr = hidden constant i32 trunc (i64 sub (i64 ptrtoaddr (ptr @hidden to i64), i64 ptrtoaddr (ptr @rodata_ptrtoaddr to i64)) to i32)
17+
1318
; CHECK: .section .data.rel.ro.relro1
1419
; CHECK: relro1:
1520
; CHECK: .long default-relro1
1621
@relro1 = hidden constant i32 trunc (i64 sub (i64 ptrtoint (ptr @default to i64), i64 ptrtoint (ptr @relro1 to i64)) to i32)
1722

23+
; CHECK: .section .data.rel.ro.relro1_ptrtoaddr
24+
; CHECK: relro1_ptrtoaddr:
25+
; CHECK: .long default-relro1_ptrtoaddr
26+
@relro1_ptrtoaddr = hidden constant i32 trunc (i64 sub (i64 ptrtoaddr (ptr @default to i64), i64 ptrtoaddr (ptr @relro1_ptrtoaddr to i64)) to i32)
27+
1828
; CHECK: .section .data.rel.ro.relro2
1929
; CHECK: relro2:
2030
; CHECK: .long hidden-relro2
2131
@relro2 = constant i32 trunc (i64 sub (i64 ptrtoint (ptr @hidden to i64), i64 ptrtoint (ptr @relro2 to i64)) to i32)
2232

33+
; CHECK: .section .data.rel.ro.relro2_ptrtoaddr
34+
; CHECK: relro2_ptrtoaddr:
35+
; CHECK: .long hidden-relro2_ptrtoaddr
36+
@relro2_ptrtoaddr = constant i32 trunc (i64 sub (i64 ptrtoaddr (ptr @hidden to i64), i64 ptrtoaddr (ptr @relro2_ptrtoaddr to i64)) to i32)
37+
2338
; CHECK: .section .rodata.obj
2439
; CHECK-NEXT: .globl obj
2540
; CHECK: obj:

0 commit comments

Comments
 (0)