<html>
<head>
</head>
<body bgcolor="#FFFFFF" text="#000000">
Cool stuff! Thanks!<br>
<br>
<div class="moz-cite-prefix">On 04/01/2015 01:38 AM, Rui Ueyama
wrote:<br>
</div>
<blockquote cite="mid:20150331223800.481DB1BEA78@llvm.org"
type="cite">
<meta http-equiv="Content-Type" content="text/html;
charset=windows-1252">
<meta name="Generator" content="MS Exchange Server version
08.03.0377.000">
<title>[lld] r233769 - ELF: Make findAbsoluteAtom return
AtomLayout* instead of an iterator.</title>
<!-- Converted from text/plain format -->
<p><font size="2">Author: ruiu<br>
Date: Tue Mar 31 17:37:59 2015<br>
New Revision: 233769<br>
<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project?rev=233769&view=rev">http://llvm.org/viewvc/llvm-project?rev=233769&view=rev</a><br>
Log:<br>
ELF: Make findAbsoluteAtom return AtomLayout* instead of an
iterator.<br>
<br>
All calls of findAbsoluteAtoms seem a bit awkward because of
the type<br>
of the function. It semantically returns a pointer to an
AtomLayout or<br>
nothing, so I made the function return AtomLayout*.<br>
<br>
In this patch, I also expanded some "auto"s because their
actual type<br>
were not obvious in their contexts.<br>
<br>
Modified:<br>
lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h<br>
lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h<br>
lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h<br>
lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h<br>
lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h<br>
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h<br>
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h<br>
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h<br>
lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMExecutableWriter.h
Tue Mar 31 17:37:59 2015<br>
@@ -66,9 +66,8 @@ template <class ELFT><br>
void
ARMExecutableWriter<ELFT>::finalizeDefaultAtomValues() {<br>
// Finalize the atom values that are part of the parent.<br>
ExecutableWriter<ELFT>::finalizeDefaultAtomValues();<br>
- auto gotAtomIter = _armLayout.findAbsoluteAtom(gotSymbol);<br>
- if (gotAtomIter != _armLayout.absoluteAtoms().end()) {<br>
- auto *gotAtom = *gotAtomIter;<br>
+ AtomLayout *gotAtom =
_armLayout.findAbsoluteAtom(gotSymbol);<br>
+ if (gotAtom) {<br>
if (auto gotpltSection =
_armLayout.findOutputSection(".got.plt"))<br>
gotAtom->_virtualAddr =
gotpltSection->virtualAddr();<br>
else if (auto gotSection =
_armLayout.findOutputSection(".got"))<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/ARM/ARMTargetHandler.h Tue
Mar 31 17:37:59 2015<br>
@@ -27,10 +27,8 @@ public:<br>
<br>
uint64_t getGOTSymAddr() {<br>
if (!_gotSymAddr.hasValue()) {<br>
- auto gotAtomIter =
this->findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
- _gotSymAddr = (gotAtomIter !=
this->absoluteAtoms().end())<br>
- ? (*gotAtomIter)->_virtualAddr<br>
- : 0;<br>
+ AtomLayout *gotAtom =
this->findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
+ _gotSymAddr = gotAtom ? gotAtom->_virtualAddr : 0;<br>
}<br>
return *_gotSymAddr;<br>
}<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h (original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/DefaultLayout.h Tue Mar 31
17:37:59 2015<br>
@@ -204,10 +204,13 @@ public:<br>
}<br>
<br>
/// \brief find a absolute atom given a name<br>
- AbsoluteAtomIterT findAbsoluteAtom(StringRef name) {<br>
- return std::find_if(<br>
+ lld::AtomLayout *findAbsoluteAtom(StringRef name) {<br>
+ auto iter = std::find_if(<br>
_absoluteAtoms.begin(), _absoluteAtoms.end(),<br>
[=](const AtomLayout *a) { return
a->_atom->name() == name; });<br>
+ if (iter == _absoluteAtoms.end())<br>
+ return nullptr;<br>
+ return *iter;<br>
}<br>
<br>
// Output sections with the same name into a OutputSection<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/DynamicLibraryWriter.h Tue
Mar 31 17:37:59 2015<br>
@@ -79,13 +79,14 @@ bool
DynamicLibraryWriter<ELFT>::createI<br>
<br>
template <class ELFT><br>
void
DynamicLibraryWriter<ELFT>::finalizeDefaultAtomValues()
{<br>
- auto underScoreEndAtomIter =
this->_layout.findAbsoluteAtom("_end");<br>
+ lld::AtomLayout *underScoreEndAtom =
this->_layout.findAbsoluteAtom("_end");<br>
+ assert(underScoreEndAtom);<br>
<br>
if (auto bssSection =
this->_layout.findOutputSection(".bss")) {<br>
- (*underScoreEndAtomIter)->_virtualAddr =<br>
+ underScoreEndAtom->_virtualAddr =<br>
bssSection->virtualAddr() +
bssSection->memSize();<br>
} else if (auto dataSection =
this->_layout.findOutputSection(".data")) {<br>
- (*underScoreEndAtomIter)->_virtualAddr =<br>
+ underScoreEndAtom->_virtualAddr =<br>
dataSection->virtualAddr() +
dataSection->memSize();<br>
}<br>
}<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/ExecutableWriter.h Tue Mar
31 17:37:59 2015<br>
@@ -126,23 +126,26 @@ template <class ELFT> void
ExecutableWri<br>
/// created<br>
template <class ELFT> void
ExecutableWriter<ELFT>::finalizeDefaultAtomValues() {<br>
OutputELFWriter<ELFT>::finalizeDefaultAtomValues();<br>
- auto bssStartAtomIter =
this->_layout.findAbsoluteAtom("__bss_start");<br>
- auto bssEndAtomIter =
this->_layout.findAbsoluteAtom("__bss_end");<br>
- auto underScoreEndAtomIter =
this->_layout.findAbsoluteAtom("_end");<br>
- auto endAtomIter =
this->_layout.findAbsoluteAtom("end");<br>
+ AtomLayout *bssStartAtom =
this->_layout.findAbsoluteAtom("__bss_start");<br>
+ AtomLayout *bssEndAtom =
this->_layout.findAbsoluteAtom("__bss_end");<br>
+ AtomLayout *underScoreEndAtom =
this->_layout.findAbsoluteAtom("_end");<br>
+ AtomLayout *endAtom =
this->_layout.findAbsoluteAtom("end");<br>
+<br>
+ assert((bssStartAtom || bssEndAtom || underScoreEndAtom ||
endAtom) &&<br>
+ "Unable to find the absolute atoms that have been
added by lld");<br>
<br>
auto startEnd = [&](StringRef sym, StringRef sec) ->
void {<br>
std::string start = ("__" + sym + "_start").str();<br>
std::string end = ("__" + sym + "_end").str();<br>
- auto s = this->_layout.findAbsoluteAtom(start);<br>
- auto e = this->_layout.findAbsoluteAtom(end);<br>
- auto section = this->_layout.findOutputSection(sec);<br>
+ AtomLayout *s = this->_layout.findAbsoluteAtom(start);<br>
+ AtomLayout *e = this->_layout.findAbsoluteAtom(end);<br>
+ OutputSection<ELFT> *section =
this->_layout.findOutputSection(sec);<br>
if (section) {<br>
- (*s)->_virtualAddr = section->virtualAddr();<br>
- (*e)->_virtualAddr = section->virtualAddr() +
section->memSize();<br>
+ s->_virtualAddr = section->virtualAddr();<br>
+ e->_virtualAddr = section->virtualAddr() +
section->memSize();<br>
} else {<br>
- (*s)->_virtualAddr = 0;<br>
- (*e)->_virtualAddr = 0;<br>
+ s->_virtualAddr = 0;<br>
+ e->_virtualAddr = 0;<br>
}<br>
};<br>
<br>
@@ -154,25 +157,19 @@ template <class ELFT> void
ExecutableWri<br>
startEnd("rel_iplt", ".rel.plt");<br>
startEnd("fini_array", ".fini_array");<br>
<br>
- assert(!(bssStartAtomIter ==
this->_layout.absoluteAtoms().end() ||<br>
- bssEndAtomIter ==
this->_layout.absoluteAtoms().end() ||<br>
- underScoreEndAtomIter ==
this->_layout.absoluteAtoms().end() ||<br>
- endAtomIter ==
this->_layout.absoluteAtoms().end()) &&<br>
- "Unable to find the absolute atoms that have been
added by lld");<br>
-<br>
auto bssSection =
this->_layout.findOutputSection(".bss");<br>
<br>
// If we don't find a bss section, then don't set these
values<br>
if (bssSection) {<br>
- (*bssStartAtomIter)->_virtualAddr =
bssSection->virtualAddr();<br>
- (*bssEndAtomIter)->_virtualAddr =<br>
+ bssStartAtom->_virtualAddr =
bssSection->virtualAddr();<br>
+ bssEndAtom->_virtualAddr =<br>
bssSection->virtualAddr() +
bssSection->memSize();<br>
- (*underScoreEndAtomIter)->_virtualAddr =
(*bssEndAtomIter)->_virtualAddr;<br>
- (*endAtomIter)->_virtualAddr =
(*bssEndAtomIter)->_virtualAddr;<br>
+ underScoreEndAtom->_virtualAddr =
bssEndAtom->_virtualAddr;<br>
+ endAtom->_virtualAddr = bssEndAtom->_virtualAddr;<br>
} else if (auto dataSection =
this->_layout.findOutputSection(".data")) {<br>
- (*underScoreEndAtomIter)->_virtualAddr =<br>
+ underScoreEndAtom->_virtualAddr =<br>
dataSection->virtualAddr() +
dataSection->memSize();<br>
- (*endAtomIter)->_virtualAddr =
(*underScoreEndAtomIter)->_virtualAddr;<br>
+ endAtom->_virtualAddr =
underScoreEndAtom->_virtualAddr;<br>
}<br>
}<br>
<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
---
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h
(original)<br>
+++
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonExecutableWriter.h
Tue Mar 31 17:37:59 2015<br>
@@ -70,9 +70,8 @@ template <class ELFT><br>
void
HexagonExecutableWriter<ELFT>::finalizeDefaultAtomValues()
{<br>
// Finalize the atom values that are part of the parent.<br>
ExecutableWriter<ELFT>::finalizeDefaultAtomValues();<br>
- auto sdabaseAtomIter =
_targetLayout.findAbsoluteAtom("_SDA_BASE_");<br>
- (*sdabaseAtomIter)->_virtualAddr =<br>
- _targetLayout.getSDataSection()->virtualAddr();<br>
+ AtomLayout *sdabaseAtom =
_targetLayout.findAbsoluteAtom("_SDA_BASE_");<br>
+ sdabaseAtom->_virtualAddr =
_targetLayout.getSDataSection()->virtualAddr();<br>
if (_ctx.isDynamic())<br>
finalizeHexagonRuntimeAtomValues(_targetLayout);<br>
}<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
---
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
(original)<br>
+++
lld/trunk/lib/ReaderWriter/ELF/Hexagon/HexagonTargetHandler.h
Tue Mar 31 17:37:59 2015<br>
@@ -83,10 +83,8 @@ public:<br>
}<br>
<br>
uint64_t getGOTSymAddr() {<br>
- if (!_gotSymAtom.hasValue()) {<br>
- auto iter =
this->findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
- _gotSymAtom = (iter == this->absoluteAtoms().end())
? nullptr : *iter;<br>
- }<br>
+ if (!_gotSymAtom.hasValue())<br>
+ _gotSymAtom =
this->findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
if (*_gotSymAtom)<br>
return (*_gotSymAtom)->_virtualAddr;<br>
return 0;<br>
@@ -131,18 +129,18 @@ private:<br>
<br>
template <class ELFT><br>
void
finalizeHexagonRuntimeAtomValues(HexagonTargetLayout<ELFT>
&layout) {<br>
- auto gotAtomIter =
layout.findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
- auto gotpltSection = layout.findOutputSection(".got.plt");<br>
+ AtomLayout *gotAtom =
layout.findAbsoluteAtom("_GLOBAL_OFFSET_TABLE_");<br>
+ OutputSection<ELFT> *gotpltSection =
layout.findOutputSection(".got.plt");<br>
if (gotpltSection)<br>
- (*gotAtomIter)->_virtualAddr =
gotpltSection->virtualAddr();<br>
+ gotAtom->_virtualAddr =
gotpltSection->virtualAddr();<br>
else<br>
- (*gotAtomIter)->_virtualAddr = 0;<br>
- auto dynamicAtomIter = layout.findAbsoluteAtom("_DYNAMIC");<br>
- auto dynamicSection = layout.findOutputSection(".dynamic");<br>
+ gotAtom->_virtualAddr = 0;<br>
+ AtomLayout *dynamicAtom =
layout.findAbsoluteAtom("_DYNAMIC");<br>
+ OutputSection<ELFT> *dynamicSection =
layout.findOutputSection(".dynamic");<br>
if (dynamicSection)<br>
- (*dynamicAtomIter)->_virtualAddr =
dynamicSection->virtualAddr();<br>
+ dynamicAtom->_virtualAddr =
dynamicSection->virtualAddr();<br>
else<br>
- (*dynamicAtomIter)->_virtualAddr = 0;<br>
+ dynamicAtom->_virtualAddr = 0;<br>
}<br>
<br>
} // end namespace elf<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsELFWriters.h Tue
Mar 31 17:37:59 2015<br>
@@ -68,9 +68,9 @@ private:<br>
MipsTargetLayout<ELFT> &_targetLayout;<br>
<br>
void setAtomValue(StringRef name, uint64_t value) {<br>
- auto atom = _targetLayout.findAbsoluteAtom(name);<br>
- assert(atom != _targetLayout.absoluteAtoms().end());<br>
- (*atom)->_virtualAddr = value;<br>
+ AtomLayout *atom = _targetLayout.findAbsoluteAtom(name);<br>
+ assert(atom);<br>
+ atom->_virtualAddr = value;<br>
}<br>
};<br>
<br>
<br>
Modified:
lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/Mips/MipsTargetHandler.h
Tue Mar 31 17:37:59 2015<br>
@@ -48,19 +48,15 @@ public:<br>
<br>
/// \brief Get '_gp' symbol atom layout.<br>
AtomLayout *getGP() {<br>
- if (!_gpAtom.hasValue()) {<br>
- auto atom = this->findAbsoluteAtom("_gp");<br>
- _gpAtom = atom != this->absoluteAtoms().end() ?
*atom : nullptr;<br>
- }<br>
+ if (!_gpAtom.hasValue())<br>
+ _gpAtom = this->findAbsoluteAtom("_gp");<br>
return *_gpAtom;<br>
}<br>
<br>
/// \brief Get '_gp_disp' symbol atom layout.<br>
AtomLayout *getGPDisp() {<br>
- if (!_gpDispAtom.hasValue()) {<br>
- auto atom = this->findAbsoluteAtom("_gp_disp");<br>
- _gpDispAtom = atom != this->absoluteAtoms().end() ?
*atom : nullptr;<br>
- }<br>
+ if (!_gpDispAtom.hasValue())<br>
+ _gpDispAtom = this->findAbsoluteAtom("_gp_disp");<br>
return *_gpDispAtom;<br>
}<br>
<br>
<br>
Modified: lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h<br>
URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=233769&r1=233768&r2=233769&view=diff">http://llvm.org/viewvc/llvm-project/lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h?rev=233769&r1=233768&r2=233769&view=diff</a><br>
==============================================================================<br>
--- lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h
(original)<br>
+++ lld/trunk/lib/ReaderWriter/ELF/OutputELFWriter.h Tue Mar
31 17:37:59 2015<br>
@@ -384,8 +384,9 @@ void
OutputELFWriter<ELFT>::finalizeDefa<br>
for (auto &sym : symbols) {<br>
uint64_t res =<br>
_ctx.linkerScriptSema().getLinkerScriptExprValue(sym.getKey());<br>
- auto a = _layout.findAbsoluteAtom(sym.getKey());<br>
- (*a)->_virtualAddr = res;<br>
+ AtomLayout *a = _layout.findAbsoluteAtom(sym.getKey());<br>
+ assert(a);<br>
+ a->_virtualAddr = res;<br>
}<br>
}<br>
<br>
<br>
<br>
_______________________________________________<br>
llvm-commits mailing list<br>
<a class="moz-txt-link-abbreviated" href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
<a moz-do-not-send="true"
href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</font>
</p>
</blockquote>
<br>
</body>
</html>