From 0d885d1661f87bd2dc25bfdacb29413f0be81bd4 Mon Sep 17 00:00:00 2001 From: Devang Patel Date: Wed, 16 Jul 2008 17:54:34 +0000 Subject: [PATCH] Mark function used by asm block as used, otherwise optimizer may not see the use and may delete the function. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53692 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/Compiler.h | 5 +++++ lib/Target/X86/X86JITInfo.cpp | 4 +++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/include/llvm/Support/Compiler.h b/include/llvm/Support/Compiler.h index 1497dd61ede..9750579f2c2 100644 --- a/include/llvm/Support/Compiler.h +++ b/include/llvm/Support/Compiler.h @@ -23,6 +23,11 @@ #define VISIBILITY_HIDDEN #endif +#if (__GNUC__ >= 4) +#define ATTRIBUTE_USED __attribute__((__used__)) +#else +#define ATTRIBUTE_USED +#endif // C++ doesn't support 'extern template' of template specializations. GCC does, // but requires __extension__ before it. In the header, use this: diff --git a/lib/Target/X86/X86JITInfo.cpp b/lib/Target/X86/X86JITInfo.cpp index 0cda7d3a43a..f7d1118d700 100644 --- a/lib/Target/X86/X86JITInfo.cpp +++ b/lib/Target/X86/X86JITInfo.cpp @@ -18,6 +18,7 @@ #include "llvm/Function.h" #include "llvm/CodeGen/MachineCodeEmitter.h" #include "llvm/Config/alloca.h" +#include "llvm/Support/Compiler.h" #include #include using namespace llvm; @@ -315,7 +316,8 @@ extern "C" { /// function stub when we did not know the real target of a call. This function /// must locate the start of the stub or call site and pass it into the JIT /// compiler function. -extern "C" void X86CompilationCallback2(intptr_t *StackPtr, intptr_t RetAddr) { +extern "C" void ATTRIBUTE_USED +X86CompilationCallback2(intptr_t *StackPtr, intptr_t RetAddr) { intptr_t *RetAddrLoc = &StackPtr[1]; assert(*RetAddrLoc == RetAddr && "Could not find return address on the stack!");