mirror of
https://github.com/golang/go.git
synced 2026-02-05 18:35:03 +03:00
cmd/link: use shdr as a slice rather than counting in elfhdr.Shnum
Change-Id: I293e50e3a6ab19fb927099e106095d6aa1241b9f Reviewed-on: https://go-review.googlesource.com/c/go/+/718820 Reviewed-by: Junyang Shao <shaojunyang@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Cherry Mui <cherryyz@google.com>
This commit is contained in:
@@ -365,16 +365,16 @@ func elf32shdr(out *OutBuf, e *ElfShdr) {
|
||||
|
||||
func elfwriteshdrs(out *OutBuf) uint32 {
|
||||
if elf64 {
|
||||
for i := 0; i < int(ehdr.Shnum); i++ {
|
||||
elf64shdr(out, shdr[i])
|
||||
for _, sh := range shdr {
|
||||
elf64shdr(out, sh)
|
||||
}
|
||||
return uint32(ehdr.Shnum) * ELF64SHDRSIZE
|
||||
return uint32(len(shdr)) * ELF64SHDRSIZE
|
||||
}
|
||||
|
||||
for i := 0; i < int(ehdr.Shnum); i++ {
|
||||
elf32shdr(out, shdr[i])
|
||||
for _, sh := range shdr {
|
||||
elf32shdr(out, sh)
|
||||
}
|
||||
return uint32(ehdr.Shnum) * ELF32SHDRSIZE
|
||||
return uint32(len(shdr)) * ELF32SHDRSIZE
|
||||
}
|
||||
|
||||
// elfSortShdrs sorts the section headers so that allocated sections
|
||||
@@ -460,7 +460,6 @@ func newElfShdr(name int64) *ElfShdr {
|
||||
e.Name = uint32(name)
|
||||
e.shnum = -1 // make invalid for now, set by elfSortShdrs
|
||||
shdr = append(shdr, e)
|
||||
ehdr.Shnum++
|
||||
return e
|
||||
}
|
||||
|
||||
@@ -1172,8 +1171,7 @@ func elfshname(name string) *ElfShdr {
|
||||
continue
|
||||
}
|
||||
off := elfstr[i].off
|
||||
for i = 0; i < int(ehdr.Shnum); i++ {
|
||||
sh := shdr[i]
|
||||
for _, sh := range shdr {
|
||||
if sh.Name == uint32(off) {
|
||||
return sh
|
||||
}
|
||||
@@ -2380,6 +2378,11 @@ elfobj:
|
||||
pph.Memsz = pph.Filesz
|
||||
}
|
||||
|
||||
if len(shdr) >= 0xffff {
|
||||
Errorf("too many ELF sections")
|
||||
}
|
||||
eh.Shnum = uint16(len(shdr))
|
||||
|
||||
ctxt.Out.SeekSet(0)
|
||||
a := int64(0)
|
||||
a += int64(elfwritehdr(ctxt.Out))
|
||||
|
||||
Reference in New Issue
Block a user