diff --git a/config/examples/cross-sparc32_config.xml b/config/examples/cross-sparc32_config.xml
index 7d617e4..367bbbc 100644
--- a/config/examples/cross-sparc32_config.xml
+++ b/config/examples/cross-sparc32_config.xml
@@ -46,20 +46,20 @@
-
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+
@@ -69,7 +69,7 @@
-
+
diff --git a/config/examples/cross-sparc32_rules.xml b/config/examples/cross-sparc32_rules.xml
index f150f62..aa38bb4 100644
--- a/config/examples/cross-sparc32_rules.xml
+++ b/config/examples/cross-sparc32_rules.xml
@@ -21,6 +21,8 @@ NM := sparc-linux-nm
STRIP := sparc-linux-strip
RANLIB := sparc-linux-ranlib
CFLAGS := -Os -Wall -W -DNATIVE_BITWIDTH_EQUALS_HOST_BITWIDTH -USWAP_ENDIANNESS -fno-builtin -g
+CFLAGS+= -Wredundant-decls -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations
+CFLAGS+= -Wundef -Wendif-labels -Wstrict-aliasing
INCLUDES := -Iinclude -Ikernel/include -I$(ODIR)/target/include
#
diff --git a/config/examples/sparc32_config.xml b/config/examples/sparc32_config.xml
index 3d91777..fe45362 100644
--- a/config/examples/sparc32_config.xml
+++ b/config/examples/sparc32_config.xml
@@ -46,20 +46,20 @@
-
+
-
-
-
-
-
+
+
+
+
+
-
-
+
+
-
+
@@ -69,7 +69,7 @@
-
+
diff --git a/config/examples/sparc32_rules.xml b/config/examples/sparc32_rules.xml
index d886188..9c622bf 100644
--- a/config/examples/sparc32_rules.xml
+++ b/config/examples/sparc32_rules.xml
@@ -27,6 +27,8 @@ ifeq ($(shell uname), Linux)
endif
CFLAGS := -Os -Wall -W -DNATIVE_BITWIDTH_EQUALS_HOST_BITWIDTH -USWAP_ENDIANNESS -fno-builtin -g
+CFLAGS+= -Wredundant-decls -Wshadow -Wpointer-arith -Wstrict-prototypes -Wmissing-declarations
+CFLAGS+= -Wundef -Wendif-labels -Wstrict-aliasing
INCLUDES := -Iinclude -Ikernel/include -I$(ODIR)/target/include
#
diff --git a/drivers/esp.c b/drivers/esp.c
index df22e94..a79d602 100644
--- a/drivers/esp.c
+++ b/drivers/esp.c
@@ -263,7 +263,10 @@ ob_sd_open(__attribute__((unused))sd_private_t **sd)
id = POP();
*sd = &global_esp->sd[id];
- DPRINTF("opening drive %d\n", id);
+#ifdef CONFIG_DEBUG_ESP
+ fword("my-args");
+ DPRINTF("opening drive %d args %s\n", id, pop_fstr_copy());
+#endif
selfword("open-deblocker");
@@ -393,7 +396,7 @@ NODE_METHODS(ob_esp) = {
};
static void
-add_alias(const unsigned char *device, const unsigned char *alias)
+add_alias(const char *device, const char *alias)
{
push_str("/aliases");
fword("find-device");
@@ -413,6 +416,11 @@ int ob_esp_init(void)
DPRINTF("Initializing SCSI...");
esp = malloc(sizeof(esp_private_t));
+ if (!esp) {
+ DPRINTF("Can't allocate ESP private structure\n");
+ return -1;
+ }
+
global_esp = esp;
if (espdma_init(&esp->espdma) != 0) {
@@ -433,7 +441,9 @@ int ob_esp_init(void)
// Chip reset
esp->ll->regs[ESP_CMD] = ESP_CMD_RC;
-
+
+ DPRINTF("ESP at 0x%lx, buffer va 0x%lx dva 0x%lx\n", (unsigned long)esp,
+ (unsigned long)esp->buffer, (unsigned long)esp->buffer_dvma);
DPRINTF("done\n");
DPRINTF("Initializing SCSI devices...");
@@ -448,8 +458,7 @@ int ob_esp_init(void)
#endif
}
- sprintf(nodebuff, "/iommu/sbus/espdma/esp");
- REGISTER_NAMED_NODE(ob_esp, nodebuff);
+ REGISTER_NAMED_NODE(ob_esp, "/iommu/sbus/espdma/esp");
device_end();
for (id = 0; id < 8; id++) {
diff --git a/drivers/iommu.c b/drivers/iommu.c
index 68b46fd..b9ec0a7 100644
--- a/drivers/iommu.c
+++ b/drivers/iommu.c
@@ -70,7 +70,7 @@ iommu_invalidate(struct iommu_regs *regs) {
/*
* Allocate memory. This is reusable.
*/
-static void
+void
mem_init(struct mem *t, char *begin, char *limit)
{
t->start = begin;
@@ -82,8 +82,14 @@ void *
mem_alloc(struct mem *t, int size, int align)
{
char *p;
+ unsigned long pa;
- p = (char *)((((unsigned int)t->curp) + (align-1)) & ~(align-1));
+ // The alignment restrictions refer to physical, not virtual
+ // addresses
+ pa = va2pa((unsigned long)t->curp) + (align - 1);
+ pa &= ~(align - 1);
+ p = (char *)pa2va(pa);
+
if (p >= t->uplim || p + size > t->uplim)
return 0;
t->curp = p + size;
@@ -193,12 +199,11 @@ map_io(unsigned pa, int size)
* Switch page tables.
*/
void
-init_mmu_swift()
+init_mmu_swift(void)
{
unsigned int addr, i;
unsigned long pa, va;
- mem_init(&cmem, (char *) &_vmem, (char *)&_evmem);
mem_init(&cio, (char *)&_end, (char *)&_iomem);
context_table = mem_zalloc(&cmem, NCTX_SWIFT * sizeof(int), NCTX_SWIFT * sizeof(int));
@@ -343,11 +348,12 @@ iommu_init(struct iommu *t)
/* flush_cache_all(); */
/** flush_tlb_all(); **/
- regs->base = ((unsigned int)va2pa((unsigned long)ptab)) >> 4;
+ tmp = (unsigned int)va2pa((unsigned long)ptab);
+ regs->base = tmp >> 4;
iommu_invalidate(regs);
- DPRINTF("IOMMU: impl %d vers %d page table at 0x%p of size %d bytes\n",
- impl, vers, t->page_table, ptsize);
+ DPRINTF("IOMMU: impl %d vers %d page table at 0x%p (pa 0x%x) of size %d bytes\n",
+ impl, vers, t->page_table, tmp, ptsize);
mem_init(&t->bmap, (char*)t->plow, (char *)0xfffff000);
}
diff --git a/drivers/pgtsrmmu.h b/drivers/pgtsrmmu.h
index e46718f..1999537 100644
--- a/drivers/pgtsrmmu.h
+++ b/drivers/pgtsrmmu.h
@@ -83,7 +83,7 @@
#ifndef __ASSEMBLY__
/* Accessing the MMU control register. */
-extern __inline__ unsigned int srmmu_get_mmureg(void)
+static __inline__ unsigned int srmmu_get_mmureg(void)
{
unsigned int retval;
__asm__ __volatile__("lda [%%g0] %1, %0\n\t" :
@@ -92,14 +92,14 @@ extern __inline__ unsigned int srmmu_get_mmureg(void)
return retval;
}
-extern __inline__ void srmmu_set_mmureg(unsigned long regval)
+static __inline__ void srmmu_set_mmureg(unsigned long regval)
{
__asm__ __volatile__("sta %0, [%%g0] %1\n\t" : :
"r" (regval), "i" (ASI_M_MMUREGS) : "memory");
}
-extern __inline__ void srmmu_set_ctable_ptr(unsigned long paddr)
+static __inline__ void srmmu_set_ctable_ptr(unsigned long paddr)
{
paddr = ((paddr >> 4) & SRMMU_CTX_PMASK);
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
@@ -108,7 +108,7 @@ extern __inline__ void srmmu_set_ctable_ptr(unsigned long paddr)
"memory");
}
-extern __inline__ unsigned long srmmu_get_ctable_ptr(void)
+static __inline__ unsigned long srmmu_get_ctable_ptr(void)
{
unsigned int retval;
@@ -119,14 +119,14 @@ extern __inline__ unsigned long srmmu_get_ctable_ptr(void)
return (retval & SRMMU_CTX_PMASK) << 4;
}
-extern __inline__ void srmmu_set_context(int context)
+static __inline__ void srmmu_set_context(int context)
{
__asm__ __volatile__("sta %0, [%1] %2\n\t" : :
"r" (context), "r" (SRMMU_CTX_REG),
"i" (ASI_M_MMUREGS) : "memory");
}
-extern __inline__ int srmmu_get_context(void)
+static __inline__ int srmmu_get_context(void)
{
register int retval;
__asm__ __volatile__("lda [%1] %2, %0\n\t" :
@@ -136,7 +136,7 @@ extern __inline__ int srmmu_get_context(void)
return retval;
}
-extern __inline__ unsigned int srmmu_get_fstatus(void)
+static __inline__ unsigned int srmmu_get_fstatus(void)
{
unsigned int retval;
@@ -146,7 +146,7 @@ extern __inline__ unsigned int srmmu_get_fstatus(void)
return retval;
}
-extern __inline__ unsigned int srmmu_get_faddr(void)
+static __inline__ unsigned int srmmu_get_faddr(void)
{
unsigned int retval;
@@ -157,7 +157,7 @@ extern __inline__ unsigned int srmmu_get_faddr(void)
}
/* This is guaranteed on all SRMMU's. */
-extern __inline__ void srmmu_flush_whole_tlb(void)
+static __inline__ void srmmu_flush_whole_tlb(void)
{
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
"r" (0x400), /* Flush entire TLB!! */
@@ -166,7 +166,7 @@ extern __inline__ void srmmu_flush_whole_tlb(void)
}
/* These flush types are not available on all chips... */
-extern __inline__ void srmmu_flush_tlb_ctx(void)
+static __inline__ void srmmu_flush_tlb_ctx(void)
{
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
"r" (0x300), /* Flush TLB ctx.. */
@@ -174,7 +174,7 @@ extern __inline__ void srmmu_flush_tlb_ctx(void)
}
-extern __inline__ void srmmu_flush_tlb_region(unsigned long addr)
+static __inline__ void srmmu_flush_tlb_region(unsigned long addr)
{
addr &= SRMMU_PGDIR_MASK;
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
@@ -184,7 +184,7 @@ extern __inline__ void srmmu_flush_tlb_region(unsigned long addr)
}
-extern __inline__ void srmmu_flush_tlb_segment(unsigned long addr)
+static __inline__ void srmmu_flush_tlb_segment(unsigned long addr)
{
addr &= SRMMU_PMD_MASK;
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
@@ -193,7 +193,7 @@ extern __inline__ void srmmu_flush_tlb_segment(unsigned long addr)
}
-extern __inline__ void srmmu_flush_tlb_page(unsigned long page)
+static __inline__ void srmmu_flush_tlb_page(unsigned long page)
{
page &= PAGE_MASK;
__asm__ __volatile__("sta %%g0, [%0] %1\n\t": :
@@ -202,7 +202,7 @@ extern __inline__ void srmmu_flush_tlb_page(unsigned long page)
}
-extern __inline__ unsigned long srmmu_hwprobe(unsigned long vaddr)
+static __inline__ unsigned long srmmu_hwprobe(unsigned long vaddr)
{
unsigned long retval;
@@ -214,7 +214,7 @@ extern __inline__ unsigned long srmmu_hwprobe(unsigned long vaddr)
return retval;
}
-extern __inline__ int
+static __inline__ int
srmmu_get_pte (unsigned long addr)
{
register unsigned long entry;
diff --git a/include/libc/string.h b/include/libc/string.h
index 0270719..95a8429 100644
--- a/include/libc/string.h
+++ b/include/libc/string.h
@@ -42,7 +42,7 @@ extern char *bcopy(const char * src, char * dest, int count);
extern void *memcpy(void * dest,const void *src,size_t count);
extern void *memmove(void * dest,const void *src,size_t count);
extern int memcmp(const void * cs,const void * ct,size_t count);
-extern void *memscan(void * addr, int c, size_t size);void * memscan(void * addr, int c, size_t size);
+extern void *memscan(void * addr, int c, size_t size);
extern char *strstr(const char * s1,const char * s2);
extern void *memchr(const void *s, int c, size_t n);
diff --git a/include/sparc32/io.h b/include/sparc32/io.h
index a9b3dbb..c16930c 100644
--- a/include/sparc32/io.h
+++ b/include/sparc32/io.h
@@ -4,7 +4,8 @@
#include "asm/types.h"
extern unsigned int va_shift; // Set in entry.S
-extern char _start, _data, _end, _vmem, _evmem, _iomem; // Defined in ldscript
+extern char _start, _data, _heap, _eheap, _stack, _estack, _end,
+ _vmem, _evmem,_iomem; // Defined in ldscript
static inline unsigned long
va2pa(unsigned long va)
@@ -32,11 +33,12 @@ pa2va(unsigned long pa)
struct mem;
+void mem_init(struct mem *t, char *begin, char *limit);
void *mem_alloc(struct mem *t, int size, int align);
void *mem_zalloc(struct mem *t, int size, int align);
int map_page(unsigned long va, unsigned long epa, int type);
void *map_io(unsigned pa, int size);
-void init_mmu_swift();
+void init_mmu_swift(void);
void *dvma_alloc(int size, unsigned int *pphys);
#ifndef BOOTSTRAP
diff --git a/modules/nvram.c b/modules/nvram.c
index c050c20..239d7c6 100644
--- a/modules/nvram.c
+++ b/modules/nvram.c
@@ -49,7 +49,7 @@ static struct {
static unsigned int
nvpart_checksum( nvpart_t* hdr )
{
- unsigned char *p = (char*)hdr;
+ unsigned char *p = (unsigned char*)hdr;
int i, val = p[0];
for( i=2; i<16; i++ ) {
diff --git a/toke/stream.c b/toke/stream.c
index 094e2d8..dd96a53 100644
--- a/toke/stream.c
+++ b/toke/stream.c
@@ -104,7 +104,7 @@ int init_output( const char *in_name, const char *out_name )
oname = (u8 *)strdup( out_name );
else {
ext=strrchr(in_name, '.');
- len=ext ? (ext-in_name) : (unsigned int)strlen(in_name) ;
+ len=ext ? (unsigned int)(ext-in_name) : (unsigned int)strlen(in_name) ;
oname=malloc(len+4);
memcpy(oname, in_name, len);
oname[len] = 0;