mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-03 18:31:04 +00:00
8cacbcf4a9
Building glibc for RISC-V with Linux 5.3 kernel headers fails because <linux/sched.h>, included in vfork.S for CLONE_* constants, contains a structure definition not safe for inclusion in assembly code. All other architectures already avoid use of that header in vfork.S, either defining the CLONE_* constants locally or embedding the required values directly in the relevant instruction, where they implement vfork using the clone syscall (see the implementations for aarch64, ia64, mips and nios2). This patch makes the RISC-V version define the constants locally like the other architectures. Tested build for all three RISC-V configurations in build-many-glibcs.py with Linux 5.3 headers. * sysdeps/unix/sysv/linux/riscv/vfork.S: Do not include <linux/sched.h>. (CLONE_VM): New macro. (CLONE_VFORK): Likewise.
48 lines
1.4 KiB
ArmAsm
48 lines
1.4 KiB
ArmAsm
/* vfork for Linux, RISC-V version.
|
|
Copyright (C) 2005-2019 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/>. */
|
|
|
|
/* vfork() is just a special case of clone(). */
|
|
|
|
#include <sys/asm.h>
|
|
#include <sysdep.h>
|
|
#define __ASSEMBLY__
|
|
#include <asm/signal.h>
|
|
|
|
#define CLONE_VM 0x00000100 /* Set if VM shared between processes. */
|
|
#define CLONE_VFORK 0x00004000 /* Set if the parent wants the child to
|
|
wake it up on mm_release. */
|
|
|
|
.text
|
|
LEAF (__libc_vfork)
|
|
|
|
li a0, (CLONE_VFORK | CLONE_VM | SIGCHLD)
|
|
mv a1, sp
|
|
|
|
li a7, __NR_clone
|
|
scall
|
|
|
|
bltz a0, 1f
|
|
ret
|
|
|
|
1: j __syscall_error
|
|
END (__libc_vfork)
|
|
|
|
weak_alias (__libc_vfork, vfork)
|
|
strong_alias (__libc_vfork, __vfork)
|
|
libc_hidden_def (__vfork)
|