This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
Re: Segmentation fault in __ctype_init
- From: Dmitry Mikushin <dmitry at kernelgen dot org>
- To: "libc-help at sourceware dot org" <libc-help at sourceware dot org>
- Date: Fri, 15 Nov 2013 19:08:16 +0100
- Subject: Re: Segmentation fault in __ctype_init
- Authentication-results: sourceware.org; auth=none
- References: <52863E2C dot 6080901 at kernelgen dot org> <52865C00 dot 4000509 at kernelgen dot org>
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Oh, never mind, it was just renamed in GCC:
2011-05-04 Chris Demetriou <cgd@google.com>
* config/i386/morestack.S (__i686.get_pc_thunk.bx): Rename to...
(__x86.get_pc_thunk.bx): ...this.
(__morestack): Adjust for rename, remove undef of __i686.
On 11/15/2013 06:38 PM, Dmitry Mikushin wrote:
> I build both GLIBC-s with the same configure line, but with
> different compilers. What could be the source of such difference?
>
> 1) Works fine:
>
> Dump of assembler code for function __GI___ctype_init: 0xf7e4fe1b
> <+0>: push %ebx 0xf7e4fe1c <+1>: call 0xf7f51692
> <__i686.get_pc_thunk.bx> 0xf7e4fe21 <+6>: add $0x17c1d3,%ebx =>
> 0xf7e4fe27 <+12>: mov -0x14c(%ebx),%eax 0xf7e4fe2d <+18>: mov
> %gs:(%eax),%eax 0xf7e4fe30 <+21>: mov (%eax),%edx 0xf7e4fe32
> <+23>: mov 0x24(%edx),%ecx 0xf7e4fe35 <+26>: add $0x100,%ecx
> 0xf7e4fe3b <+32>: mov -0x124(%ebx),%edx 0xf7e4fe41 <+38>: mov
> %ecx,%gs:(%edx) 0xf7e4fe44 <+41>: mov (%eax),%edx 0xf7e4fe46
> <+43>: mov 0x28(%edx),%ecx 0xf7e4fe49 <+46>: add $0x200,%ecx
> 0xf7e4fe4f <+52>: mov -0xb4(%ebx),%edx 0xf7e4fe55 <+58>: mov
> %ecx,%gs:(%edx) 0xf7e4fe58 <+61>: mov (%eax),%eax 0xf7e4fe5a
> <+63>: mov 0x30(%eax),%edx 0xf7e4fe5d <+66>: add $0x200,%edx
> 0xf7e4fe63 <+72>: mov -0x84(%ebx),%eax 0xf7e4fe69 <+78>: mov
> %edx,%gs:(%eax) 0xf7e4fe6c <+81>: pop %ebx 0xf7e4fe6d <+82>:
> ret End of assembler dump.
>
> 2) Crashes (sigsegv)
>
> Dump of assembler code for function __GI___ctype_init: 0xf7e4a277
> <+0>: push %ebx 0xf7e4a278 <+1>: call 0xf7f46763
> <__x86.get_pc_thunk.bx> 0xf7e4a27d <+6>: add $0x181d3f,%ebx
> 0xf7e4a283 <+12>: mov -0x170(%ebx),%eax 0xf7e4a289 <+18>: mov
> %gs:(%eax),%eax => 0xf7e4a28c <+21>: mov (%eax),%edx 0xf7e4a28e
> <+23>: mov 0x24(%edx),%ecx 0xf7e4a291 <+26>: add $0x100,%ecx
> 0xf7e4a297 <+32>: mov -0x164(%ebx),%edx 0xf7e4a29d <+38>: mov
> %ecx,%gs:(%edx) 0xf7e4a2a0 <+41>: mov (%eax),%edx 0xf7e4a2a2
> <+43>: mov 0x28(%edx),%ecx 0xf7e4a2a5 <+46>: add $0x200,%ecx
> 0xf7e4a2ab <+52>: mov -0x15c(%ebx),%edx 0xf7e4a2b1 <+58>: mov
> %ecx,%gs:(%edx) 0xf7e4a2b4 <+61>: mov (%eax),%eax 0xf7e4a2b6
> <+63>: mov 0x30(%eax),%edx 0xf7e4a2b9 <+66>: add $0x200,%edx
> 0xf7e4a2bf <+72>: mov -0x160(%ebx),%eax 0xf7e4a2c5 <+78>: mov
> %edx,%gs:(%eax) 0xf7e4a2c8 <+81>: pop %ebx 0xf7e4a2c9 <+82>:
> ret End of assembler dump.
>
> Thanks, - D.
>
> On 11/15/2013 04:30 PM, Dmitry Mikushin wrote:
>
>> Dear all,
>
>> I'm encountering the following segfault when running 32-bit
>> glibc. Is it a known problem?
>
>> Thanks, - D.
>
>> 0xf7e3dd7b in __GI___ctype_init () at ctype-info.c:31 31 *bp
>> = (const uint16_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_CLASS) +
>> 128; (gdb) bt #0 0xf7e3dd7b in __GI___ctype_init () at
>> ctype-info.c:31 #1 0xf7fe97aa in call_init (l=0xf7fdacb0,
>> argc=argc@entry=1, argv=argv@entry=0xffffd0f4,
>> env=env@entry=0xffffd0fc) at dl-init.c:69 #2 0xf7fe98e4 in
>> call_init (env=0xffffd0fc, argv=0xffffd0f4, argc=1, l=<optimized
>> out>) at dl-init.c:36 #3 _dl_init (main_map=0xf7ffd900, argc=1,
>> argv=0xffffd0f4, env=0xffffd0fc) at dl-init.c:132 #4 0xf7fdb92f
>> in _dl_start_user () from
>> /home/marcusmae/rpmbuild/kernelgen/head_llvm192445_i686-linux-gnu_x86_64-linux-gnu_debug/INSTALL/lib/gcc/x86_64-unknown-linux-gnu/4.8.3/32/ld-linux.so.2
>
>>
>
> (gdb) list
>> 26 27 void 28 __ctype_init (void) 29 { 30 const
>> uint16_t **bp = __libc_tsd_address (const uint16_t *, CTYPE_B);
>> 31 *bp = (const uint16_t *) _NL_CURRENT (LC_CTYPE,
>> _NL_CTYPE_CLASS) + 128; 32 const int32_t **up =
>> __libc_tsd_address (const int32_t *, CTYPE_TOUPPER); 33 *up
>> = ((int32_t *) _NL_CURRENT (LC_CTYPE, _NL_CTYPE_TOUPPER) + 128);
>> 34 const int32_t **lp = __libc_tsd_address (const int32_t *,
>> CTYPE_TOLOWER); 35 *lp = ((int32_t *) _NL_CURRENT (LC_CTYPE,
>> _NL_CTYPE_TOLOWER) + 128);
>
>
>
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: Using GnuPG with undefined - http://www.enigmail.net/
iQEcBAEBAgAGBQJShmMQAAoJENwm3+sbf/pMfG4H+QFXgiVMbIQ7ZA0MOsCGE4AO
qGaWyrcQxqpETPuA2Cn6wVglAaCykKz6tZo4JxO0gjJ3zVHPD3SUrxae2o4cKY9J
oK+mjUXvvntLZ9H5aRvwi181ZMy9J2Kqkqi8Sw9QSUQApgkWpq+QVmC8SlgATBFi
XsRe0pKQxSkdJAA+vCF+XxffpqBhuiW9pq9fJ/EFJABGNhE2tB/pg+Jcqd1YU3dc
BWiBWnuA9B9xaQgNdeAnBvvepkmCpjmi+FrGDQvcwXQ4/GvnY49AIWOsNlLurAMp
m3aaRVXCrMt/bhv5IepIPsLPzAAoDtZGMxjXBDJjQ+BPeI7Y1kCcYXseGxRpwpU=
=R3sT
-----END PGP SIGNATURE-----