Port-sparc64 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: Someone using COMPAT_SVR4(_32) ?
On Wed, 13 Sep 2017, Jerome Ibanes wrote:
> Here is the ktrace/kdump under 5.2.3 sparc64 and 7.1 sparc64, both running
> GENERIC with the same sparc solaris 2.6 32-bits payload, the same binary is
> being used.
>
> 5.2.3:
> [...]
> 463 1 k NAMI "/emul/svr4_32/usr/lib/libX11.so.4"
> 463 1 k RET open 4
> 463 1 k CALL fstat(4,0xffffd83c)
> 463 1 k RET fstat 0, 4294957116/0xffffd83c
> 463 1 k CALL mmap(0,0x2000,5,0x80000002,4,0)
> 463 1 k RET mmap 1074118656/0x4005c000, 8192/0x2000
> 463 1 k CALL mmap(0,0x88000,5,0x80000002,4,0)
> 463 1 k RET mmap 1074135040/0x40060000, 557056/0x88000
> 463 1 k CALL munmap(0x400d4000,0xe000)
> 463 1 k RET munmap 0, 57344/0xe000
> 463 1 k CALL mmap(0x400e2000,0x4d10,7,0x80000012,4,0x72000)
> 463 1 k RET mmap 1074667520/0x400e2000, 19728/0x4d10
> 463 1 k CALL close(4)
> 463 1 k RET close 0, 8192/0x2000
> 463 1 k CALL open(0x1002b9ac,0,0xffffd8c4)
> [...] emulation pursues with no issue.
>
> 7.1:
> [...]
> 1119 1 k NAMI "/emul/svr4_32/usr/lib/libX11.so.4"
> 1119 1 k RET open 4
> 1119 1 k CALL fstat(0xffffd84c,0x80000002)
> 1119 1 k RET fstat 0
> 1119 1 k CALL mmap(0x2000,0x80000002,0,0x45f,2,0)
> 1119 1 k RET mmap 1074167808/0x40068000
> 1119 1 k PSIG SIGSEGV SIG_DFL: code=SEGV_MAPERR,
> addr=0x0, trap=48)
> 1119 1 k NAMI "test.core"
>
> Please note that we observe exactly the same behavior under 6.0.6,
> 6.1.5, 7.0.2 and 7.1.
> The machine has 2GB of ram.
Oh, now it's obvious what's going on.
In the first case the kernel interprets the mmap() parameters as:
> 463 1 k CALL mmap(0,0x2000,5,0x80000002,4,0)
address = 0, size = 8KB, prot = 005, flags = 0x80000002, fd = 4, offset = 0
In the second case it thinks it's being passed in:
> 1119 1 k CALL mmap(0x2000,0x80000002,0,0x45f,2,0)
address = 0x2000, size = 2+GB, prot = 0, flags = 0x45f, fd = 2, offset = 0
The SCARG macro is supposed to automatically take the size of each
argument and figure out how many 32-bit (in the case of svr4_32) words it
maps to. Looks like that's broken.
Eduardo
Home |
Main Index |
Thread Index |
Old Index