minecraft-linux / mcpelauncher-manifest

The main repository for the Linux and Mac OS Bedrock edition Minecraft launcher.
https://minecraft-linux.github.io
GNU General Public License v3.0
925 stars 100 forks source link

reusability of your subprojects #366

Open Mis012 opened 4 years ago

Mis012 commented 4 years ago

Hi, the reason I am here is not really mcpe related - I just had a sad realization that libhybris doesn't actually work at all to help run bionic-expecting libs (as one would assume from some descriptions of it), it's actually only your project that managed to hack it to do that. Are you planning to provide (or do you already do so, it's just not documented) a generic (i.e not tied to mcpe) solution to that problem? Since libhybris is clearly not that...

I wanted to investigate, but anything I try to compile, be it the whole thing or just the subprojects, seems to fall apart while throwing random compiler errors. Is this expected on x86_64/aarch64?

ChristopherHX commented 4 years ago

Yes currently nothing is documented for other usages. "libhybris" was abandoned this year, lack of 64bit support. You need mcpelauncher-linker (branch ng), should build as standalone static library for armv7 neon, x86, armv8 and x86_64. Only x86 and x86_64 currently working for minecraftpe with this library. libc-shim, glibc shim for wrapping libc functions (armv7 hardfp currently not working)

Should I create a simple testproject for you? my now old poc wich uses the private android linker interface

linker::init();
void* handle = linker::dlopen("path to so", 0);
void* test = linker::dlsym(handle, "test");

I agree the default manifest is very confusing to use for non Minecraft.

Edit You should load a basic library with this snipped. (linux) If you want to start a gui app, you will need more, than empty android libaries like in this example. I hope you get an idea how to use it.

CMakeLists.txt

if(NOT CMAKE_CXX_STANDARD)
    set(CMAKE_CXX_STANDARD 17)
endif()
add_subdirectory(mcpelauncher-linker)
add_subdirectory(libc-shim)

add_executable(linkertest src/main.cpp)
target_link_libraries(linkertest linker libc-shim)

main.cpp

#include <mcpelauncher/linker.h>
#include <unordered_map>
#include <iostream>
#include <libc_shim.h>

int main(int argc, char const *argv[])
{
    linker::init(); // this makes libdl.so available
    std::unordered_map<std::string, void*> libc;
    std::vector<shim::shimmed_symbol> shimed = shim::get_shimmed_symbols();
    for(auto && l : shimed) {
        libc[l.name] = l.value;
    }
    linker::load_library("libc.so", libc); // this makes a basic libc implementation available
    linker::load_library("liblog.so", {}); // These are empty stubs libraries without defining any symbols
    linker::load_library("libEGL.so", {});
    linker::load_library("libstdc++.so", {});
    linker::load_library("libm.so", {});
    linker::load_library("libOpenSLES.so", {});
    linker::load_library("libandroid.so", {});

    auto libchandle = linker::dlopen("/path/to/libc++_shared.so", 0); // from android sdk for your cpu
    void * handle = linker::dlopen("/path/to/a/cpplib.so", 0);
    auto hiandy = (int(*)())linker::dlsym(handle, "hiandy");
    std::cout << hiandy() << "/n";
    return 0;
}

Running this will print a verbose log message (until disabled by default in a cleanup) to stdout, with all error and success messages. linker::dlerror() not working yet.

Mis012 commented 4 years ago

thx, but even with "-m32 -fpermissive" it falls apart :(

(this is x86 glibc system, will have to move to armv7 to test the actual .so I want to make work)

Mis012@Mis012:~/Projects/bionic2glibc/build> make
[  1%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/cstdio.cpp.o
[  3%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/file_misc.cpp.o
[  5%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/ctype_data.cpp.o
[  7%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/pthreads.cpp.o
[  9%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/common.cpp.o
[ 13%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/stat.cpp.o
[ 13%] Building CXX object libc-shim/CMakeFiles/libc-shim.dir/src/bionic/strlcpy.cpp.o
[ 15%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/dlfcn.cpp.o
/home/Mis012/Projects/bionic2glibc/libc-shim/src/common.cpp:3:10: fatal error: log.h: No such file or directory
    3 | #include <log.h>
      |          ^~~~~~~
compilation terminated.
make[2]: *** [libc-shim/CMakeFiles/libc-shim.dir/build.make:83: libc-shim/CMakeFiles/libc-shim.dir/src/common.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
[ 16%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_phdr.cpp.o
[ 18%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_soinfo.cpp.o
[ 20%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker.cpp.o
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:42,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/dlfcn.cpp:42:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/WriteProtected.h:51:18: error: missing binary operator before token "("
   51 | #if __has_feature(hwaddress_sanitizer)
      |                  ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp: In function ‘int shim::fprintf(shim::bionic::FILE*, const char*, ...)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:81:5: error: ‘va_start’ was not declared in this scope
   81 |     va_start(args, fmt);
      |     ^~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:83:5: error: ‘va_end’ was not declared in this scope
   83 |     va_end(args);
      |     ^~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp: In function ‘int shim::fscanf(shim::bionic::FILE*, const char*, ...)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:89:5: error: ‘va_start’ was not declared in this scope
   89 |     va_start(args, fmt);
      |     ^~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:91:5: error: ‘va_end’ was not declared in this scope
   91 |     va_end(args);
      |     ^~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp: In function ‘int shim::__snprintf_chk(char*, size_t, int, size_t, const char*, ...)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:120:5: error: ‘va_start’ was not declared in this scope
  120 |     va_start(args, fmt);
      |     ^~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:42,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.cpp:75:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/WriteProtected.h:51:18: error: missing binary operator before token "("
   51 | #if __has_feature(hwaddress_sanitizer)
      |                  ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:122:5: error: ‘va_end’ was not declared in this scope
  122 |     va_end(args);
      |     ^~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.h:6,
                 from /home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:2:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp: In function ‘void shim::add_cstdio_shimmed_symbols(std::vector<shim::shimmed_symbol>&)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘int(int, FILE*)’ [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:160:19: note: in expansion of macro ‘AutoArgRewritten’
  160 |         {"fputc", AutoArgRewritten(::fputc)},
      |                   ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘int(const char*, FILE*)’ [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:161:19: note: in expansion of macro ‘AutoArgRewritten’
  161 |         {"fputs", AutoArgRewritten(::fputs)},
      |                   ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘size_t(const void*, size_t, size_t, FILE*)’ {aka ‘unsigned int(const void*, unsigned int, unsigned int, FILE*)’} [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:163:20: note: in expansion of macro ‘AutoArgRewritten’
  163 |         {"fwrite", AutoArgRewritten(::fwrite)},
      |                    ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘int(FILE*, const char*, __gnuc_va_list)’ {aka ‘int(FILE*, const char*, char*)’} [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:165:22: note: in expansion of macro ‘AutoArgRewritten’
  165 |         {"vfprintf", AutoArgRewritten(::vfprintf)},
      |                      ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘int(int, FILE*)’ [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:172:18: note: in expansion of macro ‘AutoArgRewritten’
  172 |         {"putc", AutoArgRewritten(::putc)},
      |                  ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/argrewrite.h:98:77: warning: ignoring attributes on template argument ‘int(int, FILE*)’ [-Wignored-attributes]
   98 | #define AutoArgRewritten(ptr) (&shim::detail::arg_rewrite_helper<typeof(ptr)>::rewrite<ptr>)
      |                                                                             ^
/home/Mis012/Projects/bionic2glibc/libc-shim/src/cstdio.cpp:173:27: note: in expansion of macro ‘AutoArgRewritten’
  173 |         {"putc_unlocked", AutoArgRewritten(::putc_unlocked)},
      |                           ^~~~~~~~~~~~~~~~
make[2]: *** [libc-shim/CMakeFiles/libc-shim.dir/build.make:148: libc-shim/CMakeFiles/libc-shim.dir/src/cstdio.cpp.o] Error 1
In file included from /home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp:10:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/network.h:81:22: warning: declaration of ‘shim::bionic::ai_flags shim::bionic::addrinfo::ai_flags’ changes meaning of ‘ai_flags’ [-fpermissive]
   81 |             ai_flags ai_flags;
      |                      ^~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/network.h:16:20: note: ‘ai_flags’ declared here as ‘enum class shim::bionic::ai_flags’
   16 |         enum class ai_flags : int {
      |                    ^~~~~~~~
[ 22%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_relocate.cpp.o
[ 24%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_namespaces.cpp.o
/home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp: In function ‘int shim::open(const char*, shim::bionic::file_status_flags, ...)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp:84:9: error: ‘va_start’ was not declared in this scope
   84 |         va_start(ap, flags);
      |         ^~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp:85:36: error: expected primary-expression before ‘int’
   85 |         mode = (mode_t) va_arg(ap, int);
      |                                    ^~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp:85:25: error: ‘va_arg’ was not declared in this scope
   85 |         mode = (mode_t) va_arg(ap, int);
      |                         ^~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/file_misc.cpp:86:9: error: ‘va_end’ was not declared in this scope
   86 |         va_end(ap);
      |         ^~~~~~
make[2]: *** [libc-shim/CMakeFiles/libc-shim.dir/build.make:213: libc-shim/CMakeFiles/libc-shim.dir/src/file_misc.cpp.o] Error 1
In file included from /home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.cpp:6:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:100:24: warning: ‘shim::bionic::pthread_condattr_t::clock’ is too small to hold all values of ‘enum class shim::bionic::clock_type’
  100 |             clock_type clock : 2;
      |                        ^~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:117:26: warning: declaration of ‘shim::bionic::sched_policy shim::bionic::pthread_attr_t::sched_policy’ changes meaning of ‘sched_policy’ [-fpermissive]
  117 |             sched_policy sched_policy;
      |                          ^~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:103:20: note: ‘sched_policy’ declared here as ‘enum class shim::bionic::sched_policy’
  103 |         enum class sched_policy {
      |                    ^~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:244:83: warning: ‘class’ tag used in naming ‘union pthread_rwlock_t’ [-fpermissive]
  244 |         struct arg_rewrite<::pthread_rwlock_t *> : bionic_ptr_rewriter<typename ::pthread_rwlock_t *, pthread_rwlock_t *> {};
      |                                                                                   ^~~~~~~~~~~~~~~~
In file included from /usr/include/pthread.h:26,
                 from /usr/include/c++/10/x86_64-suse-linux/bits/gthr-default.h:35,
                 from /usr/include/c++/10/x86_64-suse-linux/bits/gthr.h:148,
                 from /usr/include/c++/10/ext/atomicity.h:35,
                 from /usr/include/c++/10/bits/basic_string.h:39,
                 from /usr/include/c++/10/string:55,
                 from /usr/include/c++/10/stdexcept:39,
                 from /home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.cpp:2:
/usr/include/bits/pthreadtypes.h:91:3: note: ‘union pthread_rwlock_t’ was previously declared here
   91 | } pthread_rwlock_t;
      |   ^~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.cpp: In function ‘int shim::pthread_condattr_init(shim::pthread_condattr_t*)’:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.cpp:280:50: error: no match for ‘operator=’ (operand types are ‘shim::pthread_condattr_t’ {aka ‘shim::bionic::pthread_condattr_t’} and ‘<brace-enclosed initializer list>’)
  280 |     *attr = {false, bionic::clock_type::MONOTONIC};
      |                                                  ^
In file included from /home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.cpp:6:
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:98:16: note: candidate: ‘constexpr shim::bionic::pthread_condattr_t& shim::bionic::pthread_condattr_t::operator=(const shim::bionic::pthread_condattr_t&)’
   98 |         struct pthread_condattr_t {
      |                ^~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:98:16: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘const shim::bionic::pthread_condattr_t&’
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:98:16: note: candidate: ‘constexpr shim::bionic::pthread_condattr_t& shim::bionic::pthread_condattr_t::operator=(shim::bionic::pthread_condattr_t&&)’
/home/Mis012/Projects/bionic2glibc/libc-shim/src/pthreads.h:98:16: note:   no known conversion for argument 1 from ‘<brace-enclosed initializer list>’ to ‘shim::bionic::pthread_condattr_t&&’
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:42,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:45:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/WriteProtected.h:51:18: error: missing binary operator before token "("
   51 | #if __has_feature(hwaddress_sanitizer)
      |                  ^
[ 26%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/core/base/mapped_file.cpp.o
make[2]: *** [libc-shim/CMakeFiles/libc-shim.dir/build.make:96: libc-shim/CMakeFiles/libc-shim.dir/src/pthreads.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:192: libc-shim/CMakeFiles/libc-shim.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 28%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_globals.cpp.o
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_phdr.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_phdr.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/dlfcn.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/mapped_file.h:25,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/mapped_file.cpp:17:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:283:65: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  283 |     __attribute__((__unavailable__("close called on unique_fd")));
      |                                                                 ^
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:288:97: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  288 |                                    "unique_fd, or use android::base::Fdopen to pass ownership")));
      |                                                                                                 ^
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:293:85: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  293 |                     "unique_fd, or use android::base::Fdopendir to pass ownership")));
      |                                                                                     ^
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.cpp:58:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:8: error: ‘_Bool’ does not name a type
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |        ^~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:8: error: ‘_Bool’ does not name a type
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |        ^~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_phdr.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_phdr.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/dlfcn.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
[ 30%] Building CXX object mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_main.cpp.o
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.cpp:58:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.h:40,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:42,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:46:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/WriteProtected.h:51:18: error: missing binary operator before token "("
   51 | #if __has_feature(hwaddress_sanitizer)
      |                  ^
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_namespaces.cpp:31:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:148: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_phdr.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.h:40,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:39,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/dlfcn.cpp:42:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   42 |   _Atomic(uint64_t) close_tag = 0;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:19: error: expected ‘;’ at end of member declaration
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                   ^
      |                    ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:21: error: ‘close_tag’ does not name a type
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                     ^~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:36: error: expected ‘;’ at end of member declaration
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                    ^
      |                                     ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:38: error: ‘error_level’ does not name a type
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                      ^~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:27: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                           ^
      |                            ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:29: error: ‘overflow’ does not name a type
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                             ^~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/dlfcn.cpp:42:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:32: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                ^
      |                                 ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:34: error: ‘current_dispatch_table’ does not name a type
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:32: error: expected ‘;’ at end of member declaration
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: error: ‘int libc_globals::_Atomic(const MallocDispatch*)’ cannot be overloaded with ‘int libc_globals::_Atomic(const MallocDispatch*)’
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: note: previous declaration ‘int libc_globals::_Atomic(const MallocDispatch*)’
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:34: error: ‘default_dispatch_table’ does not name a type
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:39,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.cpp:75:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   42 |   _Atomic(uint64_t) close_tag = 0;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:19: error: expected ‘;’ at end of member declaration
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                   ^
      |                    ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:21: error: ‘close_tag’ does not name a type
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                     ^~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:36: error: expected ‘;’ at end of member declaration
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                    ^
      |                                     ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:38: error: ‘error_level’ does not name a type
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                      ^~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:27: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                           ^
      |                            ;
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_namespaces.cpp:31:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:29: error: ‘overflow’ does not name a type
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                             ^~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.cpp:75:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:32: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:34: error: ‘current_dispatch_table’ does not name a type
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:32: error: expected ‘;’ at end of member declaration
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: error: ‘int libc_globals::_Atomic(const MallocDispatch*)’ cannot be overloaded with ‘int libc_globals::_Atomic(const MallocDispatch*)’
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: note: previous declaration ‘int libc_globals::_Atomic(const MallocDispatch*)’
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:34: error: ‘default_dispatch_table’ does not name a type
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:39,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:45:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   42 |   _Atomic(uint64_t) close_tag = 0;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:19: error: expected ‘;’ at end of member declaration
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                   ^
      |                    ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:21: error: ‘close_tag’ does not name a type
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                     ^~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:36: error: expected ‘;’ at end of member declaration
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                    ^
      |                                     ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:38: error: ‘error_level’ does not name a type
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                      ^~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:27: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                           ^
      |                            ;
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_globals.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:29: error: ‘overflow’ does not name a type
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                             ^~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:45:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:32: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                ^
      |                                 ;
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:34: error: ‘current_dispatch_table’ does not name a type
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:32: error: expected ‘;’ at end of member declaration
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: error: ‘int libc_globals::_Atomic(const MallocDispatch*)’ cannot be overloaded with ‘int libc_globals::_Atomic(const MallocDispatch*)’
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: note: previous declaration ‘int libc_globals::_Atomic(const MallocDispatch*)’
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:34: error: ‘default_dispatch_table’ does not name a type
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:135: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/dlfcn.cpp.o] Error 1
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:161: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_soinfo.cpp.o] Error 1
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker.h:43,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_globals.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:160:13: warning: ‘always_inline’ function might not be inlinable [-Wattributes]
  160 | static bool process_relocation_impl(Relocator& relocator, const rel_t& reloc) {
      |             ^~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:160:13: warning: ‘always_inline’ function might not be inlinable [-Wattributes]
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_relocate.cpp:160:13: warning: ‘always_inline’ function might not be inlinable [-Wattributes]
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:252: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_relocate.cpp.o] Error 1
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:265: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_namespaces.cpp.o] Error 1
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:33,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.h:37,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:29:
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:40:9: error: ‘_Atomic’ does not name a type
   40 | typedef _Atomic _Bool atomic_bool;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:41:9: error: ‘_Atomic’ does not name a type
   41 | typedef _Atomic char atomic_char;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:42:9: error: ‘_Atomic’ does not name a type
   42 | typedef _Atomic signed char atomic_schar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:43:9: error: ‘_Atomic’ does not name a type
   43 | typedef _Atomic unsigned char atomic_uchar;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:44:9: error: ‘_Atomic’ does not name a type
   44 | typedef _Atomic short atomic_short;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:45:9: error: ‘_Atomic’ does not name a type
   45 | typedef _Atomic unsigned short atomic_ushort;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:46:9: error: ‘_Atomic’ does not name a type
   46 | typedef _Atomic int atomic_int;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:47:9: error: ‘_Atomic’ does not name a type
   47 | typedef _Atomic unsigned int atomic_uint;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:48:9: error: ‘_Atomic’ does not name a type
   48 | typedef _Atomic long atomic_long;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:49:9: error: ‘_Atomic’ does not name a type
   49 | typedef _Atomic unsigned long atomic_ulong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:50:9: error: ‘_Atomic’ does not name a type
   50 | typedef _Atomic long long atomic_llong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:51:9: error: ‘_Atomic’ does not name a type
   51 | typedef _Atomic unsigned long long atomic_ullong;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:52:9: error: ‘_Atomic’ does not name a type
   52 | typedef _Atomic __CHAR16_TYPE__ atomic_char16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:53:9: error: ‘_Atomic’ does not name a type
   53 | typedef _Atomic __CHAR32_TYPE__ atomic_char32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:54:9: error: ‘_Atomic’ does not name a type
   54 | typedef _Atomic __WCHAR_TYPE__ atomic_wchar_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:55:9: error: ‘_Atomic’ does not name a type
   55 | typedef _Atomic __INT_LEAST8_TYPE__ atomic_int_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:56:9: error: ‘_Atomic’ does not name a type
   56 | typedef _Atomic __UINT_LEAST8_TYPE__ atomic_uint_least8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:57:9: error: ‘_Atomic’ does not name a type
   57 | typedef _Atomic __INT_LEAST16_TYPE__ atomic_int_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:58:9: error: ‘_Atomic’ does not name a type
   58 | typedef _Atomic __UINT_LEAST16_TYPE__ atomic_uint_least16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:59:9: error: ‘_Atomic’ does not name a type
   59 | typedef _Atomic __INT_LEAST32_TYPE__ atomic_int_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:60:9: error: ‘_Atomic’ does not name a type
   60 | typedef _Atomic __UINT_LEAST32_TYPE__ atomic_uint_least32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:61:9: error: ‘_Atomic’ does not name a type
   61 | typedef _Atomic __INT_LEAST64_TYPE__ atomic_int_least64_t;
      |         ^~~~~~~
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:291: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_globals.cpp.o] Error 1
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:62:9: error: ‘_Atomic’ does not name a type
   62 | typedef _Atomic __UINT_LEAST64_TYPE__ atomic_uint_least64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:63:9: error: ‘_Atomic’ does not name a type
   63 | typedef _Atomic __INT_FAST8_TYPE__ atomic_int_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:64:9: error: ‘_Atomic’ does not name a type
   64 | typedef _Atomic __UINT_FAST8_TYPE__ atomic_uint_fast8_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:65:9: error: ‘_Atomic’ does not name a type
   65 | typedef _Atomic __INT_FAST16_TYPE__ atomic_int_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:66:9: error: ‘_Atomic’ does not name a type
   66 | typedef _Atomic __UINT_FAST16_TYPE__ atomic_uint_fast16_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:67:9: error: ‘_Atomic’ does not name a type
   67 | typedef _Atomic __INT_FAST32_TYPE__ atomic_int_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:68:9: error: ‘_Atomic’ does not name a type
   68 | typedef _Atomic __UINT_FAST32_TYPE__ atomic_uint_fast32_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:69:9: error: ‘_Atomic’ does not name a type
   69 | typedef _Atomic __INT_FAST64_TYPE__ atomic_int_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:70:9: error: ‘_Atomic’ does not name a type
   70 | typedef _Atomic __UINT_FAST64_TYPE__ atomic_uint_fast64_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:71:9: error: ‘_Atomic’ does not name a type
   71 | typedef _Atomic __INTPTR_TYPE__ atomic_intptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:72:9: error: ‘_Atomic’ does not name a type
   72 | typedef _Atomic __UINTPTR_TYPE__ atomic_uintptr_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:73:9: error: ‘_Atomic’ does not name a type
   73 | typedef _Atomic __SIZE_TYPE__ atomic_size_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:74:9: error: ‘_Atomic’ does not name a type
   74 | typedef _Atomic __PTRDIFF_TYPE__ atomic_ptrdiff_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:75:9: error: ‘_Atomic’ does not name a type
   75 | typedef _Atomic __INTMAX_TYPE__ atomic_intmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:76:9: error: ‘_Atomic’ does not name a type
   76 | typedef _Atomic __UINTMAX_TYPE__ atomic_uintmax_t;
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:218:9: error: ‘_Atomic’ does not name a type
  218 | typedef _Atomic struct
      |         ^~~~~~~
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:225:3: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  225 | } atomic_flag;
      |   ^~~~~~~~~~~
      |   atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:230:49: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  230 | extern _Bool atomic_flag_test_and_set (volatile atomic_flag *);
      |                                                 ^~~~~~~~~~~
      |                                                 atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:233:58: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  233 | extern _Bool atomic_flag_test_and_set_explicit (volatile atomic_flag *,
      |                                                          ^~~~~~~~~~~
      |                                                          atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:238:41: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  238 | extern void atomic_flag_clear (volatile atomic_flag *);
      |                                         ^~~~~~~~~~~
      |                                         atomic_load
/usr/lib64/gcc/x86_64-suse-linux/10/include/stdatomic.h:240:50: error: ‘atomic_flag’ does not name a type; did you mean ‘atomic_load’?
  240 | extern void atomic_flag_clear_explicit (volatile atomic_flag *, memory_order);
      |                                                  ^~~~~~~~~~~
      |                                                  atomic_load
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_soinfo.h:38,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.h:37,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:29:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:37:40: error: expected initializer before ‘__libc_tls_generation_copy’
   37 | __LIBC_HIDDEN__ extern _Atomic(size_t) __libc_tls_generation_copy;
      |                                        ^~~~~~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:17: error: expected ‘;’ at end of member declaration
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:19: error: ‘generation’ does not name a type
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |                   ^~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:17: error: expected ‘;’ at end of member declaration
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                 ^
      |                  ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:3: error: ‘int TlsModules::_Atomic(size_t)’ cannot be overloaded with ‘int TlsModules::_Atomic(size_t)’
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:122:3: note: previous declaration ‘int TlsModules::_Atomic(size_t)’
  122 |   _Atomic(size_t) generation = kTlsGenerationFirst;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_elf_tls.h:123:20: warning: ISO C++ forbids declaration of ‘generation_libc_so’ with no type [-fpermissive]
  123 |   _Atomic(size_t) *generation_libc_so = nullptr;
      |                    ^~~~~~~~~~~~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:39,
                 from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:46:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   42 |   _Atomic(uint64_t) close_tag = 0;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:19: error: expected ‘;’ at end of member declaration
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                   ^
      |                    ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:42:21: error: ‘close_tag’ does not name a type
   42 |   _Atomic(uint64_t) close_tag = 0;
      |                     ^~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:36: error: expected ‘;’ at end of member declaration
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                    ^
      |                                     ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:55:38: error: ‘error_level’ does not name a type
   55 |   _Atomic(android_fdsan_error_level) error_level = ANDROID_FDSAN_ERROR_LEVEL_DISABLED;
      |                                      ^~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:27: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                           ^
      |                            ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_fdsan.h:58:29: error: ‘overflow’ does not name a type
   58 |   _Atomic(FdTableOverflow*) overflow = nullptr;
      |                             ^~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:46:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:32: error: expected ‘;’ at end of member declaration
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:34: error: ‘current_dispatch_table’ does not name a type
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: warning: ISO C++ forbids declaration of ‘_Atomic’ with no type [-fpermissive]
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:32: error: expected ‘;’ at end of member declaration
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                ^
      |                                 ;
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:3: error: ‘int libc_globals::_Atomic(const MallocDispatch*)’ cannot be overloaded with ‘int libc_globals::_Atomic(const MallocDispatch*)’
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:58:3: note: previous declaration ‘int libc_globals::_Atomic(const MallocDispatch*)’
   58 |   _Atomic(const MallocDispatch*) current_dispatch_table;
      |   ^~~~~~~
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/include/private/bionic_globals.h:61:34: error: ‘default_dispatch_table’ does not name a type
   61 |   _Atomic(const MallocDispatch*) default_dispatch_table;
      |                                  ^~~~~~~~~~~~~~~~~~~~~~
In file included from /home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:50:
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:283:65: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  283 |     __attribute__((__unavailable__("close called on unique_fd")));
      |                                                                 ^
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:288:97: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  288 |                                    "unique_fd, or use android::base::Fdopen to pass ownership")));
      |                                                                                                 ^
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/core/base/include/android-base/unique_fd.h:293:85: warning: ‘unavailable’ attribute directive ignored [-Wattributes]
  293 |                     "unique_fd, or use android::base::Fdopendir to pass ownership")));
      |                                                                                     ^
/home/Mis012/Projects/bionic2glibc/mcpelauncher-linker/bionic/linker/linker_main.cpp:62:24: error: expected unqualified-id before string constant
   62 | __LIBC_HIDDEN__ extern "C" void _start();
      |                        ^~~
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:304: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker_main.cpp.o] Error 1
make[2]: *** [mcpelauncher-linker/CMakeFiles/linker.dir/build.make:174: mcpelauncher-linker/CMakeFiles/linker.dir/bionic/linker/linker.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:165: mcpelauncher-linker/CMakeFiles/linker.dir/all] Error 2
make: *** [Makefile:104: all] Error 2
Mis012 commented 4 years ago

my main concern is Worms2Armageddon (conveniently only has armv7 libs... fun, especially with musl having no multiarch, I hope to use qemu architectural chroot on x86 for testing), not actually sure how much they implement in java but probably not a lot

Ideally I'd like to start a massive project of reimplementing the entire android API atop bona fide linux (would need a lot of help though, it's big), since aside from getting dalvik to build outside old AOSP source tree, that's really the only thing needed to run those apps as natively as java SE (could even map the GUI to GTK to make it more fun for the contributors)

ChristopherHX commented 4 years ago

I see you have a big Project, we currently use a fake java native interface and a fake android interface to run this opengl es game, but running an armv7 app is currently only working with libhybris (-m32 is required).

Oh I forget to mention you need the clang compiler 9 (or newer), (google dropped gcc support for android, mcpelauncher-linker contains android source code) and c++17 for this project. e.g. CC=clang CXX=clang++ cmake .. armeabiv7 needs changes in libcshim (for all floating point functions), because android use a different calling convention than armv7 linux. armv7 also needs currently not forwarded functions To fix one compile error add this subproject https://github.com/minecraft-linux/logger I forget this dependency exist

ChristopherHX commented 4 years ago

my main concern is Worms2Armageddon (conveniently only has armv7 libs)

Are you shure?

I found · "Added compatibility for Android devices using x86 Intel architecture." Source https://play.google.com/store/apps/details?id=com.worms2armageddon.app&hl=en So you can skip all arm emulation stuff.

To get that x86 apk

PS I don't own that game, but I got poor experience while using qemu-arm with Minecraft PE. Opengl rendering with gpu wasn't possible with qemu for me, but I'm a qemu newbe

Mis012 commented 4 years ago

secured x86 libs, no idea what weird version I have on my phone then

ok, with clang, I can compile for x86_64 (except libc-shim/src/common.cpp:3:10: fatal error: 'log.h' file not found") with -m32 I get some suspicious warnings, and rather unfortunate "/usr/bin/ld: i386:x86-64 architecture of input file `mcpelauncher-linker/liblinker.a(strlcpy.c.o)' is incompatible with i386 output" [edit: solved]

I'm afraid clang->gcc and cpp->C is not viable? :P I have an aarch64 phone with near-mainline kernel, so aarch64 lib and musl support for the shim would be the end goal here, but aarch64 version is still not a thing so I think I'll have to use an armv7 chroot (no multilib) - will be fun...

my Project has the issue that it will need a lot of manpower, and I personally don't even know Java, though shimming to C with jni straight away seems justifiable for performance reasons (will have to sacrifice help of Rust evangelistst and "C++ is not that bad reee" people anyway though☹️)

Mis012 commented 4 years ago

[edit: solved]

Mis012 commented 4 years ago

ouch, I'm stupid... that's the only C file in the whole project, and it needs CFLAGS :D

so [100%] Built target linkertest \o/

Mis012 commented 4 years ago

so I need to do something about libGLESv1_CM.so I assume... on the plus side, that is plain-C API right? so I can avoid fugly cpp? :crossed_fingers:

ChristopherHX commented 4 years ago

75% additional of missing code already exist in the mcpelauncher-client. The problem is it is combined with a Minecraft specfic interface to allow direct mouse input.

libEGL.so... which was all stubed in my basic example has been implemented so far https://github.com/ChristopherHX/mcpelauncher-client/blob/4432adedf01af198742632def0d4c6d4641a79d2/src/main.cpp My fake libEGL https://github.com/ChristopherHX/mcpelauncher-client/blob/4432adedf01af198742632def0d4c6d4641a79d2/src/main.cpp#L181 The new fake libEGL from minecraft-linux https://github.com/minecraft-linux/mcpelauncher-client/blob/master/src/fake_egl.cpp fake AndroidAsset loader https://github.com/minecraft-linux/mcpelauncher-client/blob/master/src/fake_inputqueue.cpp fake Android looper https://github.com/minecraft-linux/mcpelauncher-client/blob/master/src/fake_looper.cpp

libGLESv1_CM.so or libGLESV2.so can almost be populated by your linux graphic drivers (arm have had tweaks, windows has other problems here) We use this symbol list and ask eglGetProcAddr("name") to get the pointer to the function https://github.com/minecraft-linux/minecraft-imported-symbols/blob/master/include/minecraft/imported/glesv2_symbols.h Used here https://github.com/minecraft-linux/mcpelauncher-core/blob/1a127120a1b7525b5cb86c749fddc1d3a3206483/src/minecraft_utils.cpp#L138 I wonder if opengles1 rendering even works fine, Minecraft uses OpenGLES2 since 0.10.

To give me an overview what your game expect to be provided by the launcher, please post the output of readelf -s --wide /path/to/the/shared.so

Mis012 commented 4 years ago

out.txt

seems like a lot... how do you even filter trough this?

  Tag        Type                         Name/Value
 0x00000001 (NEEDED)                     Shared library: [liblog.so]
 0x00000001 (NEEDED)                     Shared library: [libGLESv1_CM.so]
 0x00000001 (NEEDED)                     Shared library: [libz.so]
 0x00000001 (NEEDED)                     Shared library: [libstdc++.so]
 0x00000001 (NEEDED)                     Shared library: [libm.so]
 0x00000001 (NEEDED)                     Shared library: [libc.so]
 0x00000001 (NEEDED)                     Shared library: [libdl.so]
 0x0000000e (SONAME)                     Library soname: [libWormsAndroid.so]

also, I'd assume libEGL.so is not needed if it doesn't ask for it?

ChristopherHX commented 4 years ago

also, I'd assume libEGL.so is not needed if it doesn't ask for it?

Then this means the opengles1 surface was created with java code. I suggest looking into classes.dex, e.g. https://github.com/pxb1988/dex2jar + a java decompiler.

Note: You might have luck, libWormsAndroid has a lot of debugging information, not like Minecraft without them.

Your app may have more java code than you think.

how do you even filter trough this?

I look for undefined / used symbols like 6249: 00000000 0 FUNC GLOBAL DEFAULT UND glActiveTexture.

Calling JNIOnLoad with a fake, oracle jvm or whatever jvm will initialize the last part of the library, then most operations are java native interface based. It will hopefully register native functions to the jvm, no public `Java..` symbols.

_MinecraftPE would go on with ANativeActivityOnCreate, but your app has that in java code, which calls back to native via jni

Some notes: I assume

Reference old ndk: https://github.com/minecraft-linux/android_bionic/blob/0133944b09d1c0a35041f7a41eb6bfb660144f4f/libc/include/stdio.h#L366 __srget and __swbuf should map to throw an exception isthreaded is true, so only getc_unlocked and putc_unlocked won't work, hopefully not used

Java decompiler tells more

const char* libGLESv1_CM_SYMBOLS = {
"glActiveTexture",
"glAlphaFunc",
"glAlphaFuncx",
"glAlphaFuncxOES",
"glBindBuffer",
"glBindFramebufferOES",
"glBindRenderbufferOES",
"glBindTexture",
"glBindVertexArrayOES",
"glBlendEquationOES",
"glBlendEquationSeparateOES",
"glBlendFunc",
"glBlendFuncSeparateOES",
"glBufferData",
"glBufferSubData",
"glCheckFramebufferStatusOES",
"glClear",
"glClearColor",
"glClearColorx",
"glClearColorxOES",
"glClearDepthf",
"glClearDepthfOES",
"glClearDepthx",
"glClearDepthxOES",
"glClearStencil",
"glClientActiveTexture",
"glClipPlanef",
"glClipPlanefIMG",
"glClipPlanefOES",
"glClipPlanex",
"glClipPlanexIMG",
"glClipPlanexOES",
"glColor4f",
"glColor4ub",
"glColor4x",
"glColor4xOES",
"glColorMask",
"glColorPointer",
"glColorPointerBounds",
"glCompressedTexImage2D",
"glCompressedTexSubImage2D",
"glCopyTexImage2D",
"glCopyTexSubImage2D",
"glCullFace",
"glCurrentPaletteMatrixOES",
"glDeleteBuffers",
"glDeleteFencesNV",
"glDeleteFramebuffersOES",
"glDeleteRenderbuffersOES",
"glDeleteTextures",
"glDeleteVertexArraysOES",
"glDepthFunc",
"glDepthMask",
"glDepthRangef",
"glDepthRangefOES",
"glDepthRangex",
"glDepthRangexOES",
"glDisable",
"glDisableClientState",
"glDisableDriverControlQCOM",
"glDiscardFramebufferEXT",
"glDrawArrays",
"glDrawElements",
"glDrawTexfOES",
"glDrawTexfvOES",
"glDrawTexiOES",
"glDrawTexivOES",
"glDrawTexsOES",
"glDrawTexsvOES",
"glDrawTexxOES",
"glDrawTexxvOES",
"glEGLImageTargetRenderbufferStorageOES",
"glEGLImageTargetTexture2DOES",
"glEnable",
"glEnableClientState",
"glEnableDriverControlQCOM",
"glEndTilingQCOM",
"glExtGetBufferPointervQCOM",
"glExtGetBuffersQCOM",
"glExtGetFramebuffersQCOM",
"glExtGetProgramBinarySourceQCOM",
"glExtGetProgramsQCOM",
"glExtGetRenderbuffersQCOM",
"glExtGetShadersQCOM",
"glExtGetTexLevelParameterivQCOM",
"glExtGetTexSubImageQCOM",
"glExtGetTexturesQCOM",
"glExtIsProgramBinaryQCOM",
"glExtTexObjectStateOverrideiQCOM",
"glFinish",
"glFinishFenceNV",
"glFlush",
"glFogf",
"glFogfv",
"glFogx",
"glFogxOES",
"glFogxv",
"glFogxvOES",
"glFramebufferRenderbufferOES",
"glFramebufferTexture2DMultisampleIMG",
"glFramebufferTexture2DOES",
"glFrontFace",
"glFrustumf",
"glFrustumfOES",
"glFrustumx",
"glFrustumxOES",
"glGenBuffers",
"glGenFencesNV",
"glGenFramebuffersOES",
"glGenRenderbuffersOES",
"glGenTextures",
"glGenVertexArraysOES",
"glGenerateMipmapOES",
"glGetBooleanv",
"glGetBufferParameteriv",
"glGetBufferPointervOES",
"glGetClipPlanef",
"glGetClipPlanefOES",
"glGetClipPlanex",
"glGetClipPlanexOES",
"glGetDriverControlStringQCOM",
"glGetDriverControlsQCOM",
"glGetError",
"glGetFenceivNV",
"glGetFixedv",
"glGetFixedvOES",
"glGetFloatv",
"glGetFramebufferAttachmentParameterivOES",
"glGetIntegerv",
"glGetLightfv",
"glGetLightxv",
"glGetLightxvOES",
"glGetMaterialfv",
"glGetMaterialxv",
"glGetMaterialxvOES",
"glGetPointerv",
"glGetRenderbufferParameterivOES",
"glGetString",
"glGetTexEnvfv",
"glGetTexEnviv",
"glGetTexEnvxv",
"glGetTexEnvxvOES",
"glGetTexGenfvOES",
"glGetTexGenivOES",
"glGetTexGenxvOES",
"glGetTexParameterfv",
"glGetTexParameteriv",
"glGetTexParameterxv",
"glGetTexParameterxvOES",
"glHint",
"glIsBuffer",
"glIsEnabled",
"glIsFenceNV",
"glIsFramebufferOES",
"glIsRenderbufferOES",
"glIsTexture",
"glIsVertexArrayOES",
"glLightModelf",
"glLightModelfv",
"glLightModelx",
"glLightModelxOES",
"glLightModelxv",
"glLightModelxvOES",
"glLightf",
"glLightfv",
"glLightx",
"glLightxOES",
"glLightxv",
"glLightxvOES",
"glLineWidth",
"glLineWidthx",
"glLineWidthxOES",
"glLoadIdentity",
"glLoadMatrixf",
"glLoadMatrixx",
"glLoadMatrixxOES",
"glLoadPaletteFromModelViewMatrixOES",
"glLogicOp",
"glMapBufferOES",
"glMaterialf",
"glMaterialfv",
"glMaterialx",
"glMaterialxOES",
"glMaterialxv",
"glMaterialxvOES",
"glMatrixIndexPointerOES",
"glMatrixIndexPointerOESBounds",
"glMatrixMode",
"glMultMatrixf",
"glMultMatrixx",
"glMultMatrixxOES",
"glMultiDrawArraysEXT",
"glMultiDrawElementsEXT",
"glMultiTexCoord4f",
"glMultiTexCoord4x",
"glMultiTexCoord4xOES",
"glNormal3f",
"glNormal3x",
"glNormal3xOES",
"glNormalPointer",
"glNormalPointerBounds",
"glOrthof",
"glOrthofOES",
"glOrthox",
"glOrthoxOES",
"glPixelStorei",
"glPointParameterf",
"glPointParameterfv",
"glPointParameterx",
"glPointParameterxOES",
"glPointParameterxv",
"glPointParameterxvOES",
"glPointSize",
"glPointSizePointerOES",
"glPointSizePointerOESBounds",
"glPointSizex",
"glPointSizexOES",
"glPolygonOffset",
"glPolygonOffsetx",
"glPolygonOffsetxOES",
"glPopMatrix",
"glPushMatrix",
"glQueryMatrixxOES",
"glReadPixels",
"glRenderbufferStorageMultisampleIMG",
"glRenderbufferStorageOES",
"glRotatef",
"glRotatex",
"glRotatexOES",
"glSampleCoverage",
"glSampleCoveragex",
"glSampleCoveragexOES",
"glScalef",
"glScalex",
"glScalexOES",
"glScissor",
"glSetFenceNV",
"glShadeModel",
"glStartTilingQCOM",
"glStencilFunc",
"glStencilMask",
"glStencilOp",
"glTestFenceNV",
"glTexCoordPointer",
"glTexCoordPointerBounds",
"glTexEnvf",
"glTexEnvfv",
"glTexEnvi",
"glTexEnviv",
"glTexEnvx",
"glTexEnvxOES",
"glTexEnvxv",
"glTexEnvxvOES",
"glTexGenfOES",
"glTexGenfvOES",
"glTexGeniOES",
"glTexGenivOES",
"glTexGenxOES",
"glTexGenxvOES",
"glTexImage2D",
"glTexParameterf",
"glTexParameterfv",
"glTexParameteri",
"glTexParameteriv",
"glTexParameterx",
"glTexParameterxOES",
"glTexParameterxv",
"glTexParameterxvOES",
"glTexSubImage2D",
"glTranslatef",
"glTranslatex",
"glTranslatexOES",
"glUnmapBufferOES",
"glVertexPointer",
"glVertexPointerBounds",
"glViewport",
"glWeightPointerOES",
"glWeightPointerOESBounds"
};
Mis012 commented 4 years ago

hmm, arc in general seems interesting, but https://chromium.googlesource.com/arc/arc/+/master/mods/android/bionic/libc/arch-nacl might be useful by itself... (bionic translation by google themselves, though not necessarily to glibc)

and https://chromium.googlesource.com/arc/arc/+/master/mods/graphics_translation/gles/

Mis012 commented 4 years ago

@ChristopherHX so I tried to get libEGL and libGLESv1_CM out of the way, and unfortunately I get load_library: Undefined symbol glTexGenfOES for all the symbols :(

I used FakeEGL::setProcAddrFunction((void *(*)(const char*)) windowManager->getProcAddrFunc()); and setupGLES1Symbols(fake_egl::eglGetProcAddress); akin to what I saw in your code

ChristopherHX commented 4 years ago

Have you created an OpenGL es 1.x Surface? minecraft-linux uses OpenGL es 2.x which is incompatible with 1.x

ChristopherHX commented 4 years ago

If you have used the eglut backend try replacing EGLUT_OPENGL_ES2_BIT with EGLUT_OPENGL_ES1_BIT https://github.com/minecraft-linux/game-window/blob/c07bff371b68e5d8239c31206014cd2234b565ba/src/window_eglut.cpp#L18

Mis012 commented 4 years ago

eglut backend complained about gamepad stuff so I just told it to use glfw

ChristopherHX commented 4 years ago

Ok, then you can change https://github.com/minecraft-linux/game-window/blob/c07bff371b68e5d8239c31206014cd2234b565ba/src/window_glfw.cpp#L16 to

glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, 1);
glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 1);// or 0 if it needs 1.0

I hope this help you a bit, eglut has some more cross deps from the mcpelauncher-manifest.

Mis012 commented 4 years ago

still:

> ./linkertest 
load_library: Undefined symbol glWeightPointerOESBounds
load_library: Undefined symbol glWeightPointerOES
load_library: Undefined symbol glViewport
load_library: Undefined symbol glVertexPointer
load_library: Undefined symbol glUnmapBufferOES
load_library: Undefined symbol glTranslatexOES
load_library: Undefined symbol glTranslatex
load_library: Undefined symbol glTranslatef
load_library: Undefined symbol glTexSubImage2D
load_library: Undefined symbol glTexParameterxvOES
load_library: Undefined symbol glTexParameterxv
load_library: Undefined symbol glTexParameteri
load_library: Undefined symbol glTexParameterfv
load_library: Undefined symbol glTexParameterf
load_library: Undefined symbol glTexImage2D
load_library: Undefined symbol glTexGenxvOES
load_library: Undefined symbol glGetFloatv
load_library: Undefined symbol glGenFramebuffersOES
load_library: Undefined symbol glPointParameterf
load_library: Undefined symbol glPolygonOffsetxOES
load_library: Undefined symbol glDisableClientState
load_library: Undefined symbol glGetLightfv
load_library: Undefined symbol glGetClipPlanef
load_library: Undefined symbol glLoadIdentity
load_library: Undefined symbol glGenVertexArraysOES
load_library: Undefined symbol glClear
load_library: Undefined symbol glFrustumxOES
load_library: Undefined symbol glFrustumfOES
load_library: Undefined symbol glDiscardFramebufferEXT
load_library: Undefined symbol glFramebufferRenderbufferOES
load_library: Undefined symbol glFogfv
load_library: Undefined symbol glOrthox
load_library: Undefined symbol glStencilFunc
load_library: Undefined symbol glFogf
load_library: Undefined symbol glFlush
load_library: Undefined symbol glExtTexObjectStateOverrideiQCOM
load_library: Undefined symbol glGetError
load_library: Undefined symbol glExtIsProgramBinaryQCOM
load_library: Undefined symbol glClearDepthfOES
load_library: Undefined symbol glLightxv
load_library: Undefined symbol glExtGetTexSubImageQCOM
load_library: Undefined symbol glGetTexParameteriv
load_library: Undefined symbol glIsVertexArrayOES
load_library: Undefined symbol glTexCoordPointerBounds
load_library: Undefined symbol glExtGetTexLevelParameterivQCOM
load_library: Undefined symbol glExtGetRenderbuffersQCOM
load_library: Undefined symbol glClearDepthxOES
load_library: Undefined symbol glExtGetFramebuffersQCOM
load_library: Undefined symbol glMultiDrawArraysEXT
load_library: Undefined symbol glExtGetBufferPointervQCOM
load_library: Undefined symbol glFramebufferTexture2DMultisampleIMG
load_library: Undefined symbol glExtGetBuffersQCOM
load_library: Undefined symbol glQueryMatrixxOES
load_library: Undefined symbol glEndTilingQCOM
load_library: Undefined symbol glEGLImageTargetTexture2DOES
load_library: Undefined symbol glGetRenderbufferParameterivOES
load_library: Undefined symbol glGetTexGenivOES
load_library: Undefined symbol glEGLImageTargetRenderbufferStorageOES
load_library: Undefined symbol glPopMatrix
load_library: Undefined symbol glTexEnvxvOES
load_library: Undefined symbol glBufferSubData
load_library: Undefined symbol glDrawTexsvOES
load_library: Undefined symbol glFogxvOES
load_library: Undefined symbol glDrawTexsOES
load_library: Undefined symbol glDeleteBuffers
load_library: Undefined symbol glTexEnvi
load_library: Undefined symbol glTexGeniOES
load_library: Undefined symbol glDrawTexfvOES
load_library: Undefined symbol glPointParameterxvOES
load_library: Undefined symbol glMultMatrixf
load_library: Undefined symbol glDrawElements
load_library: Undefined symbol glGetDriverControlStringQCOM
load_library: Undefined symbol glGetTexGenfvOES
load_library: Undefined symbol glGetTexGenxvOES
load_library: Undefined symbol glClipPlanef
load_library: Undefined symbol glMatrixIndexPointerOES
load_library: Undefined symbol glClearDepthx
load_library: Undefined symbol glAlphaFuncxOES
load_library: Undefined symbol glFogxOES
load_library: Undefined symbol glEnableDriverControlQCOM
load_library: Undefined symbol glEnableClientState
load_library: Undefined symbol glBindTexture
load_library: Undefined symbol glVertexPointerBounds
load_library: Undefined symbol glGetDriverControlsQCOM
load_library: Undefined symbol glGetFixedv
load_library: Undefined symbol glCopyTexSubImage2D
load_library: Undefined symbol glFinish
load_library: Undefined symbol glClearDepthf
load_library: Undefined symbol glRotatex
load_library: Undefined symbol glTexGenfvOES
load_library: Undefined symbol glClientActiveTexture
load_library: Undefined symbol glColorPointer
load_library: Undefined symbol glBindBuffer
load_library: Undefined symbol glGenBuffers
load_library: Undefined symbol glPushMatrix
load_library: Undefined symbol glGenTextures
load_library: Undefined symbol glClearColorxOES
load_library: Undefined symbol glClearColorx
load_library: Undefined symbol glExtGetShadersQCOM
load_library: Undefined symbol glBindFramebufferOES
load_library: Undefined symbol glTexGenivOES
load_library: Undefined symbol glClearColor
load_library: Undefined symbol glGetTexEnvxvOES
load_library: Undefined symbol glGetBufferPointervOES
load_library: Undefined symbol glClearStencil
load_library: Undefined symbol glLogicOp
load_library: Undefined symbol glClipPlanex
load_library: Undefined symbol glTexParameteriv
load_library: Undefined symbol glMaterialxOES
load_library: Undefined symbol glCheckFramebufferStatusOES
load_library: Undefined symbol glHint
load_library: Undefined symbol glDrawTexiOES
load_library: Undefined symbol glFramebufferTexture2DOES
load_library: Undefined symbol glEnable
load_library: Undefined symbol glDepthRangex
load_library: Undefined symbol glLineWidthxOES
load_library: Undefined symbol glClipPlanefIMG
load_library: Undefined symbol glAlphaFunc
load_library: Undefined symbol glColor4f
load_library: Undefined symbol glClipPlanefOES
load_library: Undefined symbol glBlendEquationSeparateOES
load_library: Undefined symbol glBindRenderbufferOES
load_library: Undefined symbol glGenRenderbuffersOES
load_library: Undefined symbol glColor4xOES
load_library: Undefined symbol glDepthRangef
load_library: Undefined symbol glMaterialx
load_library: Undefined symbol glGenerateMipmapOES
load_library: Undefined symbol glSampleCoverage
load_library: Undefined symbol glDeleteTextures
load_library: Undefined symbol glGetFixedvOES
load_library: Undefined symbol glLightxvOES
load_library: Undefined symbol glCurrentPaletteMatrixOES
load_library: Undefined symbol glOrthof
load_library: Undefined symbol glBlendEquationOES
load_library: Undefined symbol glSetFenceNV
load_library: Undefined symbol glGetBufferParameteriv
load_library: Undefined symbol glFrustumx
load_library: Undefined symbol glLightf
load_library: Undefined symbol glGetBooleanv
load_library: Undefined symbol glPolygonOffsetx
load_library: Undefined symbol glGetClipPlanex
load_library: Undefined symbol glGetFramebufferAttachmentParameterivOES
load_library: Undefined symbol glClipPlanexOES
load_library: Undefined symbol glFrontFace
load_library: Undefined symbol glAlphaFuncx
load_library: Undefined symbol glPointSizePointerOES
load_library: Undefined symbol glBlendFunc
load_library: Undefined symbol glClipPlanexIMG
load_library: Undefined symbol glDrawTexxOES
load_library: Undefined symbol glCopyTexImage2D
load_library: Undefined symbol glDisableDriverControlQCOM
load_library: Undefined symbol glExtGetProgramsQCOM
load_library: Undefined symbol glDrawArrays
load_library: Undefined symbol glRenderbufferStorageOES
load_library: Undefined symbol glColor4ub
load_library: Undefined symbol glMultiTexCoord4x
load_library: Undefined symbol glExtGetProgramBinarySourceQCOM
load_library: Undefined symbol glActiveTexture
load_library: Undefined symbol glGetTexParameterxv
load_library: Undefined symbol glColor4x
load_library: Undefined symbol glTexCoordPointer
load_library: Undefined symbol glTexGenxOES
load_library: Undefined symbol glTexEnvf
load_library: Undefined symbol glDrawTexfOES
load_library: Undefined symbol glGetClipPlanexOES
load_library: Undefined symbol glDeleteVertexArraysOES
load_library: Undefined symbol glDepthRangexOES
load_library: Undefined symbol glBlendFuncSeparateOES
load_library: Undefined symbol glLightModelx
load_library: Undefined symbol glCompressedTexImage2D
load_library: Undefined symbol glTexParameterx
load_library: Undefined symbol glLoadMatrixxOES
load_library: Undefined symbol glFogx
load_library: Undefined symbol glCompressedTexSubImage2D
load_library: Undefined symbol glDeleteFencesNV
load_library: Undefined symbol glDepthMask
load_library: Undefined symbol glFinishFenceNV
load_library: Undefined symbol glBufferData
load_library: Undefined symbol glDeleteFramebuffersOES
load_library: Undefined symbol glColorPointerBounds
load_library: Undefined symbol glLineWidth
load_library: Undefined symbol glGetIntegerv
load_library: Undefined symbol glLightModelxv
load_library: Undefined symbol glGetLightxv
load_library: Undefined symbol glIsRenderbufferOES
load_library: Undefined symbol glGetLightxvOES
load_library: Undefined symbol glOrthofOES
load_library: Undefined symbol glGetMaterialfv
load_library: Undefined symbol glGetMaterialxv
load_library: Undefined symbol glSampleCoveragexOES
load_library: Undefined symbol glGetMaterialxvOES
load_library: Undefined symbol glMaterialxvOES
load_library: Undefined symbol glGetPointerv
load_library: Undefined symbol glMaterialfv
load_library: Undefined symbol glStencilMask
load_library: Undefined symbol glGetString
load_library: Undefined symbol glGetTexEnvfv
load_library: Undefined symbol glCullFace
load_library: Undefined symbol glMaterialxv
load_library: Undefined symbol glGetTexEnviv
load_library: Undefined symbol glOrthoxOES
load_library: Undefined symbol glPixelStorei
load_library: Undefined symbol glGetTexEnvxv
load_library: Undefined symbol glIsFenceNV
load_library: Undefined symbol glDeleteRenderbuffersOES
load_library: Undefined symbol glGetTexParameterxvOES
load_library: Undefined symbol glIsBuffer
load_library: Undefined symbol glDepthRangefOES
load_library: Undefined symbol glIsEnabled
load_library: Undefined symbol glBindVertexArrayOES
load_library: Undefined symbol glIsFramebufferOES
load_library: Undefined symbol glGetClipPlanefOES
load_library: Undefined symbol glLightModelf
load_library: Undefined symbol glLightxOES
load_library: Undefined symbol glLightModelfv
load_library: Undefined symbol glLightModelxOES
load_library: Undefined symbol glLightModelxvOES
load_library: Undefined symbol glLightfv
load_library: Undefined symbol glLineWidthx
load_library: Undefined symbol glLoadMatrixf
load_library: Undefined symbol glLoadMatrixx
load_library: Undefined symbol glLoadPaletteFromModelViewMatrixOES
load_library: Undefined symbol glExtGetTexturesQCOM
load_library: Undefined symbol glMapBufferOES
load_library: Undefined symbol glGenFencesNV
load_library: Undefined symbol glMaterialf
load_library: Undefined symbol glMatrixIndexPointerOESBounds
load_library: Undefined symbol glFogxv
load_library: Undefined symbol glPointSizePointerOESBounds
load_library: Undefined symbol glPointParameterx
load_library: Undefined symbol glLightx
load_library: Undefined symbol glMatrixMode
load_library: Undefined symbol glDrawTexivOES
load_library: Undefined symbol glPointParameterfv
load_library: Undefined symbol glMultMatrixx
load_library: Undefined symbol glSampleCoveragex
load_library: Undefined symbol glDisable
load_library: Undefined symbol glMultMatrixxOES
load_library: Undefined symbol glMultiDrawElementsEXT
load_library: Undefined symbol glColorMask
load_library: Undefined symbol glMultiTexCoord4f
load_library: Undefined symbol glMultiTexCoord4xOES
load_library: Undefined symbol glNormal3f
load_library: Undefined symbol glNormal3xOES
load_library: Undefined symbol glNormalPointer
load_library: Undefined symbol glIsTexture
load_library: Undefined symbol glNormalPointerBounds
load_library: Undefined symbol glPointParameterxOES
load_library: Undefined symbol glTexParameterxOES
load_library: Undefined symbol glPointParameterxv
load_library: Undefined symbol glPointSize
load_library: Undefined symbol glDepthFunc
load_library: Undefined symbol glPointSizex
load_library: Undefined symbol glPolygonOffset
load_library: Undefined symbol glReadPixels
load_library: Undefined symbol glRenderbufferStorageMultisampleIMG
load_library: Undefined symbol glRotatef
load_library: Undefined symbol glScalef
load_library: Undefined symbol glRotatexOES
load_library: Undefined symbol glScalexOES
load_library: Undefined symbol glScalex
load_library: Undefined symbol glPointSizexOES
load_library: Undefined symbol glScissor
load_library: Undefined symbol glNormal3x
load_library: Undefined symbol glFrustumf
load_library: Undefined symbol glGetTexParameterfv
load_library: Undefined symbol glShadeModel
load_library: Undefined symbol glStartTilingQCOM
load_library: Undefined symbol glTexEnvx
load_library: Undefined symbol glGetFenceivNV
load_library: Undefined symbol glStencilOp
load_library: Undefined symbol glTestFenceNV
load_library: Undefined symbol glTexEnvfv
load_library: Undefined symbol glTexEnviv
load_library: Undefined symbol glTexEnvxOES
load_library: Undefined symbol glDrawTexxvOES
load_library: Undefined symbol glTexEnvxv
load_library: Undefined symbol glTexGenfOES
ChristopherHX commented 4 years ago

You didn't created a window with game-window? (In the same thread)

Mis012 commented 4 years ago

oh, my bad creating a window has helped

now I just get

./linkertest 
linker: dlopen(name="/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so", flags=0x0, extinfo=(null), caller="(null)", caller_ns=@0x81a92cc, targetSdkVersion=10000) ...
linker: find_libraries(ns=): task=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so, is_dt_needed=0
linker: load_library(ns=, task=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so, flags=0x0, search_linked_namespaces=1): calling open_library with realpath=
linker: load_library(ns=, task=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so, flags=0x0, realpath=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so, search_linked_namespaces=1)
linker: load_library(ns=, task=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so): Adding DT_NEEDED task: libc.so
linker: load_library(ns=, task=/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so): Adding DT_NEEDED task: libdl.so
linker: find_libraries(ns=): task=libc.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libc.so): Already loaded (by soname): libc.so
linker: find_libraries(ns=): task=libdl.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libdl.so): Already loaded (by soname): libdl.so
linker: ... dlopen calling constructors: realpath="/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so", soname="libc++_shared.so", handle=0x1b
linker: ... dlopen successful: realpath="/home/Mis012/Android/Sdk/ndk-bundle/sources/cxx-stl/llvm-libc++/libs/x86/libc++_shared.so", soname="libc++_shared.so", handle=0x1b
linker: dlopen(name="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", flags=0x0, extinfo=(null), caller="(null)", caller_ns=@0x81a92cc, targetSdkVersion=10000) ...
linker: find_libraries(ns=): task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so, is_dt_needed=0
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so, flags=0x0, search_linked_namespaces=1): calling open_library with realpath=
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so, flags=0x0, realpath=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so, search_linked_namespaces=1)
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: liblog.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libGLESv1_CM.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libz.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libstdc++.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libm.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libc.so
linker: load_library(ns=, task=/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so): Adding DT_NEEDED task: libdl.so
linker: find_libraries(ns=): task=liblog.so, is_dt_needed=1
linker: find_library_internal(ns=, task=liblog.so): Already loaded (by soname): liblog.so
linker: find_libraries(ns=): task=libGLESv1_CM.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libGLESv1_CM.so): Already loaded (by soname): libGLESv1_CM.so
linker: find_libraries(ns=): task=libz.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libz.so): Already loaded (by soname): libz.so
linker: find_libraries(ns=): task=libstdc++.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libstdc++.so): Already loaded (by soname): libstdc++.so
linker: find_libraries(ns=): task=libm.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libm.so): Already loaded (by soname): libm.so
linker: find_libraries(ns=): task=libc.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libc.so): Already loaded (by soname): libc.so
linker: find_libraries(ns=): task=libdl.so, is_dt_needed=1
linker: find_library_internal(ns=, task=libdl.so): Already loaded (by soname): libdl.so
linker: ... dlclose(realpath="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"@0xed6592c0) ... load group root is "/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"@0xed6592c0
linker: ... dlclose: calling destructors for "/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"@0xed6592c0 ... 
linker: ... dlclose: calling destructors for "/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"@0xed6592c0 ... done
linker: ... dlclose: unloading "/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"@0xed6592c0 ...
linker: ... dlclose: unload_si was not linked - not unloading external references ...
linker: ... dlopen failed: cannot locate symbol "atan2f" referenced by "/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"...
linker: dlsym failed: library handle is null
Segmentation fault (core dumped)
Mis012 commented 4 years ago

I assume that can be solved by shimming libm.so akin to

void setupGLES1Symbols(void* (*resolver)(const char *)) {
    int i = 0;
    std::unordered_map<std::string, void*> syms;
    while (true) {
        const char* sym = libGLESv1_CM_SYMBOLS[i];
        if (sym == nullptr)
            break;
        syms[sym] = resolver(sym);
        i++;
    }
    linker::load_library("libGLESv1_CM.so", syms);
}

?

ChristopherHX commented 4 years ago

yes (https://github.com/minecraft-linux/mcpelauncher-core/blob/1a127120a1b7525b5cb86c749fddc1d3a3206483/src/minecraft_utils.cpp#L31, https://github.com/minecraft-linux/minecraft-imported-symbols/blob/master/include/minecraft/imported/libm_symbols.h) or dlopen("libm.so") from ndk, no ndk has only stubs of it (even works on windows).

Mis012 commented 4 years ago

hmm, is there no way to make a generic void* (*resolver)(const char *) function? or maybe some macro, since auto printf_addr = &printf seems to work just fine. (the first time I see a legitimate usecase for auto that's not "c++ types are even more ugly than function pointers" fwiw)

#include <stdio.h>

int main(int argc, char **argv)
{
    auto printf_addr = &printf;

    printf("printf addr: %p\n", printf_addr);
    (*printf_addr)("test\n");
}

maybe a macro that would turn

static const char* libm_symbols[] = {
    MACRO(acos),
    MACRO(acosf),
    MACRO(acosh),
    ...

to

static const char* libm_symbols[2][] = {
    { "acos", &acos },
    { "acosf", &acos },
    {"acosh", &acosh }
    ...
ChristopherHX commented 4 years ago

Is something wrong with your system's dlopen("libm.so.1", 0), dlsym (your resolver), dlclose?Macro should work too if you want.#define MACRO(name) { #name , (void*)& name }

Mis012 commented 4 years ago
#define RESOLVE(func) {#func, &func}

std::unordered_map<std::string, void*> libc_syms = {
    RESOLVE(acos),
    RESOLVE(acosf),
    RESOLVE(acosh),
    RESOLVE(acoshf),
    RESOLVE(acoshl),
    RESOLVE(acosl),
    RESOLVE(asin),
    RESOLVE(asinf),
    RESOLVE(asinh),
    RESOLVE(asinhf),
    RESOLVE(asinhl),
    RESOLVE(asinl),
    RESOLVE(atan),
    RESOLVE(atan2),
    RESOLVE(atan2f),
    RESOLVE(atan2l),
    RESOLVE(atanf),
    RESOLVE(atanh),
    RESOLVE(atanhf),
    RESOLVE(atanhl),
    RESOLVE(atanl),
    RESOLVE(cabsl),
    RESOLVE(cbrt),
    RESOLVE(cbrtf),
    RESOLVE(cbrtl),
    RESOLVE(ceil),
    RESOLVE(ceilf),
    RESOLVE(ceill),
    RESOLVE(copysign),
    RESOLVE(copysignf),
    RESOLVE(copysignl),
    RESOLVE(cos),
    RESOLVE(cosf),
    RESOLVE(cosh),
    RESOLVE(coshf),
    RESOLVE(coshl),
    RESOLVE(cosl),
    RESOLVE(cprojl),
    RESOLVE(csqrtl),
    RESOLVE(drem),
    RESOLVE(dremf),
    RESOLVE(erf),
    RESOLVE(erfc),
    RESOLVE(erfcf),
    RESOLVE(erfcl),
    RESOLVE(erff),
    RESOLVE(erfl),
    RESOLVE(exp),
    RESOLVE(exp2),
    RESOLVE(exp2f),
    RESOLVE(exp2l),
    RESOLVE(expf),
    RESOLVE(expl),
    RESOLVE(expm1),
    RESOLVE(expm1f),
    RESOLVE(expm1l),
    RESOLVE(fabs),
    RESOLVE(fabsf),
    RESOLVE(fabsl),
    RESOLVE(fdim),
    RESOLVE(fdimf),
    RESOLVE(fdiml),
    RESOLVE(feclearexcept),
    RESOLVE(fedisableexcept),
    RESOLVE(feenableexcept),
    RESOLVE(fegetenv),
    RESOLVE(fegetexcept),
    RESOLVE(fegetexceptflag),
    RESOLVE(fegetround),
    RESOLVE(feholdexcept),
    RESOLVE(feraiseexcept),
    RESOLVE(fesetenv),
    RESOLVE(fesetexceptflag),
    RESOLVE(fesetround),
    RESOLVE(fetestexcept),
    RESOLVE(feupdateenv),
    RESOLVE(finite),
    RESOLVE(finitef),
    RESOLVE(floor),
    RESOLVE(floorf),
    RESOLVE(floorl),
    RESOLVE(fma),
    RESOLVE(fmaf),
    RESOLVE(fmal),
    RESOLVE(fmax),
    RESOLVE(fmaxf),
    RESOLVE(fmaxl),
    RESOLVE(fmin),
    RESOLVE(fminf),
    RESOLVE(fminl),
    RESOLVE(fmod),
    RESOLVE(fmodf),
    RESOLVE(fmodl),
    RESOLVE(frexp),
    RESOLVE(frexpf),
    RESOLVE(frexpl),
    RESOLVE(gamma),
    RESOLVE(gammaf),
    RESOLVE(gammaf_r),
    RESOLVE(gamma_r),
    RESOLVE(hypot),
    RESOLVE(hypotf),
    RESOLVE(hypotl),
    RESOLVE(ilogb),
    RESOLVE(ilogbf),
    RESOLVE(ilogbl),
    RESOLVE(j0),
    RESOLVE(j0f),
    RESOLVE(j1),
    RESOLVE(j1f),
    RESOLVE(jn),
    RESOLVE(jnf),
    RESOLVE(ldexpf),
    RESOLVE(ldexpl),
    RESOLVE(lgamma),
    RESOLVE(lgammaf),
    RESOLVE(lgammaf_r),
    RESOLVE(lgammal),
    RESOLVE(lgammal_r),
    RESOLVE(lgamma_r),
    RESOLVE(llrint),
    RESOLVE(llrintf),
    RESOLVE(llrintl),
    RESOLVE(llround),
    RESOLVE(llroundf),
    RESOLVE(llroundl),
    RESOLVE(log),
    RESOLVE(log10),
    RESOLVE(log10f),
    RESOLVE(log10l),
    RESOLVE(log1p),
    RESOLVE(log1pf),
    RESOLVE(log1pl),
    RESOLVE(log2),
    RESOLVE(log2f),
    RESOLVE(log2l),
    RESOLVE(logb),
    RESOLVE(logbf),
    RESOLVE(logbl),
    RESOLVE(logf),
    RESOLVE(logl),
    RESOLVE(lrint),
    RESOLVE(lrintf),
    RESOLVE(lrintl),
    RESOLVE(lround),
    RESOLVE(lroundf),
    RESOLVE(lroundl),
    RESOLVE(modf),
    RESOLVE(modff),
    RESOLVE(modfl),
    RESOLVE(nan),
    RESOLVE(nanf),
    RESOLVE(nanl),
    RESOLVE(nearbyint),
    RESOLVE(nearbyintf),
    RESOLVE(nearbyintl),
    RESOLVE(nextafter),
    RESOLVE(nextafterf),
    RESOLVE(nextafterl),
    RESOLVE(nexttoward),
    RESOLVE(nexttowardf),
    RESOLVE(nexttowardl),
    RESOLVE(pow),
    RESOLVE(powf),
    RESOLVE(powl),
    RESOLVE(remainder),
    RESOLVE(remainderf),
    RESOLVE(remainderl),
    RESOLVE(remquo),
    RESOLVE(remquof),
    RESOLVE(remquol),
    RESOLVE(rint),
    RESOLVE(rintf),
    RESOLVE(rintl),
    RESOLVE(round),
    RESOLVE(roundf),
    RESOLVE(roundl),
    RESOLVE(scalb),
    RESOLVE(scalbf),
    RESOLVE(scalbln),
    RESOLVE(scalblnf),
    RESOLVE(scalblnl),
    RESOLVE(scalbn),
    RESOLVE(scalbnf),
    RESOLVE(scalbnl),
    RESOLVE(__signbit),
    RESOLVE(__signbitf),
    RESOLVE(__signbitl),
    RESOLVE(signgam),
    RESOLVE(significand),
    RESOLVE(significandf),
    RESOLVE(significandl),
    RESOLVE(sin),
    RESOLVE(sincos),
    RESOLVE(sincosf),
    RESOLVE(sincosl),
    RESOLVE(sinf),
    RESOLVE(sinh),
    RESOLVE(sinhf),
    RESOLVE(sinhl),
    RESOLVE(sinl),
    RESOLVE(sqrt),
    RESOLVE(sqrtf),
    RESOLVE(sqrtl),
    RESOLVE(tan),
    RESOLVE(tanf),
    RESOLVE(tanh),
    RESOLVE(tanhf),
    RESOLVE(tanhl),
    RESOLVE(tanl),
    RESOLVE(tgamma),
    RESOLVE(tgammaf),
    RESOLVE(tgammal),
    RESOLVE(trunc),
    RESOLVE(truncf),
    RESOLVE(truncl),
    RESOLVE(y0),
    RESOLVE(y0f),
    RESOLVE(y1),
    RESOLVE(y1f),
    RESOLVE(yn),
    RESOLVE(ynf),
    RESOLVE(isnan),
    RESOLVE(isinf),
};

looks like it might work, but it breaks if some of those functions are not provided

Mis012 commented 4 years ago

hmm, if I remove the functions it complains about, and fix the macro:

#define RESOLVE(func) {#func, (void *)&func}

std::unordered_map<std::string, void*> libc_syms = {
    RESOLVE(acos),
    RESOLVE(acosf),
    RESOLVE(acosh),
    RESOLVE(acoshf),
    RESOLVE(acoshl),
    RESOLVE(acosl),
    RESOLVE(asin),
    RESOLVE(asinf),
    ...

I get:

/home/Mis012/Projects/bionic2glibc/src/main.cpp:309:10: error: address of overloaded function 'acos' does not match required type 'void'
        RESOLVE(acos),
                ^~~~
/home/Mis012/Projects/bionic2glibc/src/main.cpp:306:40: note: expanded from macro 'RESOLVE'
#define RESOLVE(func) {#func, (void *)&func}

(etc)

Mis012 commented 4 years ago

Is something wrong with your system's dlopen("libm.so.1", 0), dlsym (your resolver), dlclose?

well, I don't have any resolver other than the one I used for OpenGL, and I assume that one may be OpenGL specific

Mis012 commented 4 years ago

ugly c++ mess... no such issues in C :/ I guess I'll just load a libm.so library from android, but will have to find a non-stubbed one :/

Mis012 commented 4 years ago

well, finding android libm.so was much easier...

next up is "fgetpos", so https://github.com/minecraft-linux/libhybris/blob/fde7864067a3722109b32441376dc2f40df1593d/src/hooks_io.c

Mis012 commented 4 years ago

hmm, using linker::load_library("io_hook.so", syms); doesn't work, but if I put in libz.so, it acknowledges the symbols and is happy to use them... how do I do this properly?

ChristopherHX commented 4 years ago

It doesn't work, because io_hook.so is not referenced from the calling library. What is io_hook? Is it from libhybris? libc-shim is incompatible with libhybris fgetpos should go into libc-shim like https://github.com/minecraft-linux/libc-shim/blob/22e9b66f608b9d3e563f36c0a5ec35fd4760c026/src/cstdio.cpp#L74

Mis012 commented 4 years ago

I've taken just https://github.com/minecraft-linux/libhybris/blob/fde7864067a3722109b32441376dc2f40df1593d/src/hooks_io.c, added missing functions and adapted it to work with linker::load_library, not sure why libc_shim didn't export those symbols

Mis012 commented 4 years ago

it doesn't have a hard dependency on hybris

Mis012 commented 4 years ago

next up I had to get real libz.so as well, and now I'm getting this:

linker: ... dlopen calling constructors: realpath="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", soname="libWormsAndroid.so", handle=0x19
terminate called after throwing an instance of 'std::runtime_error'
  what():  gettimeofday adtimezone is not supported
Aborted (core dumped)
Mis012 commented 4 years ago

@ChristopherHX: I think I may have solved all the undefined references, but I'm not sure I understand how I should proceed with calling _Z21GERenderer_nativeInitP7_JNIEnvP8_jobjectP8_jstringii since it needs JNI glue...

ChristopherHX commented 4 years ago

Yes you need now some sort of jni, like fake-jni or openjdk etc. They call JNI_onload with the jvm instance to initialize the java binding. These functions are all native java native interface functions

Mis012 commented 4 years ago

I think fake-jni might be the best option, but I have no idea where to start...

Mis012 commented 4 years ago

ok, guess I've got something, but now I get No classes define the default Java entry point: 'main([Ljava/lang/String;)V'!

and making a class that does define an entry point seems to not help at all

...
class WormsMain : public FakeJni::JObject {

public:
    DEFINE_CLASS_NAME("com/worms2armageddon/app/Main")

    virtual void main(FakeJni::JString *arg) {
        printf("hello world\n");
    }
};

BEGIN_NATIVE_DESCRIPTOR(WormsMain)
    //Link member functions
    {FakeJni::Function<&WormsMain::main> {}, "main"}
END_NATIVE_DESCRIPTOR

int main(int argc, char const *argv[])
{
    auto windowManager = GameWindowManager::getManager();

    auto window = windowManager->createWindow("worms", 940, 560, GraphicsApi::OPENGL_ES2);

    linker::init(); // this makes libdl.so available
    std::unordered_map<std::string, void*> libc;
    std::vector<shim::shimmed_symbol> shimed = shim::get_shimmed_symbols();
    for(auto && l : shimed) {
        libc[l.name] = l.value;
    }
    linker::load_library("libc.so", libc); // this makes a basic libc implementation available
//  linker::load_library("liblog.so", {}); // These are empty stubs libraries without defining any symbols
//  linker::load_library("libEGL.so", {});
    FakeEGL::setProcAddrFunction((void *(*)(const char*)) windowManager->getProcAddrFunc());
    FakeEGL::installLibrary();
    linker::load_library("libstdc++.so", {});
//  linker::load_library("libm.so", {});
//  linker::load_library("libandroid.so", {});
    setupGLES1Symbols(fake_egl::eglGetProcAddress);
    setupIOHookSymbols();

    linker::load_library("/home/Mis012/Projects/bionic2glibc/worms/libnativeinterface.so", {});

    auto libchandle = linker::dlopen("/home/Mis012/Projects/bionic2glibc/droid_libs/libc++_shared.so", 0); // from android-x86 4.4 image
    linker::dlopen("/home/Mis012/Projects/bionic2glibc/droid_libs/libm.so", 0); // from android-x86 4.4 image
    linker::dlopen("/home/Mis012/Projects/bionic2glibc/droid_libs/libz.so", 0); // from android-x86 4.4 image

    void * worm_handle = linker::dlopen("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", 0);

    /* --- jni stuff --- */

    FakeJni::Jvm vm;
    vm.registerDefaultSignalHandler();
    vm.registerClass<WormsMain>();
    vm.attachLibrary("libWormsAndroid.so",  "", {linker::dlopen, linker::dlsym, linker::dlclose_unlocked});
    vm.start();

    return 0;
}
ChristopherHX commented 4 years ago

Remove vm.start() this shouldn't get called If you use baron as jvm (fake-jni extension) And enable some cmake flags you will see what classes / methods the app is registring or using during loading. Also decompile the source of the classes.dex to get an idea how to run the game's render loop.

Mis012 commented 4 years ago

I can't help but notice that "vm.printStatistics" doesn't exist

Mis012 commented 4 years ago

and neither does vm.getClasses...

ChristopherHX commented 4 years ago

You are absolutly right, I thought the same same after reading barons readme. My libjnivm had such feature, but not ready to be used.

Add this to cmake to get debug output

 -DBUILD_FAKE_JNI_EXAMPLES=OFF -DCMAKE_BUILD_TYPE=Debug -DBUILD_FAKE_JNI_DEBUG=ON -DBUILD_BARON_DEBUG=ON
Mis012 commented 4 years ago
linker: ... dlopen successful: realpath="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", soname="libWormsAndroid.so", handle=0x19
linker: dlopen(name="libWormsAndroid.so", flags=0x1, extinfo=(null), caller="(null)", caller_ns=@0x838563c, targetSdkVersion=10000) ...
linker: find_libraries(ns=): task=libWormsAndroid.so, is_dt_needed=0
linker: find_library_internal(ns=, task=libWormsAndroid.so): Already loaded (by soname): /home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so
linker: ... dlopen calling constructors: realpath="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", soname="libWormsAndroid.so", handle=0x19
linker: ... dlopen successful: realpath="/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so", soname="libWormsAndroid.so", handle=0x19
linker: dlsym(handle=0x19("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"), sym_name="JNI_OnLoad_L", sym_ver="(null)", caller="(null)", caller_ns=@0x838563c) ...
linker: undefined symbol: JNI_OnLoad_L
linker: ... dlsym failed: undefined symbol: JNI_OnLoad_L
linker: dlsym(handle=0x19("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"), sym_name="JNI_OnLoad", sym_ver="(null)", caller="(null)", caller_ns=@0x838563c) ...
linker: ... dlsym successful: sym_name="JNI_OnLoad", sym_ver="(null)", found in="libWormsAndroid.so", address=0xe6356800
DEBUG: 'libWormsAndroid.so' uses dynamic JNI linkage
linker: dlsym(handle=0x19("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"), sym_name="JNI_OnUnload", sym_ver="(null)", caller="(null)", caller_ns=@0x838563c) ...
linker: undefined symbol: JNI_OnUnload
linker: ... dlsym failed: undefined symbol: JNI_OnUnload
linker: dlsym(handle=0x19("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"), sym_name="Agent_OnLoad_L", sym_ver="(null)", caller="(null)", caller_ns=@0x838563c) ...
linker: undefined symbol: Agent_OnLoad_L
linker: ... dlsym failed: undefined symbol: Agent_OnLoad_L
linker: dlsym(handle=0x19("/home/Mis012/Projects/bionic2glibc/worms/libWormsAndroid.so"), sym_name="Agent_OnLoad", sym_ver="(null)", caller="(null)", caller_ns=@0x838563c) ...
linker: undefined symbol: Agent_OnLoad
linker: ... dlsym failed: undefined symbol: Agent_OnLoad
DEBUG: 'libWormsAndroid.so' contains no Agent linkage
DEBUG: [libWormsAndroid.so]::JNI_OnLoad -> 0xe6356800
DEBUG: [libWormsAndroid.so]::JNI_OnUnload -> 0x0
DEBUG: Created library: 'libWormsAndroid.so'
DEBUG: [libWormsAndroid.so]::JNI_OnLoad
DEBUG: JNIInvokeInterface_::GetEnv
DEBUG: Registered library: 'libWormsAndroid.so'
Mis012 commented 4 years ago

what next?

ChristopherHX commented 4 years ago

Sorry for the late reply Wait replace FakeJni::Jvm with Baron::Jvm and recompile, rerun with more verbose log Old: I really expected more from this log (as nothing useful is there) maybe baron isn't showing native functions registrations. Please decompile classes.dex to source code and look for native functions and how they get called. Then try to reimplement the Renderloop from java in fake-jni.

As I don't have the legal right to get your classes.dex of worms android I cannot help you much.

To call native non static functions https://github.com/minecraft-linux/mcpelauncher-client/blob/master/src/jni/main_activity.cpp#L107-L109

To call static function of a fakejni class call https://github.com/minecraft-linux/mcpelauncher-client/blob/master/src/xbox_live_helper.cpp#L139-L147