vm/include/open/vm.h (48 lines of code) (raw):

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /** * These are the functions that a VM built as a DLL must export. * Some functions may be optional and are marked as such. */ #ifndef _VM_EXPORT_H #define _VM_EXPORT_H #define OPEN_VM "vm" #define OPEN_VM_VERSION "1.0" #define OPEN_INTF_VM "open.interface.vm." OPEN_VM_VERSION #define O_A_H_VM_VMDIR "org.apache.harmony.vm.vmdir" #ifdef WIN32 #include <stddef.h> #else #include <unistd.h> #endif #include "open/types.h" #ifdef __cplusplus extern "C" { #endif /** * Dynamic interface adapter, returns specific API by its name. */ DECLARE_OPEN(void *, vm_get_interface, (const char*)); /** * Number of instance fields defined in a class. That doesn't include * inherited fields. */ VMEXPORT unsigned class_num_instance_fields(Class_Handle ch); /** * Get the handle for a field. If <code>idx</code> is greater than or equal to * <code>class_num_instance_fields</code>. * * @return <code>NULL</code> * * The value of idx indexes into the fields defined in this class and * doesn't include inherited fields. */ VMEXPORT Field_Handle class_get_instance_field(Class_Handle ch, unsigned idx); /** * Number of instance fields defined in a class. This number includes * inherited fields. */ VMEXPORT unsigned class_num_instance_fields_recursive(Class_Handle ch); /** * Get the handle for a field. * * @return <code>NULL</code> if idx is greater than or equal to * <code>class_num_instance_fields_recursive</code>. * * The value of idx indexes into the set of fields that includes both fields * defined in this class and inherited fields. */ VMEXPORT Field_Handle class_get_instance_field_recursive(Class_Handle ch, unsigned idx); /** * Number of methods declared in the class. */ VMEXPORT unsigned class_get_number_methods(Class_Handle ch); /** * @return <code>TRUE</code> if all instances of this class are pinned. */ VMEXPORT void* class_alloc_via_classloader(Class_Handle ch, I_32 size); /** * This exactly what I want. * Get the alignment of the class. */ VMEXPORT unsigned class_get_alignment(Class_Handle ch); /** * Returns the size of an instance in the heap, in bytes. * * @param klass - the class handle * * @return The size of an instance in the heap. */ DECLARE_OPEN(size_t, class_get_object_size, (Class_Handle ch)); /** * @return The offset to the start of user data form the start of a boxed * instance. */ VMEXPORT unsigned class_get_unboxed_data_offset(Class_Handle ch); /** * @return Class handle given object's <code>VTable_Handle</code>. */ DECLARE_OPEN(Class_Handle, vtable_get_class, (VTable_Handle vh)); //// // begin inner-class related functions. /// /** * @return <code>TRUE</code> the number of inner classes. */ VMEXPORT unsigned class_number_inner_classes(Class_Handle ch); /** * @return <code>TRUE</code> if an inner class is public. */ VMEXPORT Boolean class_is_inner_class_public(Class_Handle ch, unsigned idx); /** * @return an inner class */ VMEXPORT Class_Handle class_get_inner_class(Class_Handle ch, unsigned idx); /** * @return the class that declared this one, or <code>NULL</code> if top-level class */ VMEXPORT Class_Handle class_get_declaring_class(Class_Handle ch); /// // end class-related functions. /// //// // begin field-related functions. //// /** * @return <code>TRUE</code> if the field must be enumerated by GC * * This function doesn't cause resolution of the class of the field. * * FIXME: move to internal headers */ VMEXPORT Boolean field_is_enumerable_reference(Field_Handle fh); //// // end field-related functions. //// //// // begin vector layout functions. //// /** * Vectors are one-dimensional, zero-based arrays. All Java * <code>arrays</code> are vectors. * Functions provided in this section do not work on multidimensional or * non-zero based arrays (i.e. arrays with a lower bound that is non-zero * for at least one of the dimensions. */ /** * Return the offset to the length field of the array. That field has * the same offset for vectors of all types. */ VMEXPORT int vector_length_offset(); /** * Return the offset to the first element of the vector of the given type. * This function is provided for the cases when the class handle of the * element is not available. */ VMEXPORT int vector_first_element_offset(VM_Data_Type element_type); /** * Return the offset to the first element of the vector of the given type. * Assume that the elements are boxed. Byte offset. */ VMEXPORT int vector_first_element_offset_class_handle(Class_Handle element_type); /** * Return the offset to the first element of the vector of the given type. * If the class is a value type, assume that elements are unboxed. * If the class is not a value type, assume that elements are references. */ VMEXPORT int vector_first_element_offset_unboxed(Class_Handle element_type); /** * Return the length of a vector. The caller must ensure that GC will not * move or deallocate the vector while vector_get_length() is active. */ VMEXPORT I_32 vector_get_length(Vector_Handle vector); /** * Return the address to an element of a vector of references. * The caller must ensure that GC will not move or deallocate the vector * while vector_get_element_address_ref() is active. */ VMEXPORT Managed_Object_Handle * vector_get_element_address_ref(Vector_Handle vector, I_32 idx); /** * Return the size of a vector of a given number of elements. * The size is rounded up to take alignment into account. */ VMEXPORT unsigned vm_vector_size(Class_Handle vector_class, int length); //// // end vector layout functions. //// /** * @return <code>TRUE</code> if references within objects and vector elements are * to be treated as offsets rather than raw pointers. */ DECLARE_OPEN(BOOLEAN, vm_is_heap_compressed, ()); /** * @return The starting address of the GC heap. */ DECLARE_OPEN(void *, vm_get_heap_base_address, ()); /** * @return The ending address of the GC heap. */ DECLARE_OPEN(void *, vm_get_heap_ceiling_address, ()); /** * @return <code>TRUE</code> if vtable pointers within objects are to be treated * as offsets rather than raw pointers. */ DECLARE_OPEN(BOOLEAN, vm_is_vtable_compressed, ()); /** * @return The base address of the vtable memory area. This value will * never change and can be cached at startup. */ DECLARE_OPEN(void *, vm_get_vtable_base_address, ()); #ifdef __cplusplus } #endif #endif // _VM_EXPORT_H