mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00: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:
parent
0ff323143d
commit
b0c278be40
1 changed files with 12 additions and 9 deletions
|
|
@ -365,16 +365,16 @@ func elf32shdr(out *OutBuf, e *ElfShdr) {
|
||||||
|
|
||||||
func elfwriteshdrs(out *OutBuf) uint32 {
|
func elfwriteshdrs(out *OutBuf) uint32 {
|
||||||
if elf64 {
|
if elf64 {
|
||||||
for i := 0; i < int(ehdr.Shnum); i++ {
|
for _, sh := range shdr {
|
||||||
elf64shdr(out, shdr[i])
|
elf64shdr(out, sh)
|
||||||
}
|
}
|
||||||
return uint32(ehdr.Shnum) * ELF64SHDRSIZE
|
return uint32(len(shdr)) * ELF64SHDRSIZE
|
||||||
}
|
}
|
||||||
|
|
||||||
for i := 0; i < int(ehdr.Shnum); i++ {
|
for _, sh := range shdr {
|
||||||
elf32shdr(out, shdr[i])
|
elf32shdr(out, sh)
|
||||||
}
|
}
|
||||||
return uint32(ehdr.Shnum) * ELF32SHDRSIZE
|
return uint32(len(shdr)) * ELF32SHDRSIZE
|
||||||
}
|
}
|
||||||
|
|
||||||
// elfSortShdrs sorts the section headers so that allocated sections
|
// elfSortShdrs sorts the section headers so that allocated sections
|
||||||
|
|
@ -460,7 +460,6 @@ func newElfShdr(name int64) *ElfShdr {
|
||||||
e.Name = uint32(name)
|
e.Name = uint32(name)
|
||||||
e.shnum = -1 // make invalid for now, set by elfSortShdrs
|
e.shnum = -1 // make invalid for now, set by elfSortShdrs
|
||||||
shdr = append(shdr, e)
|
shdr = append(shdr, e)
|
||||||
ehdr.Shnum++
|
|
||||||
return e
|
return e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1172,8 +1171,7 @@ func elfshname(name string) *ElfShdr {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
off := elfstr[i].off
|
off := elfstr[i].off
|
||||||
for i = 0; i < int(ehdr.Shnum); i++ {
|
for _, sh := range shdr {
|
||||||
sh := shdr[i]
|
|
||||||
if sh.Name == uint32(off) {
|
if sh.Name == uint32(off) {
|
||||||
return sh
|
return sh
|
||||||
}
|
}
|
||||||
|
|
@ -2380,6 +2378,11 @@ elfobj:
|
||||||
pph.Memsz = pph.Filesz
|
pph.Memsz = pph.Filesz
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(shdr) >= 0xffff {
|
||||||
|
Errorf("too many ELF sections")
|
||||||
|
}
|
||||||
|
eh.Shnum = uint16(len(shdr))
|
||||||
|
|
||||||
ctxt.Out.SeekSet(0)
|
ctxt.Out.SeekSet(0)
|
||||||
a := int64(0)
|
a := int64(0)
|
||||||
a += int64(elfwritehdr(ctxt.Out))
|
a += int64(elfwritehdr(ctxt.Out))
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue