On Tue, Jul 26, 2005 at 10:06:37PM -0700, Andrew Morton wrote: > "H. J. Lu" <[EMAIL PROTECTED]> wrote: > > > > On Tue, Jul 26, 2005 at 09:53:23PM -0700, Andrew Morton wrote: > > > "H. J. Lu" <[EMAIL PROTECTED]> wrote: > > > > > > > > My patch breaks x86_64 build. This patch will fix x86_64 build. I am > > > > also enclosing the updated full patch. > > > > > > It now breaks ppc64 > > > > > > include/asm/elf.h: In function `dump_task_regs': > > > include/asm/elf.h:177: error: dereferencing pointer to incomplete type > > > > > > That's because pt_regs isn't known, because sched.h is including elf.h > > > before pt_regs gets defined. This is a pretty fragile area I'm afraid. > > > > Should we creat a new header file like auxvector.h? Auxiliary isn't > > ELF specific anyway. > > That would work.
How about this patch? H.J.
--- linux/include/asm-alpha/auxvec.h.auxv 2005-07-27 11:34:19.226937310 -0700 +++ linux/include/asm-alpha/auxvec.h 2005-07-27 11:34:19.227937145 -0700 @@ -0,0 +1,24 @@ +#ifndef __ASM_ALPHA_AUXVEC_H +#define __ASM_ALPHA_AUXVEC_H + +/* Reserve these numbers for any future use of a VDSO. */ +#if 0 +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 +#endif + +/* More complete cache descriptions than AT_[DIU]CACHEBSIZE. If the + value is -1, then the cache doesn't exist. Otherwise: + + bit 0-3: Cache set-associativity; 0 means fully associative. + bit 4-7: Log2 of cacheline size. + bit 8-31: Size of the entire cache >> 8. + bit 32-63: Reserved. +*/ + +#define AT_L1I_CACHESHAPE 34 +#define AT_L1D_CACHESHAPE 35 +#define AT_L2_CACHESHAPE 36 +#define AT_L3_CACHESHAPE 37 + +#endif /* __ASM_ALPHA_AUXVEC_H */ --- linux/include/asm-alpha/elf.h.auxv 2005-03-01 23:38:09.000000000 -0800 +++ linux/include/asm-alpha/elf.h 2005-07-27 11:34:19.227937145 -0700 @@ -1,6 +1,8 @@ #ifndef __ASM_ALPHA_ELF_H #define __ASM_ALPHA_ELF_H +#include <asm/auxvec.h> + /* Special values for the st_other field in the symbol table. */ #define STO_ALPHA_NOPV 0x80 @@ -142,26 +144,6 @@ extern int dump_elf_task_fp(elf_fpreg_t : amask (AMASK_CIX) ? "ev6" : "ev67"); \ }) -/* Reserve these numbers for any future use of a VDSO. */ -#if 0 -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 -#endif - -/* More complete cache descriptions than AT_[DIU]CACHEBSIZE. If the - value is -1, then the cache doesn't exist. Otherwise: - - bit 0-3: Cache set-associativity; 0 means fully associative. - bit 4-7: Log2 of cacheline size. - bit 8-31: Size of the entire cache >> 8. - bit 32-63: Reserved. -*/ - -#define AT_L1I_CACHESHAPE 34 -#define AT_L1D_CACHESHAPE 35 -#define AT_L2_CACHESHAPE 36 -#define AT_L3_CACHESHAPE 37 - #ifdef __KERNEL__ #define SET_PERSONALITY(EX, IBCS2) \ --- linux/include/asm-arm/auxvec.h.auxv 2005-07-27 11:34:19.228936980 -0700 +++ linux/include/asm-arm/auxvec.h 2005-07-27 11:34:19.228936980 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMARM_AUXVEC_H +#define __ASMARM_AUXVEC_H + +#endif --- linux/include/asm-arm26/auxvec.h.auxv 2005-07-27 11:34:19.229936815 -0700 +++ linux/include/asm-arm26/auxvec.h 2005-07-27 11:34:19.229936815 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMARM_AUXVEC_H +#define __ASMARM_AUXVEC_H + +#endif --- linux/include/asm-cris/auxvec.h.auxv 2005-07-27 11:34:19.229936815 -0700 +++ linux/include/asm-cris/auxvec.h 2005-07-27 11:34:19.229936815 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMCRIS_AUXVEC_H +#define __ASMCRIS_AUXVEC_H + +#endif --- linux/include/asm-h8300/auxvec.h.auxv 2005-07-27 11:34:19.230936650 -0700 +++ linux/include/asm-h8300/auxvec.h 2005-07-27 11:34:19.230936650 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMH8300_AUXVEC_H +#define __ASMH8300_AUXVEC_H + +#endif --- linux/include/asm-i386/auxvec.h.auxv 2005-07-27 11:34:19.230936650 -0700 +++ linux/include/asm-i386/auxvec.h 2005-07-27 11:34:19.230936650 -0700 @@ -0,0 +1,11 @@ +#ifndef __ASMi386_AUXVEC_H +#define __ASMi386_AUXVEC_H + +/* + * Architecture-neutral AT_ values in 0-17, leave some room + * for more of them, start the x86-specific ones at 32. + */ +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + +#endif --- linux/include/asm-i386/elf.h.auxv 2005-03-01 23:38:13.000000000 -0800 +++ linux/include/asm-i386/elf.h 2005-07-27 11:36:26.558940660 -0700 @@ -9,6 +9,7 @@ #include <asm/user.h> #include <asm/processor.h> #include <asm/system.h> /* for savesegment */ +#include <asm/auxvec.h> #include <linux/utsname.h> @@ -109,13 +110,6 @@ typedef struct user_fxsr_struct elf_fpxr #define ELF_PLATFORM (system_utsname.machine) -/* - * Architecture-neutral AT_ values in 0-17, leave some room - * for more of them, start the x86-specific ones at 32. - */ -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 - #ifdef __KERNEL__ #define SET_PERSONALITY(ex, ibcs2) do { } while (0) --- linux/include/asm-ia64/auxvec.h.auxv 2005-07-27 11:34:19.232936321 -0700 +++ linux/include/asm-ia64/auxvec.h 2005-07-27 11:34:19.232936321 -0700 @@ -0,0 +1,11 @@ +#ifndef _ASM_IA64_AUXVEC_H +#define _ASM_IA64_AUXVEC_H + +/* + * Architecture-neutral AT_ values are in the range 0-17. Leave some room for more of + * them, start the architecture-specific ones at 32. + */ +#define AT_SYSINFO 32 +#define AT_SYSINFO_EHDR 33 + +#endif /* _ASM_IA64_AUXVEC_H */ --- linux/include/asm-ia64/elf.h.auxv 2005-03-01 23:38:13.000000000 -0800 +++ linux/include/asm-ia64/elf.h 2005-07-27 11:34:19.253932858 -0700 @@ -12,6 +12,7 @@ #include <asm/fpu.h> #include <asm/page.h> +#include <asm/auxvec.h> /* * This is used to ensure we don't load something for the wrong architecture. @@ -177,13 +178,6 @@ extern void ia64_elf_core_copy_regs (str relevant until we have real hardware to play with... */ #define ELF_PLATFORM NULL -/* - * Architecture-neutral AT_ values are in the range 0-17. Leave some room for more of - * them, start the architecture-specific ones at 32. - */ -#define AT_SYSINFO 32 -#define AT_SYSINFO_EHDR 33 - #ifdef __KERNEL__ #define SET_PERSONALITY(ex, ibcs2) set_personality(PER_LINUX) #define elf_read_implies_exec(ex, executable_stack) \ --- linux/include/asm-m32r/auxvec.h.auxv 2005-07-27 11:34:19.253932858 -0700 +++ linux/include/asm-m32r/auxvec.h 2005-07-27 11:34:19.253932858 -0700 @@ -0,0 +1,4 @@ +#ifndef _ASM_M32R__AUXVEC_H +#define _ASM_M32R__AUXVEC_H + +#endif /* _ASM_M32R__AUXVEC_H */ --- linux/include/asm-m68k/auxvec.h.auxv 2005-07-27 11:34:19.254932694 -0700 +++ linux/include/asm-m68k/auxvec.h 2005-07-27 11:34:19.254932694 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMm68k_AUXVEC_H +#define __ASMm68k_AUXVEC_H + +#endif --- linux/include/asm-m68knommu/auxvec.h.auxv 2005-07-27 11:34:19.254932694 -0700 +++ linux/include/asm-m68knommu/auxvec.h 2005-07-27 11:34:19.255932529 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMm68k_AUXVEC_H +#define __ASMm68k_AUXVEC_H + +#endif --- linux/include/asm-mips/auxvec.h.auxv 2005-07-27 11:34:19.255932529 -0700 +++ linux/include/asm-mips/auxvec.h 2005-07-27 11:34:19.255932529 -0700 @@ -0,0 +1,4 @@ +#ifndef _ASM_AUXVEC_H +#define _ASM_AUXVEC_H + +#endif /* _ASM_AUXVEC_H */ --- linux/include/asm-parisc/auxvec.h.auxv 2005-07-27 11:34:19.256932364 -0700 +++ linux/include/asm-parisc/auxvec.h 2005-07-27 11:34:19.256932364 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMPARISC_AUXVEC_H +#define __ASMPARISC_AUXVEC_H + +#endif --- linux/include/asm-ppc/auxvec.h.auxv 2005-07-27 11:34:19.256932364 -0700 +++ linux/include/asm-ppc/auxvec.h 2005-07-27 11:34:19.256932364 -0700 @@ -0,0 +1,14 @@ +#ifndef __PPC_AUXVEC_H +#define __PPC_AUXVEC_H + +/* + * We need to put in some extra aux table entries to tell glibc what + * the cache block size is, so it can use the dcbz instruction safely. + */ +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 +/* A special ignored type value for PPC, for glibc compatibility. */ +#define AT_IGNOREPPC 22 + +#endif --- linux/include/asm-ppc/elf.h.auxv 2005-03-01 23:37:30.000000000 -0800 +++ linux/include/asm-ppc/elf.h 2005-07-27 11:34:19.257932199 -0700 @@ -7,6 +7,7 @@ #include <asm/types.h> #include <asm/ptrace.h> #include <asm/cputable.h> +#include <asm/auxvec.h> /* PowerPC relocations defined by the ABIs */ #define R_PPC_NONE 0 @@ -122,16 +123,6 @@ extern int dump_task_fpu(struct task_str #define SET_PERSONALITY(ex, ibcs2) set_personality((ibcs2)?PER_SVR4:PER_LINUX) -/* - * We need to put in some extra aux table entries to tell glibc what - * the cache block size is, so it can use the dcbz instruction safely. - */ -#define AT_DCACHEBSIZE 19 -#define AT_ICACHEBSIZE 20 -#define AT_UCACHEBSIZE 21 -/* A special ignored type value for PPC, for glibc compatibility. */ -#define AT_IGNOREPPC 22 - extern int dcache_bsize; extern int icache_bsize; extern int ucache_bsize; --- linux/include/asm-ppc64/auxvec.h.auxv 2005-07-27 11:34:19.258932034 -0700 +++ linux/include/asm-ppc64/auxvec.h 2005-07-27 11:35:54.618207638 -0700 @@ -0,0 +1,19 @@ +#ifndef __PPC64_AUXVEC_H +#define __PPC64_AUXVEC_H + +/* + * We need to put in some extra aux table entries to tell glibc what + * the cache block size is, so it can use the dcbz instruction safely. + */ +#define AT_DCACHEBSIZE 19 +#define AT_ICACHEBSIZE 20 +#define AT_UCACHEBSIZE 21 +/* A special ignored type value for PPC, for glibc compatibility. */ +#define AT_IGNOREPPC 22 + +/* The vDSO location. We have to use the same value as x86 for glibc's + * sake :-) + */ +#define AT_SYSINFO_EHDR 33 + +#endif /* __PPC64_AUXVEC_H */ --- linux/include/asm-ppc64/elf.h.auxv 2005-07-08 11:50:09.000000000 -0700 +++ linux/include/asm-ppc64/elf.h 2005-07-27 11:35:08.815760333 -0700 @@ -4,6 +4,7 @@ #include <asm/types.h> #include <asm/ptrace.h> #include <asm/cputable.h> +#include <asm/auxvec.h> /* PowerPC relocations defined by the ABIs */ #define R_PPC_NONE 0 @@ -237,21 +238,6 @@ do { \ #endif -/* - * We need to put in some extra aux table entries to tell glibc what - * the cache block size is, so it can use the dcbz instruction safely. - */ -#define AT_DCACHEBSIZE 19 -#define AT_ICACHEBSIZE 20 -#define AT_UCACHEBSIZE 21 -/* A special ignored type value for PPC, for glibc compatibility. */ -#define AT_IGNOREPPC 22 - -/* The vDSO location. We have to use the same value as x86 for glibc's - * sake :-) - */ -#define AT_SYSINFO_EHDR 33 - extern int dcache_bsize; extern int icache_bsize; extern int ucache_bsize; --- linux/include/asm-s390/auxvec.h.auxv 2005-07-27 11:34:19.259931869 -0700 +++ linux/include/asm-s390/auxvec.h 2005-07-27 11:34:19.259931869 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMS390_AUXVEC_H +#define __ASMS390_AUXVEC_H + +#endif --- linux/include/asm-sh/auxvec.h.auxv 2005-07-27 11:34:19.260931704 -0700 +++ linux/include/asm-sh/auxvec.h 2005-07-27 11:34:19.260931704 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASM_SH_AUXVEC_H +#define __ASM_SH_AUXVEC_H + +#endif /* __ASM_SH_AUXVEC_H */ --- linux/include/asm-sh64/auxvec.h.auxv 2005-07-27 11:34:19.260931704 -0700 +++ linux/include/asm-sh64/auxvec.h 2005-07-27 11:34:19.260931704 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASM_SH64_AUXVEC_H +#define __ASM_SH64_AUXVEC_H + +#endif /* __ASM_SH64_AUXVEC_H */ --- linux/include/asm-sparc/auxvec.h.auxv 2005-07-27 11:34:19.261931540 -0700 +++ linux/include/asm-sparc/auxvec.h 2005-07-27 11:34:19.261931540 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASMSPARC_AUXVEC_H +#define __ASMSPARC_AUXVEC_H + +#endif /* !(__ASMSPARC_AUXVEC_H) */ --- linux/include/asm-sparc64/auxvec.h.auxv 2005-07-27 11:34:19.262931375 -0700 +++ linux/include/asm-sparc64/auxvec.h 2005-07-27 11:34:19.262931375 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASM_SPARC64_AUXVEC_H +#define __ASM_SPARC64_AUXVEC_H + +#endif /* !(__ASM_SPARC64_AUXVEC_H) */ --- linux/include/asm-um/auxvec.h.auxv 2005-07-27 11:34:19.262931375 -0700 +++ linux/include/asm-um/auxvec.h 2005-07-27 11:34:19.262931375 -0700 @@ -0,0 +1,4 @@ +#ifndef __UM_AUXVEC_H +#define __UM_AUXVEC_H + +#endif --- linux/include/asm-v850/auxvec.h.auxv 2005-07-27 11:34:19.263931210 -0700 +++ linux/include/asm-v850/auxvec.h 2005-07-27 11:34:19.263931210 -0700 @@ -0,0 +1,4 @@ +#ifndef __V850_AUXVEC_H__ +#define __V850_AUXVEC_H__ + +#endif /* __V850_AUXVEC_H__ */ --- linux/include/asm-x86_64/auxvec.h.auxv 2005-07-27 11:34:19.263931210 -0700 +++ linux/include/asm-x86_64/auxvec.h 2005-07-27 11:34:19.263931210 -0700 @@ -0,0 +1,4 @@ +#ifndef __ASM_X86_64_AUXVEC_H +#define __ASM_X86_64_AUXVEC_H + +#endif --- linux/include/linux/auxvec.h.auxv 2005-07-27 11:34:19.265930880 -0700 +++ linux/include/linux/auxvec.h 2005-07-27 11:34:19.265930880 -0700 @@ -0,0 +1,31 @@ +#ifndef _LINUX_AUXVEC_H +#define _LINUX_AUXVEC_H + +#include <asm/auxvec.h> + +/* Symbolic values for the entries in the auxiliary table + put on the initial stack */ +#define AT_NULL 0 /* end of vector */ +#define AT_IGNORE 1 /* entry should be ignored */ +#define AT_EXECFD 2 /* file descriptor of program */ +#define AT_PHDR 3 /* program headers for program */ +#define AT_PHENT 4 /* size of program header entry */ +#define AT_PHNUM 5 /* number of program headers */ +#define AT_PAGESZ 6 /* system page size */ +#define AT_BASE 7 /* base address of interpreter */ +#define AT_FLAGS 8 /* flags */ +#define AT_ENTRY 9 /* entry point of program */ +#define AT_NOTELF 10 /* program is not ELF */ +#define AT_UID 11 /* real uid */ +#define AT_EUID 12 /* effective uid */ +#define AT_GID 13 /* real gid */ +#define AT_EGID 14 /* effective gid */ +#define AT_PLATFORM 15 /* string identifying CPU for optimizations */ +#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */ +#define AT_CLKTCK 17 /* frequency at which times() increments */ + +#define AT_SECURE 23 /* secure mode boolean */ + +#define AT_VECTOR_SIZE 42 /* Size of auxiliary table. */ + +#endif /* _LINUX_AUXVEC_H */ --- linux/include/linux/elf.h.auxv 2005-03-01 23:37:49.000000000 -0800 +++ linux/include/linux/elf.h 2005-07-27 11:34:19.266930715 -0700 @@ -2,6 +2,7 @@ #define _LINUX_ELF_H #include <linux/types.h> +#include <linux/auxvec.h> #include <asm/elf.h> #ifndef elf_read_implies_exec @@ -158,29 +159,6 @@ typedef __s64 Elf64_Sxword; #define ELF64_ST_BIND(x) ELF_ST_BIND(x) #define ELF64_ST_TYPE(x) ELF_ST_TYPE(x) -/* Symbolic values for the entries in the auxiliary table - put on the initial stack */ -#define AT_NULL 0 /* end of vector */ -#define AT_IGNORE 1 /* entry should be ignored */ -#define AT_EXECFD 2 /* file descriptor of program */ -#define AT_PHDR 3 /* program headers for program */ -#define AT_PHENT 4 /* size of program header entry */ -#define AT_PHNUM 5 /* number of program headers */ -#define AT_PAGESZ 6 /* system page size */ -#define AT_BASE 7 /* base address of interpreter */ -#define AT_FLAGS 8 /* flags */ -#define AT_ENTRY 9 /* entry point of program */ -#define AT_NOTELF 10 /* program is not ELF */ -#define AT_UID 11 /* real uid */ -#define AT_EUID 12 /* effective uid */ -#define AT_GID 13 /* real gid */ -#define AT_EGID 14 /* effective gid */ -#define AT_PLATFORM 15 /* string identifying CPU for optimizations */ -#define AT_HWCAP 16 /* arch dependent hints at CPU capabilities */ -#define AT_CLKTCK 17 /* frequency at which times() increments */ - -#define AT_SECURE 23 /* secure mode boolean */ - typedef struct dynamic{ Elf32_Sword d_tag; union{ --- linux/include/linux/sched.h.auxv 2005-07-08 11:50:09.000000000 -0700 +++ linux/include/linux/sched.h 2005-07-27 11:34:19.269930221 -0700 @@ -35,6 +35,8 @@ #include <linux/topology.h> #include <linux/seccomp.h> +#include <linux/auxvec.h> /* For AT_VECTOR_SIZE */ + struct exec_domain; /* @@ -243,7 +245,7 @@ struct mm_struct { mm_counter_t _rss; mm_counter_t _anon_rss; - unsigned long saved_auxv[42]; /* for /proc/PID/auxv */ + unsigned long saved_auxv[AT_VECTOR_SIZE]; /* for /proc/PID/auxv */ unsigned dumpable:1; cpumask_t cpu_vm_mask;