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
13namespace lld {
14
15DefinedAtom::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
21DefinedAtom::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
82