2009-06-09 06:54:54

by Chen Liqin

[permalink] [raw]
Subject: [PATCH 07/27] score: create head files elf.h emergency-restart.h errno.h

>From 92de1d59c5c52dc1d64a9f6918b46afa4135afa3 Mon Sep 17 00:00:00 2001
From: Chen Liqin <[email protected]>
Date: Tue, 9 Jun 2009 13:43:08 +0800



Signed-off-by: Chen Liqin <[email protected]>
---
arch/score/include/asm/elf.h | 99
++++++++++++++++++++++++++++
arch/score/include/asm/emergency-restart.h | 6 ++
arch/score/include/asm/errno.h | 7 ++
3 files changed, 112 insertions(+), 0 deletions(-)
create mode 100644 arch/score/include/asm/elf.h
create mode 100644 arch/score/include/asm/emergency-restart.h
create mode 100644 arch/score/include/asm/errno.h

diff --git a/arch/score/include/asm/elf.h b/arch/score/include/asm/elf.h
new file mode 100644
index 0000000..8324363
--- /dev/null
+++ b/arch/score/include/asm/elf.h
@@ -0,0 +1,99 @@
+#ifndef _ASM_SCORE_ELF_H
+#define _ASM_SCORE_ELF_H
+
+/* ELF register definitions */
+#define ELF_NGREG 45
+#define ELF_NFPREG 33
+#define EM_SCORE7 135
+
+/* Relocation types. */
+#define R_SCORE_NONE 0
+#define R_SCORE_HI16 1
+#define R_SCORE_LO16 2
+#define R_SCORE_BCMP 3
+#define R_SCORE_24 4
+#define R_SCORE_PC19 5
+#define R_SCORE16_11 6
+#define R_SCORE16_PC8 7
+#define R_SCORE_ABS32 8
+#define R_SCORE_ABS16 9
+#define R_SCORE_DUMMY2 10
+#define R_SCORE_GP15 11
+#define R_SCORE_GNU_VTINHERIT 12
+#define R_SCORE_GNU_VTENTRY 13
+#define R_SCORE_GOT15 14
+#define R_SCORE_GOT_LO16 15
+#define R_SCORE_CALL15 16
+#define R_SCORE_GPREL32 17
+#define R_SCORE_REL32 18
+#define R_SCORE_DUMMY_HI16 19
+#define R_SCORE_IMM30 20
+#define R_SCORE_IMM32 21
+
+typedef unsigned long elf_greg_t;
+typedef elf_greg_t elf_gregset_t[ELF_NGREG];
+
+typedef double elf_fpreg_t;
+typedef elf_fpreg_t elf_fpregset_t[ELF_NFPREG];
+
+#define elf_check_arch(x) ((x)->e_machine == EM_SCORE7)
+
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#define ELF_CLASS ELFCLASS32
+
+/*
+ * These are used to set parameters in the core dumps.
+ */
+#define ELF_DATA ELFDATA2LSB
+#define ELF_ARCH EM_SCORE7
+
+#define SET_PERSONALITY(ex) \
+do { \
+ set_personality(PER_LINUX); \
+} while (0)
+
+struct task_struct;
+struct pt_regs;
+
+#define USE_ELF_CORE_DUMP
+#define ELF_EXEC_PAGESIZE PAGE_SIZE
+
+/* This yields a mask that user programs can use to figure out what
+ instruction set this cpu supports. This could be done in userspace,
+ but it's not easy, and we've already done it here. */
+
+#define ELF_HWCAP (0)
+
+/* 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.
+
+ For the moment, we have only optimizations for the Intel generations,
+ but that could change... */
+
+#define ELF_PLATFORM (NULL)
+
+#define ELF_PLAT_INIT(_r, load_addr) \
+do { \
+ _r->regs[1] = _r->regs[2] = _r->regs[3] = _r->regs[4] = 0; \
+ _r->regs[5] = _r->regs[6] = _r->regs[7] = _r->regs[8] = 0; \
+ _r->regs[9] = _r->regs[10] = _r->regs[11] = _r->regs[12] = 0; \
+ _r->regs[13] = _r->regs[14] = _r->regs[15] = _r->regs[16] = 0; \
+ _r->regs[17] = _r->regs[18] = _r->regs[19] = _r->regs[20] = 0; \
+ _r->regs[21] = _r->regs[22] = _r->regs[23] = _r->regs[24] = 0; \
+ _r->regs[25] = _r->regs[26] = _r->regs[27] = _r->regs[28] = 0; \
+ _r->regs[30] = _r->regs[31] = 0; \
+} while (0)
+
+/* 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. */
+
+#ifndef ELF_ET_DYN_BASE
+#define ELF_ET_DYN_BASE (TASK_SIZE / 3 * 2)
+#endif
+
+#endif /* _ASM_SCORE_ELF_H */
diff --git a/arch/score/include/asm/emergency-restart.h
b/arch/score/include/asm/emergency-restart.h
new file mode 100644
index 0000000..ca31e98
--- /dev/null
+++ b/arch/score/include/asm/emergency-restart.h
@@ -0,0 +1,6 @@
+#ifndef _ASM_SCORE_EMERGENCY_RESTART_H
+#define _ASM_SCORE_EMERGENCY_RESTART_H
+
+#include <asm-generic/emergency-restart.h>
+
+#endif /* _ASM_SCORE_EMERGENCY_RESTART_H */
diff --git a/arch/score/include/asm/errno.h
b/arch/score/include/asm/errno.h
new file mode 100644
index 0000000..7cd3e1f
--- /dev/null
+++ b/arch/score/include/asm/errno.h
@@ -0,0 +1,7 @@
+#ifndef _ASM_SCORE_ERRNO_H
+#define _ASM_SCORE_ERRNO_H
+
+#include <asm-generic/errno.h>
+#define EMAXERRNO 1024
+
+#endif /* _ASM_SCORE_ERRNO_H */
--
1.6.2


