Re: [PATCH] [PR 25678] gdb crashes with "internal-error: sect_index_text not initialized" when .text

mlimber
2020-05-18T21:11:22Z

On Mon, May 18, 2020 at 2:01 PM Simon Marchi <simark@simark.ca> wrote:

> On 2020-05-15 2:33 p.m., mlimber wrote:
> > Hrm. I've tried a number of smaller programs to repro this, including
> the steps in the comments using the attachment or building my own, X11,
> OpenGL, libicu tests, and also sample Qt apps that link `libicudata.so`.
> Alas, I cannot recreate it in small-ish form.
> >
> > I've tried various combinations of these on Ubuntu 14.04 x64 building
> with gcc 4.9 and also Ubuntu 20.04 x64 with gcc 9.3.
> >
> > I can reliably repro it with my full-scale Qt app, but I can't submit
> that. When I debug gdb itself, I see where it is going awry in my app --
> with libicudata.so.52, which is a weird data-only library.
>
> Could you please tell us where this particular libicudata.so.52 comes
> from? I'd like to compare
> it with other libicudata.so files to understand what's so special about
> this one.
>
> Simon
>

I built libicudata.so.52.2 from source (no customizations; just needed the
particular version my version of Qt was looking for, and I modified the
RPATH of the three ICU .so's to look in $ORIGIN for their dependencies
since I distribute my app with its dependencies). Note that someone else
also reported the libicudata.so being the culprit and that I have not yet
triggered the error with the libicudata.so in a smaller program.

The build steps for the offending .so right out of the build log for the
library is:
```
gcc -D_REENTRANT -DU_HAVE_ELF_H=1 -DU_HAVE_ATOMIC=1
-DU_ATTRIBUTE_DEPRECATED= -O2 -std=c99 -Wall -pedantic -Wshadow
-Wpointer-arith -Wmissing-prototypes -Wwrite-strings -c -I../common
-I../common -DPIC -fPIC -o ./out/tmp/icudt52l_dat.o ./out/tmp/icudt52l_dat.s
gcc -O2 -std=c99 -Wall -pedantic -Wshadow -Wpointer-arith
-Wmissing-prototypes -Wwrite-strings -static-libstdc++ -shared
-Wl,-Bsymbolic -nodefaultlibs -nostdlib -o ../lib/libicudata.so.52.2
./out/tmp/icudt52l_dat.o -Wl,-soname -Wl,libicudata.so.52 -Wl,-Bsymbolic
```

The assembly file is generated at build-time and is of the form:
```
.globl icudt52_dat
.section .note.GNU-stack,"",%progbits
.section .rodata
.balign 16
.type icudt52_dat,%object
icudt52_dat:

.long
0x27DA0080,0x14,0x020000,0x446E6D43,1,3,0x706F4320,0x67697279,0x28207468,0x32202943,0x2C333130,0x746E4920,0x616E7265,0x6E6F6974,0x42206C61,0x6E697375,0x20737365,0x6863614D,0x73656E69,0x726F4320,0x61726F70,0x6E6F6974,0x646E6120,0x68746F20,0x2E737265,0x6C6C4120,0x67695220,0x20737468,0x65736552,0x64657672,0x202E,0
.long
0x0C64,0x6324,0x018370,0x6334,0x01B900,0x6347,0x01B9A0,0x635A,0x01BA00,0x636B,0x01C580,0x637F,0x01C5E0,0x638F,0x01CF90,0x63A2,0x01CFF0,0x63B2,0x020420,0x63C5,0x020480,0x63D5,0x026160,0x63E9,0x0261C0,0x63FC,0x026220,0x640F,0x026280,0x6422,0x0262E0,0x6435
[snip lots more data]
```
I can make the binary of the .so available to you if desired (it is 23 MB).

M