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>
}
}
// 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
}