]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: fix reordering of plt/rel
authorDavid Crawshaw <crawshaw@golang.org>
Wed, 20 Apr 2016 23:10:20 +0000 (19:10 -0400)
committerMichael Hudson-Doyle <michael.hudson@canonical.com>
Thu, 21 Apr 2016 02:19:11 +0000 (02:19 +0000)
For the Solaris and S/390 builders.

Change-Id: Id9a83e0df91e6d0df8488ec5e2a546ba8e2d800e
Reviewed-on: https://go-review.googlesource.com/22327
Run-TryBot: David Crawshaw <crawshaw@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Michael Hudson-Doyle <michael.hudson@canonical.com>
Reviewed-by: Michael Munday <munday@ca.ibm.com>
src/cmd/link/internal/ld/data.go

index cc509fbc6d111d863b373439871e5de8d3057d67..e73fa041a424894372ece7fb95c094cad5334a3d 100644 (file)
@@ -1863,16 +1863,16 @@ func dodataSect(symn int, syms []*LSym) []*LSym {
                        }
                }
                if reli >= 0 && plti >= 0 && plti != reli+1 {
-                       newSyms := make([]*LSym, 0, len(syms))
-                       plt := syms[plti]
-                       newSyms = append(newSyms, syms[:reli+1]...)
-                       newSyms = append(newSyms, plt)
-                       newSyms = append(newSyms, syms[reli+1:plti]...)
-                       newSyms = append(newSyms, syms[plti+1:]...)
-                       if len(newSyms) != len(syms) {
-                               Diag("plt move failed: len %d/%d", len(newSyms), len(syms))
+                       var first, second int
+                       if plti > reli {
+                               first, second = reli, plti
+                       } else {
+                               first, second = plti, reli
                        }
-                       syms = newSyms
+                       rel, plt := syms[reli], syms[plti]
+                       copy(syms[first+2:], syms[first+1:second])
+                       syms[first+0] = rel
+                       syms[first+1] = plt
                }
        }