[parisc-linux] unaligned access using bash on glibc 2.5

Aurelien Jarno aurelien at aurel32.net
Tue May 1 13:42:14 MDT 2007


Hi all,

We have just switched to a glibc 2.5 using LT + TLS in Debian. This
causes unaligned memory access when using bash:

bash(19279): unaligned access to 0x000e1bb2 at ip=0x407cb76b

Using prctl to trap on aligned access and gdb, the unaligned access
seems to be in closedir() (a glibc function), at the point marked by
a '*'.
   
   0x40bcb718 <closedir+0>:        stw rp,-14(sp)
   0x40bcb71c <closedir+4>:        stw,ma r5,40(sp)
   0x40bcb720 <closedir+8>:        stw r4,-3c(sp)
   0x40bcb724 <closedir+12>:       stw r3,-38(sp)
   0x40bcb728 <closedir+16>:       movb,= r26,r3,0x40bcb7a8 <closedir+144>
   0x40bcb72c <closedir+20>:       stw r19,-20(sp)
   0x40bcb730 <closedir+24>:       addil L%1000,r19,r1
   0x40bcb734 <closedir+28>:       ldw 0(r3),r5
   0x40bcb738 <closedir+32>:       ldw 5b0(r1),ret0
   0x40bcb73c <closedir+36>:       ldw 64(ret0),r20
   0x40bcb740 <closedir+40>:       cmpib,<> 0,r20,0x40bcb7c8 <closedir+176>
   0x40bcb744 <closedir+44>:       copy r20,r22
   0x40bcb748 <closedir+48>:       b,l 0x40bb4aa0,rp
   0x40bcb74c <closedir+52>:       copy r3,r26
   0x40bcb750 <closedir+56>:       copy r5,r26
   0x40bcb754 <closedir+60>:       copy r19,r4
   0x40bcb758 <closedir+64>:       be,l 100(sr2,r0),sr0,r31
   0x40bcb75c <closedir+68>:       ldi 6,r20
   0x40bcb760 <closedir+72>:       copy r4,r19
   0x40bcb764 <closedir+76>:       addil L%1000,r19,r1
 * 0x40bcb768 <closedir+80>:       ldw 5ec(r1),r31
   0x40bcb76c <closedir+84>:       sub r0,ret0,r22
   0x40bcb770 <closedir+88>:       ldi -1000,r20
   0x40bcb774 <closedir+92>:       cmpb,<< r20,ret0,0x40bcb794 <closedir+124>
   0x40bcb778 <closedir+96>:       copy ret0,r21
   0x40bcb77c <closedir+100>:      copy r21,ret0
   0x40bcb780 <closedir+104>:      ldw -54(sp),rp
   0x40bcb784 <closedir+108>:      ldw -3c(sp),r4
   0x40bcb788 <closedir+112>:      ldw -38(sp),r3
   0x40bcb78c <closedir+116>:      bv r0(rp)
   0x40bcb790 <closedir+120>:      ldw,mb -40(sp),r5
   0x40bcb794 <closedir+124>:      mfctl tr3,ret0
   0x40bcb798 <closedir+128>:      ldi -1,r21
   0x40bcb79c <closedir+132>:      add,l ret0,r31,ret0
   0x40bcb7a0 <closedir+136>:      b,l 0x40bcb77c <closedir+100>,r0
   0x40bcb7a4 <closedir+140>:      stw r22,0(ret0)
   0x40bcb7a8 <closedir+144>:      ldi 16,r21
   0x40bcb7ac <closedir+148>:      addil L%1000,r19,r1
   0x40bcb7b0 <closedir+152>:      ldw 5ec(r1),ret0
   0x40bcb7b4 <closedir+156>:      mfctl tr3,r20
   0x40bcb7b8 <closedir+160>:      add,l r20,ret0,r20
   0x40bcb7bc <closedir+164>:      stw r21,0(r20)
   0x40bcb7c0 <closedir+168>:      b,l 0x40bcb77c <closedir+100>,r0
   0x40bcb7c4 <closedir+172>:      ldi -1,r21

The problem does not look obvious (at least to me). Any idea?

Thanks,
Aurelien

-- 
  .''`.  Aurelien Jarno	            | GPG: 1024D/F1BCDB73
 : :' :  Debian developer           | Electrical Engineer
 `. `'   aurel32 at debian.org         | aurelien at aurel32.net
   `-    people.debian.org/~aurel32 | www.aurel32.net



More information about the parisc-linux mailing list