summaryrefslogtreecommitdiffstats
path: root/lld/lib/ReaderWriter/ELF/WriterELF.cpp
diff options
context:
space:
mode:
authorSid Manning <sidneym@codeaurora.org>2012-10-18 17:16:19 +0000
committerSid Manning <sidneym@codeaurora.org>2012-10-18 17:16:19 +0000
commit2a59024ff8735cfffada708ecbc8abd8cde874e3 (patch)
tree7fc92d52b4ea8abb53dba6dad175a7ae400c1ace /lld/lib/ReaderWriter/ELF/WriterELF.cpp
parent12be639dfcc17a10957f79b0e650ec7455cf50f6 (diff)
downloadbcm5719-llvm-2a59024ff8735cfffada708ecbc8abd8cde874e3.tar.gz
bcm5719-llvm-2a59024ff8735cfffada708ecbc8abd8cde874e3.zip
This update does the following:
* Moves enum Scope from DefinedAtom.h to Atom.h * Adds scope method to AbsoluteAtom class * Updates YAML to print scope of AbsoluteAtoms * Update Native Reader/Writer to handle this new, "attribute" * Adds testcase Reviewed and approved by Nick Kledzik llvm-svn: 166189
Diffstat (limited to 'lld/lib/ReaderWriter/ELF/WriterELF.cpp')
-rw-r--r--lld/lib/ReaderWriter/ELF/WriterELF.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/lld/lib/ReaderWriter/ELF/WriterELF.cpp b/lld/lib/ReaderWriter/ELF/WriterELF.cpp
index 974e82975f7..13453b739fb 100644
--- a/lld/lib/ReaderWriter/ELF/WriterELF.cpp
+++ b/lld/lib/ReaderWriter/ELF/WriterELF.cpp
@@ -601,14 +601,28 @@ void ELFSymbolTableChunk<target_endianness, is64Bits>
b = ELF::STB_WEAK;
else
b = ELF::STB_GLOBAL;
- } else if (const AbsoluteAtom *aa = llvm::dyn_cast<const AbsoluteAtom>(a)){
+ } else if (const AbsoluteAtom *aa = llvm::dyn_cast<const AbsoluteAtom>(a)){
//FIXME: Absolute atoms need more properties to differentiate each other
// based on binding and type of symbol
- symbol->st_value = aa->value();
+ t = ELF::STT_OBJECT;
+
+ switch (aa->scope()) {
+ case AbsoluteAtom::scopeLinkageUnit:
+ symbol->st_other = ELF::STV_HIDDEN;
+ b = ELF::STB_LOCAL;
+ break;
+ case AbsoluteAtom::scopeTranslationUnit:
+ b = ELF::STB_LOCAL;
+ break;
+ case AbsoluteAtom::scopeGlobal:
+ b = ELF::STB_GLOBAL;
+ break;
+ }
+ symbol->st_value = aa->value();
} else {
- symbol->st_value = 0;
- t = ELF::STT_NOTYPE;
- b = ELF::STB_LOCAL;
+ symbol->st_value = 0;
+ t = ELF::STT_NOTYPE;
+ b = ELF::STB_LOCAL;
}
symbol->setBindingAndType(b, t);
OpenPOWER on IntegriCloud