diff --git a/llvm/lib/DWARFLinker/DWARFLinker.cpp b/llvm/lib/DWARFLinker/DWARFLinker.cpp index 4e384d51103ff..1d7ef350f63da 100644 --- a/llvm/lib/DWARFLinker/DWARFLinker.cpp +++ b/llvm/lib/DWARFLinker/DWARFLinker.cpp @@ -1344,6 +1344,8 @@ DIE *DWARFLinker::DIECloner::cloneDIE(const DWARFDie &InputDIE, std::numeric_limits::max()); AttrInfo.OrigCallReturnPc = dwarf::toAddress(InputDIE.find(dwarf::DW_AT_call_return_pc), 0); + AttrInfo.OrigCallPc = + dwarf::toAddress(InputDIE.find(dwarf::DW_AT_call_pc), 0); } // Reset the Offset to 0 as we will be working on the local copy of diff --git a/llvm/test/tools/dsymutil/ARM/call-pc-reloc.test b/llvm/test/tools/dsymutil/ARM/call-pc-reloc.test new file mode 100644 index 0000000000000..f34e682697b01 --- /dev/null +++ b/llvm/test/tools/dsymutil/ARM/call-pc-reloc.test @@ -0,0 +1,20 @@ +Instructions to reproduce +------------------------- + +$ cat main.cpp +void __attribute__((optnone)) func2() {} +void __attribute__((noinline)) func1() { func2(); /* tail */ } +int __attribute__((disable_tail_calls)) main() { + func1(); /* regular */ + return 0; +} + +# Adding `-isysroot $(xcrun -sdk iphoneos.internal -show-sdk-path)` can fix +# linker warnings when building on macOS. +$ clang -arch arm64 main.cpp -o main.arm64.o -c -g -O2 +$ clang -arch arm64 main.arm64.o -o main.arm64 -g + +RUN: dsymutil -oso-prepend-path %p/../Inputs %p/../Inputs/private/tmp/call_pc/main.arm64 -o %t.dSYM +RUN: llvm-dwarfdump %t.dSYM | FileCheck %s -implicit-check-not=DW_AT_call_pc + +CHECK: DW_AT_call_pc (0x0000000100007f94) diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64 b/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64 new file mode 100755 index 0000000000000..9d34f3c787597 Binary files /dev/null and b/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64 differ diff --git a/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64.o b/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64.o new file mode 100644 index 0000000000000..abe448ffa5cd7 Binary files /dev/null and b/llvm/test/tools/dsymutil/Inputs/private/tmp/call_pc/main.arm64.o differ