Add a third AOT location, alongside ~/.mono/aot-cache and the assembly dir

Unless running in on-demand AOT mode, the AOT runtime will look for an AOT cache alongside the assembly (e.g. /usr/lib/mono/4.5/mscorlib.dll.so).

This patch adds a second search path to the non-on-demand AOT loader, /usr/lib/mono/aot-cache/ARCHITECTURE/path/to/assembly.dll.so

This new structure makes it possible to have more than one Mono architecture on a system, sharing assemblies but not sharing AOT caches (for example, i386 and amd64 Mono on the same system, for different needs)
[MWF] DataGridViewRowCollection Clear() speed up

When issuing a Clear() to remove all rows, a ReIndex() was being called for
each row that was being removed.  This is extremely inefficient, instead
do a single ReIndex() after all rows have been removed.

Before doing a Clear() of 30k rows was taking 5.8 seconds.  With this patch
it now takes 670ms.
[MWF] DataGridView: ensure first_row_index will be valid after row removal

DataGridView keeps track of the first visible row in first_row_index.
DataGridViewRowCollection will notify DataGridView its about to delete 1 or
more rows via OnRowsPreRemovedInternal().  When this happens, we need to
ensure first_row_index will still fall within the number of rows that
will remain after the row removal.

This fixes https://bugzilla.xamarin.com/show_bug.cgi?id=24372 which I
reported.
[MWF] Add unit test for #24372
Add IE9 and newer to Up level navigator

This line enable the ASP Javascript validators in IE9 and upper. the user agent the IE10 is "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)".
[MWF] Fix off-by-one from 5a5c683

first_row_index needs to be <= RowsLeft - 1, since we are comparing a
row count vs an index.
Basic ppc64le support

This adds initial support for ppc64le to the ppc64 port.  That is:
* little endian aware (also in strtod),
* and ELFv2 aware (not using function descriptors)
* adjust various block sizes to be multiple of 64k, the default
  pagesize on ppc64le.  The sources should have used the system function
  to ensure alignment on pagesize, so this is just a stop-gap

It also corrects the list of registers for the precise GC, but that isn't
used in mini at all on any architecture currently.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Switch ppc_r11 with ppc_r12

This is a preliminary patch for ppc64le ELFv2 support.  That one requires
r12 to hold a functions address at calls to normal (global) C functions.
As is r12 is also used by mini for its IMT_REG, VTABLE_REG and RGCTX_REG
to pass around values to functions outside the normal argument registers
(ugh!), so there's a conflict.  This mechanical (by sed) patch simply switches
ppc_r11 and ppc_r12 everywhere, r11 doesn't have any special use in the ABI.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Use ppc_r12 for some global call sequences

After the mechanical exchange of ppc_r11 and ppc_r12 we now can use
ppc_r12 for global calls to hold the callees address without clobbering
r11 (which potentially contains IMT_REG, VTABLE_REG and RGCTX_REG).
We don't need to change all indirect calls, only those potentially reaching
functions containing a TOC setup based on r12 (in particular functions
in shared libs).  As the instruction sequence patcher can only deal
with one destination register we also need to make some additional
calls use r12.  We probably should convert all calls that currently
use r0 to use r12 if no other conflicts arise but this is enough to build.

Author: Michael Matz <matz@suse.de>
Origin: https://build.opensuse.org/request/show/225490
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
PowerPC64 ELFv2 ABI: cases for in-register parameter passing, return values, and structs

The ELFv2 ABI specifies some particular cases for in-register parameter
passing, return values, float/double structs; e.g.,
- small struct returned via registers (2 doublewords)
- homogeneous float struct returned via registers (8 members)
- small float struct passed/returned via FR registers
- return via multiple registers

Author: Bill Seurer <seurer@us.ibm.com>
Origin: https://launchpad.net/ubuntu/+source/mono/3.2.8+dfsg-4ubuntu2
Changes: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
[ppc] Bump (more) instruction sizes after 51c454f6b03b468273bb93db2aa9b76e330a7e57.

This fixes ~30 ppc-specific failures in mono/tests (e.g., appdomain), like this:
	wrong maximal instruction length of instruction atomic_add_i4 (expected 20, got 28)
	* Assertion: should not be reached at mini-ppc.c:5235

The commit 51c454f6b03b468273bb93db2aa9b76e330a7e57 introduced 2 ppc_sync
instructions in OP_ATOMIC_CAS_I4/8 *and* OP_ATOMIC_ADD_NEW_I4/8 (mini-ppc64.c).

Accordingly, commit 83a34c40c6a0911a0c27afce63f5ea7ec2bb4b26 updated the maxlength
(+8 bytes) of atomic_cas_i4/8 - *but not* atomic_add_new_i4/8 (cpu-ppc64.md).

Recently, commit b784b866dac0c97780357bf81bf0fa3ebeffa4e made atomic_add_new_i4/8
exercised (as 'atomic_add_i4/8') - with an incorrect/non-updated 20-byte maxlength,
which should actually be 28.

Thus:
	wrong maximal instruction length of instruction atomic_add_i4 (expected 20, got 28)

Signed-off-by: Mauricio Faria de Oliveira <mauricfo@linux.vnet.ibm.com>
Fix crash when removing last item in ListView

When the VirtualListSize changes, the focus_item_index should
be reset (similar to how it currently resets the selected indices).

If the last item in a ListView has focus and it is removed by
an another action on the form (i.e. push a button to remove the
current item), then the focused_item_index is not updated when
the VirtualListSize changes, even though that item doesn't exist
anymore.  When the ListView receives focus again, it tries to
invalidate the current focused item which causes an
ArgumentOutOfRangeException.
Added to StackFrame a field for the method address. Incremented MONO_CORLIB_VERSION.
Improved exception stack frame displayed data. Added stack frame method address display.
Moved sequence point logic to seq-points.h and seq-points.c
SeqPoint are now kept in memory with a compact encoding. MonoSeqPointInfo has now a pointer to a buffer containing encoded sequence points, and to a buffer containing next values. As there is no longer an array of SeqPoint ready to be read, SeqPointIterator was added.
Added methods to read and write MonoSeqPointInfo.
aot-runtime and aot-compiler now use seq_point_info_read/write.
Changed METHOD_EXIT_IL_OFFSET to -2 The new value produces lower deltas and does not overflow when using variable integer encoding.
Sequence points are now generated by default.