MFC r258873: Workaround lldb issue with main module base address

On FreeBSD lldb sometimes reloads the the main module's (executable's)
  symbols at the wrong address.  Work around this for now by explicitly
  reloading at base_address=0 when it happens.

  A proper fix is needed but early testers have reported this issue so
  this workaround should allow them to make further progress.

  http://llvm.org/bugs/show_bug.cgi?id=17880

Sponsored by:	DARPA, AFRL
This commit is contained in:
emaste 2014-03-19 13:16:58 +00:00
parent 0c69499498
commit 7327a493ea

View File

@ -454,6 +454,17 @@ DynamicLoaderPOSIXDYLD::LoadAllCurrentModules()
const char *module_path = I->path.c_str();
FileSpec file(module_path, false);
ModuleSP module_sp = LoadModuleAtAddress(file, I->link_addr, I->base_addr);
#ifdef __FreeBSD__ // llvm.org/pr17880
if (module_sp == executable)
{
Log *log(GetLogIfAnyCategoriesSet(LIBLLDB_LOG_DYNAMIC_LOADER));
if (log)
log->Printf("DynamicLoaderPOSIXDYLD::%s reloading main module, ignoring rendezvous base addr %" PRIx64,
__FUNCTION__, I->base_addr);
ModuleSP module_sp = LoadModuleAtAddress(file, I->link_addr, 0);
}
#endif
if (module_sp.get())
{
module_list.Append(module_sp);