[Lldb-commits] [PATCH] ObjectFileELF::GetSectionHeaderInfo sets arch_spec unnecessarily

Matthew Gardiner mg11 at csr.com
Thu Jul 10 07:07:15 PDT 2014


Todd Fiala wrote:
> I'll have a look later this morning. That code indeed is intended to 
> only be run before they section header parsing. It may have evolved 
> poorly since that was my initial attempt when I thought all of files 
> had the header ABI set correctly.
>
> It is still useful as a fallback if the notes are not present.
>
> I hadn't yet seen a calling sequence where that static method was 
> called after parsing the section headers but clearly it sounds like 
> you are hitting it.

Hi Todd,

Yup, It would be cool if you could take a look.

When I invoke "target create kalimba.elf" I actually see 
ObjectFileELF::GetSectionHeaderInfo called *several times* whilst the 
target is created:

The first time...

#0 ObjectFileELF::GetSectionHeaderInfo (section_headers=std::vector of 
length 0, capacity 0, object_data=...,
#1 ObjectFileELF::GetModuleSpecifications
#2  lldb_private::ObjectFile::GetModuleSpecifications (overloaded function)
#3  lldb_private::ObjectFile::GetModuleSpecifications
#4  lldb_private::TargetList::CreateTarget

It is subsequently called again like this:

#0  ObjectFileELF::GetSectionHeaderInfo (section_headers=std::vector of 
length 18,
#1  ObjectFileELF::ParseSectionHeaders (
#2  ObjectFileELF::GetArchitecture (
#3  lldb_private::Module::GetObjectFile (
#4  lldb_private::ModuleList::GetSharedModule (
#5  lldb_private::PlatformKalimba::ResolveExecutable (
#6  lldb_private::TargetList::CreateTarget (

As you can see GSHI gets called again with a non-empty section list when 
the platform tries to resolve the executable.


Please note that I copied a lot of the PlatformLinux code into 
PlatformKalimba. So the behaviour I see is not specific to my kalimba 
implementation: loading a linux ELF built for x86_64 execution does the 
same thing:

do:

(lldb) target create ~/src/../simple/i64-hello.elf

with a breakpoint here in ObjectFileELF::GSHI:

     if (!section_headers.empty())
-->   return section_headers.size();

you'll see this call stack at some stage:
#0  ObjectFileELF::GetSectionHeaderInfo (section_headers=std::vector of 
length 35
#1  ObjectFileELF::ParseSectionHeaders (
#2  ObjectFileELF::GetArchitecture (
#3  lldb_private::Module::GetObjectFile (
#4  lldb_private::ModuleList::GetSharedModule (
#5  lldb_private::PlatformLinux::ResolveExecutable (
#6  lldb_private::TargetList::CreateTarget (

It would be great if we could prevent the arch_spec being modified 
again, after the headers are parsed. Either with my patch or something 
similar. Anyway, I'm off now, so I'll catch up sometime tomorrow.

thanks
Matt


Member of the CSR plc group of companies. CSR plc registered in England and Wales, registered number 4187346, registered office Churchill House, Cambridge Business Park, Cowley Road, Cambridge, CB4 0WZ, United Kingdom
More information can be found at www.csr.com. Keep up to date with CSR on our technical blog, www.csr.com/blog, CSR people blog, www.csr.com/people, YouTube, www.youtube.com/user/CSRplc, Facebook, www.facebook.com/pages/CSR/191038434253534, or follow us on Twitter at www.twitter.com/CSR_plc.
New for 2014, you can now access the wide range of products powered by aptX at www.aptx.com.



More information about the lldb-commits mailing list