Fix bug #342.

The Mercury implementation of string formatting (used by the non-C grades) was
incorrectly formatting some numbers when using the 'g' conversion specifier,
for example:

    string.format("%6.3g\n", [f(16.0)]) = "10"

The cause was an off-by-one error introduced when calls to string.substring
were changed to calls string.between (in commit
b1af59cb29ac31db9fc5b3422fced505facabad1).

library/string.m:
	Fix the off-by-one error above.

NEWS:
	Announce the fix.
Define sinh, cosh and tanh as foreign_procs in Java grade.

Use foreign_procs to define the hyperbolic operations in the Java grade.
Java has provided these since version 1.5 and since that is the minimum
version required by Mercury we can rely on them being present.

library/math.m:
	As above.
Separate processor counting from thread pinning.

In low-level C parallel grades we need the number MR_num_processors to
prime MR_num_threads when it is not explicitly set by the user, even if
thread pinning support is not available.

This fixes bug #338: programs in low-level C parallel grades crashed at
startup on platforms where thread pinning is unimplemented because
MR_num_threads is set to zero.

runtime/mercury_context.c:
	Refactor code to this effect.

	Add assertions that MR_num_processors > 0 and MR_num_threads > 0.

NEWS:
	Announce fix.
Get processor count with GetSystemInfo on Windows.

runtime/mercury_context.c:
	As above.
Thread-safe alternative to strerror.

Add MR_strerror as a thread-safe alternative to strerror.
The current implementation wraps strerror_r(), strerror_s()
or sys_errlist as appropriate for the platform.  Bug #340.

configure.ac:
runtime/mercury_conf.h.in:
	Check for strerror_r, strerror_s.

	Delete irrelevant code in the sockets test for the external debugger.

runtime/mercury_runtime_util.c:
runtime/mercury_runtime_util.h:
	Add MR_strerror and use it.

library/io.m:
	Use MR_strerror.  In particular, mercury_output_error was not
	thread-safe.

	Pass errno to mercury_output_error explicitly for clarity.

	Delete req_lock parameter in ML_maybe_make_err_msg macro which is not
	needed any more.

compiler/prog_event.m:
runtime/mercury_deep_profiling.c:
runtime/mercury_misc.c:
runtime/mercury_term_size.c:
runtime/mercury_trace_base.c:
trace/mercury_trace_cmd_developer.c:
trace/mercury_trace_cmd_exp.c:
trace/mercury_trace_cmd_misc.c:
trace/mercury_trace_declarative.c:
trace/mercury_trace_external.c:
trace/mercury_trace_internal.c:
	Use MR_strerror.

compiler/notes/coding_standards.html:
	Update coding standard.

extras/net/sockets.m:
extras/net/tcp.m:
	Use MR_strerror.

NEWS:
	Announce change.
Adjust news entries for 14.01.1.

NEWS:
	Add bug numbers where available.
Fix a segmentation fault in the runtime on Mac OS X.

runtime/mercury_runtime_util.c:
	On Mac OS X, strerror_r also does not populate its buffer
	if it fails.
Assume standard strerror_r unless using glibc.

We followed the feature test macros from the Linux man page for
strerror_r to figure out which function we have actually got, but that
only applies when using the GNU C library.  When using any other C
library, we should assume that strerror_r is the POSIX-standard
strerror_r.

Commit 533f5f874f66802040ad5f05bfca2483a6c90297 worked around
this bug for Mac OS X only.

runtime/mercury_runtime_util.c:
	Explicitly include string.h for strerror_r, just in case.

	If __GNU_LIBRARY__ is not defined then assume we have the
	POSIX-standard strerror_r.  Only follow the feature test
	macros otherwise.

	Assign the return values of strerror_r to variables of the
	expected types.  The compiler should warn about conversions
	between integer and pointer types if the detection was wrong.

	Fix argument order in a call to generic_strerror.
Single point of control for string.format implementation in C grades.

Provide a single point of control for the choice of implementation of
string.format in the C grades.  This choice is currently made in three
different spots.

library/string.m:
	Define a new macro, ML_USE_SPRINTF, which expands to a Boolean that
	controls which implementation for string.format is used in C grades.
Workaround Linux NTPL TSX bug (Mercury Bug: 334)

New versions of glibc on x86_64 attempt to use the TSX extension of newer
Intel processors.  This converts mutex-protected critical sections into
transactional memory critical sections.  However the implementation appears
to be buggy and the marker lock in Boehm GC causes an assertion to be
triggered.

I've been in contact with the author of the elision code in glibc and have
submitted this workaround to the Boehm GC list.  Until the bug is fixed or
worked-around upstream I'd like to fix it here so I can continue other work.

This is the simpler and more portable workaround suggested by Peter Wang.

boehm_gc/include/private/pthread_support.h:
boehm_gc/pthread_support.c:
    Define GC_setup_mark_lock()  This procedure creates the lock specifying a
    pthread_mutexattr_t structure.  This is used to disable lock elision on
    Linux with glibc 2.19.

boehm_gc/misc.c:
    Call GC_setup_mark_lock() when initialising the collector.