From 6525f46707b1ca5b3a47e50e87cf6f8ff7b0f6e6 Mon Sep 17 00:00:00 2001 From: Ian Lance Taylor Date: Thu, 6 Nov 2025 14:20:02 -0800 Subject: [PATCH] cmd/link: change shdr and phdr from arrays to slices Removes an arbitrary and unnecessary limit. Change-Id: Iba04568ed5e6b1a8f8f23369f51f068e830f1059 Reviewed-on: https://go-review.googlesource.com/c/go/+/718600 LUCI-TryBot-Result: Go LUCI Reviewed-by: Cherry Mui Auto-Submit: Ian Lance Taylor Reviewed-by: Junyang Shao --- src/cmd/link/internal/ld/elf.go | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/src/cmd/link/internal/ld/elf.go b/src/cmd/link/internal/ld/elf.go index 0e7d80e43fb..62736ab94bd 100644 --- a/src/cmd/link/internal/ld/elf.go +++ b/src/cmd/link/internal/ld/elf.go @@ -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 }