[PATCH] microblaze: fix __syscall_cancel_arch

Frager, Neal neal.frager@amd.com
Fri Oct 17 12:29:38 GMT 2025


[AMD Official Use Only - AMD Internal Distribution Only]

> The __syscall_cancel_arch function has an epilogue that does not match
> the prologue. The stack is not used and the return address still lies in
> r15 when reaching the epilogue. Fix the epilogue by simply returning
> from the function.
>
> Signed-off-by: Luc Michel <luc.michel@amd.com>

> LGTM.  How did you tested? I tried to come up with an simulated microblaze
> environment, but there is no official qemu support (only qemu-user).

I believe the easiest solution is to use Buildroot for verifying this patch,
as a qemu is included for microblaze.

To test with Buildroot, you can take the master branch:
git clone https://gitlab.com/buildroot.org/buildroot.git

Then add this patch to the package/glibc directory, so that it gets applied
to the glibc build.

Next modify the configs/qemu_microblazeel_mmu_defconfig file to
add the following config:
BR2_GCC_VERSION_15_X=y

Then to build:
make qemu_microblazeel_mmu_defconfig
make

Then to run:
qemu-system-microblazeel -M petalogix-s3adsp1800 -kernel output/images/linux.bin -serial stdio


> ---
>
> Hi,
> This bug was introduced by 89b53077d2a58f00e7debdfe58afabe953dac60d
> (BZ#12683).
>
> https://sourceware.org/bugzilla/show_bug.cgi?id=12683 suggests that the
> author copied coded generated by GCC. This is probably why the epilogue
> was wrong.
>
> I have yet to create a Bugzilla entry for this. I just requested an
> accound and waiting for it.
>
> Thanks
>
> Luc
>
> ---
>  sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S b/sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S
> index 38150e6a94..3e8dc96a93 100644
> --- a/sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S
> +++ b/sysdeps/unix/sysv/linux/microblaze/syscall_cancel.S
> @@ -48,13 +48,12 @@ __syscall_cancel_arch_start:
>
>       .globl __syscall_cancel_arch_end
>  __syscall_cancel_arch_end:
>
>       nop
> -     lwi     r15,r1,0
>       rtsd    r15,8
> -     addik   r1,r1,28
> +     nop
>
>  1:
>       brlid   r15, __syscall_do_cancel
>       nop
>

Reviewed-by: Neal Frager <neal.frager@amd.com>

Best regards,
Neal Frager
AMD



More information about the Libc-alpha mailing list