diff options
author | Nick Kledzik <kledzik@apple.com> | 2013-01-09 01:17:12 +0000 |
---|---|---|
committer | Nick Kledzik <kledzik@apple.com> | 2013-01-09 01:17:12 +0000 |
commit | cc3d2dca60d1a624c6ecc8cc5c21aafdbfec5c0f (patch) | |
tree | 9f4b11cc3ac5c78590c8071364714f011efee5f6 /lld/lib/Core/DefinedAtom.cpp | |
parent | b696c36fcd94339787d979c4ed6fb8cc9b83afdd (diff) | |
download | bcm5719-llvm-cc3d2dca60d1a624c6ecc8cc5c21aafdbfec5c0f.tar.gz bcm5719-llvm-cc3d2dca60d1a624c6ecc8cc5c21aafdbfec5c0f.zip |
Better tie together ContentType and Permissions.
Since most content types (e.g. typeCode) have a
preferred Permission, add a function to do that mapping.
Then hook up to YAML Reader and Writer such that
the 'permissions:' key does not need to be specified unless
overriding what the content type prefers.
llvm-svn: 171929
Diffstat (limited to 'lld/lib/Core/DefinedAtom.cpp')
-rw-r--r-- | lld/lib/Core/DefinedAtom.cpp | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/lld/lib/Core/DefinedAtom.cpp b/lld/lib/Core/DefinedAtom.cpp new file mode 100644 index 00000000000..191f12c96fd --- /dev/null +++ b/lld/lib/Core/DefinedAtom.cpp @@ -0,0 +1,78 @@ +//===- 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; + + case typeConstant: + case typeCString: + case typeUTF16String: + case typeCFI: + case typeLSDA: + case typeLiteral4: + case typeLiteral8: + case typeLiteral16: + case typeDTraceDOF: + case typeCompactUnwindInfo: + return permR__; + + case typeData: + case typeZeroFill: + case typeObjC1Class: + case typeLazyPointer: + case typeLazyDylibPointer: + case typeThunkTLV: + return permRW_; + + case typeGOT: + case typeConstData: + case typeCFString: + case typeInitializerPtr: + case typeTerminatorPtr: + case typeCStringPtr: + case typeObjCClassPtr: + case typeObjC2CategoryList: + case typeTLVInitialData: + case typeTLVInitialZeroFill: + case typeTLVInitializerPtr: + return permRW_L; + + case typeUnknown: + case typeTempLTO: + case typeFirstInSection: + case typeLastInSection: + return permUnknown; + } + llvm_unreachable("unknown content type"); +} + + +} // namespace + |