forked from OSchip/llvm-project
83 lines
2.0 KiB
C++
83 lines
2.0 KiB
C++
//===- DefinedAtom.cpp ------------------------------------------*- C++ -*-===//
|
|
//
|
|
// The LLVM Linker
|
|
//
|
|
// This file is distributed under the University of Illinois Open Source
|
|
// License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "llvm/Support/ErrorHandling.h"
|
|
#include "lld/Core/DefinedAtom.h"
|
|
#include "lld/Core/File.h"
|
|
|
|
namespace lld {
|
|
|
|
DefinedAtom::ContentPermissions DefinedAtom::permissions() const {
|
|
// By default base permissions on content type.
|
|
return permissions(this->contentType());
|
|
}
|
|
|
|
// Utility function for deriving permissions from content type
|
|
DefinedAtom::ContentPermissions DefinedAtom::permissions(ContentType type) {
|
|
switch (type) {
|
|
case typeCode:
|
|
case typeResolver:
|
|
case typeBranchIsland:
|
|
case typeBranchShim:
|
|
case typeStub:
|
|
case typeStubHelper:
|
|
case typeMachHeader:
|
|
return permR_X;
|
|
|
|
case typeConstant:
|
|
case typeCString:
|
|
case typeUTF16String:
|
|
case typeCFI:
|
|
case typeLSDA:
|
|
case typeLiteral4:
|
|
case typeLiteral8:
|
|
case typeLiteral16:
|
|
case typeDTraceDOF:
|
|
case typeCompactUnwindInfo:
|
|
case typeProcessedUnwindInfo:
|
|
case typeObjCImageInfo:
|
|
case typeObjCMethodList:
|
|
return permR__;
|
|
|
|
case typeData:
|
|
case typeDataFast:
|
|
case typeZeroFill:
|
|
case typeZeroFillFast:
|
|
case typeObjC1Class:
|
|
case typeLazyPointer:
|
|
case typeLazyDylibPointer:
|
|
case typeNonLazyPointer:
|
|
case typeThunkTLV:
|
|
return permRW_;
|
|
|
|
case typeGOT:
|
|
case typeConstData:
|
|
case typeCFString:
|
|
case typeInitializerPtr:
|
|
case typeTerminatorPtr:
|
|
case typeCStringPtr:
|
|
case typeObjCClassPtr:
|
|
case typeObjC2CategoryList:
|
|
case typeInterposingTuples:
|
|
case typeTLVInitialData:
|
|
case typeTLVInitialZeroFill:
|
|
case typeTLVInitializerPtr:
|
|
return permRW_L;
|
|
|
|
case typeUnknown:
|
|
case typeTempLTO:
|
|
case typeSectCreate:
|
|
case typeDSOHandle:
|
|
return permUnknown;
|
|
}
|
|
llvm_unreachable("unknown content type");
|
|
}
|
|
|
|
} // namespace
|