From b3e8c5cdb05c014829c3a34253f2df1a07d54b99 Mon Sep 17 00:00:00 2001 From: kjayapra-amd Date: Wed, 16 Sep 2020 13:00:47 -0400 Subject: [PATCH] SWDEV-252542 - Fixing Win Compilation on SWDEV-241902. Change-Id: If76f79002b265dccf6da4acef1ff9372d8b0a2ff [ROCm/clr commit: 7462e399541b3509d7bfafe7e35490693896be49] --- projects/clr/rocclr/device/device.hpp | 5 +++-- projects/clr/rocclr/device/devprogram.hpp | 8 +++++--- projects/clr/rocclr/device/pal/palprogram.hpp | 6 ++++-- projects/clr/rocclr/device/rocm/rocprogram.hpp | 4 ++-- projects/clr/rocclr/os/os.hpp | 9 +++++++++ projects/clr/rocclr/os/os_win32.cpp | 18 +++++++++++------- projects/clr/rocclr/platform/program.hpp | 3 ++- 7 files changed, 36 insertions(+), 17 deletions(-) diff --git a/projects/clr/rocclr/device/device.hpp b/projects/clr/rocclr/device/device.hpp index e9129b0b76..a8a2173e60 100755 --- a/projects/clr/rocclr/device/device.hpp +++ b/projects/clr/rocclr/device/device.hpp @@ -871,7 +871,8 @@ class ClBinary : public amd::HeapObject { /** called only in loading image routines, never storing routines */ bool setBinary(const char* theBinary, size_t theBinarySize, bool allocated = false, - amd::Os::FileDesc fd = -1, size_t foffset = 0, std::string uri = std::string()); + amd::Os::FileDesc fd = amd::Os::FDescInit(), size_t foffset = 0, + std::string uri = std::string()); //! setin elfIn_ bool setElfIn(); @@ -1049,7 +1050,7 @@ inline std::string Program::BinaryURI() const { inline Program::finfo_t Program::BinaryFd() const { if (clBinary() == NULL) { - return {-1, 0}; + return {amd::Os::FDescInit(), 0}; } return clBinary()->Datafd(); } diff --git a/projects/clr/rocclr/device/devprogram.hpp b/projects/clr/rocclr/device/devprogram.hpp index 90f261f80f..46bdab3c8f 100755 --- a/projects/clr/rocclr/device/devprogram.hpp +++ b/projects/clr/rocclr/device/devprogram.hpp @@ -195,7 +195,8 @@ class Program : public amd::HeapObject { const ClBinary* clBinary() const { return clBinary_; } bool setBinary(const char* binaryIn, size_t size, const device::Program* same_dev_prog = nullptr, - amd::Os::FileDesc fdesc = -1, size_t foffset = 0, std::string uri = std::string()); + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, + std::string uri = std::string()); type_t type() const { return type_; } @@ -283,7 +284,8 @@ class Program : public amd::HeapObject { virtual bool createBinary(amd::option::Options* options) = 0; //! Initialize Binary (used only for clCreateProgramWithBinary()). - bool initClBinary(const char* binaryIn, size_t size, amd::Os::FileDesc fdesc = -1, + bool initClBinary(const char* binaryIn, size_t size, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()); //! Initialize Binary @@ -299,7 +301,7 @@ class Program : public amd::HeapObject { virtual bool setKernels( amd::option::Options* options, void* binary, size_t binSize, - amd::Os::FileDesc fdesc = -1, size_t foffset = 0, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()) { return true; } //! Returns all the options to be appended while passing to the compiler library diff --git a/projects/clr/rocclr/device/pal/palprogram.hpp b/projects/clr/rocclr/device/pal/palprogram.hpp index 865155ec6e..7cee5568aa 100755 --- a/projects/clr/rocclr/device/pal/palprogram.hpp +++ b/projects/clr/rocclr/device/pal/palprogram.hpp @@ -196,7 +196,7 @@ class HSAILProgram : public device::Program { virtual const aclTargetInfo& info(const char* str = ""); virtual bool setKernels(amd::option::Options* options, void* binary, size_t binSize, - amd::Os::FileDesc fdesc = -1, size_t foffset = 0, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()) override; //! Destroys CPU allocations in the code segment @@ -251,7 +251,9 @@ class LightningProgram : public HSAILProgram { virtual ~LightningProgram() {} protected: - virtual bool setKernels(amd::option::Options* options, void* binary, size_t binSize) override; + virtual bool setKernels(amd::option::Options* options, void* binary, size_t binSize, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, + std::string uri = std::string()) override; virtual bool createBinary(amd::option::Options* options) override; }; diff --git a/projects/clr/rocclr/device/rocm/rocprogram.hpp b/projects/clr/rocclr/device/rocm/rocprogram.hpp index ca71000178..b33448c881 100755 --- a/projects/clr/rocclr/device/rocm/rocprogram.hpp +++ b/projects/clr/rocclr/device/rocm/rocprogram.hpp @@ -92,7 +92,7 @@ class HSAILProgram : public roc::Program { bool createBinary(amd::option::Options* options) override { return true; } virtual bool setKernels(amd::option::Options* options, void* binary, size_t binSize, - amd::Os::FileDesc fdesc = -1, size_t foffset = 0, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()) override; private: @@ -115,7 +115,7 @@ private: bool saveBinaryAndSetType(type_t type, void* rawBinary, size_t size); bool setKernels(amd::option::Options* options, void* binary, size_t binSize, - amd::Os::FileDesc fdesc = -1, size_t foffset = 0, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()) final; }; diff --git a/projects/clr/rocclr/os/os.hpp b/projects/clr/rocclr/os/os.hpp index 5f4c5d234a..1173e0b2ce 100755 --- a/projects/clr/rocclr/os/os.hpp +++ b/projects/clr/rocclr/os/os.hpp @@ -33,6 +33,7 @@ #ifdef _WIN32 #include // For KAFFINITY +#include #endif // _WIN32 // Smallest supported VM page size. @@ -99,6 +100,14 @@ class Os : AllStatic { #endif }; + static FileDesc FDescInit() { +#if defined(__linux__) + return -1; +#else + return INVALID_HANDLE_VALUE; +#endif + } + // Returns unique resource indicator for a particular memory static bool GetURIFromMemory(const void* image, size_t image_size, std::string& uri); diff --git a/projects/clr/rocclr/os/os_win32.cpp b/projects/clr/rocclr/os/os_win32.cpp index 3c92bd6072..53abbb2d89 100755 --- a/projects/clr/rocclr/os/os_win32.cpp +++ b/projects/clr/rocclr/os/os_win32.cpp @@ -824,7 +824,7 @@ void Os::getAppPathAndFileName(std::string& appName, std::string& appPathAndName bool Os::GetURIFromMemory(const void* image, size_t image_size, std::string& uri_) { // Not implemented yet for windows - uri = std::string(); + uri_ = std::string(); return true; } @@ -836,7 +836,7 @@ bool Os::CloseFileHandle(FileDesc fdesc) { return true; } -bool GetFileHandle(const char* fname, FileDesc* fd_ptr, size_t* sz_ptr) { +bool Os::GetFileHandle(const char* fname, FileDesc* fd_ptr, size_t* sz_ptr) { if ((fd_ptr == nullptr) || (sz_ptr == nullptr)) { return false; } @@ -852,17 +852,21 @@ bool GetFileHandle(const char* fname, FileDesc* fd_ptr, size_t* sz_ptr) { return true; } -bool MemoryMapFileDesc(FileDesc fdesc, size_t fsize, size_t foffset, const void** mmap_ptr) { - if (fdesc < 0) { +bool Os::MemoryMapFileDesc(FileDesc fdesc, size_t fsize, size_t foffset, const void** mmap_ptr) { + if (fdesc == INVALID_HANDLE_VALUE) { return false; } - *mmap_ptr = INVALID_HANDLE_VALUE; - *mmap_ptr = CreateFileMappingA(fdesc, NULL, PAGE_READONLY, 0, 0, NULL); - if (*mmap_ptr == INVALID_HANDLE_VALUE) { + HANDLE map_handle = INVALID_HANDLE_VALUE; + + map_handle = CreateFileMappingA(fdesc, NULL, PAGE_READONLY, 0, 0, NULL); + if (map_handle == INVALID_HANDLE_VALUE) { + CloseHandle(map_handle); return false; } + *mmap_ptr = MapViewOfFile(map_handle, FILE_MAP_READ, 0,0,0); + return true; } diff --git a/projects/clr/rocclr/platform/program.hpp b/projects/clr/rocclr/platform/program.hpp index 36289139f6..0d3c0e5990 100755 --- a/projects/clr/rocclr/platform/program.hpp +++ b/projects/clr/rocclr/platform/program.hpp @@ -171,7 +171,8 @@ class Program : public RuntimeObject { //! Add a new device program with or without binary image and options. int32_t addDeviceProgram(Device&, const void* image = NULL, size_t len = 0, bool make_copy = true, amd::option::Options* options = NULL, - const amd::Program* same_prog = nullptr, amd::Os::FileDesc fdesc = -1, + const amd::Program* same_prog = nullptr, + amd::Os::FileDesc fdesc = amd::Os::FDescInit(), size_t foffset = 0, std::string uri = std::string()); //! Find the section for the given device. Return NULL if not found.