]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: improve gap detection in TestPIESize
authorCherry Zhang <cherryyz@google.com>
Mon, 24 Feb 2020 21:24:29 +0000 (16:24 -0500)
committerCherry Zhang <cherryyz@google.com>
Tue, 25 Feb 2020 02:17:17 +0000 (02:17 +0000)
In CL 210180 we detect gaps between PT_LOAD segments and subtract
them from size calculation. The code there only works when
PT_LOAD segments are next to each other. But it is possible that
there are other segments in between (e.g. a GNU_RELRO segment).
Relax the gap detection to count gaps between PT_LOAD segments
regardless of whether they are next to each other.

Updates #36023.
Updates #35545.

Change-Id: I8b94506359fa649a4478acc742d86d4b16022dbc
Reviewed-on: https://go-review.googlesource.com/c/go/+/220654
Run-TryBot: Cherry Zhang <cherryyz@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Than McIntosh <thanm@google.com>
Reviewed-by: Ian Lance Taylor <iant@golang.org>
src/cmd/link/elf_test.go

index 88048ed2c53f3b2ffa93c227bf7606fb57b0e61b..2fb4dd8aafc2e7614d153d95343ff9662c986dd9 100644 (file)
@@ -387,15 +387,15 @@ func TestPIESize(t *testing.T) {
                                        }
                                }
                                // also skip gaps between PT_LOAD segments
-                               for i := range ef.Progs {
-                                       if i == 0 {
+                               var prev *elf.Prog
+                               for _, seg := range ef.Progs {
+                                       if seg.Type != elf.PT_LOAD {
                                                continue
                                        }
-                                       p1 := ef.Progs[i-1]
-                                       p2 := ef.Progs[i]
-                                       if p1.Type == elf.PT_LOAD && p2.Type == elf.PT_LOAD {
-                                               ret += p2.Off - p1.Off - p1.Filesz
+                                       if prev != nil {
+                                               ret += seg.Off - prev.Off - prev.Filesz
                                        }
+                                       prev = seg
                                }
                                return ret
                        }