All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: Adhemerval Zanella <adhemerval.zanella@linaro.org>,
	"libc-alpha@sourceware.org" <libc-alpha@sourceware.org>
Cc: "linux-snps-arc@lists.infradead.org"
	<linux-snps-arc@lists.infradead.org>
Subject: Re: [PATCH v6 07/13] ARC: Linux Syscall Interface
Date: Sat, 30 May 2020 02:02:50 +0000	[thread overview]
Message-ID: <5024a581-4018-14df-b75c-17aeaf360e46@synopsys.com> (raw)
In-Reply-To: <248259c7-8263-805d-56cd-9db397eb9c04@linaro.org>

On 5/29/20 9:49 AM, Adhemerval Zanella via Libc-alpha wrote:
> 
> 
> On 22/04/2020 22:41, Vineet Gupta via Libc-alpha wrote:
>> Signed-off-by: Vineet Gupta <vgupta@synopsys.com>
> 
> As prior patches we do not use DCO, but rather copyright assignment.
> 

>> diff --git a/sysdeps/unix/sysv/linux/arc/arch-syscall.h b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
>> new file mode 100644
>> index 000000000000..2b017eb5bbaa
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/arc/arch-syscall.h
>> @@ -0,0 +1,303 @@
>> +/* AUTOGENERATED by update-syscall-lists.py.  */
>> +#define __NR_accept 202
>> +#define __NR_accept4 242
>> +#define __NR_acct 89
>> +#define __NR_add_key 217

>> +#define __NR_vmsplice 75
>> +#define __NR_wait4 260
>> +#define __NR_waitid 95
>> +#define __NR_write 64
>> +#define __NR_writev 66
> 
> Ok, although I did not confered it was done with lastest Linux kernel 
> releases used by build-many-glibcs.py. You might double check it.

I did use 5.6 kernel at the time, will double check though. Thx.

>> diff --git a/sysdeps/unix/sysv/linux/arc/clone.S b/sysdeps/unix/sysv/linux/arc/clone.S

>> +
>> +/* int clone(int (*fn)(void *), void *child_stack,
>> +           int flags, void *arg, ...
>> +           < pid_t *ptid, struct user_desc *tls, pid_t *ctid > );
>> +
>> + NOTE: I'm assuming that the last 3 args are NOT var-args and in case all
>> +	3 are not relevant, caller will nevertheless pass those as NULL.
> 
> Maybe we should update our clone prototype, although this might incur 
> in a ABI break. The assumption here should be ok, since all other
> implementations do the same.
> 
>> +
>> + clone syscall in kernel (ABI: CONFIG_CLONE_BACKWARDS)
>> +
>> +  int sys_clone(unsigned long int clone_flags,
>> +	        unsigned long int newsp,
>> +		int __user *parent_tidptr,
>> +		void *tls,
>> +		int __user *child_tidptr).  */
>> +
>> +ENTRY (__clone)
>> +	cmp	r0, 0		; @fn can't be NULL
>> +	cmp.ne	r1, 0		; @child_stack can't be NULL
>> +	bz	.L__sys_err
>> +
>> +	; save some of the orig args
>> +	; r0 containg @fn will be clobbered AFTER syscall (with ret val)
>> +	; rest are clobbered BEFORE syscall due to different arg ordering
>> +	mov	r10, r0		; @fn
>> +	mov	r11, r3		; @args
>> +	mov	r12, r2		; @clone_flags
>> +	mov	r9,  r5		; @tls
>> +
>> +	; adjust libc args for syscall
>> +
>> +	mov 	r0, r2		; libc @flags is 1st syscall arg
>> +	mov	r2, r4		; libc @ptid
>> +	mov	r3, r5		; libc @tls
>> +	mov	r4, r6		; libc @ctid
>> +	mov	r8, __NR_clone
>> +	ARC_TRAP_INSN
>> +
>> +	cmp	r0, 0		; return code : 0 new process, !0 parent
>> +	blt	.L__sys_err2	; < 0 (signed) error
>> +	jnz	[blink]		; Parent returns
>> +
>> +	; ----- child starts here ---------
>> +
>> +	; Setup TP register (only recent kernels v4.19+ do that)
>> +	and.f	0, r12, CLONE_SETTLS
>> +	mov.nz	r25, r9
> 
> Do you still need to set it since the minimum supported kernel
> for ARC is 5.1 ?

