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