Delocate more types of references.
References to global symbols generate relocations, which breaks the
integrity check.
Change-Id: If6fa06d5d924294ab496c32e7f082a1ae60fdb24
Reviewed-on: https://boringssl-review.googlesource.com/15025
Commit-Queue: David Benjamin <davidben@google.com>
Reviewed-by: David Benjamin <davidben@google.com>
CQ-Verified: CQ bot account: commit-bot@chromium.org <commit-bot@chromium.org>
diff --git a/crypto/fipsmodule/delocate.go b/crypto/fipsmodule/delocate.go
index 039360a..d099823 100644
--- a/crypto/fipsmodule/delocate.go
+++ b/crypto/fipsmodule/delocate.go
@@ -164,7 +164,7 @@
}
switch parts[0] {
- case "call", "callq", "jmp":
+ case "call", "callq", "jmp", "jne", "jb", "jz", "jnz", "ja":
target := parts[1]
// indirect via register or local label
if strings.HasPrefix(target, "*") || strings.HasPrefix(target, ".L") {
@@ -201,6 +201,22 @@
redirectors[redirectorName] = target
continue
+ case "leaq":
+ if strings.Contains(line, "BORINGSSL_bcm_text_dummy_") {
+ line = strings.Replace(line, "BORINGSSL_bcm_text_dummy_", "BORINGSSL_bcm_text_", -1)
+ }
+
+ target := strings.SplitN(parts[1], ",", 2)[0]
+ if strings.HasSuffix(target, "(%rip)") {
+ target = target[:len(target)-6]
+ if isGlobal := symbols[target]; isGlobal {
+ line = strings.Replace(line, target, localTargetName(target), 1)
+ }
+ }
+
+ ret = append(ret, line)
+ continue
+
case ".file":
// Do not reorder .file directives. These define
// numbered files which are referenced by other debug
@@ -265,9 +281,6 @@
}
}
- if parts[0] == "leaq" {
- line = strings.Replace(line, "BORINGSSL_bcm_text_dummy_", "BORINGSSL_bcm_text_", -1)
- }
ret = append(ret, line)
}
}