* [PATCH] Add -Wcast-qual flag
@ 2006-12-21 10:05 Christoph Egger
2006-12-21 10:41 ` Keir Fraser
0 siblings, 1 reply; 8+ messages in thread
From: Christoph Egger @ 2006-12-21 10:05 UTC (permalink / raw)
To: xen-devel
[-- Attachment #1: Type: text/plain, Size: 355 bytes --]
Hi!
The xen-cast.diff adds the -Wcast-qual flag.
The xen-cast-xen.diff makes the hypervisor itself buildable with the new flag
- at least on x86_32 and x86_64.
The xen-cast-tools.diff makes the tools build with the new flag.
Generally, the places with the __UNCONST() hack should be considered to be
reworked. These places may hide bugs.
Christoph
[-- Attachment #2: xen-cast.diff --]
[-- Type: text/x-diff, Size: 390 bytes --]
diff -r f58b0c778b90 Config.mk
--- a/Config.mk Wed Dec 20 15:22:46 2006 +0000
+++ b/Config.mk Thu Dec 21 10:22:56 2006 +0100
@@ -39,7 +39,7 @@ endif
CFLAGS += -std=gnu99
-CFLAGS += -Wall -Wstrict-prototypes
+CFLAGS += -Wall -Wstrict-prototypes -Wcast-qual
# -Wunused-value makes GCC 4.x too aggressive for my taste: ignoring the
# result of any casted expression causes a warning.
[-- Attachment #3: xen-cast-xen.diff --]
[-- Type: text/x-diff, Size: 24049 bytes --]
diff -r f58b0c778b90 xen/arch/x86/domain_build.c
--- a/xen/arch/x86/domain_build.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/arch/x86/domain_build.c Thu Dec 21 10:34:37 2006 +0100
@@ -55,12 +55,12 @@ static long dom0_nrpages, dom0_min_nrpag
* If +ve: The specified amount is an absolute value.
* If -ve: The specified amount is subtracted from total available memory.
*/
-static long parse_amt(char *s, char **ps)
+static long parse_amt(const char *s, const char **ps)
{
long pages = parse_size_and_unit((*s == '-') ? s+1 : s, ps) >> PAGE_SHIFT;
return (*s == '-') ? -pages : pages;
}
-static void parse_dom0_mem(char *s)
+static void parse_dom0_mem(const char *s)
{
do {
if ( !strncmp(s, "min:", 4) )
@@ -152,7 +152,8 @@ static void process_dom0_ioports_disable
static void process_dom0_ioports_disable(void)
{
unsigned long io_from, io_to;
- char *t, *u, *s = opt_dom0_ioports_disable;
+ char *t, *s = opt_dom0_ioports_disable;
+ const char *u;
if ( *s == '\0' )
return;
@@ -892,7 +893,7 @@ int construct_dom0(struct domain *d,
return 0;
}
-int elf_sanity_check(Elf_Ehdr *ehdr)
+int elf_sanity_check(const Elf_Ehdr *ehdr)
{
if ( !IS_ELF(*ehdr) ||
#if defined(__i386__)
diff -r f58b0c778b90 xen/arch/x86/hvm/platform.c
--- a/xen/arch/x86/hvm/platform.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/arch/x86/hvm/platform.c Thu Dec 21 10:34:37 2006 +0100
@@ -1153,7 +1153,8 @@ unsigned long copy_to_user_hvm(void *to,
return 0;
}
- return hvm_copy_to_guest_virt((unsigned long)to, (void *)from, len);
+#define __UNCONST(x) (void *)(unsigned long)(x)
+ return hvm_copy_to_guest_virt((unsigned long)to, __UNCONST(from), len);
}
unsigned long copy_from_user_hvm(void *to, const void *from, unsigned len)
diff -r f58b0c778b90 xen/arch/x86/time.c
--- a/xen/arch/x86/time.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/arch/x86/time.c Thu Dec 21 10:34:37 2006 +0100
@@ -41,7 +41,7 @@ unsigned long cpu_khz; /* CPU clock fre
unsigned long cpu_khz; /* CPU clock frequency in kHz. */
unsigned long hpet_address;
DEFINE_SPINLOCK(rtc_lock);
-unsigned long volatile jiffies;
+volatile unsigned long jiffies;
static u32 wc_sec, wc_nsec; /* UTC time at last 'time update'. */
static DEFINE_SPINLOCK(wc_lock);
@@ -148,7 +148,7 @@ void timer_interrupt(int irq, void *dev_
ASSERT(local_irq_is_enabled());
/* Update jiffies counter. */
- (*(unsigned long *)&jiffies)++;
+ (*(volatile unsigned long *)&jiffies)++;
/* Rough hack to allow accurate timers to sort-of-work with no APIC. */
if ( !cpu_has_apic )
diff -r f58b0c778b90 xen/common/elf.c
--- a/xen/common/elf.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/elf.c Thu Dec 21 10:34:38 2006 +0100
@@ -16,7 +16,7 @@
#include <public/elfnote.h>
static void loadelfsymtab(struct domain_setup_info *dsi, int doload);
-static inline int is_loadable_phdr(Elf_Phdr *phdr)
+static inline int is_loadable_phdr(const Elf_Phdr *phdr)
{
return ((phdr->p_type == PT_LOAD) &&
((phdr->p_flags & (PF_W|PF_X)) != 0));
@@ -26,7 +26,7 @@ static inline int is_loadable_phdr(Elf_P
* Fallback for kernels containing only the legacy __xen_guest string
* and no ELF notes.
*/
-static int is_xen_guest_section(Elf_Shdr *shdr, const char *shstrtab)
+static int is_xen_guest_section(const Elf_Shdr *shdr, const char *shstrtab)
{
return strcmp(&shstrtab[shdr->sh_name], "__xen_guest") == 0;
}
@@ -102,19 +102,19 @@ static unsigned long long xen_guest_nume
/*
* Interface to the Xen ELF notes.
*/
-#define ELFNOTE_NAME(_n_) ((void*)(_n_) + sizeof(*(_n_)))
+#define ELFNOTE_NAME(_n_) ((const void*)(_n_) + sizeof(*(_n_)))
#define ELFNOTE_DESC(_n_) (ELFNOTE_NAME(_n_) + (((_n_)->namesz+3)&~3))
#define ELFNOTE_NEXT(_n_) (ELFNOTE_DESC(_n_) + (((_n_)->descsz+3)&~3))
-static int is_xen_elfnote_section(const char *image, Elf_Shdr *shdr)
-{
- Elf_Note *note;
+static int is_xen_elfnote_section(const char *image, const Elf_Shdr *shdr)
+{
+ const Elf_Note *note;
if ( shdr->sh_type != SHT_NOTE )
return 0;
- for ( note = (Elf_Note *)(image + shdr->sh_offset);
- note < (Elf_Note *)(image + shdr->sh_offset + shdr->sh_size);
+ for ( note = (const Elf_Note *)(image + shdr->sh_offset);
+ note < (const Elf_Note *)(image + shdr->sh_offset + shdr->sh_size);
note = ELFNOTE_NEXT(note) )
{
if ( !strncmp(ELFNOTE_NAME(note), "Xen", 4) )
@@ -124,15 +124,15 @@ static int is_xen_elfnote_section(const
return 0;
}
-static Elf_Note *xen_elfnote_lookup(struct domain_setup_info *dsi, int type)
-{
- Elf_Note *note;
+static const Elf_Note *xen_elfnote_lookup(struct domain_setup_info *dsi, int type)
+{
+ const Elf_Note *note;
if ( !dsi->__elfnote_section )
return NULL;
- for ( note = (Elf_Note *)dsi->__elfnote_section;
- note < (Elf_Note *)dsi->__elfnote_section_end;
+ for ( note = (const Elf_Note *)dsi->__elfnote_section;
+ note < (const Elf_Note *)dsi->__elfnote_section_end;
note = ELFNOTE_NEXT(note) )
{
if ( strncmp(ELFNOTE_NAME(note), "Xen", 4) )
@@ -147,7 +147,7 @@ static Elf_Note *xen_elfnote_lookup(stru
const char *xen_elfnote_string(struct domain_setup_info *dsi, int type)
{
- Elf_Note *note;
+ const Elf_Note *note;
if ( !dsi->__elfnote_section )
return xen_guest_string(dsi, type);
@@ -162,7 +162,7 @@ unsigned long long xen_elfnote_numeric(s
unsigned long long xen_elfnote_numeric(struct domain_setup_info *dsi,
int type, int *defined)
{
- Elf_Note *note;
+ const Elf_Note *note;
*defined = 0;
@@ -179,10 +179,10 @@ unsigned long long xen_elfnote_numeric(s
{
case 4:
*defined = 1;
- return *(uint32_t*)ELFNOTE_DESC(note);
+ return *(const uint32_t*)ELFNOTE_DESC(note);
case 8:
*defined = 1;
- return *(uint64_t*)ELFNOTE_DESC(note);
+ return *(const uint64_t*)ELFNOTE_DESC(note);
default:
printk("ERROR: unknown data size %#x for numeric type note %#x\n",
note->descsz, type);
@@ -192,9 +192,9 @@ unsigned long long xen_elfnote_numeric(s
int parseelfimage(struct domain_setup_info *dsi)
{
- Elf_Ehdr *ehdr = (Elf_Ehdr *)dsi->image_addr;
- Elf_Phdr *phdr;
- Elf_Shdr *shdr;
+ const Elf_Ehdr *ehdr = (const Elf_Ehdr *)dsi->image_addr;
+ const Elf_Phdr *phdr;
+ const Elf_Shdr *shdr;
Elf_Addr kernstart = ~0, kernend = 0, vaddr, virt_entry;
const char *shstrtab, *p;
const char *image = (char *)dsi->image_addr;
@@ -222,12 +222,12 @@ int parseelfimage(struct domain_setup_in
/* Look for .notes segment containing at least one Xen note */
for ( h = 0; h < ehdr->e_shnum; h++ )
{
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
if ( !is_xen_elfnote_section(image, shdr) )
continue;
- dsi->__elfnote_section = (void *)image + shdr->sh_offset;
+ dsi->__elfnote_section = (const void *)image + shdr->sh_offset;
dsi->__elfnote_section_end =
- (void *)image + shdr->sh_offset + shdr->sh_size;
+ (const void *)image + shdr->sh_offset + shdr->sh_size;
break;
}
@@ -240,16 +240,16 @@ int parseelfimage(struct domain_setup_in
printk("ELF image has no section-header strings table.\n");
return -EINVAL;
}
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff +
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff +
(ehdr->e_shstrndx*ehdr->e_shentsize));
shstrtab = image + shdr->sh_offset;
for ( h = 0; h < ehdr->e_shnum; h++ )
{
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
if ( is_xen_guest_section(shdr, shstrtab) )
{
- dsi->__xen_guest_string = (char *)image + shdr->sh_offset;
+ dsi->__xen_guest_string = (const char *)image + shdr->sh_offset;
break;
}
}
@@ -346,7 +346,7 @@ int parseelfimage(struct domain_setup_in
for ( h = 0; h < ehdr->e_phnum; h++ )
{
- phdr = (Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
+ phdr = (const Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
if ( !is_loadable_phdr(phdr) )
continue;
vaddr = phdr->p_paddr - dsi->elf_paddr_offset + dsi->v_start;
diff -r f58b0c778b90 xen/common/kernel.c
--- a/xen/common/kernel.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/kernel.c Thu Dec 21 10:34:38 2006 +0100
@@ -20,7 +20,8 @@ int tainted;
void cmdline_parse(char *cmdline)
{
- char opt[100], *optval, *p = cmdline, *q;
+ char opt[100], *optval, *q;
+ const char *p = cmdline;
struct kernel_param *param;
if ( p == NULL )
@@ -70,13 +71,13 @@ void cmdline_parse(char *cmdline)
break;
case OPT_UINT:
*(unsigned int *)param->var =
- simple_strtol(optval, (char **)&optval, 0);
+ simple_strtol(optval, (const char **)&optval, 0);
break;
case OPT_BOOL:
*(int *)param->var = 1;
break;
case OPT_CUSTOM:
- ((void (*)(char *))param->var)(optval);
+ ((void (*)(const char *))param->var)(optval);
break;
}
}
diff -r f58b0c778b90 xen/common/kexec.c
--- a/xen/common/kexec.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/kexec.c Thu Dec 21 10:34:38 2006 +0100
@@ -37,7 +37,7 @@ spinlock_t kexec_lock = SPIN_LOCK_UNLOCK
xen_kexec_reserve_t kexec_crash_area;
-static void __init parse_crashkernel(char *str)
+static void __init parse_crashkernel(const char *str)
{
unsigned long start, size;
diff -r f58b0c778b90 xen/common/lib.c
--- a/xen/common/lib.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/lib.c Thu Dec 21 10:34:38 2006 +0100
@@ -439,11 +439,14 @@ s64 __moddi3(s64 a, s64 b)
#endif /* BITS_PER_LONG == 32 */
-unsigned long long parse_size_and_unit(const char *s, char **ps)
-{
- unsigned long long ret = simple_strtoull(s, (char **)&s, 0);
-
- switch (*s) {
+unsigned long long parse_size_and_unit(const char *s, const char **ps)
+{
+ unsigned long long ret;
+ const char *s1;
+
+ ret = simple_strtoull(s, &s1, 0);
+
+ switch (*s1) {
case 'G': case 'g':
ret <<= 10;
case 'M': case 'm':
@@ -459,7 +462,7 @@ unsigned long long parse_size_and_unit(c
}
if (ps != NULL)
- *ps = (char *)s;
+ *ps = s1;
return ret;
}
diff -r f58b0c778b90 xen/common/page_alloc.c
--- a/xen/common/page_alloc.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/page_alloc.c Thu Dec 21 10:34:38 2006 +0100
@@ -197,7 +197,7 @@ void init_boot_pages(paddr_t ps, paddr_t
void init_boot_pages(paddr_t ps, paddr_t pe)
{
unsigned long bad_spfn, bad_epfn, i;
- char *p;
+ const char *p;
ps = round_pgup(ps);
pe = round_pgdown(pe);
@@ -586,7 +586,7 @@ void *alloc_xenheap_pages(unsigned int o
}
-void free_xenheap_pages(void *v, unsigned int order)
+void free_xenheap_pages(const void *v, unsigned int order)
{
unsigned long flags;
diff -r f58b0c778b90 xen/common/string.c
--- a/xen/common/string.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/string.c Thu Dec 21 10:34:38 2006 +0100
@@ -7,6 +7,8 @@
#include <xen/types.h>
#include <xen/string.h>
#include <xen/ctype.h>
+
+#define __UNCONST(x) (void *)(unsigned long)(x)
#ifndef __HAVE_ARCH_STRNICMP
/**
@@ -204,7 +206,7 @@ char * strchr(const char * s, int c)
for(; *s != (char) c; ++s)
if (*s == '\0')
return NULL;
- return (char *) s;
+ return __UNCONST(s);
}
#endif
@@ -219,7 +221,7 @@ char * strrchr(const char * s, int c)
const char *p = s + strlen(s);
do {
if (*p == (char)c)
- return (char *)p;
+ return __UNCONST(p);
} while (--p >= s);
return NULL;
}
@@ -296,7 +298,7 @@ char * strpbrk(const char * cs,const cha
for( sc1 = cs; *sc1 != '\0'; ++sc1) {
for( sc2 = ct; *sc2 != '\0'; ++sc2) {
if (*sc1 == *sc2)
- return (char *) sc1;
+ return __UNCONST(sc1);
}
}
return NULL;
@@ -481,12 +483,12 @@ char * strstr(const char * s1,const char
l2 = strlen(s2);
if (!l2)
- return (char *) s1;
+ return __UNCONST(s1);
l1 = strlen(s1);
while (l1 >= l2) {
l1--;
if (!memcmp(s1,s2,l2))
- return (char *) s1;
+ return __UNCONST(s1);
s1++;
}
return NULL;
@@ -508,7 +510,7 @@ void *memchr(const void *s, int c, size_
const unsigned char *p = s;
while (n-- != 0) {
if ((unsigned char)c == *p++) {
- return (void *)(p-1);
+ return __UNCONST(p-1);
}
}
return NULL;
diff -r f58b0c778b90 xen/common/time.c
--- a/xen/common/time.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/time.c Thu Dec 21 10:34:38 2006 +0100
@@ -40,7 +40,7 @@ struct tm gmtime(unsigned long t)
struct tm tbuf;
long days, rem;
int y;
- unsigned short int *ip;
+ const unsigned short int *ip;
days = t / SECS_PER_DAY;
rem = t % SECS_PER_DAY;
@@ -66,7 +66,7 @@ struct tm gmtime(unsigned long t)
}
tbuf.tm_year = y - 1900;
tbuf.tm_yday = days;
- ip = (unsigned short int *)__mon_lengths[__isleap(y)];
+ ip = (const unsigned short int *)__mon_lengths[__isleap(y)];
for ( y = 0; days >= ip[y]; ++y )
days -= ip[y];
tbuf.tm_mon = y;
diff -r f58b0c778b90 xen/common/vsprintf.c
--- a/xen/common/vsprintf.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/vsprintf.c Thu Dec 21 10:34:38 2006 +0100
@@ -28,7 +28,7 @@
* @endp: A pointer to the end of the parsed string will be placed here
* @base: The number base to use
*/
-unsigned long simple_strtoul(const char *cp,char **endp,unsigned int base)
+unsigned long simple_strtoul(const char *cp,const char **endp,unsigned int base)
{
unsigned long result = 0,value;
@@ -52,7 +52,7 @@ unsigned long simple_strtoul(const char
cp++;
}
if (endp)
- *endp = (char *)cp;
+ *endp = cp;
return result;
}
@@ -64,7 +64,7 @@ EXPORT_SYMBOL(simple_strtoul);
* @endp: A pointer to the end of the parsed string will be placed here
* @base: The number base to use
*/
-long simple_strtol(const char *cp,char **endp,unsigned int base)
+long simple_strtol(const char *cp,const char **endp,unsigned int base)
{
if(*cp=='-')
return -simple_strtoul(cp+1,endp,base);
@@ -79,7 +79,7 @@ EXPORT_SYMBOL(simple_strtol);
* @endp: A pointer to the end of the parsed string will be placed here
* @base: The number base to use
*/
-unsigned long long simple_strtoull(const char *cp,char **endp,unsigned int base)
+unsigned long long simple_strtoull(const char *cp,const char **endp,unsigned int base)
{
unsigned long long result = 0,value;
@@ -103,7 +103,7 @@ unsigned long long simple_strtoull(const
cp++;
}
if (endp)
- *endp = (char *)cp;
+ *endp = cp;
return result;
}
@@ -115,7 +115,7 @@ EXPORT_SYMBOL(simple_strtoull);
* @endp: A pointer to the end of the parsed string will be placed here
* @base: The number base to use
*/
-long long simple_strtoll(const char *cp,char **endp,unsigned int base)
+long long simple_strtoll(const char *cp,const char **endp,unsigned int base)
{
if(*cp=='-')
return -simple_strtoull(cp+1,endp,base);
diff -r f58b0c778b90 xen/common/xmalloc.c
--- a/xen/common/xmalloc.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/common/xmalloc.c Thu Dec 21 10:34:38 2006 +0100
@@ -87,7 +87,7 @@ static void *data_from_header(struct xma
#endif
}
-static struct xmalloc_hdr *header_from_data(const void *p)
+static struct xmalloc_hdr *header_from_data(void *p)
{
#if XMALLOC_DEBUG
unsigned char *data = (unsigned char *)p - SMP_CACHE_BYTES;
@@ -208,7 +208,7 @@ void *_xmalloc(size_t size, size_t align
return xmalloc_new_page(size);
}
-void xfree(const void *p)
+void xfree(void *p)
{
unsigned long flags;
struct xmalloc_hdr *i, *tmp, *hdr;
diff -r f58b0c778b90 xen/drivers/char/ns16550.c
--- a/xen/drivers/char/ns16550.c Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/drivers/char/ns16550.c Thu Dec 21 10:34:38 2006 +0100
@@ -300,7 +300,7 @@ static int parse_parity_char(int c)
return; \
} while ( 0 )
-static void ns16550_parse_port_config(struct ns16550 *uart, char *conf)
+static void ns16550_parse_port_config(struct ns16550 *uart, const char *conf)
{
int baud;
diff -r f58b0c778b90 xen/include/asm-x86/bitops.h
--- a/xen/include/asm-x86/bitops.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/asm-x86/bitops.h Thu Dec 21 10:34:40 2006 +0100
@@ -246,7 +246,7 @@ static __inline__ int constant_test_bit(
return ((1U << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
}
-static __inline__ int variable_test_bit(int nr, const volatile void * addr)
+static __inline__ int variable_test_bit(int nr, volatile void * addr)
{
int oldbit;
@@ -288,7 +288,7 @@ static inline unsigned int __scanbit(uns
*/
#define find_first_bit(addr,size) \
((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \
- (__scanbit(*(unsigned long *)addr)) : \
+ (__scanbit(*(const unsigned long *)addr)) : \
__find_first_bit(addr,size)))
/**
@@ -299,7 +299,7 @@ static inline unsigned int __scanbit(uns
*/
#define find_next_bit(addr,size,off) \
((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \
- ((off) + (__scanbit((*(unsigned long *)addr) >> (off)))) : \
+ ((off) + (__scanbit((*(const unsigned long *)addr) >> (off)))) : \
__find_next_bit(addr,size,off)))
/**
@@ -312,7 +312,7 @@ static inline unsigned int __scanbit(uns
*/
#define find_first_zero_bit(addr,size) \
((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \
- (__scanbit(~*(unsigned long *)addr)) : \
+ (__scanbit(~*(const unsigned long *)addr)) : \
__find_first_zero_bit(addr,size)))
/**
@@ -323,7 +323,7 @@ static inline unsigned int __scanbit(uns
*/
#define find_next_zero_bit(addr,size,off) \
((__builtin_constant_p(size) && (size) <= BITS_PER_LONG ? \
- ((off)+(__scanbit(~(((*(unsigned long *)addr)) >> (off))))) : \
+ ((off)+(__scanbit(~(((*(const unsigned long *)addr)) >> (off))))) : \
__find_next_zero_bit(addr,size,off)))
diff -r f58b0c778b90 xen/include/asm-x86/system.h
--- a/xen/include/asm-x86/system.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/asm-x86/system.h Thu Dec 21 10:34:40 2006 +0100
@@ -19,7 +19,7 @@
#define xchg(ptr,v) ((__typeof__(*(ptr)))__xchg((unsigned long)(v),(ptr),sizeof(*(ptr))))
struct __xchg_dummy { unsigned long a[100]; };
-#define __xg(x) ((struct __xchg_dummy *)(x))
+#define __xg(x) ((volatile struct __xchg_dummy *)(x))
/*
diff -r f58b0c778b90 xen/include/asm-x86/uaccess.h
--- a/xen/include/asm-x86/uaccess.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/asm-x86/uaccess.h Thu Dec 21 10:34:40 2006 +0100
@@ -140,7 +140,7 @@ extern void __put_user_bad(void);
})
struct __large_struct { unsigned long buf[100]; };
-#define __m(x) (*(struct __large_struct *)(x))
+#define __m(x) (*(const struct __large_struct *)(x))
/*
* Tell gcc we read from memory instead of writing: this is because
@@ -200,16 +200,16 @@ __copy_to_user(void __user *to, const vo
switch (n) {
case 1:
- __put_user_size(*(u8 *)from, (u8 __user *)to, 1, ret, 1);
+ __put_user_size(*(const u8 *)from, (u8 __user *)to, 1, ret, 1);
return ret;
case 2:
- __put_user_size(*(u16 *)from, (u16 __user *)to, 2, ret, 2);
+ __put_user_size(*(const u16 *)from, (u16 __user *)to, 2, ret, 2);
return ret;
case 4:
- __put_user_size(*(u32 *)from, (u32 __user *)to, 4, ret, 4);
+ __put_user_size(*(const u32 *)from, (u32 __user *)to, 4, ret, 4);
return ret;
case 8:
- __put_user_size(*(u64 *)from, (u64 __user *)to, 8, ret, 8);
+ __put_user_size(*(const u64 *)from, (u64 __user *)to, 8, ret, 8);
return ret;
}
}
diff -r f58b0c778b90 xen/include/xen/elf.h
--- a/xen/include/xen/elf.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/elf.h Thu Dec 21 10:34:41 2006 +0100
@@ -526,7 +526,7 @@ extern const char *xen_elfnote_string(st
extern const char *xen_elfnote_string(struct domain_setup_info *dsi, int type);
#ifdef Elf_Ehdr
-extern int elf_sanity_check(Elf_Ehdr *ehdr);
+extern int elf_sanity_check(const Elf_Ehdr *ehdr);
#endif
#endif /* __XEN_ELF_H__ */
diff -r f58b0c778b90 xen/include/xen/kernel.h
--- a/xen/include/xen/kernel.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/kernel.h Thu Dec 21 10:34:41 2006 +0100
@@ -42,7 +42,7 @@
*
*/
#define container_of(ptr, type, member) ({ \
- const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
/*
diff -r f58b0c778b90 xen/include/xen/lib.h
--- a/xen/include/xen/lib.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/lib.h Thu Dec 21 10:34:41 2006 +0100
@@ -74,15 +74,15 @@ extern int vscnprintf(char *buf, size_t
__attribute__ ((format (printf, 3, 0)));
long simple_strtol(
- const char *cp,char **endp, unsigned int base);
+ const char *cp,const char **endp, unsigned int base);
unsigned long simple_strtoul(
- const char *cp,char **endp, unsigned int base);
+ const char *cp,const char **endp, unsigned int base);
long long simple_strtoll(
- const char *cp,char **endp, unsigned int base);
+ const char *cp,const char **endp, unsigned int base);
unsigned long long simple_strtoull(
- const char *cp,char **endp, unsigned int base);
+ const char *cp,const char **endp, unsigned int base);
-unsigned long long parse_size_and_unit(const char *s, char **ps);
+unsigned long long parse_size_and_unit(const char *s, const char **ps);
#define TAINT_UNSAFE_SMP (1<<0)
#define TAINT_MACHINE_CHECK (1<<1)
diff -r f58b0c778b90 xen/include/xen/mm.h
--- a/xen/include/xen/mm.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/mm.h Thu Dec 21 10:34:41 2006 +0100
@@ -55,7 +55,7 @@ void scrub_heap_pages(void);
/* Xen suballocator. These functions are interrupt-safe. */
void init_xenheap_pages(paddr_t ps, paddr_t pe);
void *alloc_xenheap_pages(unsigned int order);
-void free_xenheap_pages(void *v, unsigned int order);
+void free_xenheap_pages(const void *v, unsigned int order);
#define alloc_xenheap_page() (alloc_xenheap_pages(0))
#define free_xenheap_page(v) (free_xenheap_pages(v,0))
diff -r f58b0c778b90 xen/include/xen/sched.h
--- a/xen/include/xen/sched.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/sched.h Thu Dec 21 10:34:41 2006 +0100
@@ -202,8 +202,8 @@ struct domain_setup_info
* You should use the xen_elfnote_* accessors below in order to
* pickup the correct one and retain backwards compatibility.
*/
- void *__elfnote_section, *__elfnote_section_end;
- char *__xen_guest_string;
+ const void *__elfnote_section, *__elfnote_section_end;
+ const char *__xen_guest_string;
};
extern struct vcpu *idle_vcpu[NR_CPUS];
diff -r f58b0c778b90 xen/include/xen/xmalloc.h
--- a/xen/include/xen/xmalloc.h Wed Dec 20 15:22:46 2006 +0000
+++ b/xen/include/xen/xmalloc.h Thu Dec 21 10:34:41 2006 +0100
@@ -12,7 +12,7 @@
#define xmalloc_bytes(_bytes) (_xmalloc(_bytes, SMP_CACHE_BYTES))
/* Free any of the above. */
-extern void xfree(const void *);
+extern void xfree(void *);
/* Underlying functions */
extern void *_xmalloc(size_t size, size_t align);
[-- Attachment #4: xen-cast-tools.diff --]
[-- Type: text/x-diff, Size: 23501 bytes --]
diff -r f58b0c778b90 tools/blktap/drivers/block-qcow.c
--- a/tools/blktap/drivers/block-qcow.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/blktap/drivers/block-qcow.c Thu Dec 21 10:34:27 2006 +0100
@@ -38,6 +38,8 @@
#include "bswap.h"
#include "aes.h"
#include "tapdisk.h"
+
+#define __UNCONST(x) (void *)(unsigned long)(x)
#if 1
#define ASSERT(_p) \
@@ -759,7 +761,7 @@ static int decompress_buffer(uint8_t *ou
memset(strm, 0, sizeof(*strm));
- strm->next_in = (uint8_t *)buf;
+ strm->next_in = (uint8_t *)__UNCONST(buf);
strm->avail_in = buf_size;
strm->next_out = out_buf;
strm->avail_out = out_buf_size;
@@ -1445,7 +1447,7 @@ int qcow_compress_cluster(struct td_stat
}
strm.avail_in = s->cluster_size;
- strm.next_in = (uint8_t *)buf;
+ strm.next_in = (uint8_t *)__UNCONST(buf);
strm.avail_out = s->cluster_size;
strm.next_out = out_buf;
diff -r f58b0c778b90 tools/libxc/xc_linux_build.c
--- a/tools/libxc/xc_linux_build.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xc_linux_build.c Thu Dec 21 10:51:28 2006 +0100
@@ -1079,7 +1079,7 @@ static int xc_linux_build_internal(int x
static int xc_linux_build_internal(int xc_handle,
uint32_t domid,
unsigned int mem_mb,
- char *image,
+ const char *image,
unsigned long image_size,
struct initrd_info *initrd,
const char *cmdline,
diff -r f58b0c778b90 tools/libxc/xc_linux_save.c
--- a/tools/libxc/xc_linux_save.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xc_linux_save.c Thu Dec 21 10:34:31 2006 +0100
@@ -80,7 +80,7 @@ static xen_pfn_t *live_m2p = NULL;
#define BITMAP_SIZE ((max_pfn + BITS_PER_LONG - 1) / 8)
#define BITMAP_ENTRY(_nr,_bmap) \
- ((unsigned long *)(_bmap))[(_nr)/BITS_PER_LONG]
+ ((volatile unsigned long *)(_bmap))[(_nr)/BITS_PER_LONG]
#define BITMAP_SHIFT(_nr) ((_nr) % BITS_PER_LONG)
@@ -112,7 +112,7 @@ static inline int count_bits ( int nr, v
static inline int count_bits ( int nr, volatile void *addr)
{
int i, count = 0;
- unsigned long *p = (unsigned long *)addr;
+ volatile unsigned long *p = (volatile unsigned long *)addr;
/* We know that the array is padded to unsigned long. */
for( i = 0; i < (nr / (sizeof(unsigned long)*8)); i++, p++ )
count += hweight32(*p);
@@ -443,7 +443,7 @@ static int canonicalize_pagetable(unsign
/* XXX index of the L2 entry in PAE mode which holds the guest LPT */
#define PAE_GLPT_L2ENTRY (495)
- pte = ((uint64_t*)spage)[PAE_GLPT_L2ENTRY];
+ pte = ((const uint64_t*)spage)[PAE_GLPT_L2ENTRY];
if(((pte >> PAGE_SHIFT) & 0x0fffffff) == live_p2m[pfn])
xen_start = (hvirt_start >> L2_PAGETABLE_SHIFT_PAE) & 0x1ff;
@@ -464,9 +464,9 @@ static int canonicalize_pagetable(unsign
unsigned long pfn, mfn;
if (pt_levels == 2)
- pte = ((uint32_t*)spage)[i];
+ pte = ((const uint32_t*)spage)[i];
else
- pte = ((uint64_t*)spage)[i];
+ pte = ((const uint64_t*)spage)[i];
if (i >= xen_start && i < xen_end)
pte = 0;
diff -r f58b0c778b90 tools/libxc/xc_load_bin.c
--- a/tools/libxc/xc_load_bin.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xc_load_bin.c Thu Dec 21 10:34:31 2006 +0100
@@ -98,7 +98,7 @@ struct xen_bin_image_table
#define FLAGS_MASK ((~ 0) & (~ XEN_REACTOS_FLAG_ALIGN4K))
#define FLAGS_REQUIRED XEN_REACTOS_FLAG_ADDRSVALID
-static struct xen_bin_image_table *
+static const struct xen_bin_image_table *
findtable(const char *image, unsigned long image_size);
static int
parsebinimage(
@@ -122,11 +122,11 @@ int probe_bin(const char *image,
return 0;
}
-static struct xen_bin_image_table *
+static const struct xen_bin_image_table *
findtable(const char *image, unsigned long image_size)
{
- struct xen_bin_image_table *table;
- unsigned long *probe_ptr;
+ const struct xen_bin_image_table *table;
+ const unsigned long *probe_ptr;
unsigned probe_index;
unsigned probe_count;
@@ -142,13 +142,13 @@ findtable(const char *image, unsigned lo
sizeof(unsigned long);
/* Search for the magic header */
- probe_ptr = (unsigned long *) image;
+ probe_ptr = (const unsigned long *) image;
table = NULL;
for ( probe_index = 0; probe_index < probe_count; probe_index++ )
{
if ( XEN_REACTOS_MAGIC3 == *probe_ptr )
{
- table = (struct xen_bin_image_table *) probe_ptr;
+ table = (const struct xen_bin_image_table *) probe_ptr;
/* Checksum correct? */
if ( 0 == table->magic + table->flags + table->checksum )
{
@@ -165,7 +165,7 @@ static int parsebinimage(const char *ima
unsigned long image_size,
struct domain_setup_info *dsi)
{
- struct xen_bin_image_table *image_info;
+ const struct xen_bin_image_table *image_info;
unsigned long start_addr;
unsigned long end_addr;
@@ -186,13 +186,13 @@ static int parsebinimage(const char *ima
/* Sanity check on the addresses */
if ( image_info->header_addr < image_info->load_addr ||
- ((char *) image_info - image) <
+ ((const char *) image_info - image) <
(image_info->header_addr - image_info->load_addr) )
{
ERROR("Invalid header_addr.");
return -EINVAL;
}
- start_addr = image_info->header_addr - ((char *) image_info - image);
+ start_addr = image_info->header_addr - ((const char *) image_info - image);
if ( 0 != image_info->load_end_addr &&
( image_info->load_end_addr < image_info->load_end_addr ||
start_addr + image_size < image_info->load_end_addr ) )
@@ -221,7 +221,7 @@ static int parsebinimage(const char *ima
else
{
dsi->v_end = image_info->load_addr + image_size -
- (((char *) image_info - image) -
+ (((const char *) image_info - image) -
(image_info->header_addr - image_info->load_addr));
}
dsi->v_kernstart = dsi->v_start;
@@ -240,7 +240,7 @@ loadbinimage(
unsigned long size;
char *va;
unsigned long done, chunksz;
- struct xen_bin_image_table *image_info;
+ const struct xen_bin_image_table *image_info;
image_info = findtable(image, image_size);
if ( NULL == image_info )
@@ -252,7 +252,7 @@ loadbinimage(
/* Determine image size */
if ( 0 == image_info->load_end_addr )
{
- size = image_size - (((char *) image_info - image) -
+ size = image_size - (((const char *)image_info - image) -
(image_info->header_addr -
image_info->load_addr));
}
@@ -262,7 +262,7 @@ loadbinimage(
}
/* It's possible that we need to skip the first part of the image */
- image += ((char *)image_info - image) -
+ image += ((const char *)image_info - image) -
(image_info->header_addr - image_info->load_addr);
for ( done = 0; done < size; done += chunksz )
diff -r f58b0c778b90 tools/libxc/xc_load_elf.c
--- a/tools/libxc/xc_load_elf.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xc_load_elf.c Thu Dec 21 10:34:31 2006 +0100
@@ -75,7 +75,7 @@ int probe_elf(const char *image,
unsigned long image_size,
struct load_funcs *load_funcs)
{
- Elf_Ehdr *ehdr = (Elf_Ehdr *)image;
+ const Elf_Ehdr *ehdr = (const Elf_Ehdr *)image;
if ( !IS_ELF(*ehdr) )
return -EINVAL;
@@ -86,7 +86,7 @@ int probe_elf(const char *image,
return 0;
}
-static inline int is_loadable_phdr(Elf_Phdr *phdr)
+static inline int is_loadable_phdr(const Elf_Phdr *phdr)
{
return ((phdr->p_type == PT_LOAD) &&
((phdr->p_flags & (PF_W|PF_X)) != 0));
@@ -96,12 +96,12 @@ static inline int is_loadable_phdr(Elf_P
* Fallback for kernels containing only the legacy __xen_guest string
* and no ELF notes.
*/
-static int is_xen_guest_section(Elf_Shdr *shdr, const char *shstrtab)
+static int is_xen_guest_section(const Elf_Shdr *shdr, const char *shstrtab)
{
return strcmp(&shstrtab[shdr->sh_name], "__xen_guest") == 0;
}
-static const char *xen_guest_lookup(struct domain_setup_info *dsi, int type)
+static const char *xen_guest_lookup(const struct domain_setup_info *dsi, int type)
{
const char *xenguest_fallbacks[] = {
[XEN_ELFNOTE_ENTRY] = "VIRT_ENTRY=",
@@ -134,7 +134,7 @@ static const char *xen_guest_lookup(stru
return p + strlen(fallback);
}
-static const char *xen_guest_string(struct domain_setup_info *dsi, int type)
+static const char *xen_guest_string(const struct domain_setup_info *dsi, int type)
{
const char *p = xen_guest_lookup(dsi, type);
@@ -148,7 +148,7 @@ static const char *xen_guest_string(stru
return p;
}
-static unsigned long long xen_guest_numeric(struct domain_setup_info *dsi,
+static unsigned long long xen_guest_numeric(const struct domain_setup_info *dsi,
int type, int *defined)
{
const char *p = xen_guest_lookup(dsi, type);
@@ -175,19 +175,19 @@ static unsigned long long xen_guest_nume
/*
* Interface to the Xen ELF notes.
*/
-#define ELFNOTE_NAME(_n_) ((void*)(_n_) + sizeof(*(_n_)))
+#define ELFNOTE_NAME(_n_) ((const void*)(_n_) + sizeof(*(_n_)))
#define ELFNOTE_DESC(_n_) (ELFNOTE_NAME(_n_) + (((_n_)->namesz+3)&~3))
#define ELFNOTE_NEXT(_n_) (ELFNOTE_DESC(_n_) + (((_n_)->descsz+3)&~3))
-static int is_xen_elfnote_section(const char *image, Elf_Shdr *shdr)
-{
- Elf_Note *note;
+static int is_xen_elfnote_section(const char *image, const Elf_Shdr *shdr)
+{
+ const Elf_Note *note;
if ( shdr->sh_type != SHT_NOTE )
return 0;
- for ( note = (Elf_Note *)(image + shdr->sh_offset);
- note < (Elf_Note *)(image + shdr->sh_offset + shdr->sh_size);
+ for ( note = (const Elf_Note *)(image + shdr->sh_offset);
+ note < (const Elf_Note *)(image + shdr->sh_offset + shdr->sh_size);
note = ELFNOTE_NEXT(note) )
{
if ( !strncmp(ELFNOTE_NAME(note), "Xen", 4) )
@@ -197,15 +197,15 @@ static int is_xen_elfnote_section(const
return 0;
}
-static Elf_Note *xen_elfnote_lookup(struct domain_setup_info *dsi, int type)
-{
- Elf_Note *note;
+static const Elf_Note *xen_elfnote_lookup(const struct domain_setup_info *dsi, int type)
+{
+ const Elf_Note *note;
if ( !dsi->__elfnote_section )
return NULL;
- for ( note = (Elf_Note *)dsi->__elfnote_section;
- note < (Elf_Note *)dsi->__elfnote_section_end;
+ for ( note = (const Elf_Note *)dsi->__elfnote_section;
+ note < (const Elf_Note *)dsi->__elfnote_section_end;
note = ELFNOTE_NEXT(note) )
{
if ( strncmp(ELFNOTE_NAME(note), "Xen", 4) )
@@ -218,9 +218,9 @@ static Elf_Note *xen_elfnote_lookup(stru
return NULL;
}
-const char *xen_elfnote_string(struct domain_setup_info *dsi, int type)
-{
- Elf_Note *note;
+const char *xen_elfnote_string(const struct domain_setup_info *dsi, int type)
+{
+ const Elf_Note *note;
if ( !dsi->__elfnote_section )
return xen_guest_string(dsi, type);
@@ -232,10 +232,10 @@ const char *xen_elfnote_string(struct do
return (const char *)ELFNOTE_DESC(note);
}
-unsigned long long xen_elfnote_numeric(struct domain_setup_info *dsi,
+unsigned long long xen_elfnote_numeric(const struct domain_setup_info *dsi,
int type, int *defined)
{
- Elf_Note *note;
+ const Elf_Note *note;
*defined = 0;
@@ -252,10 +252,10 @@ unsigned long long xen_elfnote_numeric(s
{
case 4:
*defined = 1;
- return *(uint32_t*)ELFNOTE_DESC(note);
+ return *(const uint32_t*)ELFNOTE_DESC(note);
case 8:
*defined = 1;
- return *(uint64_t*)ELFNOTE_DESC(note);
+ return *(const uint64_t*)ELFNOTE_DESC(note);
default:
xc_set_error(XC_INVALID_KERNEL,
"elfnotes: unknown data size %#x for numeric type note %#x\n",
@@ -268,9 +268,9 @@ static int parseelfimage(const char *ima
unsigned long image_len,
struct domain_setup_info *dsi)
{
- Elf_Ehdr *ehdr = (Elf_Ehdr *)image;
- Elf_Phdr *phdr;
- Elf_Shdr *shdr;
+ const Elf_Ehdr *ehdr = (const Elf_Ehdr *)image;
+ const Elf_Phdr *phdr;
+ const Elf_Shdr *shdr;
Elf_Addr kernstart = ~0, kernend = 0, vaddr, virt_entry;
const char *shstrtab, *p;
int h, virt_base_defined, elf_pa_off_defined, virt_entry_defined;
@@ -331,12 +331,12 @@ static int parseelfimage(const char *ima
/* Look for .notes segment containing at least one Xen note */
for ( h = 0; h < ehdr->e_shnum; h++ )
{
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
if ( !is_xen_elfnote_section(image, shdr) )
continue;
- dsi->__elfnote_section = (void *)image + shdr->sh_offset;
+ dsi->__elfnote_section = (const void *)image + shdr->sh_offset;
dsi->__elfnote_section_end =
- (void *)image + shdr->sh_offset + shdr->sh_size;
+ (const void *)image + shdr->sh_offset + shdr->sh_size;
break;
}
@@ -350,16 +350,16 @@ static int parseelfimage(const char *ima
"ELF image has no section-header strings table.");
return -EINVAL;
}
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff +
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff +
(ehdr->e_shstrndx*ehdr->e_shentsize));
shstrtab = image + shdr->sh_offset;
for ( h = 0; h < ehdr->e_shnum; h++ )
{
- shdr = (Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
+ shdr = (const Elf_Shdr *)(image + ehdr->e_shoff + (h*ehdr->e_shentsize));
if ( is_xen_guest_section(shdr, shstrtab) )
{
- dsi->__xen_guest_string = (char *)image + shdr->sh_offset;
+ dsi->__xen_guest_string = (const char *)image + shdr->sh_offset;
break;
}
}
@@ -462,7 +462,7 @@ static int parseelfimage(const char *ima
for ( h = 0; h < ehdr->e_phnum; h++ )
{
- phdr = (Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
+ phdr = (const Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
if ( !is_loadable_phdr(phdr) )
continue;
vaddr = phdr->p_paddr - dsi->elf_paddr_offset + dsi->v_start;
@@ -514,8 +514,8 @@ loadelfimage(
const char *image, unsigned long elfsize, int xch, uint32_t dom,
xen_pfn_t *parray, struct domain_setup_info *dsi)
{
- Elf_Ehdr *ehdr = (Elf_Ehdr *)image;
- Elf_Phdr *phdr;
+ const Elf_Ehdr *ehdr = (const Elf_Ehdr *)image;
+ const Elf_Phdr *phdr;
int h;
char *va;
@@ -523,7 +523,7 @@ loadelfimage(
for ( h = 0; h < ehdr->e_phnum; h++ )
{
- phdr = (Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
+ phdr = (const Elf_Phdr *)(image + ehdr->e_phoff + (h*ehdr->e_phentsize));
if ( !is_loadable_phdr(phdr) )
continue;
@@ -569,7 +569,8 @@ loadelfsymtab(
const char *image, int xch, uint32_t dom, xen_pfn_t *parray,
struct domain_setup_info *dsi)
{
- Elf_Ehdr *ehdr = (Elf_Ehdr *)image, *sym_ehdr;
+ const Elf_Ehdr *ehdr = (const Elf_Ehdr *)image;
+ Elf_Ehdr *sym_ehdr;
Elf_Shdr *shdr;
unsigned long maxva, symva;
char *p;
diff -r f58b0c778b90 tools/libxc/xg_private.c
--- a/tools/libxc/xg_private.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xg_private.c Thu Dec 21 10:54:25 2006 +0100
@@ -11,6 +11,7 @@
#include "xg_private.h"
+#define __UNCONST(x) (void *)(unsigned long)(x)
int lock_pages(void *addr, size_t len)
{
int e = 0;
@@ -116,7 +117,7 @@ char *xc_inflate_buffer(const char *in_b
{
if ( out_size != NULL )
*out_size = in_size;
- return (char *)in_buf;
+ return __UNCONST(in_buf);
}
out_len = (unsigned char)in_buf[in_size-4] +
@@ -132,7 +133,7 @@ char *xc_inflate_buffer(const char *in_b
return NULL;
}
- zStream.next_in = (unsigned char *)in_buf;
+ zStream.next_in = (unsigned char *)__UNCONST(in_buf);
zStream.avail_in = in_size;
zStream.next_out = (unsigned char *)out_buf;
zStream.avail_out = out_len+16;
diff -r f58b0c778b90 tools/libxc/xg_private.h
--- a/tools/libxc/xg_private.h Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/libxc/xg_private.h Thu Dec 21 10:34:31 2006 +0100
@@ -146,7 +146,7 @@ struct domain_setup_info
* You should use the xen_elfnote_* accessors below in order to
* pickup the correct one and retain backwards compatibility.
*/
- void *__elfnote_section, *__elfnote_section_end;
+ const void *__elfnote_section, *__elfnote_section_end;
const char *__xen_guest_string;
};
@@ -162,14 +162,14 @@ typedef int (*loadimagefunc)(const char
* in the note is returned and *defined is set to non-zero. If no such
* note is found then *defined is set to 0 and 0 is returned.
*/
-extern unsigned long long xen_elfnote_numeric(struct domain_setup_info *dsi,
+extern unsigned long long xen_elfnote_numeric(const struct domain_setup_info *dsi,
int type, int *defined);
/*
* If an ELF note of the given type is found then the string contained
* in the value is returned, otherwise NULL is returned.
*/
-extern const char * xen_elfnote_string(struct domain_setup_info *dsi,
+extern const char * xen_elfnote_string(const struct domain_setup_info *dsi,
int type);
struct load_funcs
diff -r f58b0c778b90 tools/xenstat/xentop/xentop.c
--- a/tools/xenstat/xentop/xentop.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/xenstat/xentop/xentop.c Thu Dec 21 10:34:34 2006 +0100
@@ -269,7 +269,7 @@ static void print(const char *fmt, ...)
if (!batch) {
if((current_row() < lines()-1)) {
va_start(args, fmt);
- vwprintw(stdscr, (char *)fmt, args);
+ vwprintw(stdscr, (const char *)fmt, args);
va_end(args);
}
} else {
@@ -283,7 +283,7 @@ static void attr_addstr(int attr, const
static void attr_addstr(int attr, const char *str)
{
attron(attr);
- addstr((char *)str);
+ addstr((const char *)str);
attroff(attr);
}
diff -r f58b0c778b90 tools/xenstore/list.h
--- a/tools/xenstore/list.h Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/xenstore/list.h Thu Dec 21 10:34:34 2006 +0100
@@ -12,7 +12,7 @@
#define LIST_POISON2 ((void *) 0x00200200)
#define container_of(ptr, type, member) ({ \
- const typeof( ((type *)0)->member ) *__mptr = (ptr); \
+ typeof( ((type *)0)->member ) *__mptr = (ptr); \
(type *)( (char *)__mptr - offsetof(type,member) );})
/*
diff -r f58b0c778b90 tools/xenstore/xenstored_core.c
--- a/tools/xenstore/xenstored_core.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/xenstore/xenstored_core.c Thu Dec 21 10:34:34 2006 +0100
@@ -53,6 +53,7 @@
#include "hashtable.h"
+#define __UNCONST(x) (void *)(unsigned long)(x)
extern int xce_handle; /* in xenstored_domain.c */
@@ -417,7 +418,7 @@ static struct node *read_node(struct con
struct node *node;
TDB_CONTEXT * context = tdb_context(conn);
- key.dptr = (void *)name;
+ key.dptr = (char *)__UNCONST(name);
key.dsize = strlen(name);
data = tdb_fetch(context, key);
@@ -463,7 +464,7 @@ static bool write_node(struct connection
TDB_DATA key, data;
void *p;
- key.dptr = (void *)node->name;
+ key.dptr = (char *)__UNCONST(node->name);
key.dsize = strlen(node->name);
data.dsize = 3*sizeof(uint32_t)
@@ -736,11 +737,11 @@ char *canonicalize(struct connection *co
const char *prefix;
if (!node || strstarts(node, "/"))
- return (char *)node;
+ return __UNCONST(node);
prefix = get_implicit_path(conn);
if (prefix)
return talloc_asprintf(node, "%s/%s", prefix, node);
- return (char *)node;
+ return __UNCONST(node);
}
bool check_event_node(const char *node)
@@ -784,7 +785,7 @@ static void delete_node_single(struct co
{
TDB_DATA key;
- key.dptr = (void *)node->name;
+ key.dptr = (void *)__UNCONST(node->name);
key.dsize = strlen(node->name);
if (tdb_delete(tdb_context(conn), key) != 0) {
@@ -854,7 +855,7 @@ static int destroy_node(void *_node)
if (streq(node->name, "/"))
corrupt(NULL, "Destroying root node!");
- key.dptr = (void *)node->name;
+ key.dptr = (void *)__UNCONST(node->name);
key.dsize = strlen(node->name);
tdb_delete(node->tdb, key);
@@ -1446,7 +1447,7 @@ static void manual_node(const char *name
node->name = name;
node->perms = &perms;
node->num_perms = 1;
- node->children = (char *)child;
+ node->children = (char *)__UNCONST(child);
if (child)
node->childlen = strlen(child) + 1;
diff -r f58b0c778b90 tools/xenstore/xs.c
--- a/tools/xenstore/xs.c Wed Dec 20 15:22:46 2006 +0000
+++ b/tools/xenstore/xs.c Thu Dec 21 10:34:34 2006 +0100
@@ -77,6 +77,8 @@ struct xs_handle {
pthread_mutex_t request_mutex;
};
+#define __UNCONST(x) (void *)(unsigned long)(x)
+
static int read_message(struct xs_handle *h);
static void *read_thread(void *arg);
@@ -381,7 +383,7 @@ static void *xs_single(struct xs_handle
{
struct iovec iovec;
- iovec.iov_base = (void *)string;
+ iovec.iov_base = (void *)__UNCONST(string);
iovec.iov_len = strlen(string) + 1;
return xs_talkv(h, t, type, &iovec, 1, len);
}
@@ -440,9 +442,9 @@ bool xs_write(struct xs_handle *h, xs_tr
{
struct iovec iovec[2];
- iovec[0].iov_base = (void *)path;
+ iovec[0].iov_base = (void *)__UNCONST(path);
iovec[0].iov_len = strlen(path) + 1;
- iovec[1].iov_base = (void *)data;
+ iovec[1].iov_base = (void *)__UNCONST(data);
iovec[1].iov_len = len;
return xs_bool(xs_talkv(h, t, XS_WRITE, iovec,
@@ -513,7 +515,7 @@ bool xs_set_permissions(struct xs_handle
unsigned int i;
struct iovec iov[1+num_perms];
- iov[0].iov_base = (void *)path;
+ iov[0].iov_base = (void *)__UNCONST(path);
iov[0].iov_len = strlen(path) + 1;
for (i = 0; i < num_perms; i++) {
@@ -561,9 +563,9 @@ bool xs_watch(struct xs_handle *h, const
}
pthread_mutex_unlock(&h->request_mutex);
- iov[0].iov_base = (void *)path;
+ iov[0].iov_base = (void *)__UNCONST(path);
iov[0].iov_len = strlen(path) + 1;
- iov[1].iov_base = (void *)token;
+ iov[1].iov_base = (void *)__UNCONST(token);
iov[1].iov_len = strlen(token) + 1;
return xs_bool(xs_talkv(h, XBT_NULL, XS_WATCH, iov,
@@ -628,9 +630,9 @@ bool xs_unwatch(struct xs_handle *h, con
{
struct iovec iov[2];
- iov[0].iov_base = (char *)path;
+ iov[0].iov_base = (char *)__UNCONST(path);
iov[0].iov_len = strlen(path) + 1;
- iov[1].iov_base = (char *)token;
+ iov[1].iov_base = (char *)__UNCONST(token);
iov[1].iov_len = strlen(token) + 1;
return xs_bool(xs_talkv(h, XBT_NULL, XS_UNWATCH, iov,
@@ -740,7 +742,7 @@ char *xs_debug_command(struct xs_handle
{
struct iovec iov[2];
- iov[0].iov_base = (void *)cmd;
+ iov[0].iov_base = (void *)__UNCONST(cmd);
iov[0].iov_len = strlen(cmd) + 1;
iov[1].iov_base = data;
iov[1].iov_len = len;
[-- Attachment #5: Type: text/plain, Size: 138 bytes --]
_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xensource.com
http://lists.xensource.com/xen-devel
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 10:05 [PATCH] Add -Wcast-qual flag Christoph Egger
@ 2006-12-21 10:41 ` Keir Fraser
2006-12-21 11:12 ` Christoph Egger
2006-12-21 12:51 ` Jan Beulich
0 siblings, 2 replies; 8+ messages in thread
From: Keir Fraser @ 2006-12-21 10:41 UTC (permalink / raw)
To: Christoph Egger, xen-devel
On 21/12/06 10:05, "Christoph Egger" <Christoph.Egger@amd.com> wrote:
> The xen-cast.diff adds the -Wcast-qual flag.
We don't enable this flag precisely because we end up needing to scatter
const all over the place like confetti. I'm not convinced that use of const
improves code quality. I fear we'd end up with 'const foo * const bar' all
over the place -- ugly and confusing to most programmers (who frequently
mess up const placement, in my experience).
-- Keir
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 10:41 ` Keir Fraser
@ 2006-12-21 11:12 ` Christoph Egger
2006-12-21 12:51 ` Jan Beulich
1 sibling, 0 replies; 8+ messages in thread
From: Christoph Egger @ 2006-12-21 11:12 UTC (permalink / raw)
To: xen-devel; +Cc: Keir Fraser
On Thursday 21 December 2006 11:41, Keir Fraser wrote:
> On 21/12/06 10:05, "Christoph Egger" <Christoph.Egger@amd.com> wrote:
> > The xen-cast.diff adds the -Wcast-qual flag.
>
> We don't enable this flag precisely because we end up needing to scatter
> const all over the place like confetti.
That doesn't imply that this is bad. Compilers may generate better code.
> I'm not convinced that use of const improves code quality.
In my experience, exactly this will happen.
> I fear we'd end up with 'const foo * const bar' all
> over the place -- ugly and confusing to most programmers (who frequently
> mess up const placement, in my experience).
Exactly these programmers will stop doing this, when the compiler tells them.
With -Wcast-qual you find code that does things like this:
int foo(const char *str) {
char *s = str;
int i;
....
s[i] = '\0';
}
Modifying read-only memory is IMO never a good idea, in particular,
when it is shared with something else.
And there are indeed places in the xen code, where this happens.
(Example: Look how canonicalize() is used in tools/xenstored/*,
Look at copy_to_user_hvm() in xen/arch/x86/hvm/platform.c )
Please have a closer look at the patches.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 10:41 ` Keir Fraser
2006-12-21 11:12 ` Christoph Egger
@ 2006-12-21 12:51 ` Jan Beulich
2006-12-21 13:25 ` Christoph Egger
2006-12-21 13:28 ` Keir Fraser
1 sibling, 2 replies; 8+ messages in thread
From: Jan Beulich @ 2006-12-21 12:51 UTC (permalink / raw)
To: Christoph Egger, xen-devel, Keir Fraser
>>> Keir Fraser <keir@xensource.com> 21.12.06 11:41 >>>
>On 21/12/06 10:05, "Christoph Egger" <Christoph.Egger@amd.com> wrote:
>
>> The xen-cast.diff adds the -Wcast-qual flag.
>
>We don't enable this flag precisely because we end up needing to scatter
>const all over the place like confetti. I'm not convinced that use of const
>improves code quality. I fear we'd end up with 'const foo * const bar' all
>over the place -- ugly and confusing to most programmers (who frequently
>mess up const placement, in my experience).
While I'd really like to see all Xen code become const-correct (because I do
believe this helps with code quality, like does marking read only data read
only in the page tables), I don't think adding the warning here is
appropriate - after all, in C this is one of the purposes of adding explicit
casts (although I agree it's questionable to use casts for this purpose).
And no, I don't think that many people screwing up const placement is a
proper argument for not using const where possible.
Jan
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 12:51 ` Jan Beulich
@ 2006-12-21 13:25 ` Christoph Egger
2006-12-21 13:28 ` Keir Fraser
1 sibling, 0 replies; 8+ messages in thread
From: Christoph Egger @ 2006-12-21 13:25 UTC (permalink / raw)
To: xen-devel; +Cc: Keir Fraser, Jan Beulich
On Thursday 21 December 2006 13:51, Jan Beulich wrote:
> >>> Keir Fraser <keir@xensource.com> 21.12.06 11:41 >>>
> >
> >On 21/12/06 10:05, "Christoph Egger" <Christoph.Egger@amd.com> wrote:
> >> The xen-cast.diff adds the -Wcast-qual flag.
> >
> >We don't enable this flag precisely because we end up needing to scatter
> >const all over the place like confetti. I'm not convinced that use of
> > const improves code quality. I fear we'd end up with 'const foo * const
> > bar' all over the place -- ugly and confusing to most programmers (who
> > frequently mess up const placement, in my experience).
>
> While I'd really like to see all Xen code become const-correct (because I
> do believe this helps with code quality, like does marking read only data
> read only in the page tables), I don't think adding the warning here is
> appropriate
IMO, it is. It is one step towards to do more type-safe coding.
> - after all, in C this is one of the purposes of adding
> explicit casts (although I agree it's questionable to use casts for this
> purpose). And no, I don't think that many people screwing up const
> placement is a proper argument for not using const where possible.
Full ack.
Christoph
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 12:51 ` Jan Beulich
2006-12-21 13:25 ` Christoph Egger
@ 2006-12-21 13:28 ` Keir Fraser
2006-12-21 14:18 ` Jan Beulich
1 sibling, 1 reply; 8+ messages in thread
From: Keir Fraser @ 2006-12-21 13:28 UTC (permalink / raw)
To: Jan Beulich, Christoph Egger, xen-devel, Keir Fraser
On 21/12/06 12:51, "Jan Beulich" <jbeulich@novell.com> wrote:
> While I'd really like to see all Xen code become const-correct (because I do
> believe this helps with code quality, like does marking read only data read
> only in the page tables), I don't think adding the warning here is
> appropriate - after all, in C this is one of the purposes of adding explicit
> casts (although I agree it's questionable to use casts for this purpose).
> And no, I don't think that many people screwing up const placement is a
> proper argument for not using const where possible.
Well, I'm inclined to take the clean-up parts of the patches but leave out
__UNCONST() and -Wcast-qual. I really dislike the compiler thinking it knows
better than an explicit cast, and casting via unsigned long is just a
kludge.
-- Keir
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 13:28 ` Keir Fraser
@ 2006-12-21 14:18 ` Jan Beulich
2006-12-21 14:56 ` Christoph Egger
0 siblings, 1 reply; 8+ messages in thread
From: Jan Beulich @ 2006-12-21 14:18 UTC (permalink / raw)
To: Keir Fraser; +Cc: Christoph Egger, xen-devel
>>> Keir Fraser <keir@xensource.com> 21.12.06 14:28 >>>
>On 21/12/06 12:51, "Jan Beulich" <jbeulich@novell.com> wrote:
>
>> While I'd really like to see all Xen code become const-correct (because I do
>> believe this helps with code quality, like does marking read only data read
>> only in the page tables), I don't think adding the warning here is
>> appropriate - after all, in C this is one of the purposes of adding explicit
>> casts (although I agree it's questionable to use casts for this purpose).
>> And no, I don't think that many people screwing up const placement is a
>> proper argument for not using const where possible.
>
>Well, I'm inclined to take the clean-up parts of the patches but leave out
>__UNCONST() and -Wcast-qual. I really dislike the compiler thinking it knows
>better than an explicit cast, and casting via unsigned long is just a
>kludge.
This I completely agree with.
Jan
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] Add -Wcast-qual flag
2006-12-21 14:18 ` Jan Beulich
@ 2006-12-21 14:56 ` Christoph Egger
0 siblings, 0 replies; 8+ messages in thread
From: Christoph Egger @ 2006-12-21 14:56 UTC (permalink / raw)
To: xen-devel; +Cc: Keir Fraser, Jan Beulich
On Thursday 21 December 2006 15:18, Jan Beulich wrote:
> >>> Keir Fraser <keir@xensource.com> 21.12.06 14:28 >>>
> >
> >On 21/12/06 12:51, "Jan Beulich" <jbeulich@novell.com> wrote:
> >> While I'd really like to see all Xen code become const-correct (because
> >> I do believe this helps with code quality, like does marking read only
> >> data read only in the page tables), I don't think adding the warning
> >> here is appropriate - after all, in C this is one of the purposes of
> >> adding explicit casts (although I agree it's questionable to use casts
> >> for this purpose). And no, I don't think that many people screwing up
> >> const placement is a proper argument for not using const where possible.
> >
> >Well, I'm inclined to take the clean-up parts of the patches but leave out
> >__UNCONST() and -Wcast-qual. I really dislike the compiler thinking it
> > knows better than an explicit cast, and casting via unsigned long is just
> > a kludge.
>
> This I completely agree with.
Me, too. I mentioned in my first mail, these parts with __UNCONST() must be
reworked to get rid of it. There was no obvious solution for me at least.
If someone knows a way, I am for it.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2006-12-21 14:56 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-12-21 10:05 [PATCH] Add -Wcast-qual flag Christoph Egger
2006-12-21 10:41 ` Keir Fraser
2006-12-21 11:12 ` Christoph Egger
2006-12-21 12:51 ` Jan Beulich
2006-12-21 13:25 ` Christoph Egger
2006-12-21 13:28 ` Keir Fraser
2006-12-21 14:18 ` Jan Beulich
2006-12-21 14:56 ` Christoph Egger
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.