Port-amd64 archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
assembler/toolchain clue needed for openssl aesni feature
Hi,
so a commit by me lately claimed that aesni support had been re-enabled
for i386 and amd64; that wasn't actually true since the detection of the
cpu type isn't yet compiled in (thanks to Jean-Yves Migeon to testing and
finding the issue).
Ok, so I know how to create the necessary x86_64cpuid.S from the perl
shim, and how to make it be included if arch is x86_64.
What I run in then is:
/home/netbsd/amd64/tools/bin/x86_64--netbsd-gcc -Wl,-x -shared -Wl,-soname,libc
rypto.so.7 -Wl,--warn-shared-textrel --sysroot=/home/netbsd/amd64/destdir -o
libcrypto.so.7.0 -Wl,-rpath,/lib -L=/lib -Wl,--whole-archive libcrypto_pic.a
-Wl,--no-whole-archive -L/home/netbsd/amd64/obj/home/spz/cvs/src/lib/libcrypt -l
crypt
/home/netbsd/amd64/tools/lib/gcc/x86_64--netbsd/4.1.3/../../../../x86_64--netbsd
/bin/ld: warning: dynamic relocation in readonly section `OPENSSL_cpuid_setup'
/home/netbsd/amd64/tools/lib/gcc/x86_64--netbsd/4.1.3/../../../../x86_64--netbsd
/bin/ld: libcrypto_pic.a(x86_64cpuid.pico): relocation R_X86_64_PC32 against sym
bol `OPENSSL_cpuid_setup' can not be used when making a shared object; recompile
with -fPIC
/home/netbsd/amd64/tools/lib/gcc/x86_64--netbsd/4.1.3/../../../../x86_64--netbsd
/bin/ld: final link failed: Bad value
collect2: ld returned 1 exit status
Logs say x86_64cpuid.pico was created this way:
# compile libcrypto/x86_64cpuid.pico
/home/netbsd/amd64/tools/bin/x86_64--netbsd-gcc -DELF -fstack-protector -Wstac
k-protector --param ssp-buffer-size=1 --sysroot=/home/netbsd/amd64/destdir
-D_FORTIFY_SOURCE=2 -Dlibcrypto -I. -I/home/spz/cvs/src/crypto/external/bsd/ope
nssl/dist/crypto -I/home/spz/cvs/src/crypto/external/bsd/openssl/dist -I/home/sp
z/cvs/src/crypto/external/bsd/openssl/dist/crypto/asn1 -I/home/spz/cvs/src/crypt
o/external/bsd/openssl/dist/crypto/evp -DOPENSSLDIR=\"/etc/openssl\" -DENGINESDI
R=\"/usr/lib/openssl\" -DDSO_DLFCN -DHAVE_DLFCN_H -x assembler-with-cpp -c -DPIC
-fPIC -DPIC -I/home/spz/cvs/src/crypto/external/bsd/openssl/dist/crypto/crypt
o -DOPENSSL_CPUID_OBJ /home/spz/cvs/src/crypto/external/bsd/openssl/lib/libcrypt
o/arch/x86_64/x86_64cpuid.S -o x86_64cpuid.pico
/home/netbsd/amd64/tools/bin/x86_64--netbsd-objcopy -x x86_64cpuid.pico
so no missing -fPIC. I assume it's something in the new x86_64cpuid.S.
My x86 assembler knowledge is null.
I've attached x86_64cpuid.S, any enlightenment for me?
regards,
spz
--
spz%serpens.de@localhost (S.P.Zeidler)
.section .init
call OPENSSL_cpuid_setup
.text
.globl OPENSSL_atomic_add
.type OPENSSL_atomic_add,@function
.align 16
OPENSSL_atomic_add:
movl (%rdi),%eax
.Lspin: leaq (%rsi,%rax,1),%r8
.byte 0xf0
cmpxchgl %r8d,(%rdi)
jne .Lspin
movl %r8d,%eax
.byte 0x48,0x98
.byte 0xf3,0xc3
.size OPENSSL_atomic_add,.-OPENSSL_atomic_add
.globl OPENSSL_rdtsc
.type OPENSSL_rdtsc,@function
.align 16
OPENSSL_rdtsc:
rdtsc
shlq $32,%rdx
orq %rdx,%rax
.byte 0xf3,0xc3
.size OPENSSL_rdtsc,.-OPENSSL_rdtsc
.globl OPENSSL_ia32_cpuid
.type OPENSSL_ia32_cpuid,@function
.align 16
OPENSSL_ia32_cpuid:
movq %rbx,%r8
xorl %eax,%eax
cpuid
movl %eax,%r11d
xorl %eax,%eax
cmpl $1970169159,%ebx
setne %al
movl %eax,%r9d
cmpl $1231384169,%edx
setne %al
orl %eax,%r9d
cmpl $1818588270,%ecx
setne %al
orl %eax,%r9d
jz .Lintel
cmpl $1752462657,%ebx
setne %al
movl %eax,%r10d
cmpl $1769238117,%edx
setne %al
orl %eax,%r10d
cmpl $1145913699,%ecx
setne %al
orl %eax,%r10d
jnz .Lintel
movl $2147483648,%eax
cpuid
cmpl $2147483656,%eax
jb .Lintel
movl $2147483656,%eax
cpuid
movzbq %cl,%r10
incq %r10
movl $1,%eax
cpuid
btl $28,%edx
jnc .Ldone
shrl $16,%ebx
cmpb %r10b,%bl
ja .Ldone
andl $4026531839,%edx
jmp .Ldone
.Lintel:
cmpl $4,%r11d
movl $-1,%r10d
jb .Lnocacheinfo
movl $4,%eax
movl $0,%ecx
cpuid
movl %eax,%r10d
shrl $14,%r10d
andl $4095,%r10d
.Lnocacheinfo:
movl $1,%eax
cpuid
cmpl $0,%r9d
jne .Lnotintel
orl $1048576,%edx
andb $15,%ah
cmpb $15,%ah
je .Lnotintel
orl $1073741824,%edx
.Lnotintel:
btl $28,%edx
jnc .Ldone
andl $4026531839,%edx
cmpl $0,%r10d
je .Ldone
orl $268435456,%edx
shrl $16,%ebx
cmpb $1,%bl
ja .Ldone
andl $4026531839,%edx
.Ldone:
shlq $32,%rcx
movl %edx,%eax
movq %r8,%rbx
orq %rcx,%rax
.byte 0xf3,0xc3
.size OPENSSL_ia32_cpuid,.-OPENSSL_ia32_cpuid
.globl OPENSSL_cleanse
.type OPENSSL_cleanse,@function
.align 16
OPENSSL_cleanse:
xorq %rax,%rax
cmpq $15,%rsi
jae .Lot
cmpq $0,%rsi
je .Lret
.Little:
movb %al,(%rdi)
subq $1,%rsi
leaq 1(%rdi),%rdi
jnz .Little
.Lret:
.byte 0xf3,0xc3
.align 16
.Lot:
testq $7,%rdi
jz .Laligned
movb %al,(%rdi)
leaq -1(%rsi),%rsi
leaq 1(%rdi),%rdi
jmp .Lot
.Laligned:
movq %rax,(%rdi)
leaq -8(%rsi),%rsi
testq $-8,%rsi
leaq 8(%rdi),%rdi
jnz .Laligned
cmpq $0,%rsi
jne .Little
.byte 0xf3,0xc3
.size OPENSSL_cleanse,.-OPENSSL_cleanse
.globl OPENSSL_wipe_cpu
.type OPENSSL_wipe_cpu,@function
.align 16
OPENSSL_wipe_cpu:
pxor %xmm0,%xmm0
pxor %xmm1,%xmm1
pxor %xmm2,%xmm2
pxor %xmm3,%xmm3
pxor %xmm4,%xmm4
pxor %xmm5,%xmm5
pxor %xmm6,%xmm6
pxor %xmm7,%xmm7
pxor %xmm8,%xmm8
pxor %xmm9,%xmm9
pxor %xmm10,%xmm10
pxor %xmm11,%xmm11
pxor %xmm12,%xmm12
pxor %xmm13,%xmm13
pxor %xmm14,%xmm14
pxor %xmm15,%xmm15
xorq %rcx,%rcx
xorq %rdx,%rdx
xorq %rsi,%rsi
xorq %rdi,%rdi
xorq %r8,%r8
xorq %r9,%r9
xorq %r10,%r10
xorq %r11,%r11
leaq 8(%rsp),%rax
.byte 0xf3,0xc3
.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
Home |
Main Index |
Thread Index |
Old Index