]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/link: change shdr and phdr from arrays to slices
authorIan Lance Taylor <iant@golang.org>
Thu, 6 Nov 2025 22:20:02 +0000 (14:20 -0800)
committerGopher Robot <gobot@golang.org>
Wed, 12 Nov 2025 17:58:02 +0000 (09:58 -0800)
Removes an arbitrary and unnecessary limit.

Change-Id: Iba04568ed5e6b1a8f8f23369f51f068e830f1059
Reviewed-on: https://go-review.googlesource.com/c/go/+/718600
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: Cherry Mui <cherryyz@google.com>
Auto-Submit: Ian Lance Taylor <iant@golang.org>
Reviewed-by: Junyang Shao <shaojunyang@google.com>
src/cmd/link/internal/ld/elf.go

index 0e7d80e43fb90f9c2485f0e67e21ece015a0c1e4..62736ab94bd4868f80085cc67c41b7d67f16edb3 100644 (file)
@@ -101,10 +101,6 @@ var elfstrdat, elfshstrdat []byte
 // On FreeBSD, cannot be larger than a page.
 const ELFRESERVE = 4096
 
-const (
-       NSECT = 400
-)
-
 var (
        Nelfsym = 1
 
@@ -114,8 +110,8 @@ var (
        elfRelType string
 
        ehdr ElfEhdr
-       phdr [NSECT]*ElfPhdr
-       shdr [NSECT]*ElfShdr
+       phdr = make([]*ElfPhdr, 0, 8)
+       shdr = make([]*ElfShdr, 0, 64)
 
        interp string
 )
@@ -334,12 +330,8 @@ func elfwritephdrs(out *OutBuf) uint32 {
 
 func newElfPhdr() *ElfPhdr {
        e := new(ElfPhdr)
-       if ehdr.Phnum >= NSECT {
-               Errorf("too many phdrs")
-       } else {
-               phdr[ehdr.Phnum] = e
-               ehdr.Phnum++
-       }
+       phdr = append(phdr, e)
+       ehdr.Phnum++
        if elf64 {
                ehdr.Shoff += ELF64PHDRSIZE
        } else {
@@ -352,13 +344,8 @@ func newElfShdr(name int64) *ElfShdr {
        e := new(ElfShdr)
        e.Name = uint32(name)
        e.shnum = elf.SectionIndex(ehdr.Shnum)
-       if ehdr.Shnum >= NSECT {
-               Errorf("too many shdrs")
-       } else {
-               shdr[ehdr.Shnum] = e
-               ehdr.Shnum++
-       }
-
+       shdr = append(shdr, e)
+       ehdr.Shnum++
        return e
 }