diff --git a/libc/config/linux/api.td b/libc/config/linux/api.td --- a/libc/config/linux/api.td +++ b/libc/config/linux/api.td @@ -196,22 +196,6 @@ def SysMManAPI : PublicAPI<"sys/mman.h"> { let Types = ["off_t", "size_t"]; let Macros = [ - SimpleMacroDef<"PROT_NONE", "0">, - SimpleMacroDef<"PROT_READ", "1">, - SimpleMacroDef<"PROT_WRITE", "2">, - SimpleMacroDef<"PROT_EXEC", "4">, - - SimpleMacroDef<"MAP_FIXED", "1">, - SimpleMacroDef<"MAP_PRIVATE", "2">, - SimpleMacroDef<"MAP_SHARED", "4">, - - SimpleMacroDef<"MAP_FAILED", "((void*)-1)">, - - // TODO: The value of 0x20 is good for x86_64, but has to be extended - // in some manner to accommodate other machine architectures. - SimpleMacroDef<"MAP_ANONYMOUS", "0x20"> - - // TODO: Add other MAP_* macros used by Linux. ]; } diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -203,6 +203,7 @@ .llvm_libc_common_h .llvm-libc-types.off_t .llvm-libc-types.ssize_t + .llvm-libc-macros.sys_mman_macros ) add_gen_header( diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -22,6 +22,14 @@ .linux.sys_stat_macros ) +add_header( + sys_mman_macros + HDR + sys-mman-macros.h + DEPENDS + .linux.sys_mman_macros +) + add_header( sys_resource_macros HDR diff --git a/libc/include/llvm-libc-macros/linux/CMakeLists.txt b/libc/include/llvm-libc-macros/linux/CMakeLists.txt --- a/libc/include/llvm-libc-macros/linux/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/linux/CMakeLists.txt @@ -4,6 +4,12 @@ fcntl-macros.h ) +add_header( + sys_mman_macros + HDR + sys-mman-macros.h +) + add_header( sys_stat_macros HDR diff --git a/libc/include/llvm-libc-macros/linux/sys-mman-macros.h b/libc/include/llvm-libc-macros/linux/sys-mman-macros.h new file mode 100644 --- /dev/null +++ b/libc/include/llvm-libc-macros/linux/sys-mman-macros.h @@ -0,0 +1,88 @@ +//===-- Definition of macros from sys/mman.h ------------------------------===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===----------------------------------------------------------------------===// + +#ifndef __LLVM_LIBC_MACROS_LINUX_SYS_MMAN_MACROS_H +#define __LLVM_LIBC_MACROS_LINUX_SYS_MMAN_MACROS_H + +// Memory protection flags. (mmap, munmap, mprotect) +#define PROT_NONE 0x0 +#define PROT_READ 0x1 +#define PROT_WRITE 0x2 +#define PROT_EXEC 0x4 +// These protection flags are only valid for mprotect. +#define PROT_GROWSUP 0x1000000 +#define PROT_GROWSDOWN 0x2000000 + +// Memory mapping flags. (mmap, munmap) +#define MAP_FAILED ((void *)-1) +// These are the sharing types, and exactly one of these must be set. +#define MAP_FILE 0x0 // Compatibility flag. Ignored. +#define MAP_SHARED 0x1 +#define MAP_PRIVATE 0x2 +#define MAP_SHARED_VALIDATE 0x3 +// 0x4-0xf are unused. +// These are the other flags, and zero or more of these can be set. +#define MAP_FIXED 0x10 +#define MAP_ANONYMOUS 0x20 +#define MAP_ANON MAP_ANONYMOUS +#define MAP_32BIT 0x40 +// 0x80 is unused. +#define MAP_GROWSDOWN 0x100 +#define MAP_DENYWRITE 0x800 +#define MAP_EXECUTABLE 0x1000 // Compatibility flag. Ignored. +#define MAP_LOCKED 0x2000 +#define MAP_NORESERVE 0x4000 +#define MAP_POPULATE 0x8000 +#define MAP_NONBLOCK 0x10000 +#define MAP_STACK 0x20000 +#define MAP_HUGETLB 0x40000 +#define MAP_SYNC 0x80000 +#define MAP_FIXED_NOREPLACE 0x100000 +// HUGETLB support macros. If ma_HUGHTLB is set, the bits under MAP_HUGE_MASK +// represent the base-2 logarithm of the desired page size, and MAP_HUGE_2MB/1GB +// are common sizes. +#define MAP_HUGE_SHIFT 26 +#define MAP_HUGE_MASK 0x3f +#define MAP_HUGE_2MB (21 << MAP_HUGE_SHIFT) +#define MAP_HUGE_1GB (30 << MAP_HUGE_SHIFT) + +// Memory sync flags. (msync) +#define MS_ASYNC 1 +#define MS_INVALIDATE 2 +#define MS_SYNC 4 + +// Memory advice flags. (madvise) +#define MADV_NORMAL 0 +#define MADV_RANDOM 1 +#define MADV_SEQUENTIAL 2 +#define MADV_WILLNEED 3 +#define MADV_DONTNEED 4 +#define MADV_FREE 8 +#define MADV_REMOVE 9 +#define MADV_DONTFORK 10 +#define MADV_DOFORK 11 +#define MADV_MERGEABLE 12 +#define MADV_UNMERGEABLE 13 +#define MADV_HUGEPAGE 14 +#define MADV_NOHUGEPAGE 15 +#define MADV_DONTDUMP 16 +#define MADV_DODUMP 17 +#define MADV_WIPEONFORK 18 +#define MADV_KEEPONFORK 19 +#define MADV_COLD 20 +#define MADV_PAGEOUT 21 +#define MADV_HWPOISON 100 + +// Posix memory advise flags. (posix_madvise) +#define POSIX_MADV_NORMAL MADV_NORMAL +#define POSIX_MADV_SEQUENTIAL MADV_SEQUENTIAL +#define POSIX_MADV_RANDOM MADV_RANDOM +#define POSIX_MADV_WILLNEED MADV_WILLNEED +#define POSIX_MADV_DONTNEED MADV_DONTNEED + +#endif // __LLVM_LIBC_MACROS_LINUX_SYS_MMAN_MACROS_H diff --git a/libc/include/sys/mman.h.def b/libc/include/llvm-libc-macros/sys-mman-macros.h copy from libc/include/sys/mman.h.def copy to libc/include/llvm-libc-macros/sys-mman-macros.h --- a/libc/include/sys/mman.h.def +++ b/libc/include/llvm-libc-macros/sys-mman-macros.h @@ -1,4 +1,4 @@ -//===-- POSIX header mman.h -----------------------------------------------===// +//===-- Macros defined in sys/mman.h header file --------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -6,11 +6,11 @@ // //===----------------------------------------------------------------------===// -#ifndef LLVM_LIBC_SYS_MMAN_H -#define LLVM_LIBC_SYS_MMAN_H +#ifndef __LLVM_LIBC_MACROS_SYS_MMAN_MACROS_H +#define __LLVM_LIBC_MACROS_SYS_MMAN_MACROS_H -#include <__llvm-libc-common.h> +#ifdef __unix__ +#include "linux/sys-mman-macros.h" +#endif -%%public_api() - -#endif // LLVM_LIBC_SYS_MMAN_H +#endif // __LLVM_LIBC_MACROS_SYS_MMAN_MACROS_H diff --git a/libc/include/sys/mman.h.def b/libc/include/sys/mman.h.def --- a/libc/include/sys/mman.h.def +++ b/libc/include/sys/mman.h.def @@ -11,6 +11,8 @@ #include <__llvm-libc-common.h> +#include + %%public_api() #endif // LLVM_LIBC_SYS_MMAN_H