<div dir="ltr">Hi Greg<div><br></div><div>My comments are inlined:<br><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Aug 9, 2016 at 7:01 PM, Greg Clayton <span dir="ltr"><<a href="mailto:gclayton@apple.com" target="_blank">gclayton@apple.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class=""><br>
> On Aug 9, 2016, at 9:01 AM, Abhishek Aggarwal via lldb-dev <<a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a>> wrote:<br>
><br>
> Hello all<br>
><br>
> I have following 2 queries:<br>
><br>
> 1. Can SB APIs of LLDB provide information regarding the loadable Code Segment (r-xp part of /proc/$PID/maps file in case of Linux) of a debugged process? The information I am looking for is start address and end address of the loadable code segment of the debugged process. I know that SBModule class can provide all the Sections of the object file via SBSection class. However, I couldn't find any API in this class that can provide the information I need.<br>
<br>
</span>There can be many sections that contain code. I am not sure what you mean by "the loadable code segment of the debugged process". ".text" in ELF is just a section, but that doesn't mean that it will be the only section that contains code. Same goes for mach-o files. SBSection doesn't currently expose the permissions of sections, but we can easily add that since lldb_private::Section has permissions that I added about a month ago:<br>
<br>
    //----------------------------<wbr>------------------------------<wbr>--------<br>
    /// Get the permissions as OR'ed bits from lldb::Permissions<br>
    //----------------------------<wbr>------------------------------<wbr>--------<br>
    uint32_t<br>
    lldb_private::Section::<wbr>GetPermissions() const;<br>
<br>
    //----------------------------<wbr>------------------------------<wbr>--------<br>
    /// Set the permissions using bits OR'ed from lldb::Permissions<br>
    //----------------------------<wbr>------------------------------<wbr>--------<br>
    void<br>
    lldb_private::Section::<wbr>SetPermissions(uint32_t permissions);<br>
<br>
So I would think that you would want to iterate over the sections and check their permissions and use any that are read + execute from the main executable?<br>
<span class=""><br></span></blockquote><div><br></div><div>By "Loadable Code Segment" I wanted to refer to Segments of an elf file having type PT_LOAD and containing executable machine instructions. However, as you said I need all the sections that are read+execute. Thanks for pointing about the permission API for sections. I can add an API of getting Permissions to SBSection class and upload it for review soon.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><span class="">
><br>
> 2. SBSection::GetSectionType() API returns an enum 'SectionType'. Does SectionType represent the section types as specified by different object file formats (Mach-O, PECOFF, ELF)?<br>
<br>
</span>It does in an agnostic way. You can watch for any sections that have eSectionTypeCode as their type from the main executable.<br>
<span class=""><br>
><br>
> As an example, ELF specification specifies section types like SHT_NULL, SHT_PROGBITS, SHT_RELA, SHT_HASH, SHT_NOTE, SHT_NOBITS etc. However, SectionType enum doesn't contain all these types. Hence, enum SectionType is either a mix of all section types of different object file formats or it is a custom type of LLDB. I will appreciate any comment on this.<br>
<br>
</span>Again, we aren't trying to expose all of the different bits from ELF and Mach-o and COFF directly, we try to intelligently encapsulate the data by making more general definitions. If you feel that a SHT_XXX value should have its own new SectionType, we can discus that. The section type detections inside of ObjectFileELF is not that great, so feel free to improve the ObjectFileELF::CreateSections(<wbr>) function to "do the right thing". Anything that is SHT_PROGBITS should probably be eSectionTypeCode. It looks like just ".text" is being set to eSectionTypeCode right now.<br>
<br></blockquote><div><br></div><div>This is what I wanted to confirm. I was not sure whether eSectionTypeCode implies those sections which have read+execute permissions or those sections that have  section type as SHT_PROGBITS (in case of ELF format). Thanks for clarifying. I can try to fix it for ObjectFileELF::CreateSections(<wbr>) function.</div><div> <br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">
As an example I would assume that:<br>
<br>
SHT_NULL -> eSectionTypeOther (if this section is even exposed, and I don't believe it is)<br>
SHT_PROGBITS -> eSectionTypeCode<br>
SHT_RELA -> eSectionTypeELFRelocationEntri<wbr>es (although these definition should never have had ELF in the name, these enums are supposed to be agnostic...)<br>
SHT_HASH -> eSectionTypeOther<br>
SHT_NOTE -> eSectionTypeOther<br>
SHT_NOBITS -> eSectionTypeOther<br>
><br>
><br>
> Thanks<br>
> Abhishek Aggarwal<br>
><br>
><br>
> ______________________________<wbr>_________________<br>
> lldb-dev mailing list<br>
> <a href="mailto:lldb-dev@lists.llvm.org">lldb-dev@lists.llvm.org</a><br>
> <a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-dev" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/<wbr>mailman/listinfo/lldb-dev</a><br>
<br>
</blockquote></div><br></div></div></div>