#!/bin/sh

# demonstrate a problem with a shared object constructor

# Adjust the following for your gcc 4 setup. Only '$cc'
# is used later.
#
mf="/usr/local/gcc-mudflap"
cc="$mf/bin/i686-pc-linux-gnu-gcc"
export LD_LIBRARY_PATH="$mf/lib"

prog="$HOME/zz/zz40"

cat >$prog.c <<EOF
#include <stdio.h>

int main ()
{
	fprintf (stderr, "main\n");
	return (0);
}
EOF

cat >$prog-so.c <<EOF
#include <stdio.h>

void __attribute__ ((constructor))
dll_init (void)
{
	fprintf (stderr, "dll_init\n");
}

void __attribute__ ((destructor))
dll_fini (void)
{
	fprintf (stderr, "dll_fini\n");
}
EOF


 MUDFLAP_OPTIONS=""
#MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -help"
 MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -trace-calls"
#MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -verbose-trace"
 MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -verbose-violations"
 MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -backtrace=30"
#MUDFLAP_OPTIONS="$MUDFLAP_OPTIONS -check-initialization"
export MUDFLAP_OPTIONS

opts="-v -g -O0 -fmudflap -fmudflapth -lmudflapth -lpthread"

date >$prog.out

test -f $prog-so.so && rm $prog-so.so
$cc $opts -Wall -o $prog-so.so $prog-so.c -shared >>$prog.out 2>&1 || {
	echo "build shared library failed"
	exit 1
}

test -f $prog && rm $prog
$cc $opts -Wall -o $prog $prog.c $prog-so.so >>$prog.out 2>&1 || {
	echo "build test program failed"
	exit 1
}

echo "`date` running test program"
$prog 2>>$prog.out
echo "`date` done"
