diff --git a/audio/audio.c b/audio/audio.c
index 2521c6f..5e9d88b 100644
--- a/audio/audio.c
+++ b/audio/audio.c
@@ -238,7 +238,7 @@
     return r;
 }
 
-const char *audio_audfmt_to_string (audfmt_e fmt)
+static const char *audio_audfmt_to_string (audfmt_e fmt)
 {
     switch (fmt) {
     case AUD_FMT_U8:
@@ -264,7 +264,8 @@
     return "S16";
 }
 
-audfmt_e audio_string_to_audfmt (const char *s, audfmt_e defval, int *defaultp)
+static audfmt_e audio_string_to_audfmt (const char *s, audfmt_e defval,
+                                        int *defaultp)
 {
     if (!strcasecmp (s, "u8")) {
         *defaultp = 0;
diff --git a/block-vvfat.c b/block-vvfat.c
index 43004e5..770b2ab 100644
--- a/block-vvfat.c
+++ b/block-vvfat.c
@@ -175,7 +175,7 @@
     return 0;
 }
 
-inline int array_remove_slice(array_t* array,int index, int count)
+static inline int array_remove_slice(array_t* array,int index, int count)
 {
     assert(index >=0);
     assert(count > 0);
@@ -186,13 +186,13 @@
     return 0;
 }
 
-int array_remove(array_t* array,int index)
+static int array_remove(array_t* array,int index)
 {
     return array_remove_slice(array, index, 1);
 }
 
 /* return the index for a given member */
-int array_index(array_t* array, void* pointer)
+static int array_index(array_t* array, void* pointer)
 {
     size_t offset = (char*)pointer - array->pointer;
     assert(offset >= 0);
diff --git a/block.c b/block.c
index b09ded3..ca8d8c1 100644
--- a/block.c
+++ b/block.c
@@ -124,7 +124,7 @@
 }
 
 
-void bdrv_register(BlockDriver *bdrv)
+static void bdrv_register(BlockDriver *bdrv)
 {
     if (!bdrv->bdrv_aio_read) {
         /* add AIO emulation layer */
diff --git a/console.c b/console.c
index 9778845..e7c00ec 100644
--- a/console.c
+++ b/console.c
@@ -61,7 +61,7 @@
     int count, wptr, rptr;
 } QEMUFIFO;
 
-int qemu_fifo_write(QEMUFIFO *f, const uint8_t *buf, int len1)
+static int qemu_fifo_write(QEMUFIFO *f, const uint8_t *buf, int len1)
 {
     int l, len;
 
@@ -84,7 +84,7 @@
     return len1;
 }
 
-int qemu_fifo_read(QEMUFIFO *f, uint8_t *buf, int len1)
+static int qemu_fifo_read(QEMUFIFO *f, uint8_t *buf, int len1)
 {
     int l, len;
 
diff --git a/dyngen.c b/dyngen.c
index 562fd0d..eb94273 100644
--- a/dyngen.c
+++ b/dyngen.c
@@ -232,7 +232,7 @@
 
 int do_swap;
 
-void __attribute__((noreturn)) __attribute__((format (printf, 1, 2))) error(const char *fmt, ...)
+static void __attribute__((noreturn)) __attribute__((format (printf, 1, 2))) error(const char *fmt, ...)
 {
     va_list ap;
     va_start(ap, fmt);
@@ -243,7 +243,7 @@
     exit(1);
 }
 
-void *load_data(int fd, long offset, unsigned int size)
+static void *load_data(int fd, long offset, unsigned int size)
 {
     char *data;
 
diff --git a/elf_ops.h b/elf_ops.h
index 646a569..6126565 100644
--- a/elf_ops.h
+++ b/elf_ops.h
@@ -138,9 +138,9 @@
     return -1;
 }
 
-int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend,
-                       int must_swab, uint64_t *pentry,
-                       uint64_t *lowaddr, uint64_t *highaddr)
+static int glue(load_elf, SZ)(int fd, int64_t virt_to_phys_addend,
+                              int must_swab, uint64_t *pentry,
+                              uint64_t *lowaddr, uint64_t *highaddr)
 {
     struct elfhdr ehdr;
     struct elf_phdr *phdr = NULL, *ph;
diff --git a/hw/arm_sysctl.c b/hw/arm_sysctl.c
index e1d5a56..67ca154 100644
--- a/hw/arm_sysctl.c
+++ b/hw/arm_sysctl.c
@@ -8,7 +8,7 @@
  */
 
 #include "hw.h"
-#include "arm-misc.h"
+#include "primecell.h"
 #include "sysemu.h"
 
 #define LOCK_VALUE 0xa05f
diff --git a/hw/arm_timer.c b/hw/arm_timer.c
index 417d53d..540d3de 100644
--- a/hw/arm_timer.c
+++ b/hw/arm_timer.c
@@ -8,8 +8,8 @@
  */
 
 #include "hw.h"
-#include "arm-misc.h"
 #include "qemu-timer.h"
+#include "primecell.h"
 
 /* Common timer implementation.  */
 
@@ -43,7 +43,7 @@
     }
 }
 
-uint32_t arm_timer_read(void *opaque, target_phys_addr_t offset)
+static uint32_t arm_timer_read(void *opaque, target_phys_addr_t offset)
 {
     arm_timer_state *s = (arm_timer_state *)opaque;
 
diff --git a/hw/gt64xxx.c b/hw/gt64xxx.c
index 07f046a..46d6a76 100644
--- a/hw/gt64xxx.c
+++ b/hw/gt64xxx.c
@@ -908,7 +908,7 @@
 }
 
 
-void gt64120_reset(void *opaque)
+static void gt64120_reset(void *opaque)
 {
     GT64120State *s = opaque;
 
diff --git a/hw/i8259.c b/hw/i8259.c
index 23e66a8..add6345 100644
--- a/hw/i8259.c
+++ b/hw/i8259.c
@@ -178,7 +178,7 @@
 int64_t irq_time[16];
 #endif
 
-void i8259_set_irq(void *opaque, int irq, int level)
+static void i8259_set_irq(void *opaque, int irq, int level)
 {
     PicState2 *s = opaque;
 
diff --git a/hw/ide.c b/hw/ide.c
index 575605b..bf2cc14 100644
--- a/hw/ide.c
+++ b/hw/ide.c
@@ -30,6 +30,7 @@
 #include "block.h"
 #include "qemu-timer.h"
 #include "sysemu.h"
+#include "ppc_mac.h"
 
 /* debug IDE devices */
 //#define DEBUG_IDE
diff --git a/hw/mc146818rtc.c b/hw/mc146818rtc.c
index 8c8076b..c1d5956 100644
--- a/hw/mc146818rtc.c
+++ b/hw/mc146818rtc.c
@@ -390,7 +390,7 @@
 #define REG_IBM_CENTURY_BYTE        0x32
 #define REG_IBM_PS2_CENTURY_BYTE    0x37
 
-void rtc_set_date_from_host(RTCState *s)
+static void rtc_set_date_from_host(RTCState *s)
 {
     time_t ti;
     struct tm *tm;
@@ -498,22 +498,22 @@
 }
 
 /* Memory mapped interface */
-uint32_t cmos_mm_readb (void *opaque, target_phys_addr_t addr)
+static uint32_t cmos_mm_readb (void *opaque, target_phys_addr_t addr)
 {
     RTCState *s = opaque;
 
     return cmos_ioport_read(s, (addr - s->base) >> s->it_shift) & 0xFF;
 }
 
-void cmos_mm_writeb (void *opaque,
-                     target_phys_addr_t addr, uint32_t value)
+static void cmos_mm_writeb (void *opaque,
+                            target_phys_addr_t addr, uint32_t value)
 {
     RTCState *s = opaque;
 
     cmos_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFF);
 }
 
-uint32_t cmos_mm_readw (void *opaque, target_phys_addr_t addr)
+static uint32_t cmos_mm_readw (void *opaque, target_phys_addr_t addr)
 {
     RTCState *s = opaque;
     uint32_t val;
@@ -525,8 +525,8 @@
     return val;
 }
 
-void cmos_mm_writew (void *opaque,
-                     target_phys_addr_t addr, uint32_t value)
+static void cmos_mm_writew (void *opaque,
+                            target_phys_addr_t addr, uint32_t value)
 {
     RTCState *s = opaque;
 #ifdef TARGET_WORDS_BIGENDIAN
@@ -535,7 +535,7 @@
     cmos_ioport_write(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
 }
 
-uint32_t cmos_mm_readl (void *opaque, target_phys_addr_t addr)
+static uint32_t cmos_mm_readl (void *opaque, target_phys_addr_t addr)
 {
     RTCState *s = opaque;
     uint32_t val;
@@ -547,8 +547,8 @@
     return val;
 }
 
-void cmos_mm_writel (void *opaque,
-                     target_phys_addr_t addr, uint32_t value)
+static void cmos_mm_writel (void *opaque,
+                            target_phys_addr_t addr, uint32_t value)
 {
     RTCState *s = opaque;
 #ifdef TARGET_WORDS_BIGENDIAN
diff --git a/hw/mcf_fec.c b/hw/mcf_fec.c
index c5482c9..0049860 100644
--- a/hw/mcf_fec.c
+++ b/hw/mcf_fec.c
@@ -251,7 +251,7 @@
     }
 }
 
-void mcf_fec_write(void *opaque, target_phys_addr_t addr, uint32_t value)
+static void mcf_fec_write(void *opaque, target_phys_addr_t addr, uint32_t value)
 {
     mcf_fec_state *s = (mcf_fec_state *)opaque;
     switch (addr & 0x3ff) {
diff --git a/hw/mips_malta.c b/hw/mips_malta.c
index 9ce8232..f133da3 100644
--- a/hw/mips_malta.c
+++ b/hw/mips_malta.c
@@ -398,7 +398,7 @@
    malta_fpga_writel
 };
 
-void malta_fpga_reset(void *opaque)
+static void malta_fpga_reset(void *opaque)
 {
     MaltaFPGAState *s = opaque;
 
@@ -415,7 +415,7 @@
     malta_fpga_update_display(s);
 }
 
-MaltaFPGAState *malta_fpga_init(target_phys_addr_t base, CPUState *env)
+static MaltaFPGAState *malta_fpga_init(target_phys_addr_t base, CPUState *env)
 {
     MaltaFPGAState *s;
     CharDriverState *uart_chr;
diff --git a/hw/ne2000.c b/hw/ne2000.c
index 92023eb..e95f537 100644
--- a/hw/ne2000.c
+++ b/hw/ne2000.c
@@ -23,6 +23,7 @@
  */
 #include "hw.h"
 #include "pci.h"
+#include "pc.h"
 #include "net.h"
 
 /* debug NE2000 card */
diff --git a/hw/nvram.h b/hw/nvram.h
index 174704b..3ec5483 100644
--- a/hw/nvram.h
+++ b/hw/nvram.h
@@ -37,5 +37,6 @@
 m48t59_t *m48t59_init (qemu_irq IRQ, target_phys_addr_t mem_base,
                        uint32_t io_base, uint16_t size,
                        int type);
+void m48t59_set_addr (void *opaque, uint32_t addr);
 
 #endif /* !NVRAM_H */
diff --git a/hw/omap.c b/hw/omap.c
index 88055ed..1e79831 100644
--- a/hw/omap.c
+++ b/hw/omap.c
@@ -3041,7 +3041,7 @@
     omap_badwidth_write16,
 };
 
-void omap_mpuio_reset(struct omap_mpuio_s *s)
+static void omap_mpuio_reset(struct omap_mpuio_s *s)
 {
     s->inputs = 0;
     s->outputs = 0;
@@ -3257,7 +3257,7 @@
     omap_badwidth_write16,
 };
 
-void omap_gpio_reset(struct omap_gpio_s *s)
+static void omap_gpio_reset(struct omap_gpio_s *s)
 {
     s->inputs = 0;
     s->outputs = ~0;
@@ -3429,7 +3429,7 @@
     omap_badwidth_write16,
 };
 
-void omap_uwire_reset(struct omap_uwire_s *s)
+static void omap_uwire_reset(struct omap_uwire_s *s)
 {
     s->control = 0;
     s->setup[0] = 0;
@@ -3470,7 +3470,7 @@
 }
 
 /* Pseudonoise Pulse-Width Light Modulator */
-void omap_pwl_update(struct omap_mpu_state_s *s)
+static void omap_pwl_update(struct omap_mpu_state_s *s)
 {
     int output = (s->pwl.clk && s->pwl.enable) ? s->pwl.level : 0;
 
@@ -3528,7 +3528,7 @@
     omap_badwidth_write8,
 };
 
-void omap_pwl_reset(struct omap_mpu_state_s *s)
+static void omap_pwl_reset(struct omap_mpu_state_s *s)
 {
     s->pwl.output = 0;
     s->pwl.level = 0;
@@ -3632,7 +3632,7 @@
     omap_badwidth_write8,
 };
 
-void omap_pwt_reset(struct omap_mpu_state_s *s)
+static void omap_pwt_reset(struct omap_mpu_state_s *s)
 {
     s->pwt.frc = 0;
     s->pwt.vrc = 0;
@@ -4037,7 +4037,7 @@
     qemu_mod_timer(s->clk, s->tick);
 }
 
-void omap_rtc_reset(struct omap_rtc_s *s)
+static void omap_rtc_reset(struct omap_rtc_s *s)
 {
     s->interrupts = 0;
     s->comp_reg = 0;
@@ -4509,14 +4509,14 @@
     return s;
 }
 
-void omap_mcbsp_i2s_swallow(void *opaque, int line, int level)
+static void omap_mcbsp_i2s_swallow(void *opaque, int line, int level)
 {
     struct omap_mcbsp_s *s = (struct omap_mcbsp_s *) opaque;
 
     omap_mcbsp_rx_start(s);
 }
 
-void omap_mcbsp_i2s_start(void *opaque, int line, int level)
+static void omap_mcbsp_i2s_start(void *opaque, int line, int level)
 {
     struct omap_mcbsp_s *s = (struct omap_mcbsp_s *) opaque;
 
diff --git a/hw/omap.h b/hw/omap.h
index bf87fa4..c315030 100644
--- a/hw/omap.h
+++ b/hw/omap.h
@@ -662,6 +662,9 @@
 #  error TARGET_PHYS_ADDR_BITS undefined
 # endif
 
+uint32_t omap_badwidth_read8(void *opaque, target_phys_addr_t addr);
+void omap_badwidth_write8(void *opaque, target_phys_addr_t addr,
+                uint32_t value);
 uint32_t omap_badwidth_read16(void *opaque, target_phys_addr_t addr);
 void omap_badwidth_write16(void *opaque, target_phys_addr_t addr,
                 uint32_t value);
diff --git a/hw/omap_lcdc.c b/hw/omap_lcdc.c
index c6565d1..c79d244 100644
--- a/hw/omap_lcdc.c
+++ b/hw/omap_lcdc.c
@@ -114,7 +114,7 @@
     [32]	= draw_line16_32,
 };
 
-void omap_update_display(void *opaque)
+static void omap_update_display(void *opaque)
 {
     struct omap_lcd_panel_s *omap_lcd = (struct omap_lcd_panel_s *) opaque;
     draw_line_func *draw_line;
@@ -289,7 +289,7 @@
     return 0;
 }
 
-void omap_screen_dump(void *opaque, const char *filename) {
+static void omap_screen_dump(void *opaque, const char *filename) {
     struct omap_lcd_panel_s *omap_lcd = opaque;
     omap_update_display(opaque);
     if (omap_lcd && omap_lcd->state->data)
@@ -298,12 +298,12 @@
                 omap_lcd->state->linesize);
 }
 
-void omap_invalidate_display(void *opaque) {
+static void omap_invalidate_display(void *opaque) {
     struct omap_lcd_panel_s *omap_lcd = opaque;
     omap_lcd->invalidate = 1;
 }
 
-void omap_lcd_update(struct omap_lcd_panel_s *s) {
+static void omap_lcd_update(struct omap_lcd_panel_s *s) {
     if (!s->enable) {
         s->dma->current_frame = -1;
         s->sync_error = 0;
diff --git a/hw/parallel.c b/hw/parallel.c
index dfcd5c2..5d99e76 100644
--- a/hw/parallel.c
+++ b/hw/parallel.c
@@ -458,45 +458,45 @@
 }
 
 /* Memory mapped interface */
-uint32_t parallel_mm_readb (void *opaque, target_phys_addr_t addr)
+static uint32_t parallel_mm_readb (void *opaque, target_phys_addr_t addr)
 {
     ParallelState *s = opaque;
 
     return parallel_ioport_read_sw(s, (addr - s->base) >> s->it_shift) & 0xFF;
 }
 
-void parallel_mm_writeb (void *opaque,
-                       target_phys_addr_t addr, uint32_t value)
+static void parallel_mm_writeb (void *opaque,
+                                target_phys_addr_t addr, uint32_t value)
 {
     ParallelState *s = opaque;
 
     parallel_ioport_write_sw(s, (addr - s->base) >> s->it_shift, value & 0xFF);
 }
 
-uint32_t parallel_mm_readw (void *opaque, target_phys_addr_t addr)
+static uint32_t parallel_mm_readw (void *opaque, target_phys_addr_t addr)
 {
     ParallelState *s = opaque;
 
     return parallel_ioport_read_sw(s, (addr - s->base) >> s->it_shift) & 0xFFFF;
 }
 
-void parallel_mm_writew (void *opaque,
-                       target_phys_addr_t addr, uint32_t value)
+static void parallel_mm_writew (void *opaque,
+                                target_phys_addr_t addr, uint32_t value)
 {
     ParallelState *s = opaque;
 
     parallel_ioport_write_sw(s, (addr - s->base) >> s->it_shift, value & 0xFFFF);
 }
 
-uint32_t parallel_mm_readl (void *opaque, target_phys_addr_t addr)
+static uint32_t parallel_mm_readl (void *opaque, target_phys_addr_t addr)
 {
     ParallelState *s = opaque;
 
     return parallel_ioport_read_sw(s, (addr - s->base) >> s->it_shift);
 }
 
-void parallel_mm_writel (void *opaque,
-                       target_phys_addr_t addr, uint32_t value)
+static void parallel_mm_writel (void *opaque,
+                                target_phys_addr_t addr, uint32_t value)
 {
     ParallelState *s = opaque;
 
diff --git a/hw/pc.c b/hw/pc.c
index 99bb906..69eeadb 100644
--- a/hw/pc.c
+++ b/hw/pc.c
@@ -317,7 +317,7 @@
 /***********************************************************/
 /* Bochs BIOS debug ports */
 
-void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val)
+static void bochs_bios_write(void *opaque, uint32_t addr, uint32_t val)
 {
     static const char shutdown_str[8] = "Shutdown";
     static int shutdown_index = 0;
@@ -361,7 +361,7 @@
     }
 }
 
-void bochs_bios_init(void)
+static void bochs_bios_init(void)
 {
     register_ioport_write(0x400, 1, 2, bochs_bios_write, NULL);
     register_ioport_write(0x401, 1, 2, bochs_bios_write, NULL);
@@ -431,8 +431,8 @@
     bdrv_set_boot_sector(bs_table[0], bootsect, sizeof(bootsect));
 }
 
-int load_kernel(const char *filename, uint8_t *addr,
-                uint8_t *real_addr)
+static int load_kernel(const char *filename, uint8_t *addr,
+                       uint8_t *real_addr)
 {
     int fd, size;
     int setup_sects;
diff --git a/hw/pci.c b/hw/pci.c
index c43be3e..0b5e7bf 100644
--- a/hw/pci.c
+++ b/hw/pci.c
@@ -65,7 +65,7 @@
     return bus;
 }
 
-PCIBus *pci_register_secondary_bus(PCIDevice *dev, pci_map_irq_fn map_irq)
+static PCIBus *pci_register_secondary_bus(PCIDevice *dev, pci_map_irq_fn map_irq)
 {
     PCIBus *bus;
     bus = qemu_mallocz(sizeof(PCIBus));
@@ -159,7 +159,7 @@
     *(uint32_t *)(pci_dev->config + addr) = cpu_to_le32(type);
 }
 
-target_phys_addr_t pci_to_cpu_addr(target_phys_addr_t addr)
+static target_phys_addr_t pci_to_cpu_addr(target_phys_addr_t addr)
 {
     return addr + pci_mem_base;
 }
@@ -606,7 +606,7 @@
     PCIBus *bus;
 } PCIBridge;
 
-void pci_bridge_write_config(PCIDevice *d,
+static void pci_bridge_write_config(PCIDevice *d,
                              uint32_t address, uint32_t val, int len)
 {
     PCIBridge *s = (PCIBridge *)d;
diff --git a/hw/pckbd.c b/hw/pckbd.c
index 738ce61..266c7f9 100644
--- a/hw/pckbd.c
+++ b/hw/pckbd.c
@@ -290,7 +290,7 @@
     return ps2_read_data(s->kbd);
 }
 
-void kbd_write_data(void *opaque, uint32_t addr, uint32_t val)
+static void kbd_write_data(void *opaque, uint32_t addr, uint32_t val)
 {
     KBDState *s = opaque;
 
@@ -385,7 +385,7 @@
 }
 
 /* Memory mapped interface */
-uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr)
+static uint32_t kbd_mm_readb (void *opaque, target_phys_addr_t addr)
 {
     KBDState *s = opaque;
 
@@ -399,7 +399,7 @@
     }
 }
 
-void kbd_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value)
+static void kbd_mm_writeb (void *opaque, target_phys_addr_t addr, uint32_t value)
 {
     KBDState *s = opaque;
 
diff --git a/hw/piix_pci.c b/hw/piix_pci.c
index 75f412a..37352c4 100644
--- a/hw/piix_pci.c
+++ b/hw/piix_pci.c
@@ -314,7 +314,7 @@
     return pci_device_load(d, f);
 }
 
-int piix_init(PCIBus *bus, int devfn)
+static int piix_init(PCIBus *bus, int devfn)
 {
     PCIDevice *d;
     uint8_t *pci_conf;
diff --git a/hw/pl061.c b/hw/pl061.c
index 7914272..d9a6f50 100644
--- a/hw/pl061.c
+++ b/hw/pl061.c
@@ -209,7 +209,7 @@
   s->cr = 0xff;
 }
 
-void pl061_set_irq(void * opaque, int irq, int level)
+static void pl061_set_irq(void * opaque, int irq, int level)
 {
     pl061_state *s = (pl061_state *)opaque;
     uint8_t mask;
diff --git a/hw/pl190.c b/hw/pl190.c
index abc2846..fc3d089 100644
--- a/hw/pl190.c
+++ b/hw/pl190.c
@@ -216,7 +216,7 @@
    pl190_write
 };
 
-void pl190_reset(pl190_state *s)
+static void pl190_reset(pl190_state *s)
 {
   int i;
 
diff --git a/hw/pxa2xx_lcd.c b/hw/pxa2xx_lcd.c
index 56328e9..5855435 100644
--- a/hw/pxa2xx_lcd.c
+++ b/hw/pxa2xx_lcd.c
@@ -882,7 +882,7 @@
     /* TODO */
 }
 
-void pxa2xx_lcdc_orientation(void *opaque, int angle)
+static void pxa2xx_lcdc_orientation(void *opaque, int angle)
 {
     struct pxa2xx_lcdc_s *s = (struct pxa2xx_lcdc_s *) opaque;
 
diff --git a/hw/pxa2xx_pcmcia.c b/hw/pxa2xx_pcmcia.c
index f5d805a..1e96ee4 100644
--- a/hw/pxa2xx_pcmcia.c
+++ b/hw/pxa2xx_pcmcia.c
@@ -9,6 +9,7 @@
 
 #include "hw.h"
 #include "pcmcia.h"
+#include "pxa.h"
 
 struct pxa2xx_pcmcia_s {
     struct pcmcia_socket_s slot;
diff --git a/hw/realview_gic.c b/hw/realview_gic.c
index 639db84..b4ef2cc 100644
--- a/hw/realview_gic.c
+++ b/hw/realview_gic.c
@@ -8,7 +8,7 @@
  */
 
 #include "hw.h"
-#include "arm-misc.h"
+#include "primecell.h"
 
 #define GIC_NIRQ 96
 #define NCPU 1
diff --git a/hw/rtl8139.c b/hw/rtl8139.c
index 868cbba..6e3c023 100644
--- a/hw/rtl8139.c
+++ b/hw/rtl8139.c
@@ -497,7 +497,7 @@
 
 } RTL8139State;
 
-void prom9346_decode_command(EEprom9346 *eeprom, uint8_t command)
+static void prom9346_decode_command(EEprom9346 *eeprom, uint8_t command)
 {
     DEBUG_PRINT(("RTL8139: eeprom command 0x%02x\n", command));
 
@@ -543,7 +543,7 @@
     }
 }
 
-void prom9346_shift_clock(EEprom9346 *eeprom)
+static void prom9346_shift_clock(EEprom9346 *eeprom)
 {
     int bit = eeprom->eedi?1:0;
 
@@ -635,7 +635,7 @@
     }
 }
 
-int prom9346_get_wire(RTL8139State *s)
+static int prom9346_get_wire(RTL8139State *s)
 {
     EEprom9346 *eeprom = &s->eeprom;
     if (!eeprom->eecs)
@@ -644,7 +644,8 @@
     return eeprom->eedo;
 }
 
-void prom9346_set_wire(RTL8139State *s, int eecs, int eesk, int eedi)
+/* FIXME: This should be merged into/replaced by eeprom93xx.c.  */
+static void prom9346_set_wire(RTL8139State *s, int eecs, int eesk, int eedi)
 {
     EEprom9346 *eeprom = &s->eeprom;
     uint8_t old_eecs = eeprom->eecs;
@@ -1448,7 +1449,7 @@
     return ret;
 }
 
-int rtl8139_config_writeable(RTL8139State *s)
+static int rtl8139_config_writeable(RTL8139State *s)
 {
     if (s->Cfg9346 & Cfg9346_Unlock)
     {
diff --git a/hw/sd.c b/hw/sd.c
index 9dd86e3..8b481e6 100644
--- a/hw/sd.c
+++ b/hw/sd.c
@@ -308,8 +308,8 @@
     return sd_crc7(buffer, 5) != req->crc;	/* TODO */
 }
 
-void sd_response_r1_make(SDState *sd,
-                         uint8_t *response, uint32_t last_status)
+static void sd_response_r1_make(SDState *sd,
+                                uint8_t *response, uint32_t last_status)
 {
     uint32_t mask = CARD_STATUS_B ^ ILLEGAL_COMMAND;
     uint32_t status;
@@ -323,7 +323,7 @@
     response[3] = (status >> 0) & 0xff;
 }
 
-void sd_response_r3_make(SDState *sd, uint8_t *response)
+static void sd_response_r3_make(SDState *sd, uint8_t *response)
 {
     response[0] = (sd->ocr >> 24) & 0xff;
     response[1] = (sd->ocr >> 16) & 0xff;
@@ -331,7 +331,7 @@
     response[3] = (sd->ocr >> 0) & 0xff;
 }
 
-void sd_response_r6_make(SDState *sd, uint8_t *response)
+static void sd_response_r6_make(SDState *sd, uint8_t *response)
 {
     uint16_t arg;
     uint16_t status;
diff --git a/hw/sh_serial.c b/hw/sh_serial.c
index 1336780..324c2a8 100644
--- a/hw/sh_serial.c
+++ b/hw/sh_serial.c
@@ -252,14 +252,14 @@
         sh_serial_receive_break(s);
 }
 
-uint32_t sh_serial_read (void *opaque, target_phys_addr_t addr)
+static uint32_t sh_serial_read (void *opaque, target_phys_addr_t addr)
 {
     sh_serial_state *s = opaque;
     return sh_serial_ioport_read(s, addr - s->base);
 }
 
-void sh_serial_write (void *opaque,
-		      target_phys_addr_t addr, uint32_t value)
+static void sh_serial_write (void *opaque,
+                             target_phys_addr_t addr, uint32_t value)
 {
     sh_serial_state *s = opaque;
     sh_serial_ioport_write(s, addr - s->base, value);
diff --git a/hw/sh_timer.c b/hw/sh_timer.c
index 6be8953..2247929 100644
--- a/hw/sh_timer.c
+++ b/hw/sh_timer.c
@@ -52,7 +52,7 @@
 #endif
 }
 
-uint32_t sh_timer_read(void *opaque, target_phys_addr_t offset)
+static uint32_t sh_timer_read(void *opaque, target_phys_addr_t offset)
 {
     sh_timer_state *s = (sh_timer_state *)opaque;
 
diff --git a/hw/smbus.c b/hw/smbus.c
index 81e887b..6eb8412 100644
--- a/hw/smbus.c
+++ b/hw/smbus.c
@@ -61,7 +61,7 @@
     }
 }
 
-void smbus_i2c_event(i2c_slave *s, enum i2c_event event)
+static void smbus_i2c_event(i2c_slave *s, enum i2c_event event)
 {
     SMBusDevice *dev = (SMBusDevice *)s;
     switch (event) {
diff --git a/hw/stellaris.c b/hw/stellaris.c
index cc47b9d..0bd76ab 100644
--- a/hw/stellaris.c
+++ b/hw/stellaris.c
@@ -521,7 +521,7 @@
    ssys_write
 };
 
-void ssys_reset(void *opaque)
+static void ssys_reset(void *opaque)
 {
     ssys_state *s = (ssys_state *)opaque;
 
diff --git a/hw/usb-ohci.c b/hw/usb-ohci.c
index 255cba7..68995b0 100644
--- a/hw/usb-ohci.c
+++ b/hw/usb-ohci.c
@@ -31,6 +31,7 @@
 #include "qemu-timer.h"
 #include "usb.h"
 #include "pci.h"
+#include "pxa.h"
 
 //#define DEBUG_OHCI
 /* Dump packet contents.  */
diff --git a/hw/wm8750.c b/hw/wm8750.c
index 245d56f..8243ca5 100644
--- a/hw/wm8750.c
+++ b/hw/wm8750.c
@@ -124,7 +124,7 @@
     {  192, 88200,  128, 88200 },	/* SR: 11111 */
 };
 
-void wm8750_set_format(struct wm8750_s *s)
+static void wm8750_set_format(struct wm8750_s *s)
 {
     int i;
     audsettings_t in_fmt;
@@ -194,7 +194,7 @@
         AUD_set_active_out(*s->out[0], 1);
 }
 
-void inline wm8750_mask_update(struct wm8750_s *s)
+static void inline wm8750_mask_update(struct wm8750_s *s)
 {
 #define R_ONLY	0x0000ffff
 #define L_ONLY	0xffff0000
@@ -596,7 +596,7 @@
     return &s->i2c;
 }
 
-void wm8750_fini(i2c_slave *i2c)
+static void wm8750_fini(i2c_slave *i2c)
 {
     struct wm8750_s *s = (struct wm8750_s *) i2c;
     wm8750_reset(&s->i2c);
diff --git a/i386-dis.c b/i386-dis.c
index 0496e14..145e14e 100644
--- a/i386-dis.c
+++ b/i386-dis.c
@@ -1838,29 +1838,6 @@
 static char separator_char;
 static char scale_char;
 
-/* Here for backwards compatibility.  When gdb stops using
-   print_insn_i386_att and print_insn_i386_intel these functions can
-   disappear, and print_insn_i386 be merged into print_insn.  */
-int
-print_insn_i386_att (pc, info)
-     bfd_vma pc;
-     disassemble_info *info;
-{
-  intel_syntax = 0;
-
-  return print_insn (pc, info);
-}
-
-int
-print_insn_i386_intel (pc, info)
-     bfd_vma pc;
-     disassemble_info *info;
-{
-  intel_syntax = 1;
-
-  return print_insn (pc, info);
-}
-
 int
 print_insn_i386 (pc, info)
      bfd_vma pc;
diff --git a/loader.c b/loader.c
index 18878df..062dee4 100644
--- a/loader.c
+++ b/loader.c
@@ -23,6 +23,7 @@
  */
 #include "qemu-common.h"
 #include "disas.h"
+#include "sysemu.h"
 #include "uboot_image.h"
 
 /* return the size or -1 if error */
diff --git a/monitor.c b/monitor.c
index 76ed5f8..4a9e8bb 100644
--- a/monitor.c
+++ b/monitor.c
@@ -261,7 +261,7 @@
 }
 
 /* get the current CPU defined by the user */
-int mon_set_cpu(int cpu_index)
+static int mon_set_cpu(int cpu_index)
 {
     CPUState *env;
 
@@ -274,7 +274,7 @@
     return -1;
 }
 
-CPUState *mon_get_cpu(void)
+static CPUState *mon_get_cpu(void)
 {
     if (!mon_cpu) {
         mon_set_cpu(0);
diff --git a/osdep.c b/osdep.c
index 8c2f0a9..00c19ce 100644
--- a/osdep.c
+++ b/osdep.c
@@ -82,7 +82,7 @@
 #include <sys/mman.h>
 #include <fcntl.h>
 
-void *kqemu_vmalloc(size_t size)
+static void *kqemu_vmalloc(size_t size)
 {
     static int phys_ram_fd = -1;
     static int phys_ram_size = 0;
@@ -164,7 +164,7 @@
     return ptr;
 }
 
-void kqemu_vfree(void *ptr)
+static void kqemu_vfree(void *ptr)
 {
     /* may be useful some day, but currently we do not need to free */
 }
diff --git a/qemu-char.h b/qemu-char.h
index 3f48210..5a36a36 100644
--- a/qemu-char.h
+++ b/qemu-char.h
@@ -46,6 +46,7 @@
 };
 
 CharDriverState *qemu_chr_open(const char *filename);
+void qemu_chr_close(CharDriverState *chr);
 void qemu_chr_printf(CharDriverState *s, const char *fmt, ...);
 int qemu_chr_write(CharDriverState *s, const uint8_t *buf, int len);
 void qemu_chr_send_event(CharDriverState *s, int event);
diff --git a/target-i386/helper.c b/target-i386/helper.c
index 841824f..a2f465c 100644
--- a/target-i386/helper.c
+++ b/target-i386/helper.c
@@ -1235,7 +1235,7 @@
  * needed. It should only be called, if this is not an interrupt.
  * Returns the new exception number.
  */
-int check_exception(int intno, int *error_code)
+static int check_exception(int intno, int *error_code)
 {
     char first_contributory = env->old_exception == 0 ||
                               (env->old_exception >= 10 &&
@@ -3051,7 +3051,7 @@
     helper_fstt(ST0, A0);
 }
 
-void fpu_set_exception(int mask)
+static void fpu_set_exception(int mask)
 {
     env->fpus |= mask;
     if (env->fpus & (~env->fpuc & FPUC_EM))
diff --git a/translate-op.c b/translate-op.c
index 37c61e1..b21a522 100644
--- a/translate-op.c
+++ b/translate-op.c
@@ -33,5 +33,8 @@
 };
 
 #include "dyngen.h"
+extern int dyngen_code(uint8_t *gen_code_buf,
+                       uint16_t *label_offsets, uint16_t *jmp_offsets,
+                       const uint16_t *opc_buf, const uint32_t *opparam_buf, const long *gen_labels);
 #include "op.h"
 
diff --git a/usb-linux.c b/usb-linux.c
index d6a2b8b..d3e4e2e 100644
--- a/usb-linux.c
+++ b/usb-linux.c
@@ -907,10 +907,10 @@
     return p->class_name;
 }
 
-void usb_info_device(int bus_num, int addr, int class_id,
-                     int vendor_id, int product_id,
-                     const char *product_name,
-                     int speed)
+static void usb_info_device(int bus_num, int addr, int class_id,
+                            int vendor_id, int product_id,
+                            const char *product_name,
+                            int speed)
 {
     const char *class_str, *speed_str;
 
diff --git a/vl.c b/vl.c
index 783b3cf..b1e0cc7 100644
--- a/vl.c
+++ b/vl.c
@@ -242,7 +242,7 @@
 target_phys_addr_t isa_mem_base = 0;
 PicState2 *isa_pic;
 
-uint32_t default_ioport_readb(void *opaque, uint32_t address)
+static uint32_t default_ioport_readb(void *opaque, uint32_t address)
 {
 #ifdef DEBUG_UNUSED_IOPORT
     fprintf(stderr, "unused inb: port=0x%04x\n", address);
@@ -250,7 +250,7 @@
     return 0xff;
 }
 
-void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
+static void default_ioport_writeb(void *opaque, uint32_t address, uint32_t data)
 {
 #ifdef DEBUG_UNUSED_IOPORT
     fprintf(stderr, "unused outb: port=0x%04x data=0x%02x\n", address, data);
@@ -258,7 +258,7 @@
 }
 
 /* default is to make two byte accesses */
-uint32_t default_ioport_readw(void *opaque, uint32_t address)
+static uint32_t default_ioport_readw(void *opaque, uint32_t address)
 {
     uint32_t data;
     data = ioport_read_table[0][address](ioport_opaque[address], address);
@@ -267,14 +267,14 @@
     return data;
 }
 
-void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
+static void default_ioport_writew(void *opaque, uint32_t address, uint32_t data)
 {
     ioport_write_table[0][address](ioport_opaque[address], address, data & 0xff);
     address = (address + 1) & (MAX_IOPORTS - 1);
     ioport_write_table[0][address](ioport_opaque[address], address, (data >> 8) & 0xff);
 }
 
-uint32_t default_ioport_readl(void *opaque, uint32_t address)
+static uint32_t default_ioport_readl(void *opaque, uint32_t address)
 {
 #ifdef DEBUG_UNUSED_IOPORT
     fprintf(stderr, "unused inl: port=0x%04x\n", address);
@@ -282,14 +282,14 @@
     return 0xffffffff;
 }
 
-void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
+static void default_ioport_writel(void *opaque, uint32_t address, uint32_t data)
 {
 #ifdef DEBUG_UNUSED_IOPORT
     fprintf(stderr, "unused outl: port=0x%04x data=0x%02x\n", address, data);
 #endif
 }
 
-void init_ioports(void)
+static void init_ioports(void)
 {
     int i;
 
@@ -961,7 +961,7 @@
 
 static QEMUTimer *active_timers[2];
 
-QEMUClock *qemu_new_clock(int type)
+static QEMUClock *qemu_new_clock(int type)
 {
     QEMUClock *clock;
     clock = qemu_mallocz(sizeof(QEMUClock));
@@ -1539,7 +1539,7 @@
     alarm_timer = t;
 }
 
-void quit_timers(void)
+static void quit_timers(void)
 {
     alarm_timer->stop(alarm_timer);
     alarm_timer = NULL;
@@ -1832,7 +1832,7 @@
     d->mux_cnt++;
 }
 
-CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
+static CharDriverState *qemu_chr_open_mux(CharDriverState *drv)
 {
     CharDriverState *chr;
     MuxDriver *d;
@@ -3385,7 +3385,7 @@
 /***********************************************************/
 /* network device redirectors */
 
-void hex_dump(FILE *f, const uint8_t *buf, int size)
+static void hex_dump(FILE *f, const uint8_t *buf, int size)
 {
     int len, i, j, c;
 
@@ -3733,7 +3733,7 @@
 }
 
 /* automatic user mode samba server configuration */
-void net_slirp_smb(const char *exported_dir)
+static void net_slirp_smb(const char *exported_dir)
 {
     char smb_conf[1024];
     char smb_cmdline[1024];
@@ -5127,7 +5127,7 @@
     return NULL;
 }
 
-QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
+static QEMUFile *qemu_fopen_bdrv(BlockDriverState *bs, int64_t offset, int is_writable)
 {
     QEMUFile *f;
 
@@ -5361,7 +5361,7 @@
 #define QEMU_VM_FILE_MAGIC   0x5145564d
 #define QEMU_VM_FILE_VERSION 0x00000002
 
-int qemu_savevm_state(QEMUFile *f)
+static int qemu_savevm_state(QEMUFile *f)
 {
     SaveStateEntry *se;
     int len, ret;
@@ -5384,7 +5384,6 @@
         /* record size: filled later */
         len_pos = qemu_ftell(f);
         qemu_put_be32(f, 0);
-
         se->save_state(f, se->opaque);
 
         /* fill record size */
@@ -5415,7 +5414,7 @@
     return NULL;
 }
 
-int qemu_loadvm_state(QEMUFile *f)
+static int qemu_loadvm_state(QEMUFile *f)
 {
     SaveStateEntry *se;
     int len, ret, instance_id, record_len, version_id;
@@ -6655,7 +6654,7 @@
     return 0;
 }
 
-QEMUMachine *find_machine(const char *name)
+static QEMUMachine *find_machine(const char *name)
 {
     QEMUMachine *m;
 
@@ -6669,7 +6668,7 @@
 /***********************************************************/
 /* main execution loop */
 
-void gui_update(void *opaque)
+static void gui_update(void *opaque)
 {
     DisplayState *ds = opaque;
     ds->dpy_refresh(ds);
@@ -6953,7 +6952,7 @@
 
 static CPUState *cur_cpu;
 
-int main_loop(void)
+static int main_loop(void)
 {
     int ret, timeout;
 #ifdef CONFIG_PROFILER
@@ -7414,7 +7413,7 @@
 }
 
 /* XXX: currently we cannot use simultaneously different CPUs */
-void register_machines(void)
+static void register_machines(void)
 {
 #if defined(TARGET_I386)
     qemu_register_machine(&pc_machine);
diff --git a/vnc.c b/vnc.c
index ec97ad9..fcce00e 100644
--- a/vnc.c
+++ b/vnc.c
@@ -812,9 +812,9 @@
 }
 
 #if CONFIG_VNC_TLS
-ssize_t vnc_tls_push(gnutls_transport_ptr_t transport,
-		     const void *data,
-		     size_t len) {
+static ssize_t vnc_tls_push(gnutls_transport_ptr_t transport,
+                            const void *data,
+                            size_t len) {
     struct VncState *vs = (struct VncState *)transport;
     int ret;
 
@@ -829,9 +829,9 @@
 }
 
 
-ssize_t vnc_tls_pull(gnutls_transport_ptr_t transport,
-		     void *data,
-		     size_t len) {
+static ssize_t vnc_tls_pull(gnutls_transport_ptr_t transport,
+                            void *data,
+                            size_t len) {
     struct VncState *vs = (struct VncState *)transport;
     int ret;
 
diff --git a/x_keymap.c b/x_keymap.c
index 08cf95e..f000475 100644
--- a/x_keymap.c
+++ b/x_keymap.c
@@ -22,6 +22,7 @@
  * THE SOFTWARE.
  */
 #include "qemu-common.h"
+#include "console.h"
 
 static const uint8_t x_keycode_to_pc_keycode[115] = {
    0xc7,      /*  97  Home   */
