Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions mono/metadata/Makefile.am
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,7 @@ common_sources = \
file-mmap.h \
object-offsets.h \
abi-details.h \
class-abi-details.h \
metadata-cross-helpers.c \
seq-points-data.h \
seq-points-data.c \
Expand Down
23 changes: 23 additions & 0 deletions mono/metadata/class-abi-details.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
/**
* \file Declarations of MonoClass field offset functions
* Copyright 2018 Microsoft
* Licensed under the MIT license. See LICENSE file in the project root for full license information.
*/
#ifndef __MONO_METADATA_CLASS_ABI_DETAILS_H__
#define __MONO_METADATA_CLASS_ABI_DETAILS_H__

#include <mono/metadata/class-internals.h>
#include <mono/metadata/abi-details.h>

#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) /*nothing*/
#ifdef MONO_CLASS_DEF_PRIVATE
#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) intptr_t funcname (void);
#else
#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) static inline intptr_t funcname (void) { return MONO_STRUCT_OFFSET (argtype, fieldname); }
#endif
#include "class-getters.h"
#undef MONO_CLASS_GETTER
#undef MONO_CLASS_OFFSET

#endif /* __MONO_METADATA_CLASS_ABI_DETAILS_H__ */

18 changes: 18 additions & 0 deletions mono/metadata/class-accessors.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#include <mono/metadata/class-internals.h>
#include <mono/metadata/tabledefs.h>
#ifdef MONO_CLASS_DEF_PRIVATE
#include <mono/metadata/abi-details.h>
#define REALLY_INCLUDE_CLASS_DEF 1
#include <mono/metadata/class-private-definition.h>
#undef REALLY_INCLUDE_CLASS_DEF
Expand Down Expand Up @@ -496,8 +497,25 @@ mono_class_set_failure (MonoClass *klass, MonoErrorBoxed *boxed_error)
return TRUE;
}

/**
* mono_class_set_nonblittable:
* \param klass class which will be marked as not blittable.
*
* Mark \c klass as not blittable.
*
* LOCKING: Acquires the loader lock.
*/
void
mono_class_set_nonblittable (MonoClass *klass) {
mono_loader_lock ();
klass->blittable = FALSE;
mono_loader_unlock ();
}

#ifdef MONO_CLASS_DEF_PRIVATE
#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) rettype funcname (argtype *klass) { return optref klass-> fieldname ; }
#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) intptr_t funcname (void) { return MONO_STRUCT_OFFSET (argtype, fieldname); }
#include "class-getters.h"
#undef MONO_CLASS_GETTER
#undef MONO_CLASS_OFFSET
#endif /* MONO_CLASS_DEF_PRIVATE */
15 changes: 15 additions & 0 deletions mono/metadata/class-getters.h
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@
/* No include guards - this file is meant to be included multiple times.
* Before including the file define the following macros:
* MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname)
*
* MONO_CLASS_OFFSET(funcname, argtype, fieldname)
*/

/* Accessors for _MonoClass fields. */
Expand Down Expand Up @@ -101,3 +103,16 @@ MONO_CLASS_GETTER(m_classarray_get_method_count, guint32, , MonoClassArray, meth

/* Accessors for _MonoClassPointer fields. */
MONO_CLASS_GETTER(m_classpointer_get_klass, MonoClass*, &, MonoClassPointer, klass)

MONO_CLASS_OFFSET(m_class_offsetof_interface_bitmap, MonoClass, interface_bitmap)
MONO_CLASS_OFFSET(m_class_offsetof_byval_arg, MonoClass, byval_arg)
MONO_CLASS_OFFSET(m_class_offsetof_cast_class, MonoClass, cast_class)
MONO_CLASS_OFFSET(m_class_offsetof_element_class, MonoClass, element_class)
MONO_CLASS_OFFSET(m_class_offsetof_idepth, MonoClass, idepth)
MONO_CLASS_OFFSET(m_class_offsetof_instance_size, MonoClass, instance_size)
MONO_CLASS_OFFSET(m_class_offsetof_interface_id, MonoClass, interface_id)
MONO_CLASS_OFFSET(m_class_offsetof_max_interface_id, MonoClass, max_interface_id)
MONO_CLASS_OFFSET(m_class_offsetof_parent, MonoClass, parent)
MONO_CLASS_OFFSET(m_class_offsetof_rank, MonoClass, rank)
MONO_CLASS_OFFSET(m_class_offsetof_sizes, MonoClass, sizes)
MONO_CLASS_OFFSET(m_class_offsetof_supertypes, MonoClass, supertypes)
5 changes: 5 additions & 0 deletions mono/metadata/class-internals.h
Original file line number Diff line number Diff line change
Expand Up @@ -299,8 +299,10 @@ union _MonoClassSizes {
#else
#define MONO_CLASS_GETTER(funcname, rettype, optref, argtype, fieldname) static inline rettype funcname (argtype *klass) { return optref klass-> fieldname ; }
#endif
#define MONO_CLASS_OFFSET(funcname, argtype, fieldname) /*nothing*/
#include "class-getters.h"
#undef MONO_CLASS_GETTER
#undef MONO_CLASS_OFFSET

#ifdef COMPRESSED_INTERFACE_BITMAP
int mono_compress_bitmap (uint8_t *dest, const uint8_t *bitmap, int size);
Expand Down Expand Up @@ -1424,6 +1426,9 @@ mono_field_resolve_type (MonoClassField *field, MonoError *error);
gboolean
mono_type_has_exceptions (MonoType *type);

void
mono_class_set_nonblittable (MonoClass *klass);

/*Now that everything has been defined, let's include the inline functions */
#include <mono/metadata/class-inlines.h>

Expand Down
Loading