]> Cypherpunks repositories - gostls13.git/commitdiff
crypto/internal/fips: avoid some non-relocatable global initializers
authorRuss Cox <rsc@golang.org>
Tue, 5 Nov 2024 18:50:00 +0000 (13:50 -0500)
committerRuss Cox <rsc@golang.org>
Mon, 11 Nov 2024 20:08:38 +0000 (20:08 +0000)
In normal code,

var x = []int{...}

will be laid out by the linker, but in FIPS packages, the slice
assignment has to be deferred to init time to avoid a global
data relocation. We can avoid the init time work by writing

var x = [...]int{...}

instead. Do that.

For #69536.

Change-Id: Ie3c1d25af3f79182ee254014e49d3711038aa327
Reviewed-on: https://go-review.googlesource.com/c/go/+/625815
Reviewed-by: Filippo Valsorda <filippo@golang.org>
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
src/crypto/internal/fips/sha256/sha256block.go
src/crypto/internal/fips/sha256/sha256block_arm64.s
src/crypto/internal/fips/sha256/sha256block_riscv64.s
src/crypto/internal/fips/sha512/_asm/sha512block_amd64_asm.go
src/crypto/internal/fips/sha512/sha512block.go
src/crypto/internal/fips/sha512/sha512block_amd64.s
src/crypto/internal/fips/sha512/sha512block_arm64.s
src/crypto/internal/fips/sha512/sha512block_riscv64.s

index 3fbad718640175ef2f5097a5ab1606e4b611da59..55a400e2502a149e6481c0f8c63be355d868c236 100644 (file)
@@ -10,7 +10,7 @@ package sha256
 
 import "math/bits"
 
-var _K = []uint32{
+var _K = [...]uint32{
        0x428a2f98,
        0x71374491,
        0xb5c0fbcf,
index 0e63cda99c1d623dee8bb3c29f1581b53fcb0a2a..b4082607990a75ee08e67ac675a540a229676c49 100644 (file)
@@ -16,7 +16,7 @@ TEXT ·blockSHA2(SB),NOSPLIT,$0
        MOVD    dig+0(FP), R0                              // Hash value first address
        MOVD    p_base+8(FP), R1                           // message first address
        MOVD    p_len+16(FP), R3                           // message length
-       MOVD    ·_K+0(SB), R2                              // k constants first address
+       MOVD    $·_K+0(SB), R2                             // k constants first address
        VLD1    (R0), [V0.S4, V1.S4]                       // load h(a,b,c,d,e,f,g,h)
        VLD1.P  64(R2), [V16.S4, V17.S4, V18.S4, V19.S4]
        VLD1.P  64(R2), [V20.S4, V21.S4, V22.S4, V23.S4]
index 730ba64abeebee86de2a9ac5f5b6915f8c688419..847b9699a62986d104a9357cbea96ca770aa63f8 100644 (file)
@@ -151,7 +151,7 @@ TEXT ·block(SB),0,$64-32
        ADD     X29, X30, X28
        BEQ     X28, X29, end
 
-       MOV     ·_K(SB), X18           // const table
+       MOV     $·_K(SB), X18          // const table
        ADD     $8, X2, X19             // message schedule
 
        MOV     dig+0(FP), X20
index fa540d0f2d57116f430c0cd7c9f4cd2a003429e5..642f4a2fb29966be439d1d919b6285f9cd17b3d6 100644 (file)
@@ -438,7 +438,7 @@ func blockAVX2() {
 func loop0() {
        Label("loop0")
 
-       _K := NewDataAddr(Symbol{Name: ThatPeskyUnicodeDot + "_K"}, 0)
+       _K := NewDataAddr(Symbol{Name: "$" + ThatPeskyUnicodeDot + "_K"}, 0)
        MOVQ(_K, RBP)
 
        // byte swap first 16 dwords
index 3c96cc343aaeaef8f2992ae785b6ef6d0bf76c5e..517e8389f7efaa28ca509aa302a2a836b8fdb1b4 100644 (file)
@@ -10,7 +10,7 @@ package sha512
 
 import "math/bits"
 
-var _K = []uint64{
+var _K = [...]uint64{
        0x428a2f98d728ae22,
        0x7137449123ef65cd,
        0xb5c0fbcfec4d3b2f,
index 534563ee1410e9c53fa44a48afcd5cedf2b046bd..ce77d20c0481a9bf278f441c05aeeba3eef1f203 100644 (file)
@@ -4526,7 +4526,7 @@ TEXT ·blockAVX2(SB), NOSPLIT, $56-32
        VMOVDQU PSHUFFLE_BYTE_FLIP_MASK<>+0(SB), Y9
 
 loop0:
-       MOVQ    ·_K+0(SB), BP
+       MOVQ    $·_K+0(SB), BP
        VMOVDQU (DI), Y4
        VPSHUFB Y9, Y4, Y4
        VMOVDQU 32(DI), Y5
index 1b192ae0794e417d6862e7ab14f3bf9f2ff8d871..cabe262548ca2bd71554cc8a695924cbfbbbded1 100644 (file)
@@ -45,7 +45,7 @@ TEXT ·blockSHA512(SB),NOSPLIT,$0
        MOVD    dig+0(FP), R0
        MOVD    p_base+8(FP), R1
        MOVD    p_len+16(FP), R2
-       MOVD    ·_K+0(SB), R3
+       MOVD    $·_K+0(SB), R3
 
        // long enough to prefetch
        PRFM    (R3), PLDL3KEEP
index 0839cf0350643e3f67a70089e6722741ec6b23f0..9614f520090efd737dfd778cd0406fded961af18 100644 (file)
@@ -160,7 +160,7 @@ TEXT ·block(SB),0,$128-32
        ADD     X29, X30, X28
        BEQ     X28, X29, end
 
-       MOV     ·_K(SB), X18           // const table
+       MOV     $·_K(SB), X18          // const table
        ADD     $8, X2, X19             // message schedule
 
        MOV     dig+0(FP), X20