On Sat, Dec 30, 2006 at 11:15:59AM -0300, Alejandro Pulver wrote:
> On Sat, 30 Dec 2006 14:21:50 +0200
> Kostik Belousov <[EMAIL PROTECTED]> wrote:
> 
> > On Sat, Dec 30, 2006 at 02:47:18AM -0300, Alejandro Pulver wrote:
> > > Hello.
> > > 
> > > I tried to update the port I maintain "games/quake2max", a Quake II
> > > engine, but when I try to run the compiled executables, except for
> > > the dedicated server (quake2max-ded) they output "Abort" and quit.
> > > 
> > > The output of 'ktrace' is the following (it just stops before running
> > > it):
> > > 
> > > 82753 ktrace   RET   ktrace 0
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/sbin/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/bin/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/usr/sbin/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/usr/bin/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/usr/games/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/usr/local/sbin/quake2max"
> > > 82753 ktrace   RET   execve -1 errno 2 No such file or directory
> > > 82753 ktrace   CALL  execve(0xbfbfe320,0xbfbfe844,0xbfbfe84c)
> > > 82753 ktrace   NAMI  "/usr/local/bin/quake2max"
> > > 
> > > Interestingly 'ldd' also crashes when examining it, outputting the
> > > following (however 'ktrace' has more information):
> > > 
> > > /usr/local/bin/quake2max:
> > > /usr/local/bin/quake2max: signal 6
> > > 
> > > My first thought was that it was a GCC bug, so I tried compiling it
> > > with 4.1 (my system is a FreeBSD 6.1-RELEASE-p1 with GCC 3.4.4
> > > 20050518) but it made no difference.
> > > 
> > > Interestingly the actual "games/quake2max" port works just fine
> > > (version 0.44), and I couldn't see something suspicious with a quick
> > > look to the 'diff' output. I have attached a patch to update the port
> > > in the tree to the 0.45 version.
> > > 
> > > Could someone investigate this please?
> > > 
> > > Thanks and Best Regards,
> > > Ale
> > > 
> > > P.S.: please CC me since I am not subscribed to the list.
> > 
> > Please, show the output of the commands
> > file /usr/local/bin/quake2max
> > readelf -ld /usr/local/bin/quake2max
> > 
> > 
> 
> Hello.
> 
> Thank you for your reply.
> 
> Here is the output:
> 
> % file /usr/local/bin/quake2max
> /usr/local/bin/quake2max: ELF 32-bit LSB executable, Intel 80386, version 1 
> (FreeBSD), for FreeBSD 6.1, dynamically linked (uses shared libs), stripped
> 
> % readelf -ld /usr/local/bin/quake2max
> Elf file type is EXEC (Executable file)
> Entry point 0x80497d0
> There are 6 program headers, starting at offset 52
> 
> Program Headers:
>   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
>   PHDR           0x000034 0x08048034 0x08048034 0x000c0 0x000c0 R E 0x4
>   INTERP         0x0000f4 0x080480f4 0x080480f4 0x00015 0x00015 R   0x1
>       [Requesting program interpreter: /libexec/ld-elf.so.1]
>   LOAD           0x000000 0x08048000 0x08048000 0x72875 0x72875 R E 0x1000
>   LOAD           0x073000 0x080bb000 0x080bb000 0x02cc4 0x28a20e34 RW  0x1000
>   DYNAMIC        0x075a70 0x080bda70 0x080bda70 0x000c0 0x000c0 RW  0x4
>   NOTE           0x00010c 0x0804810c 0x0804810c 0x00018 0x00018 R   0x4
> 
>  Section to Segment mapping:
>   Segment Sections...
>    00     
>    01     .interp 
>    02     .interp .note.ABI-tag .hash .dynsym .dynstr .rel.dyn .rel.plt .init 
> .plt .text .fini .rodata 
>    03     .data .eh_frame .dynamic .ctors .dtors .jcr .got .bss 
>    04     .dynamic 
>    05     .note.ABI-tag 
> 
> Dynamic segment at offset 0x75a70 contains 19 entries:
>   Tag        Type                         Name/Value
>  0x00000001 (NEEDED)                     Shared library: [libm.so.4]
>  0x00000001 (NEEDED)                     Shared library: [libz.so.3]
>  0x00000001 (NEEDED)                     Shared library: [libc.so.6]
>  0x0000000c (INIT)                       0x80491dc
>  0x0000000d (FINI)                       0x80b1748
>  0x00000004 (HASH)                       0x8048124
>  0x00000005 (STRTAB)                     0x8048b5c
>  0x00000006 (SYMTAB)                     0x804846c
>  0x0000000a (STRSZ)                      878 (bytes)
>  0x0000000b (SYMENT)                     16 (bytes)
>  0x00000015 (DEBUG)                      0x0
>  0x00000003 (PLTGOT)                     0x80bdb44
>  0x00000002 (PLTRELSZ)                   744 (bytes)
>  0x00000014 (PLTREL)                     REL
>  0x00000017 (JMPREL)                     0x8048ef4
>  0x00000011 (REL)                        0x8048ecc
>  0x00000012 (RELSZ)                      40 (bytes)
>  0x00000013 (RELENT)                     8 (bytes)
>  0x00000000 (NULL)                       0x0
> 
> Best Regards,
> Ale

Signal 6 is sent by elf image activator upon exec() when old address space
is destroyed, but new image cannot be loaded. In your case, I guess that
extra large bss section size (where uninitialized global/static variables
are placed) causes loader to fail:

>   Type           Offset   VirtAddr   PhysAddr   FileSiz MemSiz  Flg Align
>   LOAD           0x073000 0x080bb000 0x080bb000 0x02cc4 0x28a20e34 RW  0x1000

Look at MemSiz column. VirtAddr + MemSiz >= 0x30000000, and elf interpreter
(/libexec/ld-elf.so.1) is usually mmapped at 0x28000000.

Look at the source for huge global arrays/objects.

Attachment: pgpNzKyx7Brqm.pgp
Description: PGP signature

Reply via email to