Merge pull request #1909 from esdrubal/reflection
[mono.git] / man / mono.1
index 3d4bd54e9895550c8f348828da97a6dc819a2a9a..2a9347fca0b0eae0a7ced1a04d401de6be72e47e 100644 (file)
@@ -119,6 +119,7 @@ If specified, forces the generated AOT files to be bound to the
 runtime version of the compiling Mono.   This will prevent the AOT
 files from being consumed by a different Mono runtime.
 .I full
+.Sp
 This is currently an experimental feature as it is not complete.
 This instructs Mono to precompile code that has historically not been
 precompiled with AOT.   
@@ -145,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
@@ -221,7 +229,7 @@ example, --tool=prefix=arm-linux-gnueabi- will make the AOT compiler run
 .I write-symbols
 Instructs the AOT compiler to emit debug symbol information.
 .PP
-For more information about AOT, see: http://www.mono-project.com/AOT
+For more information about AOT, see: http://www.mono-project.com/docs/advanced/aot/
 .RE
 .TP
 \fB--attach=[options]\fR
@@ -317,7 +325,7 @@ If the Mono runtime has been compiled with LLVM support (not available
 in all configurations), Mono will use the LLVM optimization and code
 generation engine to JIT or AOT compile.     
 .Sp
-For more information, consult: http://www.mono-project.com/Mono_LLVM
+For more information, consult: http://www.mono-project.com/docs/advanced/mono-llvm/
 .TP
 \fB--nollvm\fR
 When using a Mono that has been compiled with LLVM support, it forces
@@ -332,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
@@ -369,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
@@ -392,15 +417,11 @@ 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
 Moonlight/Silverlight applications.  It provides a much simpler
-security system than CAS, see http://www.mono-project.com/Moonlight
+security system than CAS, see http://www.mono-project.com/docs/web/moonlight/
 for more details and links to the descriptions of this new system. 
 .TP
 .I validil
@@ -736,7 +757,7 @@ shared library `mono-profiler-custom.so'.  This profiler module must
 be on your dynamic linker library path.
 .PP 
 A list of other third party profilers is available from Mono's web
-site (www.mono-project.com/Performance_Tips)
+site (www.mono-project.com/docs/advanced/performance-tips/)
 .PP
 Custom profiles are written as shared libraries.  The shared library
 must be called `mono-profiler-NAME.so' where `NAME' is the name of
@@ -853,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
@@ -948,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()
@@ -1075,19 +1121,10 @@ first generation (of two).  A larger nursery will usually speed up the
 program but will obviously use more memory.  The default nursery size
 4 MB.
 .TP
-\fBmajor=\fIcollector\fR
-Specifies which major collector to use.  Options are `marksweep' for
-the Mark&Sweep collector, `marksweep-conc' for concurrent Mark&Sweep,
-`marksweep-par' for parallel Mark&Sweep, `marksweep-fixed' for
-Mark&Sweep with a fixed heap, and `marksweep-fixed-par' for parallel
-Mark&Sweep with a fixed heap. The Mark&Sweep collector is the default.
-.TP
-\fBmajor-heap-size=\fIsize\fR
-Sets the size of the major heap (not including the large object space)
-for the fixed-heap Mark&Sweep collector (i.e. `marksweep-fixed' and
-`marksweep-fixed-par').  The size is in bytes, with optional suffixes
-`k', `m' and `g' to specify kilo-, mega- and gigabytes, respectively.
-The default is 512 megabytes.
+\fBmajor=\fIcollector\fR Specifies which major collector to use.
+Options are `marksweep' for the Mark&Sweep collector, and
+`marksweep-conc' for concurrent Mark&Sweep.  The non-concurrent
+Mark&Sweep collector is the default.
 .TP
 \fBsoft-heap-limit=\fIsize\fR
 Once the heap size gets larger than this size, ignore what the default
@@ -1105,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
@@ -1267,6 +1311,23 @@ 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.
+
+.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
@@ -1375,7 +1436,7 @@ libraries side-by-side with the main executable.
 .Sp
 For a complete description of recommended practices for application
 deployment, see
-http://www.mono-project.com/Guidelines:Application_Deployment
+http://www.mono-project.com/docs/getting-started/application-deployment/
 .TP
 \fBMONO_RTC\fR
 Experimental RTC support in the statistical profiler: if the user has
@@ -1759,7 +1820,7 @@ on this subject see the http://www.mono-project.com/Config_system.web
 page. 
 .SH MAILING LISTS
 Mailing lists are listed at the
-http://www.mono-project.com/Mailing_Lists
+http://www.mono-project.com/community/help/mailing-lists/
 .SH WEB SITE
 http://www.mono-project.com
 .SH SEE ALSO
@@ -1768,6 +1829,6 @@ certmgr(1), csharp(1), mcs(1), mdb(1), monocov(1), monodis(1),
 mono-config(5), mozroots(1), mprof-report(1), pdb2mdb(1), xsp(1), mod_mono(8).
 .PP
 For more information on AOT:
-http://www.mono-project.com/AOT
+http://www.mono-project.com/docs/advanced/aot/
 .PP
 For ASP.NET-related documentation, see the xsp(1) manual page