linux-arch.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
@ 2010-12-25 18:43 Guan Xuetao
  2011-01-06 23:55 ` Arnd Bergmann
  0 siblings, 1 reply; 5+ messages in thread
From: Guan Xuetao @ 2010-12-25 18:43 UTC (permalink / raw)
  To: linux-arch, linux-kernel; +Cc: 雪涛 管

From: Guan Xuetao <guanxuetao@mprc.pku.edu.cn>

This patch includes some generic headers stuff. Because all one-line asm-generic headers
  are auto-generated by ASM_GENERIC_HEADERS in arch/unicore32/Makefile,
  so the rest seems very little. ELF handling functions are also here.

Signed-off-by: Guan Xuetao <guanxuetao@mprc.pku.edu.cn>
---
 arch/unicore32/include/asm/elf.h    |   94 +++++++++++++++++++++++++++++++++++
 arch/unicore32/include/asm/ftrace.h |    4 ++
 arch/unicore32/include/asm/sizes.h  |   47 +++++++++++++++++
 arch/unicore32/include/asm/stat.h   |   71 ++++++++++++++++++++++++++
 arch/unicore32/include/asm/string.h |   52 +++++++++++++++++++
 arch/unicore32/kernel/elf.c         |   38 ++++++++++++++
 6 files changed, 306 insertions(+), 0 deletions(-)

diff --git a/arch/unicore32/include/asm/elf.h b/arch/unicore32/include/asm/elf.h
new file mode 100644
index 0000000..8e2e311
--- /dev/null
+++ b/arch/unicore32/include/asm/elf.h
@@ -0,0 +1,94 @@
+/*
+ * linux/arch/unicore32/include/asm/elf.h
+ *
+ * Code specific to PKUnity SoC and UniCore ISA
+ *
+ * Copyright (C) 2001-2010 GUAN Xue-tao
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+
+#ifndef __UNICORE_ELF_H__
+#define __UNICORE_ELF_H__
+
+#include <asm/hwcap.h>
+
+/*
+ * ELF register definitions..
+ */
+#include <asm/ptrace.h>
+
+typedef unsigned long elf_greg_t;
+typedef unsigned long elf_freg_t[3];
+
+#define ELF_NGREG (sizeof(struct pt_regs) / sizeof(elf_greg_t))
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+typedef struct fp_soft_struct elf_fpregset_t;
+
+#define EM_UNICORE		110
+
+#define R_UNICORE_NONE		0
+#define R_UNICORE_PC24		1
+#define R_UNICORE_ABS32		2
+#define R_UNICORE_CALL		28
+#define R_UNICORE_JUMP24	29
+
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#define ELF_CLASS	ELFCLASS32
+#define ELF_DATA	ELFDATA2LSB
+#define ELF_ARCH	EM_UNICORE
+
+/*
+ * This yields a string that ld.so will use to load implementation
+ * specific libraries for optimization.  This is more specific in
+ * intent than poking at uname or /proc/cpuinfo.
+ *
+ */
+#define ELF_PLATFORM_SIZE 8
+#define ELF_PLATFORM	(elf_platform)
+
+extern char elf_platform[];
+
+struct elf32_hdr;
+
+/*
+ * This is used to ensure we don't load something for the wrong architecture.
+ */
+extern int elf_check_arch(const struct elf32_hdr *);
+#define elf_check_arch elf_check_arch
+
+struct task_struct;
+int dump_task_regs(struct task_struct *t, elf_gregset_t *elfregs);
+#define ELF_CORE_COPY_TASK_REGS dump_task_regs
+
+#define ELF_EXEC_PAGESIZE	4096
+
+/* This is the location that an ET_DYN program is loaded if exec'ed.  Typical
+   use of this is to invoke "./ld.so someprog" to test out a new version of
+   the loader.  We need to make sure that it is out of the way of the program
+   that it will "exec", and that there is sufficient room for the brk.  */
+
+#define ELF_ET_DYN_BASE	(2 * TASK_SIZE / 3)
+
+/* When the program starts, a1 contains a pointer to a function to be
+   registered with atexit, as per the SVR4 ABI.  A value of 0 means we
+   have no such handler.  */
+#define ELF_PLAT_INIT(_r, load_addr)	{(_r)->UCreg_00 = 0; }
+
+extern void elf_set_personality(const struct elf32_hdr *);
+#define SET_PERSONALITY(ex)	elf_set_personality(&(ex))
+
+struct mm_struct;
+extern unsigned long arch_randomize_brk(struct mm_struct *mm);
+#define arch_randomize_brk arch_randomize_brk
+
+extern int vectors_user_mapping(void);
+#define arch_setup_additional_pages(bprm, uses_interp) vectors_user_mapping()
+#define ARCH_HAS_SETUP_ADDITIONAL_PAGES
+
+#endif
diff --git a/arch/unicore32/include/asm/ftrace.h b/arch/unicore32/include/asm/ftrace.h
new file mode 100644
index 0000000..6adc683
--- /dev/null
+++ b/arch/unicore32/include/asm/ftrace.h
@@ -0,0 +1,4 @@
+#ifndef __UNICORE_FTRACE_H__
+#define __UNICORE_FTRACE_H__
+
+#endif
diff --git a/arch/unicore32/include/asm/sizes.h b/arch/unicore32/include/asm/sizes.h
new file mode 100644
index 0000000..3720307
--- /dev/null
+++ b/arch/unicore32/include/asm/sizes.h
@@ -0,0 +1,47 @@
+/*
+ * linux/arch/unicore32/include/asm/sizes.h
+ *
+ * Code specific to PKUnity SoC and UniCore ISA
+ *
+ * Copyright (C) 2001-2010 GUAN Xue-tao
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __UNICORE_SIZES_H__
+#define __UNICORE_SIZES_H__
+
+/* handy sizes */
+#define SZ_16				0x00000010
+#define SZ_256				0x00000100
+#define SZ_512				0x00000200
+
+#define SZ_1K                           0x00000400
+#define SZ_2K                           0x00000800
+#define SZ_4K                           0x00001000
+#define SZ_8K                           0x00002000
+#define SZ_16K                          0x00004000
+#define SZ_32K                          0x00008000
+#define SZ_64K                          0x00010000
+#define SZ_128K                         0x00020000
+#define SZ_256K                         0x00040000
+#define SZ_512K                         0x00080000
+
+#define SZ_1M                           0x00100000
+#define SZ_2M                           0x00200000
+#define SZ_4M                           0x00400000
+#define SZ_8M                           0x00800000
+#define SZ_16M                          0x01000000
+#define SZ_32M                          0x02000000
+#define SZ_48M                          0x03000000
+#define SZ_64M                          0x04000000
+#define SZ_128M                         0x08000000
+#define SZ_256M                         0x10000000
+#define SZ_512M                         0x20000000
+
+#define SZ_1G                           0x40000000
+#define SZ_2G                           0x80000000
+
+#endif
+
diff --git a/arch/unicore32/include/asm/stat.h b/arch/unicore32/include/asm/stat.h
new file mode 100644
index 0000000..4aad625
--- /dev/null
+++ b/arch/unicore32/include/asm/stat.h
@@ -0,0 +1,71 @@
+/*
+ * linux/arch/unicore32/include/asm/stat.h
+ *
+ * Code specific to PKUnity SoC and UniCore ISA
+ *
+ * Copyright (C) 2001-2010 GUAN Xue-tao
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __UNICORE_STAT_H__
+#define __UNICORE_STAT_H__
+
+#define STAT_HAVE_NSEC 1
+
+struct stat {
+	unsigned long	st_dev;		/* Device.  */
+	unsigned long	st_ino;		/* File serial number.  */
+	unsigned int	st_mode;	/* File mode.  */
+	unsigned int	st_nlink;	/* Link count.  */
+	unsigned int	st_uid;		/* User ID of the file's owner.  */
+	unsigned int	st_gid;		/* Group ID of the file's group. */
+	unsigned long	st_rdev;	/* Device number, if device.  */
+	unsigned long	__pad1;
+	long		st_size;	/* Size of file, in bytes.  */
+	int		st_blksize;	/* Optimal block size for I/O.  */
+	int		__pad2;
+	long		st_blocks;	/* Number 512-byte blocks allocated. */
+	int		st_atime;	/* Time of last access.  */
+	unsigned int	st_atime_nsec;
+	int		st_mtime;	/* Time of last modification.  */
+	unsigned int	st_mtime_nsec;
+	int		st_ctime;	/* Time of last status change.  */
+	unsigned int	st_ctime_nsec;
+	unsigned int	__unused4;
+	unsigned int	__unused5;
+};
+
+/* This matches struct stat64 in glibc2.1, hence the absolutely
+ * insane amounts of padding around dev_t's.
+ * Note: The kernel zero's the padded region because glibc might read them
+ * in the hope that the kernel has stretched to using larger sizes.
+ */
+struct stat64 {
+	unsigned long long st_dev;	/* Device.  */
+	unsigned char   __pad0[4];
+#define STAT64_HAS_BROKEN_ST_INO
+	unsigned long	__st_ino;
+	unsigned int	st_mode;	/* File mode.  */
+	unsigned int	st_nlink;	/* Link count.  */
+	unsigned int	st_uid;		/* User ID of the file's owner.  */
+	unsigned int	st_gid;		/* Group ID of the file's group. */
+	unsigned long long st_rdev;	/* Device number, if device.  */
+
+	unsigned char   __pad3[4];
+
+	long long	st_size;	/* Size of file, in bytes.  */
+	int		st_blksize;	/* Optimal block size for I/O.  */
+	long long	st_blocks;	/* Number 512-byte blocks allocated. */
+	int		st_atime;	/* Time of last access.  */
+	unsigned int	st_atime_nsec;
+	int		st_mtime;	/* Time of last modification.  */
+	unsigned int	st_mtime_nsec;
+	int		st_ctime;	/* Time of last status change.  */
+	unsigned int	st_ctime_nsec;
+
+	unsigned long long	st_ino;
+};
+
+#endif
diff --git a/arch/unicore32/include/asm/string.h b/arch/unicore32/include/asm/string.h
new file mode 100644
index 0000000..16b6c5d
--- /dev/null
+++ b/arch/unicore32/include/asm/string.h
@@ -0,0 +1,52 @@
+/*
+ * linux/arch/unicore32/include/asm/string.h
+ *
+ * Code specific to PKUnity SoC and UniCore ISA
+ *
+ * Copyright (C) 2001-2010 GUAN Xue-tao
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#ifndef __UNICORE_STRING_H__
+#define __UNICORE_STRING_H__
+
+/*
+ * We don't do inline string functions, since the
+ * optimised inline asm versions are not small.
+ */
+
+#define __HAVE_ARCH_STRRCHR
+extern char *strrchr(const char *s, int c);
+
+#define __HAVE_ARCH_STRCHR
+extern char *strchr(const char *s, int c);
+
+#define __HAVE_ARCH_MEMCPY
+extern void *memcpy(void *, const void *, __kernel_size_t);
+
+#define __HAVE_ARCH_MEMMOVE
+extern void *memmove(void *, const void *, __kernel_size_t);
+
+#define __HAVE_ARCH_MEMCHR
+extern void *memchr(const void *, int, __kernel_size_t);
+
+#define __HAVE_ARCH_MEMSET
+extern void *memset(void *, int, __kernel_size_t);
+
+extern void bzero(void *, __kernel_size_t);
+
+#define memset(p, v, n)							\
+	({								\
+		void *__p = (p); size_t __n = n;			\
+		if ((__n) != 0) {					\
+			if (__builtin_constant_p((v)) && (v) == 0)	\
+				bzero((__p), (__n));			\
+			else						\
+				memset((__p), (v), (__n));		\
+		}							\
+		(__p);							\
+	})
+
+#endif
diff --git a/arch/unicore32/kernel/elf.c b/arch/unicore32/kernel/elf.c
new file mode 100644
index 0000000..0a17673
--- /dev/null
+++ b/arch/unicore32/kernel/elf.c
@@ -0,0 +1,38 @@
+/*
+ * linux/arch/unicore32/kernel/elf.c
+ *
+ * Code specific to PKUnity SoC and UniCore ISA
+ *
+ * Copyright (C) 2001-2010 GUAN Xue-tao
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
+#include <linux/module.h>
+#include <linux/sched.h>
+#include <linux/personality.h>
+#include <linux/binfmts.h>
+#include <linux/elf.h>
+
+int elf_check_arch(const struct elf32_hdr *x)
+{
+	/* Make sure it's an UniCore executable */
+	if (x->e_machine != EM_UNICORE)
+		return 0;
+
+	/* Make sure the entry address is reasonable */
+	if (x->e_entry & 3)
+		return 0;
+
+	return 1;
+}
+EXPORT_SYMBOL(elf_check_arch);
+
+void elf_set_personality(const struct elf32_hdr *x)
+{
+	unsigned int personality = PER_LINUX;
+
+	set_personality(personality);
+}
+EXPORT_SYMBOL(elf_set_personality);

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* Re: [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
  2010-12-25 18:43 [PATCHv1 02/12] unicore32 core architecture: generic headers stuff Guan Xuetao
@ 2011-01-06 23:55 ` Arnd Bergmann
  2011-01-06 23:55   ` Arnd Bergmann
  2011-01-08 10:02   ` Guan Xuetao
  0 siblings, 2 replies; 5+ messages in thread
