diff --git a/libc/config/linux/aarch64/headers.txt b/libc/config/linux/aarch64/headers.txt index 7d25877cefcc83..8f898f0150905a 100644 --- a/libc/config/linux/aarch64/headers.txt +++ b/libc/config/linux/aarch64/headers.txt @@ -1,6 +1,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.assert libc.include.ctype + libc.include.dlfcn libc.include.errno libc.include.features libc.include.fenv diff --git a/libc/config/linux/x86_64/headers.txt b/libc/config/linux/x86_64/headers.txt index 44d640b75e2bf7..df276894246c4c 100644 --- a/libc/config/linux/x86_64/headers.txt +++ b/libc/config/linux/x86_64/headers.txt @@ -2,6 +2,7 @@ set(TARGET_PUBLIC_HEADERS libc.include.assert libc.include.ctype libc.include.dirent + libc.include.dlfcn libc.include.errno libc.include.fcntl libc.include.features diff --git a/libc/include/CMakeLists.txt b/libc/include/CMakeLists.txt index 3ab7817d8568b7..f8ef35078a8c46 100644 --- a/libc/include/CMakeLists.txt +++ b/libc/include/CMakeLists.txt @@ -51,6 +51,15 @@ add_gen_header( .llvm_libc_common_h ) +add_gen_header( + dlfcn + DEF_FILE dlfcn.h.def + GEN_HDR dlfcn.h + DEPENDS + .llvm-libc-macros.dlfcn_macros + .llvm_libc_common_h +) + add_gen_header( features DEF_FILE features.h.def diff --git a/libc/include/dlfcn.h.def b/libc/include/dlfcn.h.def new file mode 100644 index 00000000000000..31395871c6b97e --- /dev/null +++ b/libc/include/dlfcn.h.def @@ -0,0 +1,17 @@ +//===-- C standard library header dlfcn.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_DLFCN_H +#define LLVM_LIBC_DLFCN_H + +#include "__llvm-libc-common.h" +#include "llvm-libc-macros/dlfcn-macros.h" + +%%public_api() + +#endif // LLVM_LIBC_DLFCN_H diff --git a/libc/include/llvm-libc-macros/CMakeLists.txt b/libc/include/llvm-libc-macros/CMakeLists.txt index f6af11abd4dd76..86d6271ff88ac2 100644 --- a/libc/include/llvm-libc-macros/CMakeLists.txt +++ b/libc/include/llvm-libc-macros/CMakeLists.txt @@ -277,3 +277,9 @@ add_macro_header( HDR stdckdint-macros.h ) + +add_macro_header( + dlfcn_macros + HDR + dlfcn-macros.h +) diff --git a/libc/include/llvm-libc-macros/dlfcn-macros.h b/libc/include/llvm-libc-macros/dlfcn-macros.h new file mode 100644 index 00000000000000..dcd202b9ab435c --- /dev/null +++ b/libc/include/llvm-libc-macros/dlfcn-macros.h @@ -0,0 +1,23 @@ +//===-- Definition of macros from dlfcn.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_DLFCN_MACROS_H +#define LLVM_LIBC_MACROS_DLFCN_MACROS_H + +#define RTLD_LAZY 0x00001 +#define RTLD_NOW 0x00002 +#define RTLD_GLOBAL 0x00100 +#define RTLD_LOCAL 0 + +// Non-standard stuff here +#define RTLD_BINDING_MASK 0x3 +#define RTLD_NOLOAD 0x00004 +#define RTLD_DEEPBIND 0x00008 +#define RTLD_NODELETE 0x01000 + +#endif // LLVM_LIBC_MACROS_DLFCN_MACROS_H diff --git a/libc/src/CMakeLists.txt b/libc/src/CMakeLists.txt index 09b16be1e2d42e..f011fe25226e55 100644 --- a/libc/src/CMakeLists.txt +++ b/libc/src/CMakeLists.txt @@ -11,6 +11,7 @@ add_subdirectory(stdio) add_subdirectory(stdlib) add_subdirectory(string) add_subdirectory(wchar) +add_subdirectory(dlfcn) if(${LIBC_TARGET_OS} STREQUAL "linux") add_subdirectory(dirent)