commit - d9f06d8cf9d186a8ab53e4d8c31d2529c2c027f1
commit + 29237e85c3e5a0e5000ec5dd8d9d4c4d70f0e54c
blob - /dev/null
blob + 2bae66a0e239d40650a31f6d36851e90b886de94 (mode 644)
--- /dev/null
+++ glibc-vs-musl/Makefile
+# requires musl-gcc, see https://www.musl-libc.org/how.html
+
+all: build_glibc build_musl
+
+build_glibc:
+ @echo "Build with GLibc"
+ @gcc -fpic -shared -o liba.so a.c
+ @gcc -o main main.c
+ @./main
+
+build_musl:
+ @echo "Build with Musl"
+ @musl-gcc -fpic -shared -o liba.so a.c
+ @musl-gcc -o main main.c
+ @./main
+
+clean:
+ rm -f main liba.so
blob - /dev/null
blob + 5568637a04fea00e27fd7f38493428db11b1da30 (mode 644)
--- /dev/null
+++ glibc-vs-musl/a.c
+/* a.c */
+
+#include "stdio.h"
+
+const char* s = "-_-";
+int i = 0;
+
+__attribute__((constructor))
+static void before() {
+ printf("=^");
+}
+
+void f() {
+ printf("%c", s[i++]);
+}
+
+__attribute__((destructor))
+static void after() {
+ printf("^=\n");
+}
blob - /dev/null
blob + 94bd7c6417fabf0e4305a14e2360b14d014e0e2e (mode 755)
Binary files /dev/null and glibc-vs-musl/liba.so differ
blob - /dev/null
blob + 8a963b72693ff66ee16f986c0c2f988afa112a36 (mode 755)
Binary files /dev/null and glibc-vs-musl/main differ
blob - /dev/null
blob + 6defd3e084d82dea0ec7c19c2ade5e29aaacabfa (mode 644)
--- /dev/null
+++ glibc-vs-musl/main.c
+/* main.c */
+
+#include "dlfcn.h"
+
+int main()
+{
+ for (int i = 0; i < 3; i++) {
+ void* a = dlopen("./liba.so", RTLD_LAZY);
+ void(*f)() = dlsym(a, "f");
+ f();
+ dlclose(a);
+ }
+}