Re: macppc ld.so: move check for unsupported PLT

Mark Kettenis <[email protected]>
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
> Date: Fri, 21 Aug 2026 18:00:55 -0400
> From: George Koehler <[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?

ok kettenis@

> 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.