shithub: p9-stm32-example-bare

Download patch

ref: 91f14160d425ce557a3fc589b9286fd82c56b7a8
parent: cc3c4401a74588c302c55ba7acb19cd773fdf775
author: kitzman <[email protected]>
date: Sun Nov 12 07:32:14 EST 2023

alloc fixes; missing files

diff: cannot open b/bin//null: file does not exist: 'b/bin//null'
--- a/alloc.c
+++ b/alloc.c
@@ -9,8 +9,8 @@
 
 #define	BHDR_MAGIC	0xcafebafe
 #define BHDR_POISON	0xdeadbeef
-#define	BPTR(h)		((Bhdr *)(h + sizeof(Bhdr)))
-#define	BNEXT(h)	((Bhdr *)(h + sizeof(Bhdr) + h->size))
+#define	BPTR(h)		((Bhdr *)((uint)h + sizeof(Bhdr)))
+#define	BNEXT(h)	((Bhdr *)((uint)h + sizeof(Bhdr) + h->size))
 
 enum {
 	Bfree	= 0,
@@ -80,7 +80,7 @@
 	ptr = BPTR(hdr);
 
 	// create next block
-	if(BNEXT(hdr) < (first + CMEMSIZE - sizeof(Bhdr)) &&
+	if((uint)BNEXT(hdr) < ((uint)first + CMEMSIZE - sizeof(Bhdr)) &&
 		BNEXT(hdr)->magic != BHDR_MAGIC) {
 		hdr = BNEXT(hdr);
 		hdr->magic = BHDR_MAGIC;
@@ -106,7 +106,7 @@
 smalloc(ulong size)
 {
 	void *ptr;
-	while((ptr = malloc(size)) != nil)
+	while((ptr = malloc(size)) == nil)
 		_wait(100);
 
 	return ptr;
@@ -120,7 +120,7 @@
 
 	// first pass: find and free the block
 	DBGALLOC print("alloc: free'ing block\n");
-	for(Bhdr *t = first; t - first < CMEMSIZE && hdr == nil; t = BNEXT(t)) {
+	for(Bhdr *t = first; (uint)t - (uint)first < CMEMSIZE && hdr == nil; t = BNEXT(t)) {
 		void *t_ptr = BPTR(t);
 		if(t_ptr == ptr)
 			hdr = t;
@@ -134,13 +134,13 @@
 
 	// second pass: coalesce with the next block
 	DBGALLOC print("alloc: coalesce with next block\n");
-	if(BNEXT(hdr) < first + CMEMSIZE && BNEXT(hdr)->tp == Bfree) {
+	if((uint)BNEXT(hdr) < (uint)first + CMEMSIZE && BNEXT(hdr)->tp == Bfree) {
 		hdr->size = hdr->size + BNEXT(hdr)->size + sizeof(Bhdr);
 	}
 
 	// third pass: coalesce with the previous block
 	DBGALLOC print("alloc: coalesce with previous block\n");
-	for(Bhdr *t = first; t - first < CMEMSIZE && c == nil; t = BNEXT(t)) {
+	for(Bhdr *t = first; (uint)t - (uint)first < CMEMSIZE && c == nil; t = BNEXT(t)) {
 		if(BNEXT(t) < first + CMEMSIZE && BNEXT(t) == hdr && t->tp == Bfree)
 			c = t;
 	}
@@ -157,7 +157,7 @@
 	Bhdr *hdr = nil;
 	void *nptr;
 
-	for(Bhdr *t = first; t - first < CMEMSIZE && hdr == nil; t = BNEXT(t)) {
+	for(Bhdr *t = first; (uint)t - (uint)first < CMEMSIZE && hdr == nil; t = BNEXT(t)) {
 		void *t_ptr = BPTR(t);
 		if(t_ptr == ptr)
 			hdr = t;
--- /dev/null
+++ b/libkern/NOTICE
@@ -1,0 +1,29 @@
+This copyright NOTICE applies to all files in this directory and
+subdirectories, unless another copyright notice appears in a given
+file or subdirectory.  If you take substantial code from this software to use in
+other programs, you must somehow include with it an appropriate
+copyright notice that includes the copyright notice and the other
+notices below.  It is fine (and often tidier) to do that in a separate
+file such as NOTICE, LICENCE or COPYING.
+
+	Copyright © 1994-1999 Lucent Technologies Inc.  All rights reserved.
+	Revisions Copyright © 2000-2007 Vita Nuova Holdings Limited (www.vitanuova.com).  All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
--- /dev/null
+++ b/libkern/mkfile
@@ -1,0 +1,99 @@
+</sys/src/mkfile.proto
+<../mkconfig
+
+LIB=libkern.a
+
+OFILES=\
+	abort.$O\
+	abs.$O\
+	atol.$O\
+	charstod.$O\
+	cistrcmp.$O\
+	cistrncmp.$O\
+	cistrstr.$O\
+	cleanname.$O\
+	dofmt.$O\
+	exp.$O\
+	floor.$O\
+	fmt.$O\
+	fmtprint.$O\
+	fmtquote.$O\
+	fmtstr.$O\
+	fmtvprint.$O\
+	frexp-thumb.$O\
+	getfcr-thumb.$O\
+	getfields.$O\
+	log.$O\
+	memccpy.$O\
+	memchr.$O\
+	memcmp.$O\
+	memmove.$O\
+	memset.$O\
+	nan-thumb.$O\
+	pow.$O\
+	pow10.$O\
+	qsort.$O\
+	rune.$O\
+	runestrlen.$O\
+	seprint.$O\
+	sin.$O\
+	smprint.$O\
+	snprint.$O\
+	sqrt.$O\
+	strcat.$O\
+	strchr.$O\
+	strcmp.$O\
+	strcpy.$O\
+	strdup.$O\
+	strecpy.$O\
+	strlen.$O\
+	strncmp.$O\
+	strncpy.$O\
+	strrchr.$O\
+	strstr.$O\
+	strtod.$O\
+	strtol.$O\
+	strtoll.$O\
+	strtoul.$O\
+	strtoull.$O\
+	tokenize.$O\
+	toupper.$O\
+	u16.$O\
+	u32.$O\
+	u64.$O\
+	utfecpy.$O\
+	utflen.$O\
+	utfnlen.$O\
+	utfrrune.$O\
+	utfrune.$O\
+	vlop-thumb.$O\
+	vlrt-thumb.$O\
+	vseprint.$O\
+	vsmprint.$O\
+	vsnprint.$O\
+
+HFILES=fmtdef.h
+
+LIBDIR=../bin
+LIBRARY=$LIBDIR/$LIB
+LIBOBJ=${OFILES:%=$LIBRARY(%)}
+
+%.$O:	$HFILES		# don't combine with following %.$O rules
+
+%.$O:	%.c
+	$CC $CFLAGS $stem.c
+
+%.$O:	%.s
+	$AS $ASFLAGS $stem.s
+
+default:V:	all
+
+all install:V:	$LIBRARY
+
+$LIBRARY:	$LIBOBJ
+	$AR $ARFLAGS $target $newmember
+
+$LIBRARY(%.$O):N:	%.$O
+
+clean:V:
+	rm *.t
--- /dev/null
+++ b/util.rc
@@ -1,0 +1,45 @@
+#!/bin/rc
+
+baudrate=19200
+kernel=kernel
+
+fn stm_info {
+	echo 'using flashdev' $flashdev 'with baud' $baudrate
+	if(! ~ $flashdev '') {
+		stm32up -d -D $flashdev -b $baudrate info
+	}
+	if not {
+		echo '$flashdev or $baudrate not set'
+	}
+}
+
+fn stm_flash {
+	echo 'using flashdev' $flashdev 'with baud' $baudrate
+	if(! ~ $flashdev '') {
+		cat $kernel | stm32up -d -D $flashdev -b $baudrate \
+			flash 0x08000000 '0x'`{cat $kernel | xd | tail -n 1}
+	}
+	if not {
+		echo '$flashdev or $baudrate not set'
+	}
+}
+
+fn stm_go {
+	echo 'using flashdev' $flashdev 'with baud' $baudrate
+	if(! ~ $flashdev '') {
+		stm32up -d -D $flashdev -b $baudrate go 0x08000000
+	}
+	if not {
+		echo '$flashdev or $baudrate not set'
+	}
+}
+
+fn stm_wunp {
+	echo 'using flashdev' $flashdev 'with baud' $baudrate
+	if(! ~ $flashdev '') {
+		stm32up -d -D $flashdev -b $baudrate writeunp
+	}
+	if not {
+		echo '$flashdev or $baudrate not set'
+	}
+}