Message ID | 1528960976-10934-2-git-send-email-vincentc@andestech.com |
---|---|
State | New |
Headers | show |
Series | nds32 glibc port, v3 | expand |
On Thu, 14 Jun 2018, Vincent Chen wrote: > diff --git a/sysdeps/unix/sysv/linux/nds32/Makefile b/sysdeps/unix/sysv/linux/nds32/Makefile > new file mode 100644 > index 0000000..2709916 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/nds32/Makefile > @@ -0,0 +1,17 @@ > +ifeq ($(subdir),misc) > +sysdep_headers += sys/cachectl.h > +sysdep_routines += cacheflush prctl mremap > +endif Why do you need prctl and mremap here? I'd expect the generic builds of those functions from syscalls.list to work fine.
On Thu, Jun 14, 2018 at 09:27:17PM +0800, Joseph Myers wrote: > On Thu, 14 Jun 2018, Vincent Chen wrote: > > > diff --git a/sysdeps/unix/sysv/linux/nds32/Makefile b/sysdeps/unix/sysv/linux/nds32/Makefile > > new file mode 100644 > > index 0000000..2709916 > > --- /dev/null > > +++ b/sysdeps/unix/sysv/linux/nds32/Makefile > > @@ -0,0 +1,17 @@ > > +ifeq ($(subdir),misc) > > +sysdep_headers += sys/cachectl.h > > +sysdep_routines += cacheflush prctl mremap > > +endif > > Why do you need prctl and mremap here? I'd expect the generic builds of > those functions from syscalls.list to work fine. > The generic version of these two functions cannot work for FPU supported ISA However, this patchset does not support FPU ISA. I will remove it in the next version patch. ( For nds32 FPU ISA, the calling convention for variable argument is different to general case. For general case, caller through general purpose register to pass argument. When caller finds the argument of callee function is variable-length, caller places those variable arguments to stack instead of general purpose registers. The difference causes variable-length functions can not use internal_syscallX macro in sysdep.h to issue syscall. Therefore, these generic builds of variable-length functions from syscalls.list cannot work ) > -- > Joseph S. Myers > joseph@codesourcery.com
diff --git a/sysdeps/nds32/Implies b/sysdeps/nds32/Implies new file mode 100644 index 0000000..387a0ca --- /dev/null +++ b/sysdeps/nds32/Implies @@ -0,0 +1,3 @@ +wordsize-32 +ieee754/dbl-64 +ieee754/flt-32 diff --git a/sysdeps/nds32/Makefile b/sysdeps/nds32/Makefile new file mode 100644 index 0000000..5651161 --- /dev/null +++ b/sysdeps/nds32/Makefile @@ -0,0 +1,9 @@ +ifeq ($(subdir),elf) +sysdep-dl-routines += tlsdesc dl-tlsdesc +sysdep_routines += tlsdesc dl-tlsdesc +sysdep-rtld-routines += tlsdesc dl-tlsdesc +endif + +ifeq ($(subdir),csu) +gen-as-const-headers += tlsdesc.sym +endif diff --git a/sysdeps/nds32/configure b/sysdeps/nds32/configure new file mode 100755 index 0000000..8ece006 --- /dev/null +++ b/sysdeps/nds32/configure @@ -0,0 +1,10 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/nds32. + +# For nds32 ABI for linux toolchain, the $r15 register is not only an +# assembler reserved register but also used to passing the sysem call +# number. In order to ensure the data safety, $r15 is included in +# clobber list by default. Using the option -minline-asm-r15 can +# avoid the conflict between asm-specifier for syscall number and +# clobber list when issuing system call by inline assembly. +CFLAGS="$CFLAGS -minline-asm-r15" diff --git a/sysdeps/nds32/configure.ac b/sysdeps/nds32/configure.ac new file mode 100644 index 0000000..c0e2494 --- /dev/null +++ b/sysdeps/nds32/configure.ac @@ -0,0 +1,10 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/nds32. + +# For nds32 ABI for linux toolchain, the $r15 register is not only an +# assembler reserved register but also used to passing the sysem call +# number. In order to ensure the data safety, $r15 is included in +# clobber list by default. Using the option -minline-asm-r15 can +# avoid the conflict between asm-specifier for syscall number and +# clobber list when issuing system call by inline assembly. +CFLAGS="$CFLAGS -minline-asm-r15" diff --git a/sysdeps/nds32/nofpu/Implies b/sysdeps/nds32/nofpu/Implies new file mode 100644 index 0000000..abcbadb --- /dev/null +++ b/sysdeps/nds32/nofpu/Implies @@ -0,0 +1 @@ +ieee754/soft-fp diff --git a/sysdeps/nds32/nptl/Makefile b/sysdeps/nds32/nptl/Makefile new file mode 100644 index 0000000..6f553d6 --- /dev/null +++ b/sysdeps/nds32/nptl/Makefile @@ -0,0 +1,4 @@ + +ifeq ($(subdir),csu) +gen-as-const-headers += tcb-offsets.sym +endif diff --git a/sysdeps/nds32/preconfigure b/sysdeps/nds32/preconfigure new file mode 100644 index 0000000..a5faf50 --- /dev/null +++ b/sysdeps/nds32/preconfigure @@ -0,0 +1,30 @@ +case "$machine" in +nds32*) + endian_abi_type=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __NDS32_E\([B|L]*\)__ 1/\1/p'` + case "$endian_abi_type" in + L) + endian_abi_type=0 + ;; + B) + echo "glibc does not yet support big-endian configuration" >&2 + exit 1 + ;; + esac + + float_abi_type=`$CC $CFLAGS $CPPFLAGS -E -dM -xc /dev/null | sed -n 's/^#define __NDS32_EXT_FPU_\([S|D]P*\) 1/\1/p' | wc -l` + case "$float_abi_type" in + 0) + with_fp_cond=0 + ;; + *) + echo "glibc does not yet support systems with FP instructions" >&2 + exit 1 + ;; + esac + + base_machine=nds32 + machine=nds32 + + $as_echo "#define NDS32_ABI_TYPE 0x$float_abi_type$endian_abi_type" >>confdefs.h + ;; +esac diff --git a/sysdeps/unix/sysv/linux/nds32/Implies b/sysdeps/unix/sysv/linux/nds32/Implies new file mode 100644 index 0000000..91b4e1e --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Implies @@ -0,0 +1,3 @@ +nds32/nptl +unix/sysv/linux/generic/wordsize-32 +unix/sysv/linux/generic diff --git a/sysdeps/unix/sysv/linux/nds32/Makefile b/sysdeps/unix/sysv/linux/nds32/Makefile new file mode 100644 index 0000000..2709916 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Makefile @@ -0,0 +1,17 @@ +ifeq ($(subdir),misc) +sysdep_headers += sys/cachectl.h +sysdep_routines += cacheflush prctl mremap +endif + + +ifeq ($(subdir),stdlib) +gen-as-const-headers += ucontext_i.sym +endif + +ifeq ($(subdir),elf) +sysdep_routines += dl-vdso +ifeq ($(build-shared),yes) +# This is needed for DSO loading from static binaries. +sysdep-dl-routines += dl-static +endif +endif diff --git a/sysdeps/unix/sysv/linux/nds32/Versions b/sysdeps/unix/sysv/linux/nds32/Versions new file mode 100644 index 0000000..abe47ce --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/Versions @@ -0,0 +1,11 @@ +ld { + GLIBC_PRIVATE { + # used for loading by static libraries + _dl_var_init; + } +} +libc { + GLIBC_2.28 { + cacheflush; + } +} diff --git a/sysdeps/unix/sysv/linux/nds32/configure b/sysdeps/unix/sysv/linux/nds32/configure new file mode 100755 index 0000000..ceb6c90 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/configure @@ -0,0 +1,4 @@ +# This file is generated from configure.ac by Autoconf. DO NOT EDIT! + # Local configure fragment for sysdeps/unix/sysv/linux/nds32. + +arch_minimum_kernel=4.17.0 diff --git a/sysdeps/unix/sysv/linux/nds32/configure.ac b/sysdeps/unix/sysv/linux/nds32/configure.ac new file mode 100644 index 0000000..91bf889 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/configure.ac @@ -0,0 +1,4 @@ +GLIBC_PROVIDES dnl See aclocal.m4 in the top level source directory. +# Local configure fragment for sysdeps/unix/sysv/linux/nds32. + +arch_minimum_kernel=4.17.0 diff --git a/sysdeps/unix/sysv/linux/nds32/shlib-versions b/sysdeps/unix/sysv/linux/nds32/shlib-versions new file mode 100644 index 0000000..a94d2a4 --- /dev/null +++ b/sysdeps/unix/sysv/linux/nds32/shlib-versions @@ -0,0 +1,7 @@ +DEFAULT GLIBC_2.28 + +%if NDS32_ABI_TYPE == 0 +ld=ld-linux-nds32le.so.1 +%else +%error cannot determine ABI +%endif