From: Arnd Bergmann @ 2011-01-06 23:55 UTC (permalink / raw)
  To: Guan Xuetao; +Cc: linux-arch, linux-kernel

On Saturday 25 December 2010, Guan Xuetao wrote:
> diff --git a/arch/unicore32/include/asm/sizes.h b/arch/unicore32/include/asm/sizes.h
> new file mode 100644
> index 0000000..3720307
> --- /dev/null
> +++ b/arch/unicore32/include/asm/sizes.h
> @@ -0,0 +1,47 @@
> +/*
> + * linux/arch/unicore32/include/asm/sizes.h
> + *
> + * Code specific to PKUnity SoC and UniCore ISA
> + *
> + * Copyright (C) 2001-2010 GUAN Xue-tao
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +#ifndef __UNICORE_SIZES_H__
> +#define __UNICORE_SIZES_H__
> +
> +/* handy sizes */
> +#define SZ_16				0x00000010
> +#define SZ_256				0x00000100
> +#define SZ_512				0x00000200
> ...

This would be nice to have in include/asm-generic. Please make a patch that
adds the file there and use it with your scripts.

> --- /dev/null
> +++ b/arch/unicore32/include/asm/stat.h
> @@ -0,0 +1,71 @@
> +/*
> + * linux/arch/unicore32/include/asm/stat.h

I think we discussed this particular header before. There should be no reason
to have your own version instead of using the generic file like you do for the
rest of the API headers.

	Arnd

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
  2011-01-06 23:55 ` Arnd Bergmann
@ 2011-01-06 23:55   ` Arnd Bergmann
  2011-01-08 10:02   ` Guan Xuetao
  1 sibling, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2011-01-06 23:55 UTC (permalink / raw)
  To: Guan Xuetao; +Cc: linux-arch, linux-kernel

On Saturday 25 December 2010, Guan Xuetao wrote:
> diff --git a/arch/unicore32/include/asm/sizes.h b/arch/unicore32/include/asm/sizes.h
> new file mode 100644
> index 0000000..3720307
> --- /dev/null
> +++ b/arch/unicore32/include/asm/sizes.h
> @@ -0,0 +1,47 @@
> +/*
> + * linux/arch/unicore32/include/asm/sizes.h
> + *
> + * Code specific to PKUnity SoC and UniCore ISA
> + *
> + * Copyright (C) 2001-2010 GUAN Xue-tao
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License version 2 as
> + * published by the Free Software Foundation.
> + */
> +#ifndef __UNICORE_SIZES_H__
> +#define __UNICORE_SIZES_H__
> +
> +/* handy sizes */
> +#define SZ_16				0x00000010
> +#define SZ_256				0x00000100
> +#define SZ_512				0x00000200
> ...

