[lldb-dev] Load fat executable when uncertain about the target process' architecture

Sebastien Metrot meeloo at gmail.com
Thu Oct 10 09:22:16 PDT 2013

Hi Carlo,

Here is how I enumerate the available archs in my code:

 SBModuleSpecList specs = SBModuleSpecList::GetModuleSpecifications(Path);
 const size_t count = specs.GetSize();
 for (size_t i = 0; i < count; ++i)
   SBModuleSpec module_spec = specs.GetSpecAtIndex(i);
   const char *triple = module_spec.GetTriple();
   std::vector<nglString> tokens;
   nglString triplestr = triple;
   triplestr.Tokenize(tokens, '-');
   NGL_OUT("%s -> '%s' '%s' '%s'\n", triple, tokens[0].GetChars(), tokens[1].GetChars(), tokens[2].GetChars());

nglString is a custom string type that I use but I'll get the idea of how it works I guess.



On 10 Oct 2013, at 17:13 , Carlo Kok <ck at remobjects.com> wrote:

> I use:
> m_target = m_debugger.CreateTarget(fn, archd, NULL, true, m_error);
> m_process = m_target.ConnectRemote(SBListener(), target, NULL, m_error);
> (fn points to an executable with x86 and x86_64 in it. archd this x86_64-apple-ios)
> However the target ends up being a 32bits process. At this point the ABI code loads 64bits and ends up crashing in some 64bits register loading code in ABISysV_x86_64.h:
> argument_register_ids[0] = reg_ctx->GetRegisterInfoByName("rdi", 0)->kinds[eRegisterKindLLDB];
> the problem I'm having is that I don't know what architecture the target will be before connecting. Passing no arch to CreateTarget gives this error:
> "'App10' doesn't contain any 'ios-simulator' platform architectures"
> I do know GDB has (and gets called for) a command that asks the process architecture, but this doesn't seem to be used to get the abi (and probably more things), what can I do in this case?
> -- 
> Carlo Kok
> RemObjects Software
> _______________________________________________
> lldb-dev mailing list
> lldb-dev at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/lldb-dev

More information about the lldb-dev mailing list