aboutsummaryrefslogtreecommitdiff
path: root/src/util/fipstools/delocate/delocate.go
diff options
context:
space:
mode:
Diffstat (limited to 'src/util/fipstools/delocate/delocate.go')
-rw-r--r--src/util/fipstools/delocate/delocate.go16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/util/fipstools/delocate/delocate.go b/src/util/fipstools/delocate/delocate.go
index 8e0e508..cd08bed 100644
--- a/src/util/fipstools/delocate/delocate.go
+++ b/src/util/fipstools/delocate/delocate.go
@@ -1163,6 +1163,22 @@ Args:
args = append(args, argStr)
+ case ruleGOTAddress:
+ if instructionName != "leaq" {
+ return nil, fmt.Errorf("_GLOBAL_OFFSET_TABLE_ used outside of lea")
+ }
+ if i != 0 || len(argNodes) != 2 {
+ return nil, fmt.Errorf("Load of _GLOBAL_OFFSET_TABLE_ address didn't have expected form")
+ }
+ d.gotDeltaNeeded = true
+ changed = true
+ targetReg := d.contents(argNodes[1])
+ args = append(args, ".Lboringssl_got_delta(%rip)")
+ wrappers = append(wrappers, func(k func()) {
+ k()
+ d.output.WriteString(fmt.Sprintf("\taddq .Lboringssl_got_delta(%%rip), %s\n", targetReg))
+ })
+
case ruleGOTLocation:
if instructionName != "movabsq" {
return nil, fmt.Errorf("_GLOBAL_OFFSET_TABLE_ lookup didn't use movabsq")