F-7 En adJ 7.2b1 si el paquete ton (o ton-toncli) se compila en máquina con procesador Intel no corre en máquina con procesador AMD y viceversa
Si el compilado en Intel se intenta correr en AMD:
% dmesg | grep cpu0:
cpu0: AMD FX(tm)-8350 Eight-Core Processor, 4335.66 MHz, 15-02-00
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,MMX,FXSR,SSE,
SSE2,HTT,SSE3,PCLMUL,MWAIT,SSSE3,FMA3,CX16,SSE4.1,SSE4.2,POPCNT,AES,XSAVE,AVX,F16C,NXE,MMXX,FFXSR,
PAGE1GB,RDTSCP,LONG,LAHF,CMPLEG,SVM,EAPICSP,AMCR8,ABM,SSE4A,MASSE,3DNOWP,OSVW,IBS,XOP,SKINIT,
WDT,FMA4,TCE,NODEID,TBM,TOPEXT,CPCTR,ITSC,BMI1
cpu0: 64KB 64b/line 2-way I-cache, 16KB 64b/line 4-way D-cache, 2MB 64b/line 16-way L2 cache
cpu0: ITLB 48 4KB entries fully associative, 24 4MB entries fully associative
cpu0: DTLB 64 4KB entries fully associative, 64 4MB entries fully associative
cpu0: smt 0, core 0, package 0
cpu0: apic clock running at 216MHz
cpu0: mwait min=64, max=64, IBE
cpu0: 4335 MHz: speeds: 4000 3400 2800 2100 1400 MHz
% lldb lite-client
(lldb) target create "lite-client"
Current executable set to 'lite-client' (x86_64).
(lldb) r
Process 80236 launched: '/usr/local/bin/lite-client' (x86_64)
Process 80236 stopped
* thread #1, stop reason = signal SIGILL
frame #0: 0x00000d8553dc7040 lite-client`td::Status td::set_signal_handler_impl<void (*)(int)>(std::__1::vector<int, std::__1::allocator<int> >, void (*)(int)) + 80
lite-client`td::set_signal_handler_impl<void (*)(int)>:
-> 0xd8553dc7040 <+80>: shlxl %eax, %r14d, %eax
0xd8553dc7045 <+85>: orl %eax, -0x38(%rbp)
0xd8553dc7048 <+88>: addq $0x4, %r13
0xd8553dc704c <+92>: cmpq %rbx, %r13
(lldb)
Si el compilado en AMD se intenta correr en Intel:
% dmesg | grep cpu0:
cpu0: Intel(R) Core(TM) i7-4790 CPU @ 3.60GHz, 3791.46 MHz, 06-3c-03
cpu0: FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,
SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DSCPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,
PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,
RDTSCP,LONG,LAHF,ABM,PERF,ITSC,FSGSBASE,TSC_ADJUST,BMI1,HLE,AVX2,SMEP,BMI2,ERMS,INVPCID,RTM,
SENSOR,ARAT,XSAVEOPT,MELTDOWN
cpu0: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 8-way L2 cache, 8MB 64b/line 16-way L3 cache
cpu0: smt 0, core 0, package 0
cpu0: apic clock running at 99MHz
cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4, IBE
cpu0: using Broadwell MDS workaround
% lldb /usr/local/bin/fift
(lldb) target create "/usr/local/bin/fift"
Current executable set to '/usr/local/bin/fift' (x86_64).
(lldb) break set -n main
Breakpoint 1: where = fift`main, address = 0x00000000001a2150
(lldb) r
Process 8163 launched: '/usr/local/bin/fift' (x86_64)
Process 8163 stopped
* thread #1, stop reason = signal SIGILL
frame #0: 0x0000005c750661d8 fift`td::Clocks::tz_offset() + 232
fift`td::Clocks::tz_offset:
-> 0x5c750661d8 <+232>: vpmacsdd %xmm2, %xmm3, %xmm0, %xmm0
0x5c750661de <+238>: vmovd %xmm0, %ecx
0x5c750661e2 <+242>: leal 0xd2ef(%rcx,%rax), %edx
0x5c750661e9 <+249>: cmpl $0x1a5de, %edx ; imm = 0x1A5DE
(lldb) bt
* thread #1, stop reason = signal SIGILL
* frame #0: 0x0000005c750661d8 fift`td::Clocks::tz_offset() + 232
(lldb)
Sobre qemu coriendo sobre Intel fallan tanto el compilado para Intel como el compilado para amd64
% dmesg | grep cpu0
...
cpu0: FPU,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH
,MMX,FXSR,SSE,SSE2,SSE3,CX16,HV,NXE,LONG,LAHF,SVM
Al intentar correr con lldb
:
...
ar_traits<char>, std::__1::allocator<char> >, std::__1::pair<std::__1::basic_str
ing<char, std::__1::char_traits<char>, std::__1::allocator<char> > const, rocksd
b::OptionTypeInfo> const&>:
-> 0x448ad0620f3 <+627>: blsrq %r12, %rcx
0x448ad0620f8 <+632>: setne %cl
0x448ad0620fb <+635>: orb %al, %cl
0x448ad0620fd <+637>: movzbl %cl, %eax
(lldb)
Tras compilación del paquete ton en qemu se nota que este opera bien en qemu y en máquinas reales tanto con procesadores Intel como con procesadores AMD.