Right we can drop this.


> It should be safe for internal glibc usage, since for both pthread
> and posix_spawn it blocks all signals including SIGCANCEL and SIGXID.
> However this is still small race window if this is called directly 
> with pthread cancellation or g*uid in multithread.
> 
>> +
>> +	; child jumps off to @fn with @arg as argument, and returns here
>> +	jl.d	[r10]
>> +	mov	r0, r11
>> +
>> +	; exit() with result from @fn (already in r0)
>> +	mov	r8, __NR_exit
>> +	ARC_TRAP_INSN
>> +	; In case it ever came back
>> +	flag	1
>> +
>> +.L__sys_err:
> 
> Can't you use L(...) macro as other architectures? 

OK will do.

> 
>> diff --git a/sysdeps/unix/sysv/linux/arc/mmap_internal.h b/sysdeps/unix/sysv/linux/arc/mmap_internal.h
>> new file mode 100644
>> index 000000000000..19aa078dd45e
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/arc/mmap_internal.h
>> @@ -0,0 +1,27 @@
>> +/* mmap - map files or devices into memory.  Linux/ARC version.
>> +   Copyright (C) 2017-2020 Free Software Foundation, Inc.
>> +   This file is part of the GNU C Library.
>> +
>> +   The GNU C Library is free software; you can redistribute it and/or
>> +   modify it under the terms of the GNU Lesser General Public
>> +   License as published by the Free Software Foundation; either
>> +   version 2.1 of the License, or (at your option) any later version.
>> +
>> +   The GNU C Library is distributed in the hope that it will be useful,
>> +   but WITHOUT ANY WARRANTY; without even the implied warranty of
>> +   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
>> +   Lesser General Public License for more details.
>> +
>> +   You should have received a copy of the GNU Lesser General Public
>> +   License along with the GNU C Library; if not, see
>> +   <https://www.gnu.org/licenses/>.  */
>> +
>> +#ifndef MMAP_ARC_INTERNAL_H
>> +#define MMAP_ARC_INTERNAL_H
>> +
>> +/* 8K is default but determine the shift dynamically with getpagesize.  */
>> +#define MMAP2_PAGE_UNIT -1
>> +
>> +#include_next <mmap_internal.h>
>> +
>> +#endif
> 
> Ok.  I would be interesting if kernel could consolidate de mmap
> implementation to return EINVAL for invalid offsets. A lot of
> architectures have its own implementation to handle.



