2013-01-09 09:17:12 +08:00
|
|
|
//===- 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"
|
|
|
|
|
|
|
|
|
|
|
|
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:
|
|
|
|
return permR_X;
|
2013-03-15 00:09:49 +08:00
|
|
|
|
2013-01-09 09:17:12 +08:00
|
|
|
case typeConstant:
|
|
|
|
case typeCString:
|
|
|
|
case typeUTF16String:
|
|
|
|
case typeCFI:
|
|
|
|
case typeLSDA:
|
|
|
|
case typeLiteral4:
|
|
|
|
case typeLiteral8:
|
|
|
|
case typeLiteral16:
|
|
|
|
case typeDTraceDOF:
|
|
|
|
case typeCompactUnwindInfo:
|
2013-09-04 10:42:02 +08:00
|
|
|
case typeRONote:
|
2013-09-20 04:07:01 +08:00
|
|
|
case typeNoAlloc:
|
2013-01-09 09:17:12 +08:00
|
|
|
return permR__;
|
|
|
|
|
|
|
|
case typeData:
|
2013-02-23 01:18:53 +08:00
|
|
|
case typeDataFast:
|
2013-01-09 09:17:12 +08:00
|
|
|
case typeZeroFill:
|
2013-02-24 11:09:10 +08:00
|
|
|
case typeZeroFillFast:
|
2013-01-09 09:17:12 +08:00
|
|
|
case typeObjC1Class:
|
|
|
|
case typeLazyPointer:
|
|
|
|
case typeLazyDylibPointer:
|
|
|
|
case typeThunkTLV:
|
2013-09-04 10:42:02 +08:00
|
|
|
case typeRWNote:
|
2013-01-09 09:17:12 +08:00
|
|
|
return permRW_;
|
|
|
|
|
|
|
|
case typeGOT:
|
|
|
|
case typeConstData:
|
|
|
|
case typeCFString:
|
|
|
|
case typeInitializerPtr:
|
|
|
|
case typeTerminatorPtr:
|
|
|
|
case typeCStringPtr:
|
|
|
|
case typeObjCClassPtr:
|
|
|
|
case typeObjC2CategoryList:
|
|
|
|
case typeTLVInitialData:
|
|
|
|
case typeTLVInitialZeroFill:
|
|
|
|
case typeTLVInitializerPtr:
|
2013-08-24 04:03:28 +08:00
|
|
|
case typeThreadData:
|
|
|
|
case typeThreadZeroFill:
|
2013-01-09 09:17:12 +08:00
|
|
|
return permRW_L;
|
2013-03-15 00:09:49 +08:00
|
|
|
|
2014-03-27 00:37:13 +08:00
|
|
|
case typeGroupComdat:
|
2014-04-01 11:49:55 +08:00
|
|
|
case typeGnuLinkOnce:
|
2013-01-09 09:17:12 +08:00
|
|
|
case typeUnknown:
|
|
|
|
case typeTempLTO:
|
|
|
|
return permUnknown;
|
|
|
|
}
|
|
|
|
llvm_unreachable("unknown content type");
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} // namespace
|
|
|
|
|