Commit Diff


commit - d9f06d8cf9d186a8ab53e4d8c31d2529c2c027f1
commit + 29237e85c3e5a0e5000ec5dd8d9d4c4d70f0e54c
blob - /dev/null
blob + 2bae66a0e239d40650a31f6d36851e90b886de94 (mode 644)
--- /dev/null
+++ glibc-vs-musl/Makefile
@@ -0,0 +1,18 @@
+# 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
@@ -0,0 +1,20 @@
+/* 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
@@ -0,0 +1,13 @@
+/* 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);
+	}
+}