2009-06-09 17:20:33

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 07/27] score: create head files elf.h emergency-restart.h errno.h

On Tuesday 09 June 2009, [email protected] wrote:
> --- /dev/null
> +++ b/arch/score/include/asm/errno.h
> @@ -0,0 +1,7 @@
> +#ifndef _ASM_SCORE_ERRNO_H
> +#define _ASM_SCORE_ERRNO_H
> +
> +#include <asm-generic/errno.h>
> +#define EMAXERRNO 1024
> +
> +#endif /* _ASM_SCORE_ERRNO_H */

EMAXERRNO is mips specific right now. Do you actually need it somewhere?

Arnd <><

2009-06-13 06:44:47

by Chen Liqin

[permalink] [raw]
Subject: Re: [PATCH 07/27] score: create head files elf.h emergency-restart.h errno.h

Arnd Bergmann <[email protected]> д?? 2009-06-10 01:20:09:

> On Tuesday 09 June 2009, [email protected] wrote:
> > --- /dev/null
> > +++ b/arch/score/include/asm/errno.h
> > @@ -0,0 +1,7 @@
> > +#ifndef _ASM_SCORE_ERRNO_H
> > +#define _ASM_SCORE_ERRNO_H
> > +
> > +#include <asm-generic/errno.h>
> > +#define EMAXERRNO 1024
> > +
> > +#endif /* _ASM_SCORE_ERRNO_H */
>
> EMAXERRNO is mips specific right now. Do you actually need it somewhere?
>

Yes, I used it in entry.S, maybe I could remove this define latter.

Best Regards
Liqin
--
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2009-06-13 22:23:51

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH 07/27] score: create head files elf.h emergency-restart.h errno.h

On Saturday 13 June 2009, [email protected] wrote:
> >
> > EMAXERRNO is mips specific right now. Do you actually need it somewhere?
> >
>
> Yes, I used it in entry.S, maybe I could remove this define latter.
>

