Merge pull request #1909 from esdrubal/reflection
[mono.git] / man / mono.1
index 66fc7a3fba46ddbdbaf87e44f68f27dfc8f0748e..2a9347fca0b0eae0a7ced1a04d401de6be72e47e 100644 (file)
@@ -146,6 +146,13 @@ Defaults to 128.
 .I nodebug
 Instructs the AOT compiler to not output any debugging information.
 .TP
+.I no-direct-calls
+This prevents the AOT compiler from generating a direct calls to a
+method.   The AOT compiler usually generates direct calls for certain
+methods that do not require going through the PLT (for example,
+methods that are known to not require a hook like a static
+constructor) or call into simple internal calls. 
+.TP
 .I dwarfdebug
 Instructs the AOT compiler to emit DWARF debugging information. When
 used together with the nodebug option, only DWARF debugging
@@ -333,31 +340,31 @@ In general, Mono has been tuned to use the default set of flags,
 before using these flags for a deployment setting, you might want to
 actually measure the benefits of using them.    
 .Sp
-The following optimizations are implemented:
+The following optimization flags are implemented in the core engine:
 .nf
+             abcrem     Array bound checks removal
              all        Turn on all optimizations
-             peephole   Peephole postpass
+             aot        Usage of Ahead Of Time compiled code
              branch     Branch optimizations
-             inline     Inline method calls
              cfold      Constant folding
+             cmov       Conditional moves [arch-dependency]
+             deadce     Dead code elimination
              consprop   Constant propagation
              copyprop   Copy propagation
-             deadce     Dead code elimination
-             linears    Linear scan global reg allocation
-             cmov       Conditional moves [arch-dependency]
-             shared     Emit per-domain code
-             sched      Instruction scheduling
-             intrins    Intrinsic method implementations
-             tailc      Tail recursion and tail calls
-             loop       Loop related optimizations
              fcmov      Fast x86 FP compares [arch-dependency]
+             float32   Perform 32-bit float arithmetic using 32-bit operations
+             gshared    Enable generic code sharing.
+             inline     Inline method calls
+             intrins    Intrinsic method implementations
+             linears    Linear scan global reg allocation
              leaf       Leaf procedures optimizations
-             aot        Usage of Ahead Of Time compiled code
+             loop       Loop related optimizations
+             peephole   Peephole postpass
              precomp    Precompile all methods before executing Main
-             abcrem     Array bound checks removal
-             ssapre     SSA based Partial Redundancy Elimination
+             sched      Instruction scheduling
+             shared     Emit per-domain code
              sse2       SSE2 instructions on x86 [arch-dependency]
-             gshared    Enable generic code sharing.
+             tailc      Tail recursion and tail calls
 .fi
 .Sp
 For example, to enable all the optimization but dead code
@@ -370,6 +377,23 @@ The flags that are flagged with [arch-dependency] indicate that the
 given option if used in combination with Ahead of Time compilation
 (--aot flag) would produce pre-compiled code that will depend on the
 current CPU and might not be safely moved to another computer. 
+.RS
+.ne 8
+.PP
+The following optimizations are supported
+.TP
+.I float32
+Requests that the runtime performn 32-bit floating point operations
+using only 32-bits.   By default the Mono runtime tries to use the
+highest precision available for floating point operations, but while
+this might render better results, the code might run slower.   This
+options also affects the code generated by the LLVM backend.
+.TP
+.I inline
+Controls whether the runtime should attempt to inline (the default),
+or not inline methods invocations
+.ne
+.RE
 .TP
 \fB--runtime=VERSION\fR
 Mono supports different runtime versions. The version used depends on the program
@@ -393,10 +417,6 @@ Using security without parameters is equivalent as calling it with the
 "cas" parameter.  
 .PP
 The following modes are supported:
-.TP
-.I cas
-This allows mono to support declarative security attributes,
-e.g. execution of Code Access Security (CAS) or non-CAS demands.
 .TP 
 .I core-clr
 Enables the core-clr security system, typically used for
@@ -854,6 +874,27 @@ The following is a common use to track down problems with P/Invoke:
 
 .fi
 .PP
+.SH DEBUGGING WITH LLDB
+If you are using LLDB, you can use the 
+.B mono.py
+script to print some internal data structures with it.   To use this,
+add this to your 
+.B  $HOME/.lldbinit
+file:
+.nf
+command script import $PREFIX/lib/mono/lldb/mono.py
+.fi
+.PP
+Where $PREFIX is the prefix value that you used when you configured
+Mono (typically /usr).
+.PP
+Once this is done, then you can inspect some Mono Runtime data structures,
+for example:
+.nf
+(lldb) p method
+
+(MonoMethod *) $0 = 0x05026ac0 [mscorlib]System.OutOfMemoryException:.ctor()
+.fi
 .SH SERIALIZATION
 Mono's XML serialization engine by default will use a reflection-based
 approach to serialize which might be slow for continuous processing
@@ -949,6 +990,10 @@ where V is the architecture number 4, 5, 6, 7 and the options can be currently b
 
 .fi
 .TP
+\fBMONO_ARM_FORCE_SOFT_FLOAT\fR
+When Mono is built with a soft float fallback on ARM and this variable is set to
+"1", Mono will always emit soft float code, even if a VFP unit is detected.
+.TP
 \fBMONO_DISABLE_AIO\fR
 If set, tells mono NOT to attempt using native asynchronous I/O services. In
 that case, a default select/poll implementation is used. Currently only epoll()
@@ -1097,9 +1142,16 @@ to 100 percent.  A value of 0 turns evacuation off.
 .TP
 \fB(no-)lazy-sweep\fR
 Enables or disables lazy sweep for the Mark&Sweep collector.  If
-enabled, the sweep phase of the garbage collection is done piecemeal
-whenever the need arises, typically during nursery collections.  Lazy
-sweeping is enabled by default.
+enabled, the sweeping of individual major heap blocks is done
+piecemeal whenever the need arises, typically during nursery
+collections.  Lazy sweeping is enabled by default.
+.TP
+\fB(no-)concurrent-sweep\fR
+Enables or disables concurrent sweep for the Mark&Sweep collector.  If
+enabled, the iteration of all major blocks to determine which ones can
+be freed and which ones have to be kept and swept, is done
+concurrently with the running program.  Concurrent sweeping is enabled
+by default.
 .TP
 \fBstack-mark=\fImark-mode\fR
 Specifies how application threads should be scanned. Options are
@@ -1258,12 +1310,24 @@ work, Mono needs to be compiled with the BINARY_PROTOCOL define on
 sgen-gc.c.   You can then use this command to explore the output
 .nf
                 sgen-grep-binprot 0x1234 0x5678 < file
+.fi
 .TP
 \fBnursery-canaries\fR
 If set, objects allocated in the nursery are suffixed with a canary (guard)
 word, which is checked on each minor collection. Can be used to detect/debug
 heap corruption issues.
-.fi
+
+.TP
+\fBdo-not-finalize\fR
+If enabled, finalizers will not be run.  Everything else will be
+unaffected: finalizable objects will still be put into the
+finalization queue where they survive until they're scheduled to
+finalize.  Once they're not in the queue anymore they will be
+collected regularly.
+
+.TP
+\fBlog-finalizers\fR
+Log verbosely around the finalization process to aid debugging.
 .ne
 .RE
 .TP