aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Config.mk26
-rw-r--r--tools/Rules.mk10
-rw-r--r--tools/ioemu/target-i386-dm/Makefile4
-rw-r--r--tools/ioemu/vl.h4
-rw-r--r--tools/misc/lomount/lomount.c2
-rw-r--r--tools/misc/mbootpack/Makefile2
-rw-r--r--tools/misc/xc_shadow.c4
-rw-r--r--tools/vtpm_manager/manager/Makefile2
-rw-r--r--tools/xenmon/xenbaked.c4
-rw-r--r--tools/xenstat/libxenstat/Makefile2
-rw-r--r--tools/xenstat/libxenstat/src/xen-interface.c2
-rw-r--r--tools/xenstat/libxenstat/src/xen-interface.h2
-rw-r--r--tools/xenstat/libxenstat/src/xenstat.c2
-rw-r--r--tools/xenstat/libxenstat/src/xenstat.h2
-rw-r--r--tools/xenstore/xenstored_core.c6
-rw-r--r--tools/xentrace/xentrace.c2
-rw-r--r--xen/arch/x86/Rules.mk13
-rw-r--r--xen/arch/x86/audit.c8
-rw-r--r--xen/arch/x86/hvm/hvm.c8
-rw-r--r--xen/arch/x86/hvm/i8259.c5
-rw-r--r--xen/arch/x86/hvm/vmx/vmcs.c2
-rw-r--r--xen/arch/x86/hvm/vmx/vmx.c5
-rw-r--r--xen/common/lib.c6
-rw-r--r--xen/include/asm-x86/hvm/io.h2
-rw-r--r--xen/include/asm-x86/hvm/vpic.h6
-rw-r--r--xen/include/xen/sched.h2
26 files changed, 65 insertions, 68 deletions
diff --git a/Config.mk b/Config.mk
index a7c975d2bc..7cea3953c5 100644
--- a/Config.mk
+++ b/Config.mk
@@ -12,14 +12,6 @@ XEN_TARGET_X86_PAE ?= n
HOSTCC = gcc
HOSTCFLAGS = -Wall -Werror -Wstrict-prototypes -O2 -fomit-frame-pointer
-ifneq ($(debug),y)
-# Optimisation flags are overridable
-CFLAGS ?= -O3 -fomit-frame-pointer
-CFLAGS += -DNDEBUG
-else
-CFLAGS += -g
-endif
-
AS = $(CROSS_COMPILE)as
LD = $(CROSS_COMPILE)ld
CC = $(CROSS_COMPILE)gcc
@@ -38,6 +30,22 @@ INSTALL_DIR = $(INSTALL) -d -m0755
INSTALL_DATA = $(INSTALL) -m0644
INSTALL_PROG = $(INSTALL) -m0755
+ifneq ($(debug),y)
+# Optimisation flags are overridable
+CFLAGS ?= -O2 -fomit-frame-pointer
+CFLAGS += -DNDEBUG
+else
+CFLAGS += -g
+endif
+
+ifeq ($(XEN_TARGET_ARCH),x86_32)
+CFLAGS += -m32 -march=i686
+endif
+
+ifeq ($(XEN_TARGET_ARCH),x86_64)
+CFLAGS += -m64
+endif
+
ifeq ($(XEN_TARGET_ARCH),x86_64)
LIBDIR = lib64
else
@@ -51,7 +59,7 @@ endif
test-gcc-flag = $(shell $(1) -v --help 2>&1 | grep -q " $(2) " && echo $(2))
-CFLAGS += -Wall
+CFLAGS += -Wall -Wstrict-prototypes
HOSTCFLAGS += $(call test-gcc-flag,$(HOSTCC),-Wdeclaration-after-statement)
CFLAGS += $(call test-gcc-flag,$(CC),-Wdeclaration-after-statement)
diff --git a/tools/Rules.mk b/tools/Rules.mk
index c52de46915..a2eeced638 100644
--- a/tools/Rules.mk
+++ b/tools/Rules.mk
@@ -10,16 +10,6 @@ XEN_LIBXC = $(XEN_ROOT)/tools/libxc
XEN_XENSTORE = $(XEN_ROOT)/tools/xenstore
XEN_LIBXENSTAT = $(XEN_ROOT)/tools/xenstat/libxenstat/src
-ifeq ($(XEN_TARGET_ARCH),x86_32)
-CFLAGS += -m32 -march=i686
-LDFLAGS += -m32
-endif
-
-ifeq ($(XEN_TARGET_ARCH),x86_64)
-CFLAGS += -m64
-LDFLAGS += -m64
-endif
-
X11_LDPATH = -L/usr/X11R6/$(LIBDIR)
%.opic: %.c
diff --git a/tools/ioemu/target-i386-dm/Makefile b/tools/ioemu/target-i386-dm/Makefile
index 3400621cef..887f73bea8 100644
--- a/tools/ioemu/target-i386-dm/Makefile
+++ b/tools/ioemu/target-i386-dm/Makefile
@@ -235,7 +235,7 @@ endif
all: $(PROGS)
$(QEMU_USER): $(OBJS)
- $(CC) $(LDFLAGS) -o $@ $^ $(LIBS)
+ $(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^ $(LIBS)
ifeq ($(ARCH),alpha)
# Mark as 32 bit binary, i. e. it will be mapped into the low 31 bit of
# the address space (31 bit so sign extending doesn't matter)
@@ -311,7 +311,7 @@ endif
endif
$(QEMU_SYSTEM): $(VL_OBJS) libqemu.a
- $(CC) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VNC_LIBS) $(VL_LIBS) -lpthread
+ $(CC) $(CFLAGS) $(VL_LDFLAGS) -o $@ $^ $(LIBS) $(SDL_LIBS) $(VNC_LIBS) $(VL_LIBS) -lpthread
vnc.o: vnc.c keyboard_rdesktop.c
$(CC) $(CFLAGS) $(DEFINES) $(VNC_CFLAGS) -c -o $@ $<
diff --git a/tools/ioemu/vl.h b/tools/ioemu/vl.h
index 2b30dc8f26..439c530d48 100644
--- a/tools/ioemu/vl.h
+++ b/tools/ioemu/vl.h
@@ -697,7 +697,7 @@ void lance_init(NetDriverState *nd, int irq, uint32_t leaddr, uint32_t ledaddr);
void tcx_init(DisplayState *ds, uint32_t addr);
/* sched.c */
-void sched_init();
+void sched_init(uint32_t, uint32_t);
/* magic-load.c */
void magic_init(const char *kfn, int kloadaddr, uint32_t addr);
@@ -799,7 +799,7 @@ void readline_start(const char *prompt, int is_password,
int gdbserver_start(int port);
void update_select_wakeup_events(void);
-void tun_receive_handler();
+void tun_receive_handler(fd_set *);
extern char domain_name[];
#endif /* VL_H */
diff --git a/tools/misc/lomount/lomount.c b/tools/misc/lomount/lomount.c
index b72f77da03..85e5f3b584 100644
--- a/tools/misc/lomount/lomount.c
+++ b/tools/misc/lomount/lomount.c
@@ -195,7 +195,7 @@ done:
return fail;
}
-void usage()
+void usage(void)
{
fprintf(stderr, "You must specify at least -diskimage and -partition.\n");
fprintf(stderr, "All other arguments are passed through to 'mount'.\n");
diff --git a/tools/misc/mbootpack/Makefile b/tools/misc/mbootpack/Makefile
index 3c6791e4ee..d1e3334bf7 100644
--- a/tools/misc/mbootpack/Makefile
+++ b/tools/misc/mbootpack/Makefile
@@ -31,7 +31,7 @@ DEPFLAGS = -Wp,-MD,.$(@F).d
DEPS = .*.d
mbootpack: $(OBJS)
- $(HOSTCC) -o $@ $(filter-out %.a, $^) $(LDFLAGS)
+ $(HOSTCC) -o $@ $(filter-out %.a, $^)
clean:
$(RM) mbootpack *.o $(DEPS) bootsect setup bzimage_header.c bin2c
diff --git a/tools/misc/xc_shadow.c b/tools/misc/xc_shadow.c
index 20363637bf..83c52ebc19 100644
--- a/tools/misc/xc_shadow.c
+++ b/tools/misc/xc_shadow.c
@@ -18,7 +18,7 @@
#include <errno.h>
#include <string.h>
-void usage()
+void usage(void)
{
printf("xc_shadow: -[0|1|2]\n");
printf(" set shadow mode\n");
@@ -28,7 +28,7 @@ void usage()
int main(int argc, char *argv[])
{
int xc_handle;
- int mode;
+ int mode = 0;
if ( argc > 1 )
{
diff --git a/tools/vtpm_manager/manager/Makefile b/tools/vtpm_manager/manager/Makefile
index e6f20f5a5e..278a37e963 100644
--- a/tools/vtpm_manager/manager/Makefile
+++ b/tools/vtpm_manager/manager/Makefile
@@ -20,7 +20,7 @@ mrproper: clean
rm -f $(BIN) *~
$(BIN): $(OBJS)
- $(CC) $(LDFLAGS) $^ $(LIBS) -o $@
+ $(CC) $(CFLAGS) $(LDFLAGS) $^ $(LIBS) -o $@
# libraries
LIBS += ../tcs/libTCS.a ../util/libTCGUtils.a ../crypto/libtcpaCrypto.a
diff --git a/tools/xenmon/xenbaked.c b/tools/xenmon/xenbaked.c
index 1289e47425..a7cd4be2d0 100644
--- a/tools/xenmon/xenbaked.c
+++ b/tools/xenmon/xenbaked.c
@@ -379,7 +379,7 @@ struct t_rec **init_rec_ptrs(struct t_buf **meta, unsigned int num)
/**
* get_num_cpus - get the number of logical CPUs
*/
-unsigned int get_num_cpus()
+unsigned int get_num_cpus(void)
{
dom0_op_t op;
int xc_handle = xc_interface_open();
@@ -409,7 +409,7 @@ unsigned int get_num_cpus()
/**
* monitor_tbufs - monitor the contents of tbufs
*/
-int monitor_tbufs()
+int monitor_tbufs(void)
{
int i;
extern void process_record(int, struct t_rec *);
diff --git a/tools/xenstat/libxenstat/Makefile b/tools/xenstat/libxenstat/Makefile
index d874ba3af1..52832017ff 100644
--- a/tools/xenstat/libxenstat/Makefile
+++ b/tools/xenstat/libxenstat/Makefile
@@ -48,7 +48,7 @@ $(LIB): $(OBJECTS)
$(RANLIB) $@
$(SHLIB): $(OBJECTS)
- $(CC) $(LDFLAGS) $(SONAME_FLAGS) -shared -o $@ $(OBJECTS)
+ $(CC) $(CFLAGS) $(LDFLAGS) $(SONAME_FLAGS) -shared -o $@ $(OBJECTS)
src/xenstat.o: src/xenstat.c src/xenstat.h src/xen-interface.h
$(CC) $(CFLAGS) $(WARN_FLAGS) -c -o $@ $<
diff --git a/tools/xenstat/libxenstat/src/xen-interface.c b/tools/xenstat/libxenstat/src/xen-interface.c
index 6b6fa6b9fb..59723157ad 100644
--- a/tools/xenstat/libxenstat/src/xen-interface.c
+++ b/tools/xenstat/libxenstat/src/xen-interface.c
@@ -31,7 +31,7 @@ struct xi_handle {
/* Initialize for xen-interface. Returns a handle to be used with subsequent
* calls to the xen-interface functions or NULL if an error occurs. */
-xi_handle *xi_init()
+xi_handle *xi_init(void)
{
xi_handle *handle;
diff --git a/tools/xenstat/libxenstat/src/xen-interface.h b/tools/xenstat/libxenstat/src/xen-interface.h
index c1e74edcd6..fc7119ae34 100644
--- a/tools/xenstat/libxenstat/src/xen-interface.h
+++ b/tools/xenstat/libxenstat/src/xen-interface.h
@@ -26,7 +26,7 @@ typedef struct xi_handle xi_handle;
/* Initialize for xen-interface. Returns a handle to be used with subsequent
* calls to the xen-interface functions or NULL if an error occurs. */
-xi_handle *xi_init();
+xi_handle *xi_init(void);
/* Release the handle to libxc, free resources, etc. */
void xi_uninit(xi_handle *handle);
diff --git a/tools/xenstat/libxenstat/src/xenstat.c b/tools/xenstat/libxenstat/src/xenstat.c
index e8a6928dac..3332f2cad7 100644
--- a/tools/xenstat/libxenstat/src/xenstat.c
+++ b/tools/xenstat/libxenstat/src/xenstat.c
@@ -129,7 +129,7 @@ static xenstat_collector collectors[] = {
/*
* libxenstat API
*/
-xenstat_handle *xenstat_init()
+xenstat_handle *xenstat_init(void)
{
xenstat_handle *handle;
diff --git a/tools/xenstat/libxenstat/src/xenstat.h b/tools/xenstat/libxenstat/src/xenstat.h
index b9ac1d3782..90676e8763 100644
--- a/tools/xenstat/libxenstat/src/xenstat.h
+++ b/tools/xenstat/libxenstat/src/xenstat.h
@@ -26,7 +26,7 @@ typedef struct xenstat_network xenstat_network;
/* Initialize the xenstat library. Returns a handle to be used with
* subsequent calls to the xenstat library, or NULL if an error occurs. */
-xenstat_handle *xenstat_init();
+xenstat_handle *xenstat_init(void);
/* Release the handle to libxc, free resources, etc. */
void xenstat_uninit(xenstat_handle * handle);
diff --git a/tools/xenstore/xenstored_core.c b/tools/xenstore/xenstored_core.c
index b23aa40fa5..bfa71f56bd 100644
--- a/tools/xenstore/xenstored_core.c
+++ b/tools/xenstore/xenstored_core.c
@@ -66,7 +66,7 @@ static char *tracefile = NULL;
static TDB_CONTEXT *tdb_ctx;
static void corrupt(struct connection *conn, const char *fmt, ...);
-static void check_store();
+static void check_store(void);
#define log(...) \
do { \
@@ -238,7 +238,7 @@ static void trigger_reopen_log(int signal __attribute__((unused)))
}
-static void reopen_log()
+static void reopen_log(void)
{
if (tracefile) {
if (tracefd > 0)
@@ -1612,7 +1612,7 @@ static void clean_store(struct hashtable *reachable)
}
-static void check_store()
+static void check_store(void)
{
char * root = talloc_strdup(NULL, "/");
struct hashtable * reachable =
diff --git a/tools/xentrace/xentrace.c b/tools/xentrace/xentrace.c
index 2780e1dbb2..34b2a6a649 100644
--- a/tools/xentrace/xentrace.c
+++ b/tools/xentrace/xentrace.c
@@ -258,7 +258,7 @@ struct t_rec **init_rec_ptrs(struct t_buf **meta, unsigned int num)
/**
* get_num_cpus - get the number of logical CPUs
*/
-unsigned int get_num_cpus()
+unsigned int get_num_cpus(void)
{
dom0_op_t op;
int xc_handle = xc_interface_open();
diff --git a/xen/arch/x86/Rules.mk b/xen/arch/x86/Rules.mk
index 66cddd1577..3921119034 100644
--- a/xen/arch/x86/Rules.mk
+++ b/xen/arch/x86/Rules.mk
@@ -22,19 +22,20 @@ CFLAGS += $(call test-gcc-flag,$(CC),-nopie)
CFLAGS += $(call test-gcc-flag,$(CC),-fno-stack-protector)
CFLAGS += $(call test-gcc-flag,$(CC),-fno-stack-protector-all)
-ifeq ($(TARGET_SUBARCH),x86_32)
-CFLAGS += -m32 -march=i686
-LDFLAGS += -m elf_i386
-ifeq ($(pae),y)
+ifeq ($(TARGET_SUBARCH)$(pae),x86_32y)
CFLAGS += -DCONFIG_X86_PAE=1
endif
-endif
+
ifeq ($(supervisor_mode_kernel),y)
CFLAGS += -DCONFIG_X86_SUPERVISOR_MODE_KERNEL=1
endif
+ifeq ($(XEN_TARGET_ARCH),x86_32)
+LDFLAGS += -m elf_i386
+endif
+
ifeq ($(TARGET_SUBARCH),x86_64)
-CFLAGS += -m64 -mno-red-zone -fpic -fno-reorder-blocks
+CFLAGS += -mno-red-zone -fpic -fno-reorder-blocks
CFLAGS += -fno-asynchronous-unwind-tables
LDFLAGS += -m elf_x86_64
endif
diff --git a/xen/arch/x86/audit.c b/xen/arch/x86/audit.c
index b0bba0daa3..b64f4e880d 100644
--- a/xen/arch/x86/audit.c
+++ b/xen/arch/x86/audit.c
@@ -350,7 +350,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy)
unmap_domain_page(pt);
}
- void adjust_shadow_tables()
+ void adjust_shadow_tables(void)
{
struct shadow_status *a;
unsigned long smfn, gmfn;
@@ -402,7 +402,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy)
}
}
- void adjust_oos_list()
+ void adjust_oos_list(void)
{
struct out_of_sync_entry *oos;
@@ -426,7 +426,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy)
}
}
- void adjust_for_pgtbase()
+ void adjust_for_pgtbase(void)
{
struct vcpu *v;
@@ -443,7 +443,7 @@ int audit_adjust_pgtables(struct domain *d, int dir, int noisy)
}
}
- void adjust_guest_pages()
+ void adjust_guest_pages(void)
{
struct list_head *list_ent = d->page_list.next;
struct page_info *page;
diff --git a/xen/arch/x86/hvm/hvm.c b/xen/arch/x86/hvm/hvm.c
index e9669983d4..c3f3318d40 100644
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -205,12 +205,10 @@ void hvm_setup_platform(struct domain* d)
}
}
-void pic_irq_request(int *interrupt_request, int level)
+void pic_irq_request(void *data, int level)
{
- if (level)
- *interrupt_request = 1;
- else
- *interrupt_request = 0;
+ int *interrupt_request = data;
+ *interrupt_request = level;
}
void hvm_pic_assist(struct vcpu *v)
diff --git a/xen/arch/x86/hvm/i8259.c b/xen/arch/x86/hvm/i8259.c
index 7bfb007865..3426342793 100644
--- a/xen/arch/x86/hvm/i8259.c
+++ b/xen/arch/x86/hvm/i8259.c
@@ -407,7 +407,7 @@ static void pic_init1(int io_addr, int elcr_addr, PicState *s)
pic_reset(s);
}
-void pic_init(struct hvm_virpic *s, void (*irq_request)(),
+void pic_init(struct hvm_virpic *s, void (*irq_request)(void *, int),
void *irq_request_opaque)
{
memset(s, 0, sizeof(*s));
@@ -422,7 +422,8 @@ void pic_init(struct hvm_virpic *s, void (*irq_request)(),
return;
}
-void pic_set_alt_irq_func(struct hvm_virpic *s, void (*alt_irq_func)(),
+void pic_set_alt_irq_func(struct hvm_virpic *s,
+ void (*alt_irq_func)(void *, int, int),
void *alt_irq_opaque)
{
s->alt_irq_func = alt_irq_func;
diff --git a/xen/arch/x86/hvm/vmx/vmcs.c b/xen/arch/x86/hvm/vmx/vmcs.c
index ce0e8031eb..e612c1035d 100644
--- a/xen/arch/x86/hvm/vmx/vmcs.c
+++ b/xen/arch/x86/hvm/vmx/vmcs.c
@@ -363,7 +363,7 @@ static inline int construct_init_vmcs_guest(cpu_user_regs_t *regs)
return error;
}
-static inline int construct_vmcs_host()
+static inline int construct_vmcs_host(void)
{
int error = 0;
#ifdef __x86_64__
diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c
index 77310e5146..ac169265f4 100644
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -479,12 +479,13 @@ void vmx_init_ap_context(struct vcpu_guest_context *ctxt,
void do_nmi(struct cpu_user_regs *);
-static int check_vmx_controls(ctrls, msr)
+static int check_vmx_controls(u32 ctrls, u32 msr)
{
u32 vmx_msr_low, vmx_msr_high;
rdmsr(msr, vmx_msr_low, vmx_msr_high);
- if (ctrls < vmx_msr_low || ctrls > vmx_msr_high) {
+ if ( (ctrls < vmx_msr_low) || (ctrls > vmx_msr_high) )
+ {
printk("Insufficient VMX capability 0x%x, "
"msr=0x%x,low=0x%8x,high=0x%x\n",
ctrls, msr, vmx_msr_low, vmx_msr_high);
diff --git a/xen/common/lib.c b/xen/common/lib.c
index 1eb70fe6c4..408e8eefe6 100644
--- a/xen/common/lib.c
+++ b/xen/common/lib.c
@@ -158,8 +158,7 @@ shl(register digit *p, register int len, register int sh)
* leading zeros).
*/
u64
-__qdivrem(uq, vq, arq)
- u64 uq, vq, *arq;
+__qdivrem(u64 uq, u64 vq, u64 *arq)
{
union uu tmp;
digit *u, *v, *q;
@@ -382,8 +381,7 @@ __divdi3(s64 a, s64 b)
* Divide two unsigned quads.
*/
u64
-__udivdi3(a, b)
- u64 a, b;
+__udivdi3(u64 a, u64 b)
{
return (__qdivrem(a, b, (u64 *)0));
diff --git a/xen/include/asm-x86/hvm/io.h b/xen/include/asm-x86/hvm/io.h
index 224f22cc4a..6992a4ffeb 100644
--- a/xen/include/asm-x86/hvm/io.h
+++ b/xen/include/asm-x86/hvm/io.h
@@ -151,7 +151,7 @@ extern void handle_mmio(unsigned long, unsigned long);
extern void hvm_wait_io(void);
extern void hvm_safe_block(void);
extern void hvm_io_assist(struct vcpu *v);
-extern void pic_irq_request(int *interrupt_request, int level);
+extern void pic_irq_request(void *data, int level);
extern void hvm_pic_assist(struct vcpu *v);
extern int cpu_get_interrupt(struct vcpu *v, int *type);
extern int cpu_has_pending_irq(struct vcpu *v);
diff --git a/xen/include/asm-x86/hvm/vpic.h b/xen/include/asm-x86/hvm/vpic.h
index 57388119af..a46507ca6b 100644
--- a/xen/include/asm-x86/hvm/vpic.h
+++ b/xen/include/asm-x86/hvm/vpic.h
@@ -55,7 +55,7 @@ struct hvm_virpic {
/* 0 is master pic, 1 is slave pic */
/* XXX: better separation between the two pics */
PicState pics[2];
- void (*irq_request)(int *opaque, int level);
+ void (*irq_request)(void *opaque, int level);
void *irq_request_opaque;
/* IOAPIC callback support */
void (*alt_irq_func)(void *opaque, int irq_num, int level);
@@ -66,10 +66,10 @@ struct hvm_virpic {
void pic_set_irq(struct hvm_virpic *s, int irq, int level);
void pic_set_irq_new(void *opaque, int irq, int level);
void pic_init(struct hvm_virpic *s,
- void (*irq_request)(),
+ void (*irq_request)(void *, int),
void *irq_request_opaque);
void pic_set_alt_irq_func(struct hvm_virpic *s,
- void(*alt_irq_func)(),
+ void (*alt_irq_func)(void *, int, int),
void *alt_irq_opaque);
int pic_read_irq(struct hvm_virpic *s);
void pic_update_irq(struct hvm_virpic *s);
diff --git a/xen/include/xen/sched.h b/xen/include/xen/sched.h
index e8348f48ae..3b3e8389ff 100644
--- a/xen/include/xen/sched.h
+++ b/xen/include/xen/sched.h
@@ -266,7 +266,7 @@ void sched_add_domain(struct vcpu *);
void sched_rem_domain(struct vcpu *);
long sched_ctl(struct sched_ctl_cmd *);
long sched_adjdom(struct sched_adjdom_cmd *);
-int sched_id();
+int sched_id(void);
void vcpu_wake(struct vcpu *d);
void vcpu_sleep_nosync(struct vcpu *d);
void vcpu_sleep_sync(struct vcpu *d);