Ok. Note that the maximum error number that is supposed to get sent back
to user space is 511. Most architectures check the return value of the
system call to be between -4095 and zero upon entering user space.
Checking it in the kernel gives you the chance to override the
error status from a system call with force_successful_syscall_return().

If that is your intention, you should probably leave the definition in there.
Powerpc uses _LAST_ERRNO for the same purpose, which is somewhat inconsistent
with mips and also uses a different value to compare against.

Arnd <><

2009-06-15 12:16:30

by Chen Liqin

[permalink] [raw]
Subject: Re: [PATCH 07/27] score: create head files elf.h emergency-restart.h errno.h

Arnd Bergmann <[email protected]> д?? 2009-06-14 06:23:06:

> On Saturday 13 June 2009, [email protected] wrote:
> > >
> > > EMAXERRNO is mips specific right now. Do you actually need it
somewhere?
> > >
> >
> > Yes, I used it in entry.S, maybe I could remove this define latter.
> >
>
> Ok. Note that the maximum error number that is supposed to get sent back
> to user space is 511. Most architectures check the return value of the
> system call to be between -4095 and zero upon entering user space.
> Checking it in the kernel gives you the chance to override the
> error status from a system call with force_successful_syscall_return().
>
> If that is your intention, you should probably leave the definition in
there.
> Powerpc uses _LAST_ERRNO for the same purpose, which is somewhat
inconsistent
> with mips and also uses a different value to compare against.
>

Maybe I can don't use EMAXERRNO in score code. But I think define a
maximum error number in asm-generic/errno.h is better.

????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2009-06-15 13:30:35

by Arnd Bergmann

[permalink] [raw]
Subject: [PATCH] asm-generic: add EMAXERRNO

Some architectures want to flag error returns from a syscall based on
the return value. The range from zero to -511 is for errors that
we can return to user space, so add a #define for this to
include/asm-generic/errno.h.

Reported-by: Chen Liquin <[email protected]>
Signed-off-by: Arnd Bergmann <[email protected]>
---
include/asm-generic/errno.h | 4 ++++
1 files changed, 4 insertions(+), 0 deletions(-)

On Monday 15 June 2009, [email protected] wrote:

> Maybe I can don't use EMAXERRNO in score code. But I think define a
> maximum error number in asm-generic/errno.h is better.
>

How about this one?

diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h
index e8852c0..16bb31d 100644
--- a/include/asm-generic/errno.h
+++ b/include/asm-generic/errno.h
@@ -106,4 +106,8 @@
#define EOWNERDEAD 130 /* Owner died */
#define ENOTRECOVERABLE 131 /* State not recoverable */

+#ifdef __KERNEL__
+#define EMAXERRNO 511 /* maximum errno value we return to user */
+#endif
+
#endif
--
1.6.3.1


2009-06-15 13:31:57

by Matthew Wilcox

[permalink] [raw]
Subject: Re: [PATCH] asm-generic: add EMAXERRNO

On Mon, Jun 15, 2009 at 03:30:09PM +0200, Arnd Bergmann wrote:
> Some architectures want to flag error returns from a syscall based on
> the return value. The range from zero to -511 is for errors that
> we can return to user space, so add a #define for this to
> include/asm-generic/errno.h.

I thought we could return anything up to -4095.

--
Matthew Wilcox Intel Open Source Technology Centre
"Bill, look, we understand that you're interested in selling us this
operating system, but compare it to ours. We can't possibly take such
a retrograde step."

2009-06-15 13:38:24

by Chen Liqin

[permalink] [raw]
Subject: Re: [PATCH] asm-generic: add EMAXERRNO

[email protected] д?? 2009-06-15 21:30:09:

