mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-04 09:54:09 +00:00
Add support for getting executable memory on Windows. This is actually
much easier than on unix. :) The only evil thing is that windows.h defines a macro named FindExecutable, which collides with one of our names. The JIT now runs on windows, but it cannot resolve external functions (like printf) yet. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@13871 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c89fe6da17
commit
49f61c4ea4
@ -25,6 +25,7 @@
|
||||
#include <iostream>
|
||||
#include <cstdlib>
|
||||
#include <cerrno>
|
||||
#include "Config/windows.h"
|
||||
using namespace llvm;
|
||||
|
||||
/// isExecutableFile - This function returns true if the filename specified
|
||||
@ -63,6 +64,7 @@ bool llvm::isStandardOutAConsole() {
|
||||
/// directory, nor in the PATH. If the executable cannot be found, return an
|
||||
/// empty string.
|
||||
///
|
||||
#undef FindExecutable // needed on windows :(
|
||||
std::string llvm::FindExecutable(const std::string &ExeName,
|
||||
const std::string &ProgramPath) {
|
||||
// First check the directory that bugpoint is in. We can do this if
|
||||
@ -277,6 +279,17 @@ int llvm::ExecWait(const char * const old_argv[],
|
||||
///
|
||||
void *llvm::AllocateRWXMemory(unsigned NumBytes) {
|
||||
if (NumBytes == 0) return 0;
|
||||
|
||||
#if defined(HAVE_WINDOWS_H)
|
||||
// On windows we use VirtualAlloc.
|
||||
void *P = VirtualAlloc(0, NumBytes, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
|
||||
if (P == 0) {
|
||||
std::cerr << "Error allocating executable memory!\n";
|
||||
abort();
|
||||
}
|
||||
return P;
|
||||
|
||||
#elif defined(HAVE_MMAP)
|
||||
static const long pageSize = sysconf(_SC_PAGESIZE);
|
||||
unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
|
||||
|
||||
@ -289,12 +302,11 @@ void *llvm::AllocateRWXMemory(unsigned NumBytes) {
|
||||
#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
||||
/* nothing */
|
||||
#else
|
||||
std::cerr << "This architecture is not supported by the JIT!\n";
|
||||
std::cerr << "This architecture has an unknown MMAP implementation!\n";
|
||||
abort();
|
||||
return 0;
|
||||
#endif
|
||||
|
||||
#ifdef HAVE_MMAP
|
||||
int fd = -1;
|
||||
#if defined(__linux__)
|
||||
fd = 0;
|
||||
|
Loading…
Reference in New Issue
Block a user