150
|
1 //===- DefinedAtom.cpp ------------------------------------------*- C++ -*-===//
|
|
2 //
|
|
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
4 // See https://llvm.org/LICENSE.txt for license information.
|
|
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
6 //
|
|
7 //===----------------------------------------------------------------------===//
|
|
8
|
|
9 #include "llvm/Support/ErrorHandling.h"
|
|
10 #include "lld/Core/DefinedAtom.h"
|
|
11 #include "lld/Core/File.h"
|
|
12
|
|
13 namespace lld {
|
|
14
|
|
15 DefinedAtom::ContentPermissions DefinedAtom::permissions() const {
|
|
16 // By default base permissions on content type.
|
|
17 return permissions(this->contentType());
|
|
18 }
|
|
19
|
|
20 // Utility function for deriving permissions from content type
|
|
21 DefinedAtom::ContentPermissions DefinedAtom::permissions(ContentType type) {
|
|
22 switch (type) {
|
|
23 case typeCode:
|
|
24 case typeResolver:
|
|
25 case typeBranchIsland:
|
|
26 case typeBranchShim:
|
|
27 case typeStub:
|
|
28 case typeStubHelper:
|
|
29 case typeMachHeader:
|
|
30 return permR_X;
|
|
31
|
|
32 case typeConstant:
|
|
33 case typeCString:
|
|
34 case typeUTF16String:
|
|
35 case typeCFI:
|
|
36 case typeLSDA:
|
|
37 case typeLiteral4:
|
|
38 case typeLiteral8:
|
|
39 case typeLiteral16:
|
|
40 case typeDTraceDOF:
|
|
41 case typeCompactUnwindInfo:
|
|
42 case typeProcessedUnwindInfo:
|
|
43 case typeObjCImageInfo:
|
|
44 case typeObjCMethodList:
|
|
45 return permR__;
|
|
46
|
|
47 case typeData:
|
|
48 case typeDataFast:
|
|
49 case typeZeroFill:
|
|
50 case typeZeroFillFast:
|
|
51 case typeObjC1Class:
|
|
52 case typeLazyPointer:
|
|
53 case typeLazyDylibPointer:
|
|
54 case typeNonLazyPointer:
|
|
55 case typeThunkTLV:
|
|
56 return permRW_;
|
|
57
|
|
58 case typeGOT:
|
|
59 case typeConstData:
|
|
60 case typeCFString:
|
|
61 case typeInitializerPtr:
|
|
62 case typeTerminatorPtr:
|
|
63 case typeCStringPtr:
|
|
64 case typeObjCClassPtr:
|
|
65 case typeObjC2CategoryList:
|
|
66 case typeInterposingTuples:
|
|
67 case typeTLVInitialData:
|
|
68 case typeTLVInitialZeroFill:
|
|
69 case typeTLVInitializerPtr:
|
|
70 return permRW_L;
|
|
71
|
|
72 case typeUnknown:
|
|
73 case typeTempLTO:
|
|
74 case typeSectCreate:
|
|
75 case typeDSOHandle:
|
|
76 return permUnknown;
|
|
77 }
|
|
78 llvm_unreachable("unknown content type");
|
|
79 }
|
|
80
|
|
81 } // namespace
|