};
MonoPPDBFile*
-mono_ppdb_load_file (MonoImage *image)
+mono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size)
{
MonoImage *ppdb_image;
const char *filename;
#endif
MonoPPDBFile *ppdb;
- /* ppdb files drop the .exe/.dll extension */
- filename = mono_image_get_filename (image);
- if (strlen (filename) > 4 && (!strcmp (filename + strlen (filename) - 4, ".exe"))) {
- s = g_strdup (filename);
- s [strlen (filename) - 4] = '\0';
- ppdb_filename = g_strdup_printf ("%s.pdb", s);
- g_free (s);
+ if (raw_contents) {
+ ppdb_image = mono_image_open_from_data_internal ((char*)raw_contents, size, TRUE, NULL, FALSE, TRUE, NULL);
} else {
- ppdb_filename = g_strdup_printf ("%s.pdb", filename);
- }
+ /* ppdb files drop the .exe/.dll extension */
+ filename = mono_image_get_filename (image);
+ if (strlen (filename) > 4 && (!strcmp (filename + strlen (filename) - 4, ".exe"))) {
+ s = g_strdup (filename);
+ s [strlen (filename) - 4] = '\0';
+ ppdb_filename = g_strdup_printf ("%s.pdb", s);
+ g_free (s);
+ } else {
+ ppdb_filename = g_strdup_printf ("%s.pdb", filename);
+ }
- ppdb_image = mono_image_open_metadata_only (ppdb_filename, &status);
+ ppdb_image = mono_image_open_metadata_only (ppdb_filename, &status);
+ }
if (!ppdb_image)
return NULL;
#include <mono/metadata/mono-debug.h>
MonoPPDBFile*
-mono_ppdb_load_file (MonoImage *image);
+mono_ppdb_load_file (MonoImage *image, const guint8 *raw_contents, int size);
void
mono_ppdb_close (MonoDebugHandle *handle);
}
MonoImage *
-mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, const char *name)
+mono_image_open_from_data_internal (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, gboolean metadata_only, const char *name)
{
MonoCLIImageInfo *iinfo;
MonoImage *image;
iinfo = g_new0 (MonoCLIImageInfo, 1);
image->image_info = iinfo;
image->ref_only = refonly;
+ image->metadata_only = metadata_only;
image = do_mono_image_load (image, status, TRUE, TRUE);
if (image == NULL)
return register_image (image);
}
+MonoImage *
+mono_image_open_from_data_with_name (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, const char *name)
+{
+ return mono_image_open_from_data_internal (data, data_len, need_copy, status, refonly, FALSE, name);
+}
+
MonoImage *
mono_image_open_from_data_full (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly)
{
MonoImage *mono_image_open_metadata_only (const char *fname, MonoImageOpenStatus *status);
+MonoImage *mono_image_open_from_data_internal (char *data, guint32 data_len, gboolean need_copy, MonoImageOpenStatus *status, gboolean refonly, gboolean metadata_only, const char *name);
+
MonoException *mono_get_exception_field_access_msg (const char *msg);
MonoException *mono_get_exception_method_access_msg (const char *msg);
mono_image_addref (image);
/* Try a ppdb file first */
- handle->ppdb = mono_ppdb_load_file (handle->image);
+ handle->ppdb = mono_ppdb_load_file (handle->image, raw_contents, size);
if (!handle->ppdb)
handle->symfile = mono_debug_open_mono_symbols (handle, raw_contents, size, FALSE);