--- ceph-15.2.2/src/yasm-wrapper.orig 2020-03-09 12:57:37.603837466 -0400 +++ ceph-15.2.2/src/yasm-wrapper 2020-03-09 13:02:31.496796609 -0400 @@ -1,10 +1,11 @@ -#!/bin/sh -e +#!/bin/sh # libtool and yasm do not get along. # filter out any crap that libtool feeds us that yasm does not understand. #echo $0: got $* new="" touch="" +object="" while [ -n "$*" ]; do case "$1" in -f ) @@ -29,6 +30,12 @@ touch="$1" shift ;; + -o ) + shift + object="$1" + new="$new -o $1" + shift + ;; * ) new="$new $1" shift @@ -39,6 +46,25 @@ #echo $0: yasm $new yasm $new +INDEXOFNOTEGNUPROPLINE=$(readelf -S -W ${object} | grep ".note.gnu.property") + +if [ -n "${INDEXOFNOTEGNUPROPLINE}" ]; then + + STARTOFSECTHDRLINE=$(readelf -h ${object} | grep "Start of section headers:") + SIZEOFSECTHDRLINE=$(readelf -h ${object} | grep "Size of section headers:") + + STARTOFSECTHDR=$(echo ${STARTOFSECTHDRLINE} | cut -d ' ' -f 5) + SIZEOFSECTHDR=$(echo ${SIZEOFSECTHDRLINE} | cut -d ' ' -f 5) + INDEXOFNOTEGNUPROPFRAG=$(echo ${INDEXOFNOTEGNUPROPLINE} | cut -d '.' -f 1) + + INDEXOFNOTEGNUPROP=$(echo ${INDEXOFNOTEGNUPROPFRAG} | grep -Eo "[[:digit:]]+") + + OFFSET=$(( ${STARTOFSECTHDR} + 4 + ( ${SIZEOFSECTHDR} * ${INDEXOFNOTEGNUPROP} ) )) + + printf '\x07' | dd of=${object} bs=1 seek=${OFFSET} count=1 conv=notrunc &> /dev/null + +fi + [ -n "$touch" ] && touch $touch true --- ceph-15.2.2/src/common/crc32c_intel_fast_asm.s.orig 2020-05-26 08:34:32.226201974 -0400 +++ ceph-15.2.2/src/common/crc32c_intel_fast_asm.s 2020-05-26 17:19:20.327201974 -0400 @@ -1,5 +1,5 @@ ; -; Copyright 2012-2013 Intel Corporation All Rights Reserved. +; Copyright 2012-2015 Intel Corporation All Rights Reserved. ; All rights reserved. ; ; http://opensource.org/licenses/BSD-3-Clause @@ -59,16 +59,34 @@ xor rbx, rbx ;; rbx = crc1 = 0; xor r10, r10 ;; r10 = crc2 = 0; + cmp len, %%bSize*3*2 + jbe %%non_prefetch + %assign i 0 %rep %%bSize/8 - 1 - crc32 rax, [bufptmp+i + 0*%%bSize] ;; update crc0 - crc32 rbx, [bufptmp+i + 1*%%bSize] ;; update crc1 - crc32 r10, [bufptmp+i + 2*%%bSize] ;; update crc2 + %if i < %%bSize*3/4 + prefetchnta [bufptmp+ %%bSize*3 + i*4] + %endif + crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0 + crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1 + crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2 %assign i (i+8) %endrep - crc32 rax, [bufptmp+i + 0*%%bSize] ;; update crc0 - crc32 rbx, [bufptmp+i + 1*%%bSize] ;; update crc1 -; SKIP ;crc32 r10, [bufptmp+i + 2*%%bSize] ;; update crc2 + jmp %%next %+ %1 + +%%non_prefetch: + %assign i 0 + %rep %%bSize/8 - 1 + crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0 + crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1 + crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2 + %assign i (i+8) + %endrep + +%%next %+ %1: + crc32 rax, qword [bufptmp+i + 0*%%bSize] ;; update crc0 + crc32 rbx, qword [bufptmp+i + 1*%%bSize] ;; update crc1 +; SKIP ;crc32 r10, qword [bufptmp+i + 2*%%bSize] ;; update crc2 ; merge in crc0 movzx bufp_dw, al @@ -180,12 +198,15 @@ %define crc_init_dw r8d %endif - + endbranch push rdi push rbx mov rax, crc_init ;; rax = crc_init; + cmp len, 8 + jb less_than_8 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -195,9 +216,6 @@ ;; amount of the address je proc_block ;; Skip if aligned - cmp len, 8 - jb less_than_8 - ;;;; Calculate CRC of unaligned bytes of the buffer (if any) ;;;; mov rbx, [bufptmp] ;; load a quadword from the buffer add bufptmp, bufp ;; align buffer pointer for @@ -233,7 +251,7 @@ jnc bit7 ;; jump to bit-6 if bit-7 == 0 %assign i 0 %rep 16 - crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data + crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data %assign i (i+8) %endrep je do_return ;; return if remaining data is zero @@ -244,7 +262,7 @@ jnc bit6 ;; jump to bit-6 if bit-7 == 0 %assign i 0 %rep 8 - crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data + crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data %assign i (i+8) %endrep je do_return ;; return if remaining data is zero @@ -254,7 +272,7 @@ jnc bit5 ;; jump to bit-5 if bit-6 == 0 %assign i 0 %rep 4 - crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data + crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data %assign i (i+8) %endrep je do_return ;; return if remaining data is zero @@ -264,7 +282,7 @@ jnc bit4 ;; jump to bit-4 if bit-5 == 0 %assign i 0 %rep 2 - crc32 rax, [bufptmp+i] ;; compute crc32 of 8-byte data + crc32 rax, qword [bufptmp+i] ;; compute crc32 of 8-byte data %assign i (i+8) %endrep je do_return ;; return if remaining data is zero @@ -272,11 +290,11 @@ bit4: shl len_b, 1 ;; shift-out MSB (bit-4) jnc bit3 ;; jump to bit-3 if bit-4 == 0 - crc32 rax, [bufptmp] ;; compute crc32 of 8-byte data + crc32 rax, qword [bufptmp] ;; compute crc32 of 8-byte data je do_return ;; return if remaining data is zero add bufptmp, 8 ;; buf +=8; (next 8 bytes) bit3: - mov rbx, [bufptmp] ;; load a 8-bytes from the buffer: + mov rbx, qword [bufptmp] ;; load a 8-bytes from the buffer: shl len_b, 1 ;; shift-out MSB (bit-3) jnc bit2 ;; jump to bit-2 if bit-3 == 0 crc32 eax, ebx ;; compute crc32 of 4-byte data @@ -672,3 +690,22 @@ ; inform linker that this doesn't require executable stack section .note.GNU-stack noalloc noexec nowrite progbits %endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +SECTION .note.gnu.property align=8 noexec ; section number 22, const + + db 04H, 00H, 00H, 00H, 20H, 00H, 00H, 00H ; 0000 _ .... ... + db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H ; 0008 _ ....GNU. + db 00H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0010 _ ........ + db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0018 _ ........ + db 01H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0020 _ ........ + db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0028 _ ........ + db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H ; 0030 _ ........ + db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H ; 0038 _ ....GNU. + db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0040 _ ........ + db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0048 _ ........ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; --- ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s.orig 2020-05-26 08:34:32.226201974 -0400 +++ ceph-15.2.2/src/common/crc32c_intel_fast_zero_asm.s 2020-05-26 17:19:32.497201974 -0400 @@ -1,5 +1,5 @@ ; -; Copyright 2012-2013 Intel Corporation All Rights Reserved. +; Copyright 2012-2015 Intel Corporation All Rights Reserved. ; All rights reserved. ; ; http://opensource.org/licenses/BSD-3-Clause @@ -59,6 +59,19 @@ xor rbx, rbx ;; rbx = crc1 = 0; xor r10, r10 ;; r10 = crc2 = 0; + cmp len, %%bSize*3*2 + jbe %%non_prefetch + + %assign i 0 + %rep %%bSize/8 - 1 + crc32 rax, bufptmp ;; update crc0 + crc32 rbx, bufptmp ;; update crc1 + crc32 r10, bufptmp ;; update crc2 + %assign i (i+8) + %endrep + jmp %%next %+ %1 + +%%non_prefetch: %assign i 0 %rep %%bSize/8 - 1 crc32 rax, bufptmp ;; update crc0 @@ -66,6 +79,8 @@ crc32 r10, bufptmp ;; update crc2 %assign i (i+8) %endrep + +%%next %+ %1: crc32 rax, bufptmp ;; update crc0 crc32 rbx, bufptmp ;; update crc1 ; SKIP ;crc32 r10, bufptmp ;; update crc2 @@ -180,12 +195,15 @@ %define crc_init_dw r8d %endif - + endbranch push rdi push rbx mov rax, crc_init ;; rax = crc_init; + cmp len, 8 + jb less_than_8 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;; 1) ALIGN: ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -654,3 +672,22 @@ ; inform linker that this doesn't require executable stack section .note.GNU-stack noalloc noexec nowrite progbits %endif + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +SECTION .note.gnu.property align=8 noexec ; section number 22, const + + db 04H, 00H, 00H, 00H, 20H, 00H, 00H, 00H ; 0000 _ .... ... + db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H ; 0008 _ ....GNU. + db 00H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0010 _ ........ + db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0018 _ ........ + db 01H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0020 _ ........ + db 00H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0028 _ ........ + db 04H, 00H, 00H, 00H, 10H, 00H, 00H, 00H ; 0030 _ ........ + db 05H, 00H, 00H, 00H, 47H, 4EH, 55H, 00H ; 0038 _ ....GNU. + db 02H, 00H, 00H, 0C0H, 04H, 00H, 00H, 00H ; 0040 _ ........ + db 03H, 00H, 00H, 00H, 00H, 00H, 00H, 00H ; 0048 _ ........ + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;