mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 20:29:48 +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 <iostream>
|
||||||
#include <cstdlib>
|
#include <cstdlib>
|
||||||
#include <cerrno>
|
#include <cerrno>
|
||||||
|
#include "Config/windows.h"
|
||||||
using namespace llvm;
|
using namespace llvm;
|
||||||
|
|
||||||
/// isExecutableFile - This function returns true if the filename specified
|
/// 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
|
/// directory, nor in the PATH. If the executable cannot be found, return an
|
||||||
/// empty string.
|
/// empty string.
|
||||||
///
|
///
|
||||||
|
#undef FindExecutable // needed on windows :(
|
||||||
std::string llvm::FindExecutable(const std::string &ExeName,
|
std::string llvm::FindExecutable(const std::string &ExeName,
|
||||||
const std::string &ProgramPath) {
|
const std::string &ProgramPath) {
|
||||||
// First check the directory that bugpoint is in. We can do this if
|
// 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) {
|
void *llvm::AllocateRWXMemory(unsigned NumBytes) {
|
||||||
if (NumBytes == 0) return 0;
|
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);
|
static const long pageSize = sysconf(_SC_PAGESIZE);
|
||||||
unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
|
unsigned NumPages = (NumBytes+pageSize-1)/pageSize;
|
||||||
|
|
||||||
@ -289,12 +302,11 @@ void *llvm::AllocateRWXMemory(unsigned NumBytes) {
|
|||||||
#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
#elif defined(sparc) || defined(__sparc__) || defined(__sparcv9)
|
||||||
/* nothing */
|
/* nothing */
|
||||||
#else
|
#else
|
||||||
std::cerr << "This architecture is not supported by the JIT!\n";
|
std::cerr << "This architecture has an unknown MMAP implementation!\n";
|
||||||
abort();
|
abort();
|
||||||
return 0;
|
return 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_MMAP
|
|
||||||
int fd = -1;
|
int fd = -1;
|
||||||
#if defined(__linux__)
|
#if defined(__linux__)
|
||||||
fd = 0;
|
fd = 0;
|
||||||
|
Loading…
Reference in New Issue
Block a user