blob: 4a223a6c6bb53ac1b2c598df2c30b2222ea9c2a0 [file] [log] [blame]
swissChili8cfb7c42021-04-18 21:17:58 -07001#include "plat.h"
2#include <stdlib.h>
3#include <string.h>
swissChilif3e7f182021-04-20 13:57:22 -07004#include <sys/mman.h>
swissChili8cfb7c42021-04-18 21:17:58 -07005
swissChili53472e82021-05-08 16:06:32 -07006void *malloc_aligned(size_t size)
swissChili8cfb7c42021-04-18 21:17:58 -07007{
swissChili708d4c42021-07-04 17:40:07 -07008 // https://www.gnu.org/software/libc/manual/html_node/Aligned-Memory-Blocks.html
9 // On glibc malloc() and realloc() return 8-byte aligned addresses.
10 return malloc(size);
swissChili8cfb7c42021-04-18 21:17:58 -070011}
12
swissChili53472e82021-05-08 16:06:32 -070013void *realloc_aligned(void *addr, size_t size)
swissChili8cfb7c42021-04-18 21:17:58 -070014{
swissChili708d4c42021-07-04 17:40:07 -070015 return realloc(addr, size);
swissChili8cfb7c42021-04-18 21:17:58 -070016}
17
swissChili53472e82021-05-08 16:06:32 -070018void free_aligned(void *addr)
swissChili8cfb7c42021-04-18 21:17:58 -070019{
swissChili708d4c42021-07-04 17:40:07 -070020 free(addr);
swissChili8cfb7c42021-04-18 21:17:58 -070021}
swissChilif3e7f182021-04-20 13:57:22 -070022
swissChili53472e82021-05-08 16:06:32 -070023void *link(dasm_State **Dst)
swissChilif3e7f182021-04-20 13:57:22 -070024{
25 size_t size;
26 void *buf;
27
swissChili53472e82021-05-08 16:06:32 -070028 dasm_link(Dst, &size);
29 buf = mmap(0, size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS, -1,
30 0);
31 dasm_encode(Dst, buf);
swissChilif3e7f182021-04-20 13:57:22 -070032
swissChili53472e82021-05-08 16:06:32 -070033 mprotect(buf, size, PROT_READ | PROT_EXEC);
swissChilif3e7f182021-04-20 13:57:22 -070034 return buf;
35}