X-Git-Url: http://wien.tomnetworks.com/gitweb/?a=blobdiff_plain;f=mono%2Fsgen%2Fgc-internal-agnostic.h;h=54953e85d4cea98c4f03ee78afbaa902146ccc58;hb=e120193ed19d105d3360c7005943cbed8af83549;hp=e3c695119e40f7ac64972c2ae00b321802e3e7ab;hpb=22448831bbcc3d170f80ae5e3cc02fccd39ff970;p=mono.git diff --git a/mono/sgen/gc-internal-agnostic.h b/mono/sgen/gc-internal-agnostic.h index e3c695119e4..54953e85d4c 100644 --- a/mono/sgen/gc-internal-agnostic.h +++ b/mono/sgen/gc-internal-agnostic.h @@ -1,20 +1,10 @@ -/* - * gc-internal-agnostic.h: Mono-agnostic GC interface. +/** + * \file + * Mono-agnostic GC interface. * * Copyright (C) 2015 Xamarin Inc * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License 2.0 as published by the Free Software Foundation; - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License 2.0 along with this library; if not, write to the Free - * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + * Licensed under the MIT license. See LICENSE file in the project root for full license information. */ #ifndef __MONO_METADATA_GCINTERNALAGNOSTIC_H__ @@ -34,10 +24,10 @@ /* h indicates whether to hide or just tag. * (-!!h ^ p) is used instead of (h ? ~p : p) to avoid multiple mentions of p. */ -#define MONO_GC_HIDE_POINTER(p,t,h) ((gpointer)(((-(size_t)!!(h) ^ (size_t)(p)) & ~3UL) | ((t) & 3UL))) -#define MONO_GC_REVEAL_POINTER(p,h) ((gpointer)((-(size_t)!!(h) ^ (size_t)(p)) & ~3UL)) +#define MONO_GC_HIDE_POINTER(p,t,h) ((gpointer)(((-(size_t)!!(h) ^ (size_t)(p)) & ~(size_t)3) | ((t) & (size_t)3))) +#define MONO_GC_REVEAL_POINTER(p,h) ((gpointer)((-(size_t)!!(h) ^ (size_t)(p)) & ~(size_t)3)) -#define MONO_GC_POINTER_TAG(p) ((size_t)(p) & 3UL) +#define MONO_GC_POINTER_TAG(p) ((size_t)(p) & (size_t)3) #define MONO_GC_HANDLE_OCCUPIED_MASK (1) #define MONO_GC_HANDLE_VALID_MASK (2) @@ -67,7 +57,7 @@ typedef enum { #define MONO_GC_HANDLE_TYPE_SHIFT (3) #define MONO_GC_HANDLE_TYPE_MASK ((1 << MONO_GC_HANDLE_TYPE_SHIFT) - 1) -#define MONO_GC_HANDLE_TYPE(x) (((x) & MONO_GC_HANDLE_TYPE_MASK) - 1) +#define MONO_GC_HANDLE_TYPE(x) ((GCHandleType)(((x) & MONO_GC_HANDLE_TYPE_MASK) - 1)) #define MONO_GC_HANDLE_SLOT(x) ((x) >> MONO_GC_HANDLE_TYPE_SHIFT) #define MONO_GC_HANDLE_TYPE_IS_WEAK(x) ((x) <= HANDLE_WEAK_TRACK) #define MONO_GC_HANDLE(slot, type) (((slot) << MONO_GC_HANDLE_TYPE_SHIFT) | (((type) & MONO_GC_HANDLE_TYPE_MASK) + 1)) @@ -104,6 +94,9 @@ MonoGCDescriptor mono_gc_make_descr_for_array (int vector, gsize *elem_bitmap, i /* simple interface for data structures needed in the runtime */ MonoGCDescriptor mono_gc_make_descr_from_bitmap (gsize *bitmap, int numbits); +/* Return a root descriptor for a vector with repeating refs bitmap */ +MonoGCDescriptor mono_gc_make_vector_descr (void); + /* Return a root descriptor for a root with all refs */ MonoGCDescriptor mono_gc_make_root_descr_all_refs (int numbits); @@ -121,4 +114,9 @@ void mono_gc_memmove_aligned (void *dest, const void *src, size_t size); FILE *mono_gc_get_logfile (void); +/* equivalent to options set via MONO_GC_PARAMS */ +void mono_gc_params_set (const char* options); +/* equivalent to options set via MONO_GC_DEBUG */ +void mono_gc_debug_set (const char* options); + #endif