summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPeter Collingbourne <peter@pcc.me.uk>2015-07-04 03:42:35 +0000
committerPeter Collingbourne <peter@pcc.me.uk>2015-07-04 03:42:35 +0000
commit17eff10f6806bbf676fc0c4731c9940c61d90cc0 (patch)
tree167198e8152055f99e972ae8400c34ad8facf19e
parent0569ecfa9b643a8f0a14d83647927b546eba9abd (diff)
downloadbcm5719-llvm-17eff10f6806bbf676fc0c4731c9940c61d90cc0.tar.gz
bcm5719-llvm-17eff10f6806bbf676fc0c4731c9940c61d90cc0.zip
LTO: expose LTO_SYMBOL_ALIAS, which indicates that the symbol is an alias.
This is needed for COFF linkers to distinguish between weak external aliases and regular symbols with LLVM weak linkage, which are represented as strong symbols in COFF. llvm-svn: 241389
-rw-r--r--llvm/include/llvm-c/lto.h5
-rw-r--r--llvm/lib/LTO/LTOModule.cpp3
2 files changed, 6 insertions, 2 deletions
diff --git a/llvm/include/llvm-c/lto.h b/llvm/include/llvm-c/lto.h
index 42c05a2fc59..cb3a6916045 100644
--- a/llvm/include/llvm-c/lto.h
+++ b/llvm/include/llvm-c/lto.h
@@ -40,7 +40,7 @@ typedef bool lto_bool_t;
* @{
*/
-#define LTO_API_VERSION 16
+#define LTO_API_VERSION 17
/**
* \since prior to LTO_API_VERSION=3
@@ -63,7 +63,8 @@ typedef enum {
LTO_SYMBOL_SCOPE_PROTECTED = 0x00002000,
LTO_SYMBOL_SCOPE_DEFAULT = 0x00001800,
LTO_SYMBOL_SCOPE_DEFAULT_CAN_BE_HIDDEN = 0x00002800,
- LTO_SYMBOL_COMDAT = 0x00004000
+ LTO_SYMBOL_COMDAT = 0x00004000,
+ LTO_SYMBOL_ALIAS = 0x00008000
} lto_symbol_attributes;
/**
diff --git a/llvm/lib/LTO/LTOModule.cpp b/llvm/lib/LTO/LTOModule.cpp
index 6131c318024..53ed4175f8e 100644
--- a/llvm/lib/LTO/LTOModule.cpp
+++ b/llvm/lib/LTO/LTOModule.cpp
@@ -473,6 +473,9 @@ void LTOModule::addDefinedSymbol(const char *Name, const GlobalValue *def,
if (def->hasComdat())
attr |= LTO_SYMBOL_COMDAT;
+ if (isa<GlobalAlias>(def))
+ attr |= LTO_SYMBOL_ALIAS;
+
auto Iter = _defines.insert(Name).first;
// fill information structure
OpenPOWER on IntegriCloud