mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-24 11:42:57 +01:00
Address PR274 - '[JIT] Programs cannot resolve the fstat function'
by trying to get the compiler to generate an undefined reference for it and related functions which live in libc_nonshared.a on Linux. Linkers... sigh. llvm-svn: 12256
This commit is contained in:
parent
de0239b2a6
commit
acf93be258
@ -18,6 +18,7 @@
|
||||
#include "JIT.h"
|
||||
#include "Support/DynamicLinker.h"
|
||||
#include <iostream>
|
||||
#include <sys/stat.h>
|
||||
using namespace llvm;
|
||||
|
||||
// AtExitHandlers - List of functions to call when the program exits,
|
||||
@ -40,6 +41,23 @@ static void runAtExitHandlers() {
|
||||
// Function stubs that are invoked instead of certain library calls
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
// Force the following functions to be linked in to anything that uses the
|
||||
// JIT. This is a hack designed to work around the all-too-clever Glibc
|
||||
// strategy of making these functions work differently when inlined vs. when
|
||||
// not inlined, and hiding their real definitions in a separate archive file
|
||||
// that the dynamic linker can't see. For more info, search for
|
||||
// 'libc_nonshared.a' on Google, or read http://llvm.cs.uiuc.edu/PR274.
|
||||
void *FunctionPointers[] = {
|
||||
(void *) stat,
|
||||
(void *) stat64,
|
||||
(void *) fstat,
|
||||
(void *) fstat64,
|
||||
(void *) lstat,
|
||||
(void *) lstat64,
|
||||
(void *) atexit,
|
||||
(void *) mknod
|
||||
};
|
||||
|
||||
// NoopFn - Used if we have nothing else to call...
|
||||
static void NoopFn() {}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user