NetBSD-Bugs archive

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

forwarding PR addition; why wasn't it crossposted?



----- Forwarded message from Reinoud Zandijk <reinoud%NetBSD.org@localhost> 
-----

Date: Wed, 9 Jan 2008 00:41:52 +0100
From: Reinoud Zandijk <reinoud%NetBSD.org@localhost>
To: gnats-bugs%NetBSD.org@localhost
Subject: Re: pkg/33970
User-Agent: Mutt/1.4.2.3i

having tried wine myself lately, i've stumbled on the following:

All programs seem to be vectored trough /usr/pkg/bin/wine itself. This 
process tries to start the wineserver by forking. This fork() fails for the 
child due to a memory fault in __fork() or fork() itself.

If i disable this forking and thus remove this auto-running the wineserver 
feature, the program continues fine only to crash out later. A crashdump 
then shows something like :

(gdb) where
#0  0xbbbf844a in _rtld_map_object () from /usr/libexec/ld.elf_so
#1  0x7fe00024 in ?? ()
#2  0xbbbc17a0 in cp2uni () from /usr/pkg/lib/libwine.so.1
#3  0xbbbc29a0 in uni2cp_low () from /usr/pkg/lib/libwine.so.1
#4  0x3ff6f192 in ?? ()
#5  0x00000102 in ?? ()
#6  0xbb9d3600 in ?? ()
#7  0xbfbfc8c8 in ?? ()
#8  0xbbae01d3 in wine_cp_wcstombs (table=0x895590c3, flags=-326937627, 
    src=0xe824, srclen=-2124742656, 
    dst=0x55388c3 <Address 0x55388c3 out of bounds>, dstlen=1350798080, 
    defchar=0x8afffffc <Address 0x8afffffc out of bounds>, used=0xc0b60f00)
    at wctomb.c:453

and the pmap of the server process before it crashes shows:

%pmap -a 15981
Start    End         Size  Offset   rwxpc  RWX  I/W/A Dev     Inode - File
08048000-08093fff     304k 00000000 r-xp+ (rwx) 1/0/0 00:00 2689603 - 
/usr/pkg/bin/wineserver [0xd0d22ce8]
08094000-080fffff     432k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bb800000-bb80ffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bb810000-bb8fffff     960k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bb9e7000-bbab8fff     840k 00000000 r-xp+ (rwx) 1/0/0 00:00 2517121 - 
/lib/libc.so.12.155 [0xcc926bc4]
bbab9000-bbabffff      28k 000d1000 rw-p- (rwx) 1/0/0 00:00 2517121 - 
/lib/libc.so.12.155 [0xcc926bc4]
bbac0000-bbacffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bbad0000-bbad0fff       4k 00000000 r-xp+ (rwx) 1/0/0 00:00 2738438 - 
/usr/lib/libi386.so.1.0 [0xccc76bc0]
bbad1000-bbad1fff       4k 00000000 rw-p+ (rwx) 1/0/0 00:00 2738438 - 
/usr/lib/libi386.so.1.0 [0xccc76bc0]
bbad2000-bbad3fff       8k 00000000 r-xp+ (rwx) 1/0/0 00:00 2738540 - 
/usr/lib/libossaudio.so.0.0 [0xccc7ebc8]
bbad4000-bbad4fff       4k 00002000 rw-p+ (rwx) 1/0/0 00:00 2738540 - 
/usr/lib/libossaudio.so.0.0 [0xccc7ebc8]
bbad5000-bbbd4fff    1024k 00000000 r-xp+ (rwx) 1/0/0 00:00 2689605 - 
/usr/pkg/lib/libwine.so.1.0 [0xd0d229f8]
bbbd5000-bbbd6fff       8k 000ff000 rw-p- (rwx) 1/0/0 00:00 2689605 - 
/usr/pkg/lib/libwine.so.1.0 [0xd0d229f8]
bbbd7000-bbbe9fff      76k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [ anon ]
bbbea000-bbbf1fff      32k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bbbf2000-bbbf2fff       4k 00000000 r-xs- (r-x) 0/0/1 00:00       0 -   [ 
uvm_aobj ]
bbbf3000-bbbfdfff      44k 00000000 r-xp+ (rwx) 1/0/0 00:00 4526846 - 
/libexec/ld.elf_so [0xcb658814]
bbbfe000-bbbfefff       4k 0000a000 rw-p+ (rwx) 1/0/0 00:00 4526846 - 
/libexec/ld.elf_so [0xcb658814]
bbbff000-bbbfffff       4k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ anon ]
bbc00000-bf9fffff   63488k 00000000 ---p+ (rwx) 1/0/0 00:00       0 -   [ stack 
]
bfa00000-bfbeffff    1984k 00000000 rw-p+ (rwx) 1/0/0 00:00       0 -   [ stack 
]
bfbf0000-bfbfffff      64k 00000000 rw-p- (rwx) 1/0/0 00:00       0 -   [ stack 
]
 total               5956k

What is not so clear initially is that the start address of wineserver is 
wrong.

When compiling wineserver it executes:

cc -o wine-pthread -Wl,--export-dynamic 
-Wl,--section-start,.interp=0x7bf00400 pthread.o main.o version.o -L..
/libs/wine -lwine ../libs/port/libwine_port.a -lpthread  -g 
-Wl,--rpath,\$ORIGIN/../libs/wine

cc -o wine-pthread-installed -Wl,--export-dynamic 
-Wl,--section-start,.interp=0x7bf00400 pthread.o main.o vers
ion.o -L../libs/wine -lwine ../libs/port/libwine_port.a -lpthread  -g 
-Wl,--rpath,\$ORIGIN/`../tools/relpath /
usr/pkg/bin /usr/pkg/lib` -Wl,--enable-new-dtags

Objdumping it i get :
> objdump -f /usr/pkg/bin/wineserver

/usr/pkg/bin/wineserver:     file format elf32-i386
architecture: i386, flags 0x00000112:
EXEC_P, HAS_SYMS, D_PAGED
start address 0x08049ba0

> objdump -x /usr/pkg/bin/wineserver | grep interp
  0 .interp       00000017  08048114  08048114  00000114  2**0
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
SYMBOL TABLE:
08048114 l    d  .interp        00000000              .interp


Wich surely violates the --section-start,.interp=0x7bf00400 !!!!

My hypothesis is that this is at least part of the problem if not the main 
problem. Some parts seem to get dynamically loaded in on fork() and when 
those *are* at their correct adresses the _rtld_map_object() will fail 
miserably....

Should this PR be moved to a different category?

Reinoud

----- End forwarded message -----



Home | Main Index | Thread Index | Old Index