arch/x86: Prevent .text/.init overlap with older linkers

Add Kconfig option `X86_BOOTBLOCK_EXTRA_PROGRAM_SZ` to reserve extra
space, avoiding overlap between .text and .init sections when using
older linkers (binutils 2.3x). Default is 1024 bytes (1 KiB) for
ChromeOS, 0 otherwise.

BUG=b:332445618
TEST=Built and booted google/rex (32-bit/64-bit).

Change-Id: I019bf6896d84b2a84dff6f22323f0f446c0740b5
Signed-off-by: Subrata Banik <subratabanik@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/81886
Reviewed-by: Dinesh Gehlot <digehlot@google.com>
Reviewed-by: Kapil Porwal <kapilporwal@google.com>
Reviewed-by: Eric Lai <ericllai@google.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Angel Pons <th3fanbus@gmail.com>
diff --git a/src/arch/x86/Kconfig b/src/arch/x86/Kconfig
index d2ae320..7d25561 100644
--- a/src/arch/x86/Kconfig
+++ b/src/arch/x86/Kconfig
@@ -412,4 +412,15 @@
 	  If not set, both CPU and SoC physical address width are
 	  assume to be the same.
 
+config X86_BOOTBLOCK_EXTRA_PROGRAM_SZ
+	int
+	default 1024 if CHROMEOS
+	default 0
+	help
+	  Add extra space to prevent overlap between .text and .init sections.
+	  This is necessary for older linkers (pre-binutils 2.4x) like those used
+	  on ChromeOS platforms.
+
+	  The default value is 1024 bytes (1 KiB) for ChromeOS and 0 for other platforms.
+
 endif
diff --git a/src/arch/x86/bootblock.ld b/src/arch/x86/bootblock.ld
index 73a3d18..1f44d6a 100644
--- a/src/arch/x86/bootblock.ld
+++ b/src/arch/x86/bootblock.ld
@@ -26,7 +26,7 @@
 
 	INCLUDE "bootblock/lib/program.ld"
 
-	PROGRAM_SZ = SIZEOF(.text) + SIZEOF(.data);
+	PROGRAM_SZ = SIZEOF(.text) + SIZEOF(.data) + CONFIG_X86_BOOTBLOCK_EXTRA_PROGRAM_SZ;
 
 	. = MIN(_ECFW_PTR, MIN(_ID_SECTION, _FIT_POINTER)) - EARLYASM_SZ;
 	. = CONFIG(SIPI_VECTOR_IN_ROM) ? ALIGN(4096) : ALIGN(16);