Remove OPENSSL_ia32cap_P and OPENSSL_armcap handling in delocate
We no longer reference these variables directly.
Bug: 42290548
Change-Id: Ie1709701e5f13ceff6d389ee3127ce9baba72ec7
Reviewed-on: https://boringssl-review.googlesource.com/c/boringssl/+/76547
Auto-Submit: David Benjamin <davidben@google.com>
Commit-Queue: Adam Langley <agl@google.com>
Reviewed-by: Adam Langley <agl@google.com>
diff --git a/util/fipstools/delocate/delocate.go b/util/fipstools/delocate/delocate.go
index a1107f1..a1a990e 100644
--- a/util/fipstools/delocate/delocate.go
+++ b/util/fipstools/delocate/delocate.go
@@ -411,18 +411,13 @@
panic("non-zero offset for helper-based reference")
}
- var helperFunc string
- if symbol == "OPENSSL_armcap_P" {
- helperFunc = ".LOPENSSL_armcap_P_addr"
- } else {
- // GOT helpers also dereference the GOT entry, thus the subsequent ldr
- // instruction, which would normally do the dereferencing, needs to be
- // dropped. GOT helpers have to include the dereference because the
- // assembler doesn't support ":got_lo12:foo" offsets except in an ldr
- // instruction.
- d.gotExternalsNeeded[symbol] = struct{}{}
- helperFunc = gotHelperName(symbol)
- }
+ // GOT helpers also dereference the GOT entry, thus the subsequent ldr
+ // instruction, which would normally do the dereferencing, needs to be
+ // dropped. GOT helpers have to include the dereference because the
+ // assembler doesn't support ":got_lo12:foo" offsets except in an ldr
+ // instruction.
+ d.gotExternalsNeeded[symbol] = struct{}{}
+ helperFunc := gotHelperName(symbol)
// Clear the red-zone. I can't find a definitive answer about whether Linux
// Aarch64 includes a red-zone, but Microsoft has a 16-byte one and Apple a
@@ -969,37 +964,6 @@
symbol, offset, section, didChange, symbolIsLocal, memRef := d.parseMemRef(arg.up)
changed = didChange
- if symbol == "OPENSSL_ia32cap_P" && section == "" {
- if instructionName != "leaq" {
- return nil, fmt.Errorf("non-leaq instruction %q referenced OPENSSL_ia32cap_P directly", instructionName)
- }
-
- if i != 0 || len(argNodes) != 2 || !d.isRIPRelative(memRef) || len(offset) > 0 {
- return nil, fmt.Errorf("invalid OPENSSL_ia32cap_P reference in instruction %q", instructionName)
- }
-
- target := argNodes[1]
- assertNodeType(target, ruleRegisterOrConstant)
- reg := d.contents(target)
-
- if !strings.HasPrefix(reg, "%r") {
- return nil, fmt.Errorf("tried to load OPENSSL_ia32cap_P into %q, which is not a standard register.", reg)
- }
-
- changed = true
-
- // Flag-altering instructions (i.e. addq) are going to be used so the
- // flags need to be preserved.
- wrappers = append(wrappers, saveFlags(d.output, false /* Red Zone not yet cleared */))
-
- wrappers = append(wrappers, func(k func()) {
- d.output.WriteString("\tleaq\tOPENSSL_ia32cap_addr_delta(%rip), " + reg + "\n")
- d.output.WriteString("\taddq\t(" + reg + "), " + reg + "\n")
- })
-
- break Args
- }
-
switch section {
case "":
if _, knownSymbol := d.symbols[symbol]; knownSymbol {
@@ -1142,15 +1106,7 @@
redzoneCleared = true
}
- if symbol == "OPENSSL_ia32cap_P" {
- // Flag-altering instructions (i.e. addq) are going to be used so the
- // flags need to be preserved.
- wrappers = append(wrappers, saveFlags(d.output, redzoneCleared))
- wrappers = append(wrappers, func(k func()) {
- d.output.WriteString("\tleaq\tOPENSSL_ia32cap_addr_delta(%rip), " + targetReg + "\n")
- d.output.WriteString("\taddq\t(" + targetReg + "), " + targetReg + "\n")
- })
- } else if useGOT {
+ if useGOT {
wrappers = append(wrappers, d.loadFromGOT(d.output, targetReg, symbol, section, redzoneCleared))
} else {
wrappers = append(wrappers, func(k func()) {
@@ -1355,9 +1311,6 @@
// to match that behaviour otherwise warnings result.
fileDirectivesContainMD5 := false
- // OPENSSL_ia32cap_get will be synthesized by this script.
- symbols["OPENSSL_ia32cap_get"] = struct{}{}
-
for _, input := range inputs {
forEachPath(input.ast.up, func(node *node32) {
symbol := input.contents[node.begin:node.end]
@@ -1503,12 +1456,6 @@
})
}
- writeAarch64Function(w, ".LOPENSSL_armcap_P_addr", func(w stringWriter) {
- w.WriteString("\tadrp x0, OPENSSL_armcap_P\n")
- w.WriteString("\tadd x0, x0, :lo12:OPENSSL_armcap_P\n")
- w.WriteString("\tret\n")
- })
-
case x86_64:
externalNames := sortedSet(d.gotExternalsNeeded)
for _, name := range externalNames {
@@ -1525,19 +1472,6 @@
w.WriteString("\t.long 0\n")
}
- w.WriteString(".type OPENSSL_ia32cap_get, @function\n")
- w.WriteString(".globl OPENSSL_ia32cap_get\n")
- w.WriteString(localTargetName("OPENSSL_ia32cap_get") + ":\n")
- w.WriteString("OPENSSL_ia32cap_get:\n")
- w.WriteString("\tleaq OPENSSL_ia32cap_P(%rip), %rax\n")
- w.WriteString("\tret\n")
-
- w.WriteString(".extern OPENSSL_ia32cap_P\n")
- w.WriteString(".type OPENSSL_ia32cap_addr_delta, @object\n")
- w.WriteString(".size OPENSSL_ia32cap_addr_delta, 8\n")
- w.WriteString("OPENSSL_ia32cap_addr_delta:\n")
- w.WriteString(".quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta\n")
-
if d.gotDeltaNeeded {
w.WriteString(".Lboringssl_got_delta:\n")
w.WriteString("\t.quad _GLOBAL_OFFSET_TABLE_-.Lboringssl_got_delta\n")
@@ -1805,7 +1739,6 @@
func isSynthesized(symbol string) bool {
return strings.HasSuffix(symbol, "_bss_get") ||
- symbol == "OPENSSL_ia32cap_get" ||
strings.HasPrefix(symbol, "BORINGSSL_bcm_text_")
}
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/in.s b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
index 114ff4f..f8ff4e6 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/in.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/in.s
@@ -25,14 +25,6 @@
adrp x0, .Llocal_data
add x0, x0, :lo12:.Llocal_data
- // armcap
- adrp x1, OPENSSL_armcap_P
- ldr w2, [x1, :lo12:OPENSSL_armcap_P]
-
- // armcap to w0
- adrp x0, OPENSSL_armcap_P
- ldr w1, [x1, :lo12:OPENSSL_armcap_P]
-
// Load from local symbol
adrp x10, .Llocal_data2
ldr q0, [x10, :lo12:.Llocal_data2]
diff --git a/util/fipstools/delocate/testdata/aarch64-Basic/out.s b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
index d77695d..08a6db7 100644
--- a/util/fipstools/delocate/testdata/aarch64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/aarch64-Basic/out.s
@@ -53,27 +53,6 @@
adr x0, .Llocal_data
// WAS add x0, x0, :lo12:.Llocal_data
- // armcap
-// WAS adrp x1, OPENSSL_armcap_P
- sub sp, sp, 128
- stp x0, lr, [sp, #-16]!
- bl .LOPENSSL_armcap_P_addr
- mov x1, x0
- ldp x0, lr, [sp], #16
- add sp, sp, 128
-// WAS ldr w2, [x1, :lo12:OPENSSL_armcap_P]
- ldr w2, [x1]
-
- // armcap to w0
-// WAS adrp x0, OPENSSL_armcap_P
- sub sp, sp, 128
- stp x0, lr, [sp, #-16]!
- bl .LOPENSSL_armcap_P_addr
- ldp xzr, lr, [sp], #16
- add sp, sp, 128
-// WAS ldr w1, [x1, :lo12:OPENSSL_armcap_P]
- ldr w1, [x1]
-
// Load from local symbol
// WAS adrp x10, .Llocal_data2
adr x10, .Llocal_data2
@@ -219,17 +198,6 @@
ret
.cfi_endproc
.size .Lboringssl_loadgot_stderr, .-.Lboringssl_loadgot_stderr
-.p2align 2
-.hidden .LOPENSSL_armcap_P_addr
-.type .LOPENSSL_armcap_P_addr, @function
-.LOPENSSL_armcap_P_addr:
-.cfi_startproc
- hint #34 // bti c
- adrp x0, OPENSSL_armcap_P
- add x0, x0, :lo12:OPENSSL_armcap_P
- ret
-.cfi_endproc
-.size .LOPENSSL_armcap_P_addr, .-.LOPENSSL_armcap_P_addr
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/generic-FileDirectives/out.s b/util/fipstools/delocate/testdata/generic-FileDirectives/out.s
index 84b5134..b2e3daa 100644
--- a/util/fipstools/delocate/testdata/generic-FileDirectives/out.s
+++ b/util/fipstools/delocate/testdata/generic-FileDirectives/out.s
@@ -11,17 +11,6 @@
.text
.loc 1002 2 0
BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/x86_64-BSS/out.s b/util/fipstools/delocate/testdata/x86_64-BSS/out.s
index 2bb54a8..e768027 100644
--- a/util/fipstools/delocate/testdata/x86_64-BSS/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-BSS/out.s
@@ -65,17 +65,6 @@
z_bss_get:
leaq .Lz_local_target(%rip), %rax
ret
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/x86_64-Basic/out.s b/util/fipstools/delocate/testdata/x86_64-Basic/out.s
index f9c9fce..b0b90b0 100644
--- a/util/fipstools/delocate/testdata/x86_64-Basic/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-Basic/out.s
@@ -60,17 +60,6 @@
.text
.loc 2 2 0
BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s b/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s
index 3b7a1ed..bec92c5 100644
--- a/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s
+++ b/util/fipstools/delocate/testdata/x86_64-GOTRewrite/in.s
@@ -1,18 +1,6 @@
.text
foo:
bar:
- # leaq of OPENSSL_ia32cap_P is supported.
- leaq OPENSSL_ia32cap_P(%rip), %r11
-
- # As is the equivalent GOTPCREL movq.
- movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
-
- # And a non-movq instruction via the GOT.
- orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
-
- # ... which targets the default temp register
- orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax
-
# Test that GOTPCREL accesses get translated. They are handled
# differently for local and external symbols.
@@ -39,7 +27,6 @@
# Synthesized symbols do not use the GOT.
movq BORINGSSL_bcm_text_start@GOTPCREL(%rip), %r11
movq foobar_bss_get@GOTPCREL(%rip), %r11
- movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11
# Transforming moves run the transform in-place after the load.
vpbroadcastq stderr@GOTPCREL(%rip), %xmm0
diff --git a/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s
index ae47e41..f77f907 100644
--- a/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-GOTRewrite/out.s
@@ -7,48 +7,6 @@
foo:
.Lbar_local_target:
bar:
- # leaq of OPENSSL_ia32cap_P is supported.
-# WAS leaq OPENSSL_ia32cap_P(%rip), %r11
- leaq -128(%rsp), %rsp
- pushfq
- leaq OPENSSL_ia32cap_addr_delta(%rip), %r11
- addq (%r11), %r11
- popfq
- leaq 128(%rsp), %rsp
-
- # As is the equivalent GOTPCREL movq.
-# WAS movq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
- leaq -128(%rsp), %rsp
- pushfq
- leaq OPENSSL_ia32cap_addr_delta(%rip), %r12
- addq (%r12), %r12
- popfq
- leaq 128(%rsp), %rsp
-
- # And a non-movq instruction via the GOT.
-# WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %r12
- leaq -128(%rsp), %rsp
- pushq %rax
- pushfq
- leaq OPENSSL_ia32cap_addr_delta(%rip), %rax
- addq (%rax), %rax
- popfq
- orq %rax, %r12
- popq %rax
- leaq 128(%rsp), %rsp
-
- # ... which targets the default temp register
-# WAS orq OPENSSL_ia32cap_P@GOTPCREL(%rip), %rax
- leaq -128(%rsp), %rsp
- pushq %rbx
- pushfq
- leaq OPENSSL_ia32cap_addr_delta(%rip), %rbx
- addq (%rbx), %rbx
- popfq
- orq %rbx, %rax
- popq %rbx
- leaq 128(%rsp), %rsp
-
# Test that GOTPCREL accesses get translated. They are handled
# differently for local and external symbols.
@@ -149,8 +107,6 @@
leaq BORINGSSL_bcm_text_start(%rip), %r11
# WAS movq foobar_bss_get@GOTPCREL(%rip), %r11
leaq foobar_bss_get(%rip), %r11
-# WAS movq OPENSSL_ia32cap_get@GOTPCREL(%rip), %r11
- leaq .LOPENSSL_ia32cap_get_local_target(%rip), %r11
# Transforming moves run the transform in-place after the load.
# WAS vpbroadcastq stderr@GOTPCREL(%rip), %xmm0
@@ -296,17 +252,6 @@
stderr_GOTPCREL_external:
.long stderr@GOTPCREL
.long 0
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.Lboringssl_got_delta:
.quad _GLOBAL_OFFSET_TABLE_-.Lboringssl_got_delta
.type BORINGSSL_bcm_text_hash, @object
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
index 92a3a7b..7d3ce77 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/in1.s
@@ -24,9 +24,6 @@
notrack jmp foo@PLT
jbe foo@PLT
- # Synthesized symbols are treated as local ones.
- call OPENSSL_ia32cap_get@PLT
-
# References to local labels are left as-is in the first file.
.Llocal_label:
jbe .Llocal_label
diff --git a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
index f786f13..f0039e4 100644
--- a/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LabelRewrite/out.s
@@ -43,10 +43,6 @@
# WAS jbe foo@PLT
jbe .Lfoo_local_target
- # Synthesized symbols are treated as local ones.
-# WAS call OPENSSL_ia32cap_get@PLT
- call .LOPENSSL_ia32cap_get_local_target
-
# References to local labels are left as-is in the first file.
.Llocal_label:
@@ -112,17 +108,6 @@
.type bcm_redirector_memcpy, @function
bcm_redirector_memcpy:
jmp memcpy@PLT
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/x86_64-LargeMemory/out.s b/util/fipstools/delocate/testdata/x86_64-LargeMemory/out.s
index 091e8b7..ebdf28b 100644
--- a/util/fipstools/delocate/testdata/x86_64-LargeMemory/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-LargeMemory/out.s
@@ -41,17 +41,6 @@
.text
.loc 1 2 0
BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.Lboringssl_got_delta:
.quad _GLOBAL_OFFSET_TABLE_-.Lboringssl_got_delta
.Lboringssl_got_h:
diff --git a/util/fipstools/delocate/testdata/x86_64-Sections/out.s b/util/fipstools/delocate/testdata/x86_64-Sections/out.s
index 1112387..c35826b 100644
--- a/util/fipstools/delocate/testdata/x86_64-Sections/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-Sections/out.s
@@ -47,17 +47,6 @@
.text
.loc 1 2 0
BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash:
diff --git a/util/fipstools/delocate/testdata/x86_64-ThreeArg/out.s b/util/fipstools/delocate/testdata/x86_64-ThreeArg/out.s
index 7a57ed4..2e4ba11 100644
--- a/util/fipstools/delocate/testdata/x86_64-ThreeArg/out.s
+++ b/util/fipstools/delocate/testdata/x86_64-ThreeArg/out.s
@@ -34,17 +34,6 @@
.text
.loc 1 2 0
BORINGSSL_bcm_text_end:
-.type OPENSSL_ia32cap_get, @function
-.globl OPENSSL_ia32cap_get
-.LOPENSSL_ia32cap_get_local_target:
-OPENSSL_ia32cap_get:
- leaq OPENSSL_ia32cap_P(%rip), %rax
- ret
-.extern OPENSSL_ia32cap_P
-.type OPENSSL_ia32cap_addr_delta, @object
-.size OPENSSL_ia32cap_addr_delta, 8
-OPENSSL_ia32cap_addr_delta:
-.quad OPENSSL_ia32cap_P-OPENSSL_ia32cap_addr_delta
.type BORINGSSL_bcm_text_hash, @object
.size BORINGSSL_bcm_text_hash, 32
BORINGSSL_bcm_text_hash: