| /* |
| a sample to use MmapAllocator with an user-defined name |
| cat /proc/`psidof ./memfd`/maps |
| |
| 7fca70b44000-7fca70b4a000 rw-p 00000000 00:00 0 |
| 7fca70b67000-7fca70b68000 rwxs 00000000 00:05 19960170 /memfd:xyz (deleted) |
| 7fca70b68000-7fca70b69000 rwxs 00000000 00:05 19960169 /memfd:abc (deleted) |
| 7fca70b69000-7fca70b6a000 r--p 00029000 103:03 19136541 /lib/x86_64-linux-gnu/ld-2.27.so |
| 7fca70b6a000-7fca70b6b000 rw-p 0002a000 103:03 19136541 /lib/x86_64-linux-gnu/ld-2.27.so |
| */ |
| #define XBYAK_USE_MEMFD |
| #include <xbyak/xbyak.h> |
| #include <fstream> |
| |
| class Code : Xbyak::MmapAllocator, public Xbyak::CodeGenerator { |
| public: |
| Code(const char *name, int v) |
| : Xbyak::MmapAllocator(name) |
| , Xbyak::CodeGenerator(4096, nullptr, this /* specify external MmapAllocator */) |
| { |
| mov(eax, v); |
| ret(); |
| } |
| }; |
| |
| int main() |
| { |
| Code c1("Xbyak::abc", 123); |
| Code c2("Xbyak::xyz", 456); |
| printf("c1 %d\n", c1.getCode<int (*)()>()()); |
| printf("c2 %d\n", c2.getCode<int (*)()>()()); |
| std::ifstream ifs("/proc/self/maps", std::ios::binary); |
| if (ifs) { |
| std::string line; |
| while (std::getline(ifs, line)) { |
| printf("%s\n", line.c_str()); |
| } |
| } |
| } |