common: host_memory: Implement for Android.
This commit is contained in:
		| @@ -11,6 +11,10 @@ | |||||||
|  |  | ||||||
| #elif defined(__linux__) || defined(__FreeBSD__) // ^^^ Windows ^^^ vvv Linux vvv | #elif defined(__linux__) || defined(__FreeBSD__) // ^^^ Windows ^^^ vvv Linux vvv | ||||||
|  |  | ||||||
|  | #ifdef ANDROID | ||||||
|  | #include <android/sharedmem.h> | ||||||
|  | #endif | ||||||
|  |  | ||||||
| #ifndef _GNU_SOURCE | #ifndef _GNU_SOURCE | ||||||
| #define _GNU_SOURCE | #define _GNU_SOURCE | ||||||
| #endif | #endif | ||||||
| @@ -366,17 +370,20 @@ public: | |||||||
|         } |         } | ||||||
|  |  | ||||||
|         // Backing memory initialization |         // Backing memory initialization | ||||||
| #if defined(__FreeBSD__) && __FreeBSD__ < 13 | #ifdef ANDROID | ||||||
|  |         fd = ASharedMemory_create("HostMemory", backing_size); | ||||||
|  | #elif defined(__FreeBSD__) && __FreeBSD__ < 13 | ||||||
|         // XXX Drop after FreeBSD 12.* reaches EOL on 2024-06-30 |         // XXX Drop after FreeBSD 12.* reaches EOL on 2024-06-30 | ||||||
|         fd = shm_open(SHM_ANON, O_RDWR, 0600); |         fd = shm_open(SHM_ANON, O_RDWR, 0600); | ||||||
| #else | #else | ||||||
|         fd = memfd_create("HostMemory", 0); |         fd = memfd_create("HostMemory", 0); | ||||||
| #endif | #endif | ||||||
|         if (fd == -1) { |         if (fd < 0) { | ||||||
|             LOG_CRITICAL(HW_Memory, "memfd_create failed: {}", strerror(errno)); |             LOG_CRITICAL(HW_Memory, "memfd_create failed: {}", strerror(errno)); | ||||||
|             throw std::bad_alloc{}; |             throw std::bad_alloc{}; | ||||||
|         } |         } | ||||||
|  |  | ||||||
|  | #ifndef ANDROID | ||||||
|         // Defined to extend the file with zeros |         // Defined to extend the file with zeros | ||||||
|         int ret = ftruncate(fd, backing_size); |         int ret = ftruncate(fd, backing_size); | ||||||
|         if (ret != 0) { |         if (ret != 0) { | ||||||
| @@ -384,6 +391,7 @@ public: | |||||||
|                          strerror(errno)); |                          strerror(errno)); | ||||||
|             throw std::bad_alloc{}; |             throw std::bad_alloc{}; | ||||||
|         } |         } | ||||||
|  | #endif | ||||||
|  |  | ||||||
|         backing_base = static_cast<u8*>( |         backing_base = static_cast<u8*>( | ||||||
|             mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)); |             mmap(nullptr, backing_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0)); | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user