macppc ld.so: move check for unsupported PLT

George Koehler <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
Pike from https://pike.lysator.liu.se gave a strange error on macppc,

$ pike --features
ld.so: pike: unsupported insecure BSS PLT object
Killed

The PLT is for relocating function calls.  The old BSS PLT for powerpc
is extinct.  Pike used ld -nostartmodules to link a module with no
function calls.  This module has no PLT, and ld.so confused the
absence of a PLT with the presence of a BSS PLT.  This diff fixes it
by moving the check for the secure PLT (if PPC_GOT is nonzero) after
the check for any kind of PLT (if PLTREL is RELA).  Now pike doesn't
die, but if I make a BSS PLT, it still dies:

$ cc -fuse-ld=bfd -Wl,--bss-plt -o here here.c
$ ./here
ld.so: here: unsupported insecure BSS PLT object
Killed

ok to commit?
--gkoehler

Index: powerpc/rtld_machine.c
===================================================================
RCS file: /cvs/src/libexec/ld.so/powerpc/rtld_machine.c,v
diff -u -p -r1.73 rtld_machine.c
--- powerpc/rtld_machine.c	16 Jul 2026 11:21:37 -0000	1.73
+++ powerpc/rtld_machine.c	21 Aug 2026 01:59:18 -0000
@@ -74,9 +74,6 @@ _dl_md_reloc(elf_object_t *object, int r
 	if (relrel > numrela)
 		_dl_die("relcount > numrel: %ld > %d", relrel, numrela);
 
-	if (object->Dyn.info[DT_PROC(DT_PPC_GOT)] == 0)
-		_dl_die("unsupported insecure BSS PLT object");
-
 	/* tight loop for leading RELATIVE relocs */
 	for (i = 0; i < relrel; i++, relas++) {
 		Elf_Addr *r_addr;
@@ -273,6 +270,9 @@ _dl_md_reloc_got(elf_object_t *object, i
 
 	if (object->Dyn.info[DT_PLTREL] != DT_RELA)
 		return 0;
+
+	if (object->Dyn.info[DT_PROC(DT_PPC_GOT)] == 0)
+		_dl_die("unsupported insecure BSS PLT object");
 
 	if (!lazy) {
 		fails = _dl_md_reloc(object, DT_JMPREL, DT_PLTRELSZ);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.