On 02.07.2026 16:38, Jon Turney wrote:
> The exported _pei386_runtime_relocator function currently only exists as
> a non-functional stub in the Cygwin runtime, merely to satisfy this
> reference synthesized in ld [1].
>
> The function still has contents in the MinGW runtime [2], but is already
> referenced by being explcitly called at crt startup/dll load.
>
> We'd like to drop the (slightly confusing) stub from the Cygwin runtime,
> especially in possible future architectures (e.g aarch64), where
> backwards compatibilty concerns don't exist.
>
> So, for PE+ targets, stop explicitly emitting a reference to
> _pei386_runtime_relocator in the linker.
This PE+ dependency is puzzling me. In a code comment near the end you
mention (only) i386, but ...
> (The archeological record is unclear why this functionality exists in
> ld.
>
> Since --enable-runtime-pseudo-reloc-v1 exists for 32-bit PE arches, and
> out of an abundance of caution, keep emitting it for those targets (i.e.
> i386) where it conceivably might still be needed or useful with an
> ancient runtime.)
... SH, MCore and Arm look to similarly retain the old behavior then. It's
really a distinction between 32-bit and 64-bit targets, and that doesn't
look like a valid criteria here.
The other aspect I'd like to understand a little better before (possibly)
ack-ing is why pseudo-relocations need producing in the first place. If
ld's generating of real relocations still isn't good enough, maybe that
wants fixing? Then the question of whether a reference to that function is
needed simply vanishes.
> @@ -2798,6 +2800,7 @@ make_runtime_pseudo_reloc (const char *name
> ATTRIBUTE_UNUSED,
> return abfd;
> }
>
> +#ifndef pe_use_plus
> /* .section .rdata
> .rva __pei386_runtime_relocator */
As an aside, the name of this symbol looks to be in conflict with the
logic also applying to other architectures.
Jan
> @@ -2894,11 +2898,15 @@ pe_create_import_fixup (arelent *rel, asection *s,
> bfd_vma addend, char *name,
> link_info.output_bfd);
> add_bfd_to_link (b, bfd_get_filename (b), &link_info);
>
> + /* We think this is entirely useless, but emit a reference to the
> + relocator on the i386 target, just in case. */
> +#ifndef pe_use_plus
> if (runtime_pseudo_relocs_created++ == 0)
> {
> b = pe_create_runtime_relocator_reference (link_info.output_bfd);
> add_bfd_to_link (b, bfd_get_filename (b), &link_info);
> }
> +#endif
> }
>
> else if (addend != 0)
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public