> Some architectures want to flag error returns from a syscall based on
> the return value. The range from zero to -511 is for errors that
> we can return to user space, so add a #define for this to
> include/asm-generic/errno.h.
>
> Reported-by: Chen Liquin <[email protected]>
> Signed-off-by: Arnd Bergmann <[email protected]>
> ---
> include/asm-generic/errno.h | 4 ++++
> 1 files changed, 4 insertions(+), 0 deletions(-)
>
> On Monday 15 June 2009, [email protected] wrote:
>
> > Maybe I can don't use EMAXERRNO in score code. But I think define a
> > maximum error number in asm-generic/errno.h is better.
> >
>
> How about this one?
>
> diff --git a/include/asm-generic/errno.h b/include/asm-generic/errno.h
> index e8852c0..16bb31d 100644
> --- a/include/asm-generic/errno.h
> +++ b/include/asm-generic/errno.h
> @@ -106,4 +106,8 @@
> #define EOWNERDEAD 130 /* Owner died */
> #define ENOTRECOVERABLE 131 /* State not recoverable */
>
> +#ifdef __KERNEL__
> +#define EMAXERRNO 511 /* maximum errno value we return to user */
> +#endif
> +
> #endif
> --
OK, it is easy to use.
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2009-06-15 14:03:59

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] asm-generic: add EMAXERRNO

On Monday 15 June 2009, Matthew Wilcox wrote:
> On Mon, Jun 15, 2009 at 03:30:09PM +0200, Arnd Bergmann wrote:
> > Some architectures want to flag error returns from a syscall based on
> > the return value. The range from zero to -511 is for errors that
> > we can return to user space, so add a #define for this to
> > include/asm-generic/errno.h.
>
> I thought we could return anything up to -4095.

Sort of, yes. Internally to the kernel, we use anything up to 4095,
that's e.g. IS_ERR_VALUE checks for.

Error numbers from 512 to 4095 are internal and should never be seen
by the user.

In reality, it probably does not matter at all because we know what
error numbers we use. Now that you pointed me to include/linux/err.h,
that already defines MAX_ERRNO.

Liqin, I think I'd prefer to just drop my patch again, and you can
use MAX_ERRNO, which is defined in err.h.

Arnd <><

2009-06-16 03:31:21

by Chen Liqin

[permalink] [raw]
Subject: Re: [PATCH] asm-generic: add EMAXERRNO

[email protected] д?? 2009-06-15 22:02:42:

> On Monday 15 June 2009, Matthew Wilcox wrote:
> > On Mon, Jun 15, 2009 at 03:30:09PM +0200, Arnd Bergmann wrote:
> > > Some architectures want to flag error returns from a syscall based
on
> > > the return value. The range from zero to -511 is for errors that
> > > we can return to user space, so add a #define for this to
> > > include/asm-generic/errno.h.
> >
> > I thought we could return anything up to -4095.
>
> Sort of, yes. Internally to the kernel, we use anything up to 4095,
> that's e.g. IS_ERR_VALUE checks for.
>
> Error numbers from 512 to 4095 are internal and should never be seen
> by the user.
>
> In reality, it probably does not matter at all because we know what
> error numbers we use. Now that you pointed me to include/linux/err.h,
> that already defines MAX_ERRNO.
>
> Liqin, I think I'd prefer to just drop my patch again, and you can
> use MAX_ERRNO, which is defined in err.h.
>
OK.
But I think move MAX_ERRNO define from include/linux/err.h to
include/asm-generic/errno.h will be more clear. And no harm to
include/linux/err.h file.

liqin
--
????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?

2009-06-16 14:13:50

by Arnd Bergmann

[permalink] [raw]
Subject: Re: [PATCH] asm-generic: add EMAXERRNO

On Tuesday 16 June 2009, [email protected] wrote:
> But I think move MAX_ERRNO define from include/linux/err.h to
> include/asm-generic/errno.h will be more clear. And no harm to
> include/linux/err.h file.

Don't know. I think err.h makes more sense because that is
for kernel-internal users like the much more common IS_ERR(),
while include/asm-generic/errno.h is strictly for kernel/user
interfaces.

Arnd <><