[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#1017113: glibc FTBFS on Alpha: segfault in setlocale



Source: glibc
Version: 2.34
Severity: important
User: debian-alpha@lists.debian.org
Usertags: ftbfs
Justification: Fails to build from source but built in the past.

glibc 2.34 FTBFS on Alpha with a segfault occuring during building
locales.  From the build log:

Generating locale en_US.UTF-8: this might take a while...
../localedata/gen-locale.sh: line 29: 12551 Segmentation fault      ${localedef_before_env} ${run_program_env} I18NPATH=../localedata ${localedef_after_env} $flags -f $charmap -i $input ${common_objpfx}localedata/$out
Charmap: "UTF-8" Inputfile: "en_US" Outputdir: "en_US.UTF-8" failed
/bin/bash: line 4: /<<PKGBUILDDIR>>/build-tree/alpha-libc/localedata/en_US.UTF-8/LC_CTYPE.test-result: No such file or directory
make[3]: *** [../gen-locales.mk:17: /<<PKGBUILDDIR>>/build-tree/alpha-libc/localedata/en_US.UTF-8/LC_CTYPE] Error 1
make[3]: Leaving directory '/<<PKGBUILDDIR>>/iconv'


In the build directory I reran ./debian/rule build-arch to get a
coredump.  Debugging reports:

(sid)mjc@alpha:glibc-2.34$ gdb build-tree/alpha-libc/elf/ld.so iconv/core-23033-\!build\!glibc-hXmOs0\!glibc-2.34\!build-tree\!alpha-libc\!elf\!ld.so 
GNU gdb (Debian 12.1-3) 12.1
Copyright (C) 2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "alpha-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<https://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from build-tree/alpha-libc/elf/ld.so...

warning: core file may not match specified executable file.
[New LWP 23033]

warning: Unexpected size of section `.reg/23033' in core file.

warning: Unable to find libthread_db matching inferior's thread library, thread debugging will not be available.
Core was generated by `/build/glibc-hXmOs0/glibc-2.34/build-tree/alpha-libc/elf/ld-linux.so.2 --librar'.
Program terminated with signal SIGSEGV, Segmentation fault.

warning: Unexpected size of section `.reg/23033' in core file.
#0  0x00000200000f6384 in sysmalloc (nb=656, av=0x20000252908 <main_arena>) at ./malloc/malloc.c:2784
2784	                  set_head (av->top, (snd_brk - aligned_brk + correction) | PREV_INUSE);
(gdb) list
2779	
2780	              /* Adjust top based on results of second sbrk */
2781	              if (snd_brk != (char *) (MORECORE_FAILURE))
2782	                {
2783	                  av->top = (mchunkptr) aligned_brk;
2784	                  set_head (av->top, (snd_brk - aligned_brk + correction) | PREV_INUSE);
2785	                  av->system_mem += correction;
2786	
2787	                  /*
2788	                     If not the first time through, we either have a
(gdb) print snd_brk
$1 = 0x20000064000 "\002"
(gdb) print aligned_brk
$2 = 0x20000042000 "\177ELF\002\001\001"
(gdb) print correction
$3 = 0
(gdb) print av->top
$4 = (mchunkptr) 0x20000042000
(gdb) print *av->top
$5 = {mchunk_prev_size = 282584257676671, mchunk_size = 0, fd = 0x190260003, bk = 0x2ce40, fd_nextsize = 0x40, 
  bk_nextsize = 0xb9d550}
(gdb) bt full
#0  0x00000200000f6384 in sysmalloc (nb=656, av=0x20000252908 <main_arena>) at ./malloc/malloc.c:2784
        old_top = <optimized out>
        old_size = 0
        old_end = <optimized out>
        size = <optimized out>
        brk = <optimized out>
        correction = 0
        snd_brk = 0x20000064000 "\002"
        front_misalign = <optimized out>
        end_misalign = <optimized out>
        aligned_brk = 0x20000042000 "\177ELF\002\001\001"
        p = <optimized out>
        remainder = <optimized out>
        remainder_size = <optimized out>
        pagesize = <optimized out>
        tried_mmap = false
        __PRETTY_FUNCTION__ = "sysmalloc"
#1  0x00000200000f74d0 in _int_malloc (av=0x20000252908 <main_arena>, bytes=640) at ./malloc/malloc.c:4290
        p = <optimized out>
        iters = <optimized out>
        nb = 656
        idx = 42
        bin = 0xffffffffffffe000
        victim = 0x1fff
        size = <error reading variable size (Cannot access memory at address 0x2007)>
        victim_index = <optimized out>
        remainder = <optimized out>
        remainder_size = <optimized out>
        block = 409600
        bit = <optimized out>
        map = <optimized out>
        fwd = <optimized out>
        bck = <optimized out>
        tcache_unsorted_count = <optimized out>
        tcache_nb = <optimized out>
        tc_idx = 39
        return_cached = <optimized out>
        __PRETTY_FUNCTION__ = "_int_malloc"
#2  0x00000200000f7624 in tcache_init () at ./malloc/malloc.c:3128
        ar_ptr = 0x20000252908 <main_arena>
        victim = <optimized out>
        bytes = <optimized out>
#3  0x00000200000f8050 in tcache_init () at ./malloc/malloc.c:3124
        ar_ptr = <optimized out>
        victim = 0x0
        bytes = 640
        __futex = <optimized out>
        __atg2_result = <optimized out>
        __prev = <optimized out>
        __cmp = <optimized out>
        __tmp = <optimized out>
        __snew = <optimized out>
        __addr64 = <optimized out>
        __prev = <optimized out>
        __cmp = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
        __tmp = <optimized out>
        __snew = <optimized out>
        __addr64 = <optimized out>
        __prev = <optimized out>
        __cmp = <optimized out>
        __prev = <optimized out>
        __cmp = <optimized out>
        __futex = <optimized out>
        __private = <optimized out>
        __oldval = <optimized out>
        __atg1_result = <optimized out>
        __tmp = <optimized out>
        __addr64 = <optimized out>
        __sval = <optimized out>
        __ret = <optimized out>
        __tmp = <optimized out>
        __addr64 = <optimized out>
        __sval = <optimized out>
        __ret = <optimized out>
        __tmp = <optimized out>
        __ret = <optimized out>
        __tmp = <optimized out>
        __ret = <optimized out>
#4  __GI___libc_malloc (bytes=64) at ./malloc/malloc.c:3189
        ar_ptr = <optimized out>
        victim = <optimized out>
        tbytes = <optimized out>
        tc_idx = <optimized out>
        __PRETTY_FUNCTION__ = "__libc_malloc"
#5  0x000002000010053c in __argz_create_sep (
    string=0x11fdaff51 "/build/glibc-hXmOs0/glibc-2.34/build-tree/alpha-libc/localedata", delim=<optimized out>, 
    argz=0x11fdaeab8, len=0x11fdaeab0) at ./string/argz-ctsep.c:35
        rp = <optimized out>
        wp = <optimized out>
        nlen = 64
#6  0x000002000007d970 in __GI_setlocale (locale=0x12004204b "", category=5) at ./locale/setlocale.c:255
        locpath_var = 0x20000064000 "\002"
        composite = <optimized out>
        locale_path = warning: Hit heuristic-fence-post without finding enclosing function for address 0x120002d38
This warning occurs if you are debugging a function without any symbols
(for example, in a stripped executable).  In that case, you may wish to
increase the size of the search with the `set heuristic-fence-post' command.

Otherwise, you told GDB there was a function where there isn't one, or
(more likely) you have encountered a bug in GDB.
0x0
        locale_path_len = 0
        locale_path = <optimized out>
        locale_path_len = <optimized out>
        locpath_var = <optimized out>
        composite = <optimized out>
        error_return = <optimized out>
        abort_single = <optimized out>
        newnames = <optimized out>
        newdata = <optimized out>
        locale_copy = <optimized out>
--Type <RET> for more, q to quit, c to continue without paging--
        np = <optimized out>
        cp = <optimized out>
        cnt = <optimized out>
        newdata = <optimized out>
        newname = <optimized out>
#7  __GI_setlocale (category=<optimized out>, locale=0x12004204b "") at ./locale/setlocale.c:217
        locale_path = <optimized out>
        locale_path_len = <optimized out>
        locpath_var = <optimized out>
        composite = <optimized out>
        error_return = <optimized out>
        abort_single = <optimized out>
        newnames = <optimized out>
        newdata = <optimized out>
        locale_copy = <optimized out>
        np = <optimized out>
        cp = <optimized out>
        cnt = <optimized out>
        newdata = <optimized out>
        newname = <optimized out>
#8  0x0000000120002d38 in ?? ()
No symbol table info available.
Backtrace stopped: frame did not save the PC


Disassembly about the segmentation violation point:
   0x00000200000f630c <+1564>:	lda	t2,16
   0x00000200000f6310 <+1568>:	subq	t2,t0,t2
   0x00000200000f6314 <+1572>:	addq	t7,t2,s4
   0x00000200000f6318 <+1576>:	addq	t2,s3,t2
   0x00000200000f631c <+1580>:	addq	s5,t2,s5
   0x00000200000f6320 <+1584>:	addq	t7,s5,t3
   0x00000200000f6324 <+1588>:	addq	t3,t4,s5
   0x00000200000f6328 <+1592>:	and	s5,t5,t0
   0x00000200000f632c <+1596>:	subq	t2,t3,t2
   0x00000200000f6330 <+1600>:	addq	t0,t2,s5
   0x00000200000f6334 <+1604>:	ldah	a3,-6(gp)
   0x00000200000f6338 <+1608>:	cmplt	s5,0,t0
   0x00000200000f633c <+1612>:	lda	a3,24047(a3)
   0x00000200000f6340 <+1616>:	bne	t0,0x200000f647c <sysmalloc+1932>
   0x00000200000f6344 <+1620>:	unop	
   0x00000200000f6348 <+1624>:	stq	t1,128(sp)
   0x00000200000f634c <+1628>:	mov	s5,a0
   0x00000200000f6350 <+1632>:	stq	s5,120(sp)
   0x00000200000f6354 <+1636>:	bsr	ra,0x200000f5118 <__glibc_morecore+8>
   0x00000200000f6358 <+1640>:	unop	
   0x00000200000f635c <+1644>:	ldq	t1,128(sp)
   0x00000200000f6360 <+1648>:	unop	
   0x00000200000f6364 <+1652>:	ldq	t2,120(sp)
   0x00000200000f6368 <+1656>:	mov	v0,t6
   0x00000200000f636c <+1660>:	beq	v0,0x200000f6510 <sysmalloc+2080>
   0x00000200000f6370 <+1664>:	subq	t6,s4,t0
   0x00000200000f6374 <+1668>:	ldq	t3,2184(s2)
   0x00000200000f6378 <+1672>:	addq	t0,t2,t0
   0x00000200000f637c <+1676>:	stq	s4,96(s2)
   0x00000200000f6380 <+1680>:	or	t0,0x1,t0
=> 0x00000200000f6384 <+1684>:	stq	t0,8(s4)
   0x00000200000f6388 <+1688>:	addq	s5,t3,t0
   0x00000200000f638c <+1692>:	stq	t0,2184(s2)
   0x00000200000f6390 <+1696>:	beq	s3,0x200000f5e0c <sysmalloc+284>

So it's writing register t0 to the address in s4 plus 8*4.

(gdb) i r  
v0             0x20000064000       2199023665152
t0             0x22001             139265
t1             0x20000252968       2199025690984
t2             0x0                 0
t3             0x22000             139264
t4             0x1fff              8191
t5             0xffffffffffffe000  -8192
t6             0x20000064000       2199023665152
t7             0x20000042000       2199023525888
s0             0x20000252908       2199025690888
s1             0x290               656
s2             0x20000252908       2199025690888
s3             0x0                 0
s4             0x20000042000       2199023525888
s5             0x0                 0
fp             0x2b0               688
a0             0x0                 0
a1             0x20000252908       2199025690888
a2             0xa                 10
a3             0x2000020145f       2199025357919
a4             0x1                 1
a5             0x200000046e0       2199023273696
t8             0x1                 1
t9             0x1                 1
t10            0x20000046978       2199023544696
t11            0x2b0               688
ra             0x200000f6358       2199024264024
t12            0x6e                110
at             0x615d87b5          1633519541
gp             0x2000025b670       0x2000025b670 <_res_hconf>
sp             0x11fdae7c0         0x11fdae7c0
pc             0x200000f6384       0x200000f6384 <sysmalloc+1684>

And we can see s4 is set to 0x20000042000.

(gdb) maintenance info sections
Exec file: `/build/glibc-hXmOs0/glibc-2.34/build-tree/alpha-libc/elf/ld.so', file type elf64-alpha.
 [0]      0x200000001c8->0x200000001ec at 0x000001c8: .note.gnu.build-id ALLOC LOAD READONLY DATA HAS_CONTENTS
 [1]      0x200000001f0->0x20000000580 at 0x000001f0: .hash ALLOC LOAD READONLY DATA HAS_CONTENTS
 [2]      0x20000000580->0x2000000075c at 0x00000580: .gnu.hash ALLOC LOAD READONLY DATA HAS_CONTENTS
 [3]      0x20000000760->0x20000000b08 at 0x00000760: .dynsym ALLOC LOAD READONLY DATA HAS_CONTENTS
 [4]      0x20000000b08->0x20000000dbe at 0x00000b08: .dynstr ALLOC LOAD READONLY DATA HAS_CONTENTS
 [5]      0x20000000dbe->0x20000000e0c at 0x00000dbe: .gnu.version ALLOC LOAD READONLY DATA HAS_CONTENTS
 [6]      0x20000000e10->0x20000000efc at 0x00000e10: .gnu.version_d ALLOC LOAD READONLY DATA HAS_CONTENTS
 [7]      0x20000000f00->0x20000001080 at 0x00000f00: .rela.dyn ALLOC LOAD READONLY DATA HAS_CONTENTS
 [8]      0x20000001080->0x200000010e0 at 0x00001080: .rela.plt ALLOC LOAD READONLY DATA HAS_CONTENTS
 [9]      0x200000010e0->0x20000001114 at 0x000010e0: .plt ALLOC LOAD READONLY CODE HAS_CONTENTS
 [10]     0x20000001120->0x20000026690 at 0x00001120: .text ALLOC LOAD READONLY CODE HAS_CONTENTS
 [11]     0x20000026690->0x2000002afc0 at 0x00026690: .rodata ALLOC LOAD READONLY DATA HAS_CONTENTS
 [12]     0x2000002afc0->0x2000002b824 at 0x0002afc0: .eh_frame_hdr ALLOC LOAD READONLY DATA HAS_CONTENTS
 [13]     0x2000002b828->0x2000002e1dc at 0x0002b828: .eh_frame ALLOC LOAD READONLY DATA HAS_CONTENTS
 [14]     0x2000003f1f8->0x2000003fe80 at 0x0002f1f8: .data.rel.ro ALLOC LOAD DATA HAS_CONTENTS
 [15]     0x2000003fe80->0x20000040000 at 0x0002fe80: .dynamic ALLOC LOAD DATA HAS_CONTENTS
 [16]     0x20000040000->0x20000040020 at 0x00030000: .data ALLOC LOAD DATA HAS_CONTENTS
 [17]     0x20000040020->0x20000040080 at 0x00030020: .got ALLOC LOAD DATA HAS_CONTENTS
 [18]     0x20000040080->0x200000410d8 at 0x00030080: .sdata ALLOC LOAD DATA HAS_CONTENTS
 [19]     0x200000410d8->0x200000411f8 at 0x000310d8: .sbss ALLOC
 [20]     0x200000411f8->0x20000041268 at 0x000310d8: .bss ALLOC
 [21]     0x00000000->0x0000001e at 0x000310d8: .comment READONLY HAS_CONTENTS
 [22]     0x00000000->0x00001420 at 0x00031100: .debug_aranges READONLY HAS_CONTENTS
 [23]     0x00000000->0x0007862f at 0x00032520: .debug_info READONLY HAS_CONTENTS
 [24]     0x00000000->0x00010e18 at 0x000aab4f: .debug_abbrev READONLY HAS_CONTENTS
 [25]     0x00000000->0x0001ea7c at 0x000bb967: .debug_line READONLY HAS_CONTENTS
 [26]     0x00000000->0x0000673f at 0x000da3e3: .debug_str READONLY HAS_CONTENTS
 [27]     0x00000000->0x00001195 at 0x000e0b22: .debug_line_str READONLY HAS_CONTENTS
 [28]     0x00000000->0x0001c4cf at 0x000e1cb7: .debug_loclists READONLY HAS_CONTENTS
 [29]     0x00000000->0x0000412c at 0x000fe186: .debug_rnglists READONLY HAS_CONTENTS
Core file: `/build/glibc-hXmOs0/glibc-2.34/iconv/core-23033-!build!glibc-hXmOs0!glibc-2.34!build-tree!alpha-libc!elf!ld.so', 
        file type elf64-alpha.
 [0]      0x00000000->0x000008e4 at 0x00000350: note0 READONLY HAS_CONTENTS
 [1]      0x00000000->0x00000108 at 0x000003d4: .reg/23033 HAS_CONTENTS
 [2]      0x00000000->0x00000108 at 0x000003d4: .reg HAS_CONTENTS
 [3]      0x00000000->0x00000080 at 0x00000594: .note.linuxcore.siginfo/23033 HAS_CONTENTS
 [4]      0x00000000->0x00000080 at 0x00000594: .note.linuxcore.siginfo HAS_CONTENTS
 [5]      0x00000000->0x00000160 at 0x00000628: .auxv HAS_CONTENTS
 [6]      0x00000000->0x00000383 at 0x0000079c: .note.linuxcore.file/23033 HAS_CONTENTS
 [7]      0x00000000->0x00000383 at 0x0000079c: .note.linuxcore.file HAS_CONTENTS
 [8]      0x00000000->0x00000100 at 0x00000b34: .reg2/23033 HAS_CONTENTS
 [9]      0x00000000->0x00000100 at 0x00000b34: .reg2 HAS_CONTENTS
 [10]     0x11fd8e000->0x11fdb0000 at 0x00002000: load1 ALLOC LOAD HAS_CONTENTS
 [11]     0x120000000->0x120002000 at 0x00024000: load2a ALLOC LOAD READONLY CODE HAS_CONTENTS
 [12]     0x120002000->0x120050000 at 0x00026000: load2b ALLOC READONLY CODE
 [13]     0x12005e000->0x120060000 at 0x00026000: load3 ALLOC LOAD READONLY HAS_CONTENTS
 [14]     0x120060000->0x120064000 at 0x00028000: load4 ALLOC LOAD HAS_CONTENTS
 [15]     0x20000000000->0x20000002000 at 0x0002c000: load5a ALLOC LOAD READONLY CODE HAS_CONTENTS
 [16]     0x20000002000->0x20000030000 at 0x0002e000: load5b ALLOC READONLY CODE
 [17]     0x20000030000->0x20000034000 at 0x0002e000: load6 ALLOC LOAD HAS_CONTENTS
 [18]     0x2000003e000->0x20000040000 at 0x00032000: load7 ALLOC LOAD READONLY HAS_CONTENTS
 [19]     0x20000040000->0x20000042000 at 0x00034000: load8 ALLOC LOAD HAS_CONTENTS
 [20]     0x20000042000->0x20000044000 at 0x00036000: load9a ALLOC LOAD READONLY CODE HAS_CONTENTS

[snipped rest]

And we see 0x20000042000-> onwards is marked readonly! Hence the
segfault.

Hopefully the above may be helpful in tracking down the problem

Regards,
Michael.


Reply to: