blob: 3c1eece16841dd9517105760c7816248f698457d [file] [log] [blame]
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +00001//===- DefinedAtom.cpp ------------------------------------------*- C++ -*-===//
2//
Chandler Carruth2946cd72019-01-19 08:50:56 +00003// 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
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +00006//
7//===----------------------------------------------------------------------===//
8
9#include "llvm/Support/ErrorHandling.h"
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000010#include "lld/Core/DefinedAtom.h"
Rui Ueyama33ab83b2015-01-31 02:05:01 +000011#include "lld/Core/File.h"
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000012
13namespace lld {
14
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000015DefinedAtom::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:
Nick Kledzik16cfa602014-11-12 22:21:56 +000029 case typeMachHeader:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000030 return permR_X;
Shankar Easwaran8962feb2013-03-14 16:09:49 +000031
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000032 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:
Tim Northovercf78d372014-09-30 21:29:54 +000042 case typeProcessedUnwindInfo:
Pete Cooper90dbab02016-01-19 21:54:21 +000043 case typeObjCImageInfo:
Pete Cooperab010732016-02-01 23:56:27 +000044 case typeObjCMethodList:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000045 return permR__;
46
47 case typeData:
Shankar Easwaran873c9ff2013-02-22 17:18:53 +000048 case typeDataFast:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000049 case typeZeroFill:
Shankar Easwarandb74ffb2013-02-24 03:09:10 +000050 case typeZeroFillFast:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000051 case typeObjC1Class:
52 case typeLazyPointer:
53 case typeLazyDylibPointer:
Pete Coopere8d9df42016-02-09 20:11:17 +000054 case typeNonLazyPointer:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000055 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:
Nick Kledzik5c4693d2014-11-06 01:09:13 +000066 case typeInterposingTuples:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000067 case typeTLVInitialData:
68 case typeTLVInitialZeroFill:
69 case typeTLVInitializerPtr:
70 return permRW_L;
Shankar Easwaran8962feb2013-03-14 16:09:49 +000071
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000072 case typeUnknown:
73 case typeTempLTO:
Lang Hamesb1b67f42015-10-24 08:20:51 +000074 case typeSectCreate:
Pete Cooperd4f41452016-02-02 21:37:15 +000075 case typeDSOHandle:
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000076 return permUnknown;
77 }
78 llvm_unreachable("unknown content type");
79}
80
Nick Kledzikcc3d2dc2013-01-09 01:17:12 +000081} // namespace