blob: 76984bda99f7e3d8c0048feb99c05c3377dfd84d [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
Vladimir Markod1f73512020-04-02 10:50:35 +010038 bool SetUpdatableBootClassPackages(const std::vector<std::string>& packages);
39
Mathieu Chartier9e050df2017-08-09 10:05:47 -070040 protected:
41 // Overridden version of PerformClassVerification allows skipping verification if the class was
42 // previously verified but unloaded.
43 verifier::FailureKind PerformClassVerification(Thread* self,
44 Handle<mirror::Class> klass,
45 verifier::HardFailLogMode log_level,
46 std::string* error_msg)
Roland Levillainbbc6e7e2018-08-24 16:58:47 +010047 override
Mathieu Chartier9e050df2017-08-09 10:05:47 -070048 REQUIRES_SHARED(Locks::mutator_lock_);
49
Chang Xing0c2c2222017-08-04 14:36:17 -070050 // Override AllocClass because aot compiler will need to perform a transaction check to determine
51 // can we allocate class from heap.
52 bool CanAllocClass()
53 override
54 REQUIRES_SHARED(Locks::mutator_lock_)
55 REQUIRES(!Roles::uninterruptible_);
56
Chang Xing605fe242017-07-20 15:57:21 -070057 bool InitializeClass(Thread *self,
58 Handle<mirror::Class> klass,
59 bool can_run_clinit,
60 bool can_init_parents)
Roland Levillainbbc6e7e2018-08-24 16:58:47 +010061 override
Chang Xing605fe242017-07-20 15:57:21 -070062 REQUIRES_SHARED(Locks::mutator_lock_)
63 REQUIRES(!Locks::dex_lock_);
Vladimir Markod1f73512020-04-02 10:50:35 +010064
65 bool IsUpdatableBootClassPathDescriptor(const char* descriptor) override;
66
67 private:
68 std::vector<std::string> updatable_boot_class_path_descriptor_prefixes_;
Chang Xing605fe242017-07-20 15:57:21 -070069};
Vladimir Markod1f73512020-04-02 10:50:35 +010070
Chang Xing605fe242017-07-20 15:57:21 -070071} // namespace art
72
73#endif // ART_RUNTIME_AOT_CLASS_LINKER_H_