<div dir="ltr"><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Feb 27, 2014 at 10:20 PM, Rafael Espíndola <span dir="ltr"><<a href="mailto:rafael.espindola@gmail.com" target="_blank">rafael.espindola@gmail.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">On 26 February 2014 07:51, Alexey Samsonov <<a href="mailto:samsonov@google.com">samsonov@google.com</a>> wrote:<br>

> Author: samsonov<br>
> Date: Wed Feb 26 06:51:19 2014<br>
> New Revision: 202264<br>
><br>
> URL: <a href="http://llvm.org/viewvc/llvm-project?rev=202264&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=202264&view=rev</a><br>
> Log:<br>
> Move getELFDynamicSymbolIterators to a public header.<br>
><br>
> Modified:<br>
>     llvm/trunk/include/llvm/Object/ELFObjectFile.h<br>
>     llvm/trunk/tools/llvm-nm/llvm-nm.cpp<br>
><br>
> Modified: llvm/trunk/include/llvm/Object/ELFObjectFile.h<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=202264&r1=202263&r2=202264&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Object/ELFObjectFile.h?rev=202264&r1=202263&r2=202264&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/include/llvm/Object/ELFObjectFile.h (original)<br>
> +++ llvm/trunk/include/llvm/Object/ELFObjectFile.h Wed Feb 26 06:51:19 2014<br>
> @@ -1015,6 +1015,25 @@ static inline error_code getELFRelocatio<br>
>    llvm_unreachable("Object passed to getELFRelocationAddend() is not ELF");<br>
>  }<br>
><br>
> +static inline std::pair<symbol_iterator, symbol_iterator><br>
<br>
</div>Why static?<br></blockquote><div><br></div><div>Mostly for consistency with other similar functions in this header. Why is static bad here</div><div>(i.e. why do we want to emit this function in any module that includes ELFOjbectFile.h)?</div>
<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div class="HOEnZb"><div class="h5"><br>
> +getELFDynamicSymbolIterators(SymbolicFile *Obj) {<br>
> +  if (const ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj))<br>
> +    return std::make_pair(ELF->dynamic_symbol_begin(),<br>
> +                          ELF->dynamic_symbol_end());<br>
> +  if (const ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj))<br>
> +    return std::make_pair(ELF->dynamic_symbol_begin(),<br>
> +                          ELF->dynamic_symbol_end());<br>
> +  if (const ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj))<br>
> +    return std::make_pair(ELF->dynamic_symbol_begin(),<br>
> +                          ELF->dynamic_symbol_end());<br>
> +  if (const ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj))<br>
> +    return std::make_pair(ELF->dynamic_symbol_begin(),<br>
> +                          ELF->dynamic_symbol_end());<br>
> +<br>
> +  llvm_unreachable(<br>
> +      "Object passed to getELFDynamicSymbolIterators() is not ELF");<br>
> +}<br>
> +<br>
>  /// This is a generic interface for retrieving GNU symbol version<br>
>  /// information from an ELFObjectFile.<br>
>  static inline error_code GetELFSymbolVersion(const ObjectFile *Obj,<br>
><br>
> Modified: llvm/trunk/tools/llvm-nm/llvm-nm.cpp<br>
> URL: <a href="http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=202264&r1=202263&r2=202264&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/llvm/trunk/tools/llvm-nm/llvm-nm.cpp?rev=202264&r1=202263&r2=202264&view=diff</a><br>

> ==============================================================================<br>
> --- llvm/trunk/tools/llvm-nm/llvm-nm.cpp (original)<br>
> +++ llvm/trunk/tools/llvm-nm/llvm-nm.cpp Wed Feb 26 06:51:19 2014<br>
> @@ -462,30 +462,6 @@ static char getNMTypeChar(SymbolicFile *<br>
>    return Ret;<br>
>  }<br>
><br>
> -static void getDynamicSymbolIterators(SymbolicFile *Obj,<br>
> -                                      basic_symbol_iterator &Begin,<br>
> -                                      basic_symbol_iterator &End) {<br>
> -  if (ELF32LEObjectFile *ELF = dyn_cast<ELF32LEObjectFile>(Obj)) {<br>
> -    Begin = ELF->dynamic_symbol_begin();<br>
> -    End = ELF->dynamic_symbol_end();<br>
> -    return;<br>
> -  }<br>
> -  if (ELF64LEObjectFile *ELF = dyn_cast<ELF64LEObjectFile>(Obj)) {<br>
> -    Begin = ELF->dynamic_symbol_begin();<br>
> -    End = ELF->dynamic_symbol_end();<br>
> -    return;<br>
> -  }<br>
> -  if (ELF32BEObjectFile *ELF = dyn_cast<ELF32BEObjectFile>(Obj)) {<br>
> -    Begin = ELF->dynamic_symbol_begin();<br>
> -    End = ELF->dynamic_symbol_end();<br>
> -    return;<br>
> -  }<br>
> -  ELF64BEObjectFile *ELF = cast<ELF64BEObjectFile>(Obj);<br>
> -  Begin = ELF->dynamic_symbol_begin();<br>
> -  End = ELF->dynamic_symbol_end();<br>
> -  return;<br>
> -}<br>
> -<br>
>  static void dumpSymbolNamesFromObject(SymbolicFile *Obj) {<br>
>    basic_symbol_iterator IBegin = Obj->symbol_begin();<br>
>    basic_symbol_iterator IEnd = Obj->symbol_end();<br>
> @@ -494,7 +470,10 @@ static void dumpSymbolNamesFromObject(Sy<br>
>        error("File format has no dynamic symbol table", Obj->getFileName());<br>
>        return;<br>
>      }<br>
> -    getDynamicSymbolIterators(Obj, IBegin, IEnd);<br>
> +    std::pair<symbol_iterator, symbol_iterator> IDyn =<br>
> +        getELFDynamicSymbolIterators(Obj);<br>
> +    IBegin = IDyn.first;<br>
> +    IEnd = IDyn.second;<br>
>    }<br>
>    std::string NameBuffer;<br>
>    raw_string_ostream OS(NameBuffer);<br>
><br>
><br>
> _______________________________________________<br>
> llvm-commits mailing list<br>
> <a href="mailto:llvm-commits@cs.uiuc.edu">llvm-commits@cs.uiuc.edu</a><br>
> <a href="http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits</a><br>
</div></div></blockquote></div><br><br clear="all"><div><br></div>-- <br><div>Alexey Samsonov, MSK</div>
</div></div>