Re: [PATCH 0/4] alpha: add IFUNC support

Magnus Lindholm <[email protected]>
Newsgroups gmane.comp.gnu.binutils
Message-ID <CA+=Fv5RZF1A0B5YvYGTGrhbr3BeO5NUzwT0ACvZmEX=aDS2aGg@mail.gmail.com>
On Sun, Aug 9, 2026 at 9:23 PM Matt Turner <[email protected]> wrote:
>
> This series adds STT_GNU_IFUNC and R_ALPHA_IRELATIVE support to the
> Alpha BFD backend, the necessary groundwork for enabling glibc's
> multi-arch optimized string routines on Alpha.
>
> Patch 1 adds the core IFUNC machinery: a new R_ALPHA_IRELATIVE
> relocation (type 42), the HOWTO entry and BFD_RELOC_IRELATIVE mapping,
> and the changes to want_plt, adjust_dynamic_symbol,
> finish_dynamic_symbol, and relocate_section needed to route IFUNC
> symbols through PLT entries and emit IRELATIVE relocations in place of
> JMP_SLOT and RELATIVE ones. Alpha is removed from the exclusion list in
> ld-ifunc/ifunc.exp; some tests fail at this point and are fixed by later
> patches.
>
> Patch 2 fixes two independent failures. A static link that referenced an
> IFUNC hit a BFD assertion because no .rela.iplt section had been
> created; patch 2 creates the section on demand, sizes it from GOT
> entries, and emits the relocations into it so that the C library's
> startup code can apply them. A hidden IFUNC in a shared library (as
> glibc uses for __GI_ aliases) caused a heap corruption because
> finish_dynamic_symbol emitted an unaccounted IRELATIVE into .rela.got;
> the fix is to gate that path on needs_plt as well as the dynamic flag.
>
> Patch 3 prevents the Alpha relaxation pass from turning a call to an
> IFUNC into a direct branch. An IFUNC has no address until its resolver
> runs, so the call must keep going through the GOT entry that IRELATIVE
> fills in at startup; relaxing it away also silently dropped the
> IRELATIVE. After this patch all standard ld-ifunc tests pass.
>
> Patch 4 handles IFUNC symbols with local binding, which have no hash
> table entry. Every IFUNC-related predicate that consulted only the hash
> entry silently treated such a symbol as an ordinary one, producing wrong
> relocations or no relocation at all. This is also what caused glibc's
> configure probe for linker IFUNC support to fail, since it declares its
> test symbol without .globl. New ld-alpha tests cover a data reference to
> a local IFUNC and a call to one, in both static and shared links.
>
> A small GCC patch is also needed to teach the Alpha back end to emit
> STT_GNU_IFUNC on ifunc-attributed function definitions; that will be
> sent separately to the GCC list. glibc multi-arch support for Alpha (the
> motivation for the whole effort) will follow once both toolchain pieces
> are in place.
>

Hi Matt,

I tested the current series, including the v2 revisions posted in this
thread, natively on an AlphaServer ES40 (EV68), configured as
alphaev68-unknown-linux-gnu.

For the full ld testsuite I got:

                     baseline    patched

expected passes 1857 1863
unexpected failures 20 15
unexpected successes 1 1
expected failures 34 35
untested 3 3
unsupported 167 167

Four existing IFUNC tests that fail on the baseline pass with the
current series:

Checking ifunc binaries
ifunc-using shared library does not contain R_ALPHA_IRELATIVE relocation
Local ifunc-using executable does not contain R_ALPHA_IRELATIVE relocation
Static ifunc-using executable does not contain R_ALPHA_IRELATIVE relocation

The two new Alpha IFUNC tests in the current series also pass. All
remaining unexpected failures are identical to the baseline, so I see
no regressions from this series.

One of the five fewer FAILs in the summary above is unrelated to the
series: I changed

#xfail: alpha--

to

#xfail: alpha*--

locally, since alpha-- does not match the
alphaev68-unknown-linux-gnu triplet on my system. This correctly changes
ld-ifunc/ifunc-26 from FAIL to XFAIL.

The full gas and binutils tests also showed no new failures compared
with the unpatched baseline.

Tested-by: Magnus Lindholm [email protected]

Thanks,
Magnus
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.