allow for 32/64 bit builds
authorAndrew Tridgell <tridge@samba.org>
Tue, 22 Jul 2008 07:57:20 +0000 (17:57 +1000)
committerAndrew Tridgell <tridge@samba.org>
Tue, 22 Jul 2008 07:57:20 +0000 (17:57 +1000)
segv_handler/Makefile
segv_handler/segv_handler.c

index 4a0461fc7977324edfbfd6138200d72bb980aee5..0da3f01348043c52f3f8eb8da2974f5ecd3865e1 100644 (file)
@@ -3,10 +3,16 @@ CFLAGS=-Wall -fPIC -O2
 all: segv_handler.so testprog
 
 segv_handler.so: segv_handler.o
-       ld -shared -o $@ $^ $(LIBS)
+       gcc $(CFLAGS) -shared -o $@ $^ $(LIBS)
+
+segv_handler64.so: segv_handler.c
+       gcc $(CFLAGS) -m64 -shared -o $@ $^ $(LIBS)
+
+segv_handler32.so: segv_handler.c
+       gcc $(CFLAGS) -m32 -shared -o $@ $^ $(LIBS)
 
 testprog: testprog.c
-       $(CC) -g -o testprog{,.c}
+       $(CC) -g -o testprog testprog.c
 
 test: all
        -LD_PRELOAD=./segv_handler.so ./testprog
index eadc61dd0dc8c8128b8076fc3e33373dcdb37357..995e70c1a8a62ab40595a718c4c5b76c08f71142 100644 (file)
@@ -1,3 +1,4 @@
+#define _GNU_SOURCE
 #include <signal.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -25,8 +26,9 @@ static int segv_handler(int sig)
        return 0;
 }
 
-void _init(void)
+static void segv_init() __attribute__((constructor));
+void segv_init(void)
 {
-       signal(SIGSEGV, segv_handler);
-       signal(SIGBUS, segv_handler);
+       signal(SIGSEGV, (sighandler_t) segv_handler);
+       signal(SIGBUS, (sighandler_t) segv_handler);
 }