summaryrefslogtreecommitdiffstats
path: root/src/greenland/runtime_entry_points.h
blob: 8cd8ce4467d41bb53e8045c69885a3897cac8862 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
/*
 * Copyright (C) 2012 The Android Open Source Project
 *
 * Licensed 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.
 */

#ifndef ART_SRC_GREENLAND_RUNTIME_ENTRY_POINTS_H_
#define ART_SRC_GREENLAND_RUNTIME_ENTRY_POINTS_H_

#include "macros.h"

#include <stdint.h>

#define RUNTIME_ENTRYPOINT(x) \
  (static_cast<uintptr_t>(OFFSETOF_MEMBER(Thread, runtime_entry_points_)) + \
   static_cast<uintptr_t>(OFFSETOF_MEMBER(RuntimeEntryPoints, x)))

namespace art {

class Method;
class Object;
class Thread;

struct PACKED RuntimeEntryPoints {
  //----------------------------------------------------------------------------
  // Thread
  //----------------------------------------------------------------------------
  void (*TestSuspend)(Thread* thread);

  //----------------------------------------------------------------------------
  // Exception
  //----------------------------------------------------------------------------
  int32_t (*FindCatchBlock)(Method* current_method, uint32_t ti_offset);
  void (*ThrowIndexOutOfBounds)(int32_t length, int32_t index);
  void (*ThrowNullPointerException)(unsigned dex_pc);

  //----------------------------------------------------------------------------
  // Alloc
  //----------------------------------------------------------------------------
  Object* (*AllocArray)(uint32_t type_idx, Method* referrer,
                        uint32_t length, Thread* thread);

  Object* (*AllocArrayWithAccessCheck)(uint32_t type_idx, Method* referrer,
                                       uint32_t length, Thread* thread);

  Object* (*CheckAndAllocArray)(uint32_t type_idx, Method* referrer,
                                uint32_t length, Thread* thread);

  Object* (*CheckAndAllocArrayWithAccessCheck)(uint32_t type_idx,
                                               Method* referrer,
                                               uint32_t length,
                                               Thread* thread);

  //----------------------------------------------------------------------------
  // DexCache
  //----------------------------------------------------------------------------
  Object* (*ResolveString)(Method* referrer, uint32_t string_idx);

  //----------------------------------------------------------------------------
  // Field
  //----------------------------------------------------------------------------
  Object* (*GetObjectStatic)(uint32_t field_idx, Method* referrer);

  //----------------------------------------------------------------------------
  // Cast
  //----------------------------------------------------------------------------
  void (*CheckPutArrayElement)(const Object* element, const Object* array);

  //----------------------------------------------------------------------------
  // JNI
  //----------------------------------------------------------------------------
};

// Initialize an entry point data structure.
void InitRuntimeEntryPoints(RuntimeEntryPoints* entry_points);

} // namespace art

#endif // ART_SRC_GREENLAND_RUNTIME_ENTRY_POINTS_H_