blob: 2b50c46b8c362eea9c10509fd248f8420585ae6a [file] [log] [blame]
Chang Xing605fe242017-07-20 15:57:21 -07001/*
2 * Copyright (C) 2017 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_RUNTIME_AOT_CLASS_LINKER_H_
18#define ART_RUNTIME_AOT_CLASS_LINKER_H_
19
20#include "class_linker.h"
21
22namespace art {
Vladimir Marko7ed2d382019-11-25 10:41:53 +000023
24namespace gc {
25class Heap;
26} // namespace gc
27
Chang Xing605fe242017-07-20 15:57:21 -070028// AotClassLinker is only used for AOT compiler, which includes some logic for class initialization
29// which will only be used in pre-compilation.
30class AotClassLinker : public ClassLinker {
31 public:
32 explicit AotClassLinker(InternTable *intern_table);
33 ~AotClassLinker();
34
Vladimir Marko7ed2d382019-11-25 10:41:53 +000035 static bool CanReferenceInBootImageExtension(ObjPtr<mirror::Class> klass, gc::Heap* heap)
36 REQUIRES_SHARED(Locks::mutator_lock_);
37
Mathieu Chartier9e050df2017-08-09 10:05:47 -070038 protected:
39 // Overridden version of PerformClassVerification allows skipping verification if the class was
40 // previously verified but unloaded.
41 verifier::FailureKind PerformClassVerification(Thread* self,
42 Handle<mirror::Class> klass,
43 verifier::HardFailLogMode log_level,
44 std::string* error_msg)
Roland Levillainbbc6e7e2018-08-24 16:58:47 +010045 override
Mathieu Chartier9e050df2017-08-09 10:05:47 -070046 REQUIRES_SHARED(Locks::mutator_lock_);
47
Chang Xing0c2c2222017-08-04 14:36:17 -070048 // Override AllocClass because aot compiler will need to perform a transaction check to determine
49 // can we allocate class from heap.
50 bool CanAllocClass()
51 override
52 REQUIRES_SHARED(Locks::mutator_lock_)
53 REQUIRES(!Roles::uninterruptible_);
54
Chang Xing605fe242017-07-20 15:57:21 -070055 bool InitializeClass(Thread *self,
56 Handle<mirror::Class> klass,
57 bool can_run_clinit,
58 bool can_init_parents)
Roland Levillainbbc6e7e2018-08-24 16:58:47 +010059 override
Chang Xing605fe242017-07-20 15:57:21 -070060 REQUIRES_SHARED(Locks::mutator_lock_)
61 REQUIRES(!Locks::dex_lock_);
62};
63} // namespace art
64
65#endif // ART_RUNTIME_AOT_CLASS_LINKER_H_