From c50fcbd162a8215bbc1d67bc274740ba25996506 Mon Sep 17 00:00:00 2001 From: Jonas Paulsson Date: Mon, 21 Oct 2024 11:31:38 +0200 Subject: [PATCH] Add sign extension on i32 return value for CxaAtExit(). --- llvm/lib/ExecutionEngine/Orc/LLJIT.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp index 401ed525fd5cf..db39fec12e5fc 100644 --- a/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp +++ b/llvm/lib/ExecutionEngine/Orc/LLJIT.cpp @@ -477,12 +477,16 @@ class GenericLLVMIRPlatformSupport : public LLJIT::PlatformSupport { auto *CxaAtExitCallbackTy = FunctionType::get(VoidTy, {BytePtrTy}, false); auto *CxaAtExitCallbackPtrTy = PointerType::getUnqual(CxaAtExitCallbackTy); - addHelperAndWrapper( + auto *CxaAtExit = addHelperAndWrapper( *M, "__cxa_atexit", FunctionType::get(IntTy, {CxaAtExitCallbackPtrTy, BytePtrTy, BytePtrTy}, false), GlobalValue::DefaultVisibility, "__lljit.cxa_atexit_helper", {PlatformInstanceDecl}); + Attribute::AttrKind CxaAtExitExtAttr = + TargetLibraryInfo::getExtAttrForI32Return(J.getTargetTriple()); + if (CxaAtExitExtAttr != Attribute::None) + CxaAtExit->addRetAttr(CxaAtExitExtAttr); return ThreadSafeModule(std::move(M), std::move(Ctx)); }