Messages in this thread | | | Date | Wed, 2 Aug 2023 08:43:23 -0700 | Subject | Re: [PATCH RESEND^2] nios2: support clone3() syscall | From | Randy Dunlap <> |
| |
On 8/2/23 01:16, Arnd Bergmann wrote: > On Wed, Aug 2, 2023, at 09:40, Christian Brauner wrote: >> On Tue, Aug 01, 2023 at 10:19:24PM -0700, Randy Dunlap wrote: >>> Add support for the clone3() syscall to prevent a warning from >>> checksyscalls.sh: >>> >>> <stdin>:1517:2: warning: #warning syscall clone3 not implemented [-Wcpp] >>> >>> Signed-off-by: Randy Dunlap <rdunlap@infradead.org> >>> Cc: Dinh Nguyen <dinguyen@kernel.org> >>> Cc: Christian Brauner <christian@brauner.io> >>> --- >>> Is there some reason that NIOS2 should not (does not) support clone3()? >> >> Cc Arnd, in case he knows. > > As far as I remember, you left a few architectures without clone3 > during the introduction when there was neither an obvious way to > handle the syscall entry nor a maintainer to have a look. > > Right now, it seems to be missing on alpha, hexagon, ia64, > microblaze, nios2, sh and sparc. > > There are a few architectures that implement a custom entry > point for both clone and clone3. The other architectures that > provide the generic sys_clone3 also use the generic sys_clone. > These are the wrappers I see: > > # ARC > ENTRY(sys_clone3_wrapper) > SAVE_CALLEE_SAVED_USER > bl @sys_clone3 > DISCARD_CALLEE_SAVED_USER > > GET_CURR_THR_INFO_FLAGS r10 > and.f 0, r10, _TIF_SYSCALL_WORK > bnz tracesys_exit > > b .Lret_from_system_call > END(sys_clone3_wrapper) > > # m68k > ENTRY(__sys_clone3) > SAVE_SWITCH_STACK > pea %sp@(SWITCH_STACK_SIZE) > jbsr m68k_clone3 > lea %sp@(28),%sp > rts > > > # mips > save_static_function(sys_clone3); > > # openrisc > ENTRY(__sys_clone3) > l.movhi r29,hi(sys_clone3) > l.j _fork_save_extra_regs_and_call > l.ori r29,r29,lo(sys_clone3) > > # parisc > .macro fork_like name > ENTRY_CFI(sys_\name\()_wrapper) > mfctl %cr30,%r1 > ldo TASK_REGS(%r1),%r1 > reg_save %r1 > mfctl %cr27, %r28 > ldil L%sys_\name, %r31 > be R%sys_\name(%sr4,%r31) > STREG %r28, PT_CR27(%r1) > ENDPROC_CFI(sys_\name\()_wrapper) > .endm > fork_like clone > fork_like clone3 > > Nios3 in turn has a wrapper for sys_clone: > ENTRY(sys_clone) > SAVE_SWITCH_STACK > subi sp, sp, 4 /* make space for tls pointer */ > stw r8, 0(sp) /* pass tls pointer (r8) via stack (5th argument) */ > call nios2_clone > addi sp, sp, 4 > RESTORE_SWITCH_STACK > ret > > so my guess would be that it needs the same thing > for clone3 as well. Same thing on alpha, ia64 and > sparc. On the other hand hexagon, microblaze and sh > use the generic sys_clone() and can probably just > enable sys_clone3() without extra work unless it's > already broken.
OK, thanks for the help.
-- ~Randy
| |