Age | Commit message (Collapse) | Author |
|
|
|
System.Json.Microsoft
|
|
|
|
|
|
|
|
Wanted: profiler support on Android. ;-)
...which seems sane enough: we have this nifty pluggable profiler
mechanism already, we have profilers built as separate shared libs
(e.g. libmono-profiler-log.so), let's just "somehow" load one, call
the init function, and we're off to the races, right?
void* h = dlopen ("path/to/libmono-profiler-log.so", RTLD_LAZY)
// h == null; dlerror() is:
// Cannot load library: soinfo_link_image(linker.cpp:1635): could not load library
// "libmonosgen-2.0.so.0" needed by "libmono-profiler-log.so"; caused by
// load_library(linker.cpp:745): library "libmonosgen-2.0.so.0" not found
Ouch. So the problem is that libmonosgen-2.0.so contains a versioned
SONAME ("libmonosgen-2.0.so.0"), and thus libmono-profiler-log.so
contains a versioned SONAME reference, which cannot be resolved.
(Android doesn't allow versioned .so's to be placed within .apks.)
Fix the first: make libmonosgen-2.0.so unversioned. That way,
libmono-profiler-log.so contains an unversioned library reference, and
Android is appeased!
(Unversion libmono-profiler-log.so for good measure.)
Fix the second: with the above fix in place, libmono-profiler-log.so
SITLL won't be loaded, with dlerror(3) reporting:
Cannot load library: soinfo_relocate(linker.cpp:975): cannot locate
symbol "monoeg_g_log" referenced by "libmono-profiler-log.so"
The issue here is that libmonosgen-2.0.so contains unexported symbol
references from eglib, e.g. monoeg_g_log(), and dlopen() won't use
those unexported symbols. So just add the glib link references to
libmono-profiler-log.so, and everything is kosher. Yay.
|
|
|
|
|
|
SortImpl<TKey,TValue> when using full-aot, as it leads to a code blowup. Inline swap methods.
|
|
|
|
|
|
|
|
|
|
methods by their line numbers. dlsymutil becomes very slow otherwise.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
* class.c: Handle the case when the parent of a GTD needs a generic
instance of the child type leading to a generic instance with
inconsistent values.
Say we have this set of types:
class TextBoxBase<T> : TextInput<TextBox> where T : TextBoxBase<T> {}
class TextBox : TextBoxBase<TextBox> {}
class TextInput<T> : Input<T> where T: TextInput<T> {}
class Input<T> {}
Now the runtime tries to load TextBoxBase<>, this is the sequence of events:
1)Load type TextBoxBase<>
2.1)Type has parent, find it
2.2)Lookup parent TextInput<TextBox>
3.1)Lookup TextInput<>
4)Load type TextInput<> //OK
3.2)Lookup TextBok
5)Load type TextBox
6.1)Type has parent, find it
6.2)Lookup TextBoxBase<TextBox>
7.1)Lookup TextBoxBase<> //OK
7.2)Lookup TextBox //OK
7.3)Create generic instance TextBoxBase<TextBox> //BOOM
Let's examine what happens in (7.3), we try to create the generic class instance TextBoxBase<TextBox>
which means we must inflate all of its MonoClass fields. One field in particular, parent, will be set to null
because the lookup for TextBoxBase parent in (2.2) still running which means the current value is null.
What does it mean? It means that TextBoxBase<TextBox> extends object and our program will misbehave.
Fixes bxc #8549
|
|
|
|
Fixed xamarin-bug #8565: System.Runtime.Serialization assembly remapping bug when targeting 2/3/3.5 profile.
|
|
Fix HttpContextWrapper.Session when Session State is disabled
|
|
Fixes xamarin-bug #8646: Inconsistencies with MS.NET on Sys.Web.Routing logic
|
|
* sgen-cardtable.c: A nursery object might not be promoted if it's pinned
or, unlikely, the major heap is full. Under those circumstances we need
to remark the card and leave the object behind.
With this we can see how many extra cards are kept due to pinning.
|
|
|
|
|
|
OrdinalIgnoreCase
|
|
The finalizable object got pinned, so it wouldn't be finalised. Just
recurse a bit and allocate it there.
|
|
|
|
This reverts commit 783bcfb735b17b48eee7670a896a29dfd6023174.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
This reverts commit 8344309a7b2285db8ebb0af5ec8651d6bf02f375.
|
|
|