This would be nice to have in include/asm-generic. Please make a patch that
adds the file there and use it with your scripts.

> --- /dev/null
> +++ b/arch/unicore32/include/asm/stat.h
> @@ -0,0 +1,71 @@
> +/*
> + * linux/arch/unicore32/include/asm/stat.h

I think we discussed this particular header before. There should be no reason
to have your own version instead of using the generic file like you do for the
rest of the API headers.

	Arnd


^ permalink raw reply	[flat|nested] 5+ messages in thread

* RE: [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
  2011-01-06 23:55 ` Arnd Bergmann
  2011-01-06 23:55   ` Arnd Bergmann
@ 2011-01-08 10:02   ` Guan Xuetao
  2011-01-09  0:36     ` Arnd Bergmann
  1 sibling, 1 reply; 5+ messages in thread
From: Guan Xuetao @ 2011-01-08 10:02 UTC (permalink / raw)
  To: 'Arnd Bergmann'; +Cc: linux-arch, linux-kernel



> -----Original Message-----
> From: Arnd Bergmann [mailto:arnd@arndb.de]
> Sent: Friday, January 07, 2011 7:56 AM
> To: Guan Xuetao
> Cc: linux-arch@vger.kernel.org; linux-kernel@vger.kernel.org
> Subject: Re: [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
> 
> On Saturday 25 December 2010, Guan Xuetao wrote:
> > diff --git a/arch/unicore32/include/asm/sizes.h b/arch/unicore32/include/asm/sizes.h
> > new file mode 100644
> > index 0000000..3720307
> > --- /dev/null
> > +++ b/arch/unicore32/include/asm/sizes.h
> > @@ -0,0 +1,47 @@
> > +/*
> > + * linux/arch/unicore32/include/asm/sizes.h
> > + *
> > + * Code specific to PKUnity SoC and UniCore ISA
> > + *
> > + * Copyright (C) 2001-2010 GUAN Xue-tao
> > + *
> > + * This program is free software; you can redistribute it and/or modify
> > + * it under the terms of the GNU General Public License version 2 as
> > + * published by the Free Software Foundation.
> > + */
> > +#ifndef __UNICORE_SIZES_H__
> > +#define __UNICORE_SIZES_H__
> > +
> > +/* handy sizes */
> > +#define SZ_16				0x00000010
> > +#define SZ_256				0x00000100
> > +#define SZ_512				0x00000200
> > ...
> 
> This would be nice to have in include/asm-generic. Please make a patch that
> adds the file there and use it with your scripts.
Ok, my pleasure.

