************************************************************************
If you have build/runtime errors with Mono and Gtk# apps please try the
following first:

* Build Mono and gtk+ (x11-toolkits/gtk20) without CPUTYPE and with the
  default FreeBSD CFLAGS ('-O2 -fno-strict-aliasing -pipe') as Mono has
  been known to expose compiler bugs.

* Try building and running Mono with the GENERIC kernel.
  - Mono requires SYSVSHM, SYSVMSG, and SYSVSEM which are part of the
    GENERIC kernel.
  - Removing kernel options or changing defaults to use experimental
    options can adversely affect Mono's ability to build and run.

* The FreeBSD 6 kernel support for user threads (KSE(2), enabled by
  default) is known to break Mono. KSE has been disabled by default in
  FreeBSD 7.0 and removed in FreeBSD 8.0.  Use libmap.conf(5) to use
  libthr(3):
   # echo "libpthread.so.2  libthr.so.2" >> /etc/libmap.conf
   # echo "libpthread.so    libthr.so"   >> /etc/libmap.conf

* Remove leftover semaphores / increase semaphore limits.
  - Close apps which use Mono and run `ipcs -sbt`.  Remove the
    semaphores with MODE "--rw-------" and NSEMS "8" using ipcrm (1)
  - _OR_ simply reboot which is the safest method.
  - On multi-user systems the semaphore limits may need to be increased
    from the defaults. The following should comfortably support 30 users.

    # echo "kern.ipc.semmni=40" >> /boot/loader.conf
    # echo "kern.ipc.semmns=300" >> /boot/loader.conf

* If you are in a jailed environment, ensure System V IPC are enabled.
  You can rely on the security.jail.sysvipc_allowed  sysctl to check
  this status.  The following enables this feature on the host system:
    # echo "jail_sysvipc_allow=\"YES\"" >> /etc/rc.conf

* Some process information are acceded through /proc (e.g. when using
  NUnit) and procfs(5) has to be mounted for these features to work:
    # echo "proc            /proc   procfs  rw 0 0" >> /etc/fstab
************************************************************************
