On 2026-04-28 18:04:47+0100, Stafford Horne wrote:
> On Tue, Apr 28, 2026 at 05:48:51PM +0200, Thomas Weißschuh wrote:
> > Add support for OpenRISC / or1k to nolibc.
> > 
> > _start() uses the same wrapper construct as in arch-sh.h.
> > libgcc is necessary as OpenRISC is missing 64-bit multiplication.
> 
> There are a few minor issues with this patch.

Thanks for taking a look!

> Could you give any background for this?  What are you working on?
> Just getting more coverage in the test suite?

I have no specific goal. In general I'd like for nolibc to support all
architectures which are supported by Linux.

> Do you have any results for or1k, considering one of the issues I
> highlighted before I am not sure this will compile as is.

This compiled fine for me and ran the full nolibc testsuite.
More details below.

With "highlighted before", do you mean "below"?

> > Signed-off-by: Thomas Weißschuh <[email protected]>
> > ---
> >  tools/include/nolibc/Makefile                  |   2 +-
> >  tools/include/nolibc/arch-openrisc.h           | 176 
> > +++++++++++++++++++++++++
> >  tools/include/nolibc/arch.h                    |   2 +
> >  tools/testing/selftests/nolibc/Makefile.nolibc |   5 +
> >  tools/testing/selftests/nolibc/run-tests.sh    |   4 +-
> >  5 files changed, 187 insertions(+), 2 deletions(-)

(...)

> > +#define __nolibc_syscall0(num)                                             
> >    \
> > +({                                                                         
> >    \
> > +   register long _num __asm__ ("r11") = (num);                           \
> > +   register long _ret __asm__ ("r11");                                   \
> > +                                                                         \
> > +   __asm__ volatile (                                                    \
> > +           "l.sys 1\n"                                                   \
> > +           "l.nop\n"                                                     \
> 
> We do not need l.nop for l.sys instructions.  They do not have a delay-slot 
> line
> branches.

Ack, I'll remove them.

> > +           : "=r"(_ret)                                                  \
> > +           : "r"(_num)                                                   \
> > +           : "r3", "r4", "r5", "r6", "r7", "r8",                         \
> > +             _NOLIBC_SYSCALL_CLOBBERLIST                                 \
> > +   );                                                                    \
> > +   _ret;                                                                 \
> > +})

(...)

> > +#ifndef NOLIBC_NO_RUNTIME
> > +/* startup code */
> > +void _start_wrapper(void);
> > +void __attribute__((weak,noreturn))
> > +__nolibc_entrypoint __nolibc_no_stack_protector
> > +_start_wrapper(void)
> > +{
> > +   __asm__ volatile (
> > +           ".global _start\n"           /* The C function will have a 
> > prologue,         */
> > +           ".type _start, @function\n"  /* corrupting "sp"                 
> >              */
> > +           ".weak _start\n"
> > +           "_start:\n"
> > +
> > +           "l.or r3,sp,sp\n"            /* save stack pointer to 3, as 
> > arg1 of _start_c */
> 
> What is sp here?  There is no sp alias in OpenRISC, should it be r1?  Does 
> this
> compile?

It compiles and works with my fairly modern GCC.
It is translated to 'r1'. If it is not idiomatic, I'll change it to r1.

> 
> > +           "l.jal _start_c\n"           /* transfer to c runtime           
> >              */
> > +           "l.nop\n"
> 
> The l.or can go in the delay slot.

Ack.

> Also, preferrably we use spaces between args, and a space to indicate a delay
> slot e.g.
> 
>       "l.jal _start_c\n"
>        "l.or r3, r1, r1\n"

I'd prefer to keep this aligned with the rest of nolibc instead of
aligning it with the arch/openrisc/ code.

> > +
> > +           ".size _start, .-_start\n"
> > +   );
> > +   __nolibc_entrypoint_epilogue();
> > +}
> > +#endif /* NOLIBC_NO_RUNTIME */

(...)

> The rest looks ok to me.

Thanks!


Thomas

Reply via email to