> >> Obviously when loading a .so library, > >> tcc additionally is loads its dependencies too. > > > > That would be correct, when the target is TCC_OUTPUT_MEMORY > > but i think, in all other cases, tcc should not do that. > > I'd suggest to use "grep -nrw tcc_load_dll ." for example. There is > only one place from where tcc_load_dll() is called:
i used "git greo -n -C 12 tcc_load_dll" > in libtcc.c:tcc_add_file_internal(): > > case AFF_BINTYPE_DYN: > if (s1->output_type == TCC_OUTPUT_MEMORY) { > #ifdef TCC_IS_NATIVE > void* dl = dlopen(filename, RTLD_GLOBAL | RTLD_LAZY); > if (dl) > tcc_add_dllref(s1, filename, 0)->handle = dl, ret = 0; > #endif > } else > ret = tcc_load_dll(s1, fd, filename, (flags & > AFF_REFERENCED_DLL) != 0); > break; > So, for TCC_OUTPUT_MEMORY, tcc does not use tcc_load_dll(), It calls > "dlopen()" instead. Where dlopen() would invoke the dynamic linker > (ld.so) and that one then would take care to load any dependencies > (DT_NEEDED tags). I found the same location, but it was in the night and i unfortunately stopped code flow analyzis after reading "TCC_IS_NATIVE". What about: * leave the code, as is * remember this corner case * go ahead with the release * pick it up again after the release or * disable recursive the loading of the libraries * remember this corner case * go ahead with the release * pick it up again after the release Since you also do not know yet, in which case the code is needed, a real fix requires a lot of time and some new tests I think, the call to "tcc_load_ddl" was added here: https://repo.or.cz/tinycc.git/commit/1df662c1b094d250db0501cf31db83dc5f9060e4 I really want to have a new release now, because.... * tell eyeryone, that tcc is alive * let compiler-explorer use a new tcc version * let compiler-explorer use --enable-cross * after a release, we can fix tcc to use "nolibc" without issues. That would make tcc independant of an installed host libc nolibc introducion: https://lwn.net/Articles/920158/ Multi-File-Sources: https://github.com/wtarreau/nolibc nolibc was merged into the linux kernel. Recent updates are here: https://git.kernel.org/pub/scm/linux/kernel/git/wtarreau/nolibc.git/tree/ There was a single file version, which mentioned, that nolibc is dual licensed. In addition to GPL 2.0, there was also permissive license given. When i remember correctly: MIT -- Regards ... Detlef source tree -- Regards ... Detlef _______________________________________________ Tinycc-devel mailing list Tinycc-devel@nongnu.org https://lists.nongnu.org/mailman/listinfo/tinycc-devel