diff options
| author | Sid Manning <sidneym@codeaurora.org> | 2012-10-18 17:16:19 +0000 |
|---|---|---|
| committer | Sid Manning <sidneym@codeaurora.org> | 2012-10-18 17:16:19 +0000 |
| commit | 2a59024ff8735cfffada708ecbc8abd8cde874e3 (patch) | |
| tree | 7fc92d52b4ea8abb53dba6dad175a7ae400c1ace /lld/lib/ReaderWriter/ELF/WriterELF.cpp | |
| parent | 12be639dfcc17a10957f79b0e650ec7455cf50f6 (diff) | |
| download | bcm5719-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.cpp | 24 |
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); |