>> diff --git a/sysdeps/unix/sysv/linux/arc/pt-vfork.S b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
>> new file mode 100644
>> index 000000000000..1cc893170070
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/arc/pt-vfork.S
>> @@ -0,0 +1 @@
>> +/* Not needed.  */
> 
> This file is not required since "nptl: Remove vfork IFUNC-based
> forwarder from libpthread [BZ #20188]" (41d6f74e6cb6a9).

Removed.


>> diff --git a/sysdeps/unix/sysv/linux/arc/sigrestorer.S b/sysdeps/unix/sysv/linux/arc/sigrestorer.S

>> +
>> +#include <sys/syscall.h>
>> +#include <sysdep.h>
>> +#include <tcb-offsets.h>
>> +
>> +/* Note the NOP has to be outside body.  */
>> +	nop
> 
> Wy exactly do you need it here?

It has to do with how ARC gdb recognized sigrestorer. This acts a special marker
used in conjunction with the syscall id. This goes back to days when cfi pseudo
ops were not suppported in toolchain, but the gdb code lingered.

> 
>> +ENTRY (__default_rt_sa_restorer)
>> +	mov r8, __NR_rt_sigreturn
>> +	ARC_TRAP_INSN
>> +	j_s     [blink]
> 
> Ok.



>> diff --git a/sysdeps/unix/sysv/linux/arc/sysctl.mk b/sysdeps/unix/sysv/linux/arc/sysctl.mk
>> new file mode 100644
>> index 000000000000..05a4e2f8c99b
>> --- /dev/null
>> +++ b/sysdeps/unix/sysv/linux/arc/sysctl.mk
>> @@ -0,0 +1 @@
>> +# ARC doesn't support sysctl.
> 
> This file is not required since "Linux: Remove <sys/sysctl.h>
> and the sysctl function" (076f09afbac1a).

Removed.

_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

  reply	other threads:[~2020-05-30  2:03 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-23  1:41 [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 01/13] ARC: ABI Implementation Vineet Gupta
     [not found]   ` <88508d10-2d29-026a-bb54-ad607154ab87@linaro.org>
2020-05-27 22:15     ` Vineet Gupta
2020-05-29 13:56       ` Adhemerval Zanella
     [not found]     ` <a56a35d4-3e9e-9a88-4be5-8553d5f11ad3@synopsys.com>
     [not found]       ` <87mu5jxkv7.fsf@oldenburg2.str.redhat.com>
2020-06-04 19:01         ` Vineet Gupta
2020-06-04 23:56           ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 02/13] ARC: startup and dynamic linking code Vineet Gupta
     [not found]   ` <17957ee6-2bc1-f43b-f184-f0703ba2765f@linaro.org>
2020-05-28  1:14     ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 03/13] ARC: Thread Local Storage support Vineet Gupta
     [not found]   ` <4f7a67fb-6f96-57e6-b827-d1ab5dd6733f@linaro.org>
2020-05-28  1:36     ` Vineet Gupta
2020-06-01 18:53       ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 04/13] ARC: Atomics and Locking primitives Vineet Gupta
     [not found]   ` <03f4a9b3-b1ca-90fa-0b6a-609a3135267d@linaro.org>
2020-04-24  7:23     ` Vineet Gupta
     [not found]     ` <20200427215938.14136-1-vgupta@synopsys.com>
2020-04-27 22:13       ` [PATCH] semaphore: consolidate arch headers into a generic one Vineet Gupta
     [not found]       ` <ac93c301-36d3-b20a-d31c-50c1f3264c68@linaro.org>
2020-05-05 22:59         ` Vineet Gupta
2020-05-08 13:32           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 05/13] ARC: math soft float support Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-05-29 14:12   ` Adhemerval Zanella
2020-05-29 22:28     ` Vineet Gupta
2020-05-29 23:50       ` Vineet Gupta
2020-06-02 17:51         ` Joseph Myers
     [not found]         ` <07887c48-7e07-9f89-035d-3f336a16f2da@synopsys.com>
2020-06-02 18:13           ` static inline math functions (was Re: [PATCH v6 06/13] ARC: hardware floating point support) Joseph Myers
2020-06-02 18:35             ` Adhemerval Zanella
2020-06-05  4:44         ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-06-05 17:22           ` Adhemerval Zanella
2020-06-02 17:48       ` Joseph Myers
2020-04-23  1:41 ` [PATCH v6 07/13] ARC: Linux Syscall Interface Vineet Gupta
2020-05-29 16:49   ` Adhemerval Zanella
2020-05-30  2:02     ` Vineet Gupta [this message]
2020-06-03 19:46     ` Vineet Gupta
2020-06-03 20:04       ` Adhemerval Zanella
2020-06-03 20:17         ` Vineet Gupta
2020-06-04 11:06           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 08/13] ARC: Linux ABI Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 09/13] ARC: Linux Startup and Dynamic Loading Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 10/13] ARC: ABI lists Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 11/13] ARC: Build Infrastructure Vineet Gupta
2020-06-03 19:58   ` Adhemerval Zanella
2020-06-04 15:25     ` Vineet Gupta
2020-06-04 17:05       ` Adhemerval Zanella
2020-06-08  4:18         ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 12/13] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 13/13] Documentation for ARC port Vineet Gupta
2020-05-04 21:21 ` [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-05-15  0:45   ` Vineet Gupta
2020-05-27  1:49     ` Vineet Gupta
     [not found]       ` <d7f1176c-87c6-90c6-161c-4705a47837ea@linaro.org>
2020-05-27 18:38         ` Vineet Gupta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5024a581-4018-14df-b75c-17aeaf360e46@synopsys.com \
    --to=vineet.gupta1@synopsys.com \
    --cc=adhemerval.zanella@linaro.org \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-snps-arc@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.