> 
> > --- /dev/null
> > +++ b/arch/unicore32/include/asm/stat.h
> > @@ -0,0 +1,71 @@
> > +/*
> > + * linux/arch/unicore32/include/asm/stat.h
> 
> I think we discussed this particular header before. There should be no reason
> to have your own version instead of using the generic file like you do for the
> rest of the API headers.
The generic-version stat.h can't work for existing binary file systems in unicore32.
I will submit a patch for generic-version stat.h for discussion.

> 
> 	Arnd
Thanks arnd.

Guan Xuetao

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCHv1 02/12] unicore32 core architecture: generic headers stuff
  2011-01-08 10:02   ` Guan Xuetao
@ 2011-01-09  0:36     ` Arnd Bergmann
  0 siblings, 0 replies; 5+ messages in thread
From: Arnd Bergmann @ 2011-01-09  0:36 UTC (permalink / raw)
  To: Guan Xuetao; +Cc: linux-arch, linux-kernel

On Saturday 08 January 2011, Guan Xuetao wrote:
> > I think we discussed this particular header before. There should be no reason
> > to have your own version instead of using the generic file like you do for the
> > rest of the API headers.
>
> The generic-version stat.h can't work for existing binary file systems in unicore32.
> I will submit a patch for generic-version stat.h for discussion.

But the generic version of stat.h goes together with the generic version of unistd.h,
which the code you submitted is now using.

I understand that you are using a patch to use the traditional system call table
right now, on top of the generalized code. Can't you use the same patch for the
stat.h file?

	Arnd

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2011-01-09  0:36 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-12-25 18:43 [PATCHv1 02/12] unicore32 core architecture: generic headers stuff Guan Xuetao
2011-01-06 23:55 ` Arnd Bergmann
2011-01-06 23:55   ` Arnd Bergmann
2011-01-08 10:02   ` Guan Xuetao
2011-01-09  0:36     ` Arnd Bergmann

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).