After many, many, many test (kernel compilations) I found the two problem.
1) FreePascal App. show Segmentation Fault with kernel 2.6 SMP.
2) Dosemu non root show Segmentation Fault with kernel 2.6 SMP.
Case
1) The problem was the kernel compiled with gcc 3.2.2, finally upgrade to gcc 3.3.6 and works!! (only affect to fpc app.)
0804841D:<SYSTEM_INITSYSCALLINTF+0x1d> 83C004 add eax, 0x4
ald> s
eax = 0xBFBF7F30 ebx = 0x00000001 ecx = 0x00000001 edx = 0x00000000
esp = 0xBFBF7E8C ebp = 0xBFBF7EA8 esi = 0x00000007 edi = 0x00000000
ds = 0x007B es = 0x007B fs = 0x0000 gs = 0x0000
ss = 0x007B cs = 0x0073 eip = 0x08048420 eflags = 0x00000296
Flags: PF AF SF IF
08048420:<SYSTEM_INITSYSCALLINTF+0x20> 8B10 mov edx, dword [eax]
ald> examine 0xbfbf7f30
Dumping 64 bytes of memory starting at 0xBFBF7F30 in hex
BFBF7F30: 20 00 00 00 21 00 00 00 10 00 00 00 FF FB EB BF ...!...........
//
Here save 0x21
ald> disas 0x0804841d (maybe procedure InitSyscallIntf; rtl/linux/i386/syscall.inc)
0804841D:<SYSTEM_INITSYSCALLINTF+0x1d> 83C004 add eax, 0x4
08048420:<SYSTEM_INITSYSCALLINTF+0x20> 8B10 mov edx, dword [eax]
08048422:<SYSTEM_INITSYSCALLINTF+0x22> 83FA20 cmp edx, 0x20
08048425:<SYSTEM_INITSYSCALLINTF+0x25> 7519 jne +0x19 (0x8048440:SYSTEM_INITSYSCALLINTF+0x40)
08048427:<SYSTEM_INITSYSCALLINTF+0x27> 8B5004 mov edx, dword [eax+0x4]
//here save bad pointer 0x21
0804842A:<SYSTEM_INITSYSCALLINTF+0x2a> 8915B4540908 mov dword [+0x80954b4], edx
08048430:<SYSTEM_INITSYSCALLINTF+0x30> 85D2 test edx, edx
08048432:<SYSTEM_INITSYSCALLINTF+0x32> 7415 je +0x15 (0x8048449:SYSTEM_INITSYSCALLINTF+0x49)
08048434:<SYSTEM_INITSYSCALLINTF+0x34> C705B054090801000000 mov dword [+0x80954b0], 0x1
0804843E:<SYSTEM_INITSYSCALLINTF+0x3e> EB09 jmp short +0x9 (0x8048449:SYSTEM_INITSYSCALLINTF+0x49)
08048440:<SYSTEM_INITSYSCALLINTF+0x40> 83C008 add eax, 0x8
08048443:<SYSTEM_INITSYSCALLINTF+0x43> 8B10 mov edx, dword [eax]
08048445:<SYSTEM_INITSYSCALLINTF+0x45> 85D2 test edx, edx
08048447:<SYSTEM_INITSYSCALLINTF+0x47> 75D7 jne +0xd7 (0x8048520:SYSTEM_FPSYSCALL$LONGINT$LONGINT$LONGINT$LONGINT$$LONGINT+0x20)
08048449:<SYSTEM_INITSYSCALLINTF+0x49> C3
// Try to run invalid 0x21
080484D6:<SYSTEM_FPSYSCALL$LONGINT$LONGINT$LONGINT$$LONGINT+0x16> FF15B4540908 call near dword [+0x80954b4]
ald> s
eax = 0x000000BF ebx = 0x00000003 ecx = 0xBFAEFD6C edx = 0x00000003
esp = 0xBFAEFD54 ebp = 0xBFAEFD60 esi = 0x00040000 edi = 0x00000000
ds = 0x007B es = 0x007B fs = 0x0000 gs = 0x0000
ss = 0x007B cs = 0x0073 eip = 0x00000021 eflags = 0x00000202
Flags: IF
Error disassembling next instruction (address: 0x00000021)
Dumping 64 bytes of memory starting at 0x080954B4 in hex
080954B4: 21 00 00 00 00 00 8D B6 00 00 00 00 00 00 00 00 !...............
//
rtl/linux/system.pp
{$if defined(i386) and not defined(FPC_USE_LIBC)}
InitSyscallIntf;
{$endif}
Case
2) The kernel 2.6.31.9 has the option CONFIG_DEFAULT_MMAP_MIN_ADDR=4096, must be 0 for dosemu.
or echo 0 > /proc/sys/vm/mmap_min_addr
http://kernel.xc.net/html/linux-2.6.31/x86/DEFAULT_MMAP_MIN_ADDRNow all work 100%

, Intel dual core, kernel 2.6.31.9 SMP 32bits compiled for Pentium3.
Thanks