<div dir="ltr">LGTM</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, May 24, 2015 at 11:57 AM, Davide Italiano <span dir="ltr"><<a href="mailto:dccitaliano@gmail.com" target="_blank">dccitaliano@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi ruiu, atanasyan, Bigcheese,<br>
<br>
Note: Needs to wait until D9958 lands for a testcase/commit.<br>
<br>
REPOSITORY<br>
rL LLVM<br>
<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_D9963&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=N3K54Hv_yxOHrNnx_8NvFrZaK5m-ZQ3G9G70vtzAEEw&s=0GNzQtj15mLglksw73HcJimgd7Aqo1NnIcpM3631NUg&e=" target="_blank">http://reviews.llvm.org/D9963</a><br>
<br>
Files:<br>
include/lld/ReaderWriter/ELFLinkingContext.h<br>
lib/Driver/GnuLdDriver.cpp<br>
lib/ReaderWriter/ELF/OutputELFWriter.cpp<br>
<br>
Index: include/lld/ReaderWriter/ELFLinkingContext.h<br>
===================================================================<br>
--- include/lld/ReaderWriter/ELFLinkingContext.h<br>
+++ include/lld/ReaderWriter/ELFLinkingContext.h<br>
@@ -97,6 +97,12 @@<br>
OMAGIC,<br>
};<br>
<br>
+ /// \brief ELF DT_FLAGS.<br>
+ enum DTFlag : uint32_t {<br>
+ DT_NOW = 1 << 1,<br>
+ DT_ORIGIN = 1 << 2,<br>
+ };<br>
+<br>
llvm::Triple getTriple() const { return _triple; }<br>
<br>
uint64_t getPageSize() const { return _maxPageSize; }<br>
@@ -329,6 +335,10 @@<br>
// --wrap option.<br>
void addWrapForSymbol(StringRef sym) { _wrapCalls.insert(sym); }<br>
<br>
+ // \brief Set DT_FLAGS flag.<br>
+ void setDTFlag(DTFlag f) { _dtFlags |= f; };<br>
+ bool getDTFlag(DTFlag f) { return (_dtFlags & f); };<br>
+<br>
const llvm::StringSet<> &wrapCalls() const { return _wrapCalls; }<br>
<br>
void setUndefinesResolver(std::unique_ptr<File> resolver);<br>
@@ -383,6 +393,7 @@<br>
bool _armTarget1Rel = false;<br>
bool _mipsPcRelEhRel = false;<br>
uint64_t _maxPageSize = 0x1000;<br>
+ uint32_t _dtFlags = 0;<br>
<br>
OutputMagic _outputMagic = OutputMagic::DEFAULT;<br>
StringRefVector _inputSearchPaths;<br>
Index: lib/Driver/GnuLdDriver.cpp<br>
===================================================================<br>
--- lib/Driver/GnuLdDriver.cpp<br>
+++ lib/Driver/GnuLdDriver.cpp<br>
@@ -584,9 +584,13 @@<br>
<br>
for (auto *arg : parsedArgs->filtered(OPT_z)) {<br>
StringRef opt = arg->getValue();<br>
- if (opt == "muldefs") {<br>
+ if (opt == "muldefs")<br>
ctx->setAllowDuplicates(true);<br>
- } else if (opt.startswith("max-page-size")) {<br>
+ else if (opt == "now")<br>
+ ctx->setDTFlag(ELFLinkingContext::DTFlag::DT_NOW);<br>
+ else if (opt == "origin")<br>
+ ctx->setDTFlag(ELFLinkingContext::DTFlag::DT_ORIGIN);<br>
+ else if (opt.startswith("max-page-size")) {<br>
// Parse -z max-page-size option.<br>
// The default page size is considered the minimum page size the user<br>
// can set, check the user input if its atleast the minimum page size<br>
Index: lib/ReaderWriter/ELF/OutputELFWriter.cpp<br>
===================================================================<br>
--- lib/ReaderWriter/ELF/OutputELFWriter.cpp<br>
+++ lib/ReaderWriter/ELF/OutputELFWriter.cpp<br>
@@ -140,6 +140,21 @@<br>
if (!soname.empty() && _ctx.getOutputELFType() == llvm::ELF::ET_DYN)<br>
_dynamicTable->addEntry(DT_SONAME, _dynamicStringTable->addString(soname));<br>
<br>
+ // Add DT_FLAGS/DT_FLAGS_1 entries if necessary.<br>
+ uint32_t dtflags = 0, dt1flags = 0;<br>
+ if (_ctx.getDTFlag(ELFLinkingContext::DTFlag::DT_NOW)) {<br>
+ dtflags |= DF_BIND_NOW;<br>
+ dt1flags |= DF_1_NOW;<br>
+ }<br>
+ if (_ctx.getDTFlag(ELFLinkingContext::DTFlag::DT_ORIGIN)) {<br>
+ dtflags |= DF_ORIGIN;<br>
+ dt1flags |= DF_1_ORIGIN;<br>
+ }<br>
+ if (dtflags != 0)<br>
+ _dynamicTable->addEntry(DT_FLAGS, dtflags);<br>
+ if (dt1flags != 0)<br>
+ _dynamicTable->addEntry(DT_FLAGS_1, dt1flags);<br>
+<br>
// The dynamic symbol table need to be sorted earlier because the hash<br>
// table needs to be built using the dynamic symbol table. It would be<br>
// late to sort the symbols due to that in finalize. In the dynamic symbol<br>
<br>
EMAIL PREFERENCES<br>
<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__reviews.llvm.org_settings_panel_emailpreferences_&d=AwMFaQ&c=8hUWFZcy2Z-Za5rBPlktOQ&r=mQ4LZ2PUj9hpadE3cDHZnIdEwhEBrbAstXeMaFoB9tg&m=N3K54Hv_yxOHrNnx_8NvFrZaK5m-ZQ3G9G70vtzAEEw&s=hl0JkzopJT9LkvAQC66lThMqOtluGIaoLuhlLH6_7CQ&e=" target="_blank">http://reviews.llvm.org/settings/panel/emailpreferences/</a><br>
</blockquote></div><br></div>