* [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).