The attached patch isn't for submission, but just to help illustrate the problem. It fixes a symptom but seems kludgy to me (and not well understood). Here's the problem. I have a kernel image which is statically linked and PIE. When it gets to enable_break, it succeeds in finding "debug_base", but "debug_base" is in the text section of the main executable (ie. not in the dynamic loader, which is not actually present). Therefore we compute info->interp_text_sect_low and info->interp_text_sect_high as the start and end of the text section of the main executable. And therefore whenever we call in_solib_dynsym_resolve_code(), it returns TRUE, and therefore source level stepping won't work. This simple patch just checks to see whether "tmp_bfd" (which is supposed to be the dynamic loader) matches exec_bfd, and if so, lets interp_text_sect_low and interp_text_sect_high remain zero. Anybody got a better suggestion?