public inbox for gdb-patches@sourceware.org
 help / color / mirror / Atom feed
From: Simon Marchi <simark@simark.ca>
To: mlimber <mlimber@gmail.com>
Cc: gdb-patches@sourceware.org
Subject: Re: [PATCH] [PR 25678] gdb crashes with "internal-error: sect_index_text not initialized" when .text
Date: Tue, 19 May 2020 10:44:54 -0400	[thread overview]
Message-ID: <f900bc14-234d-47ce-3181-1e6b6ad7809c@simark.ca> (raw)
In-Reply-To: <CAAogRRojQ4ic1xA=TKRvh2JeBd_zYQuQbukLYvvCsF0HXLKTfQ@mail.gmail.com>

On 2020-05-19 10:36 a.m., mlimber wrote:
> I have skimmed that code, but we're beyond my ken here. The things I observe in that code are:
> 
> 1. This only acts on files with 1 or 2 segments. (It gets skipped for libtestcase.so as you say.)
> 
> 2. If the segment info is 1 or 2, it sets two segment indices to refer to this one segment. Perhaps that's legit (I'm a naif when it comes to ELF details), but it struck me as odd.
> 
> 3. Line 300, where this function is called, has this curious comment:
> 
> /* This is where things get really weird... We MUST have valid
> 
> indices for the various sect_index_* members or gdb will abort.
> 
> So if for example, there is no ".text" section, we have to
> 
> accomodate that. First, check for a file with the standard
> 
> one or two segments. */

I reached the same conclusions.

> 
>  
> 
>     So I'm curious, in your libicudata.so library, how many segments there are.  That
>     can be checked with:
> 
>       $ readelf -l libicudata.so.52 | grep LOAD
> 
> 
> I have two load segments:
> 
> readelf -l libicudata.so
> 
> Elf file type is DYN (Shared object file)
> Entry point 0x2b6
> There are 6 program headers, starting at offset 64
> 
> Program Headers:
>   Type           Offset             VirtAddr           PhysAddr
>                  FileSiz            MemSiz              Flags  Align
>   LOAD           0x0000000000000000 0x0000000000000000 0x0000000000000000
>                  0x000000000166a940 0x000000000166a940  R      200000
>   LOAD           0x000000000166af30 0x000000000186af30 0x000000000186af30
>                  0x00000000000000d0 0x00000000000000d0  RW     200000
>   DYNAMIC        0x000000000166af30 0x000000000186af30 0x000000000186af30
>                  0x00000000000000d0 0x00000000000000d0  RW     8
>   NOTE           0x0000000000000190 0x0000000000000190 0x0000000000000190
>                  0x0000000000000024 0x0000000000000024  R      4
>   GNU_STACK      0x0000000000000000 0x0000000000000000 0x0000000000000000
>                  0x0000000000000000 0x0000000000000000  RW     10
>   GNU_RELRO      0x000000000166af30 0x000000000186af30 0x000000000186af30
>                  0x00000000000000d0 0x00000000000000d0  R      1

Are we inspecting the same library?  In the libicudata.so.52 you've sent, there
are three load segments:

$ readelf -l libicudata.so.52.2 | grep LOAD
  LOAD           0x000000 0x0000000000000000 0x0000000000000000 0x166a940 0x166a940 R   0x200000
  LOAD           0x166af30 0x000000000186af30 0x000000000186af30 0x0000d0 0x0000d0 RW  0x200000
  LOAD           0x166c000 0x000000000186b000 0x000000000186b000 0x000180 0x000180 RW  0x1000

I successfully reproduced the bug using your lib.  Since there's no DWARF
info, it fails in init_entry_point_info.  With my lib, it fails earlier,
when the DWARF info is read.  Anyway, it's all variations of the same bug,
some code assumes that sect_index_text is set to some valid value.<

> I note that there is an entry point specified on the second line of output, which is curious to me since there is no code in this library.

I noticed that too, shared libraries have entry points... that fields looks
mandatory in the ELF header, so it can probably just be ignored.

> 
> Perhaps if we forced an extra load segment in this .so, it would produce different results due to skipping the function cited above.
>  
> 
>     If the libicudata.so.52 is really the problematic one, I'm a bit surprised that you
>     don't always see the problem when debugging a program that uses it.
> 
> 
> I'm also not sure why it sometimes happens and sometimes doesn't. Could it be something with how or when it is loaded -- say, in a certain sequence or via a manual dlopen() instead of via dynamic linking info?

The only reason I would see is that you might not be loading the libicudata.so
you think you are loading.

Simon


  reply	other threads:[~2020-05-19 14:50 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-14 17:22 mlimber
2020-05-14 17:32 ` Simon Marchi
2020-05-14 17:48   ` mlimber
2020-05-14 17:57     ` Simon Marchi
2020-05-14 19:12       ` mlimber
2020-05-14 19:28         ` Simon Marchi
2020-05-15 18:33           ` mlimber
2020-05-16 20:39             ` mlimber
2020-05-16 21:05               ` Simon Marchi
2020-05-17  3:31             ` Simon Marchi
2020-05-17  7:01               ` Andreas Schwab
2020-05-17 14:01                 ` Simon Marchi
2020-05-17 14:08                   ` Simon Marchi
2020-05-18 18:01             ` Simon Marchi
2020-05-18 21:11               ` mlimber
2020-05-18 21:44                 ` Simon Marchi
2020-05-19 14:36                   ` mlimber
2020-05-19 14:44                     ` Simon Marchi [this message]
2020-05-20 13:24                       ` mlimber
2020-05-20 14:12                         ` Simon Marchi
2020-05-20 15:04                           ` mlimber

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f900bc14-234d-47ce-3181-1e6b6ad7809c@simark.ca \
    --to=simark@simark.ca \
    --cc=gdb-patches@sourceware.org \
    --cc=mlimber@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).