The proc file system in Linux is not POSIX compliant and returns st_size == 0 when calling lstat (e.g. lstat on "/proc/self/exe"). Which in turn makes Mono.Unix.UnixSymbolicLinkInfo.TryReadLink throw an exception when calling ToString(int, int) on the buffer populated by readlink.
I suggest that when st_size == 0 that the length of the buffer for readlink is established through repeated calls to readlink (stop when result is less then buffer size).
Actual version tested: 3.0.2