public inbox for newlib-cvs@sourceware.org
help / color / mirror / Atom feed
* [newlib-cygwin] Fix warnings when building for msp430-elf
@ 2020-09-03 11:43 Corinna Vinschen
  0 siblings, 0 replies; only message in thread
From: Corinna Vinschen @ 2020-09-03 11:43 UTC (permalink / raw)
  To: newlib-cvs

https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=754386c7f558a686420d4646c101706d9020f5d3

commit 754386c7f558a686420d4646c101706d9020f5d3
Author: Jozef Lawrynowicz <jozef.l@mittosystems.com>
Date:   Wed Sep 2 15:50:07 2020 +0100

    Fix warnings when building for msp430-elf
    
    The MSP430 target supports both 16-bit and 20-bit size_t and intptr_t.
    Some implicit casts in Newlib expect these types to be
    "long", (a 32-bit type on MSP430) which causes warnings during
    compilation such as:
      "cast from pointer to integer of different size"

Diff:
---
 libgloss/msp430/sbrk.c             |  3 +++
 newlib/libc/include/sys/config.h   |  4 ++--
 newlib/libc/search/db_local.h      |  2 +-
 newlib/libc/search/hcreate_r.c     |  5 +++++
 newlib/libc/stdio/open_memstream.c |  4 ++--
 newlib/libc/stdlib/arc4random.c    |  3 ++-
 newlib/libc/stdlib/nano-mallocr.c  | 22 ++++++++++++----------
 7 files changed, 27 insertions(+), 16 deletions(-)

diff --git a/libgloss/msp430/sbrk.c b/libgloss/msp430/sbrk.c
index 0a88b943a..bbc3fb5ba 100644
--- a/libgloss/msp430/sbrk.c
+++ b/libgloss/msp430/sbrk.c
@@ -11,6 +11,9 @@
    Red Hat, Inc.
 */
 
+int write (int fd, const char *buf, int len);
+void abort (void);
+
 char *
 _sbrk (int adj)
 {
diff --git a/newlib/libc/include/sys/config.h b/newlib/libc/include/sys/config.h
index d746b15fc..4bc8d29bf 100644
--- a/newlib/libc/include/sys/config.h
+++ b/newlib/libc/include/sys/config.h
@@ -21,7 +21,7 @@
 #endif
 
 /* 16 bit integer machines */
-#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__)
+#if defined(__Z8001__) || defined(__Z8002__) || defined(__H8500__) || defined(__W65__) || defined (__mn10200__) || defined (__AVR__) || defined (__MSP430__)
 
 #undef INT_MAX
 #undef UINT_MAX
@@ -162,7 +162,7 @@
 #define __SMALL_BITFIELDS
 
 #ifdef __MSP430X_LARGE__
-#define _POINTER_INT long
+#define _POINTER_INT __int20
 #else
 #define _POINTER_INT int
 #endif
diff --git a/newlib/libc/search/db_local.h b/newlib/libc/search/db_local.h
index ba8286657..8167953e8 100644
--- a/newlib/libc/search/db_local.h
+++ b/newlib/libc/search/db_local.h
@@ -125,7 +125,7 @@ typedef struct {
 	int	lorder;		/* byte order */
 } BTREEINFO;
 
-#define	HASHMAGIC	0x061561
+#define	HASHMAGIC	0x061561L
 #define	HASHVERSION	2
 
 /* Structure used to pass parameters to the hashing routines. */
diff --git a/newlib/libc/search/hcreate_r.c b/newlib/libc/search/hcreate_r.c
index 8aba524ec..400a57f0c 100644
--- a/newlib/libc/search/hcreate_r.c
+++ b/newlib/libc/search/hcreate_r.c
@@ -72,7 +72,12 @@ SLIST_HEAD(internal_head, internal_entry);
  * max * sizeof internal_entry must fit into size_t.
  * assumes internal_entry is <= 32 (2^5) bytes.
  */
+#ifdef __MSP430X_LARGE__
+/* 20-bit size_t.  */
+#define	MAX_BUCKETS_LG2	(20 - 1 - 5)
+#else
 #define	MAX_BUCKETS_LG2	(sizeof (size_t) * 8 - 1 - 5)
+#endif
 #define	MAX_BUCKETS	((size_t)1 << MAX_BUCKETS_LG2)
 
 /* Default hash function, from db/hash/hash_func.c */
diff --git a/newlib/libc/stdio/open_memstream.c b/newlib/libc/stdio/open_memstream.c
index afa4a6d62..ed71b1cdc 100644
--- a/newlib/libc/stdio/open_memstream.c
+++ b/newlib/libc/stdio/open_memstream.c
@@ -326,8 +326,8 @@ internal_open_memstream_r (struct _reent *ptr,
   if (c->max < 64)
     c->max = 64;
 #if (SIZE_MAX >= 64 * 1024)
-  else if (c->max > 64 * 1024)
-    c->max = 64 * 1024;
+  else if (c->max > (size_t)64 * 1024)
+    c->max = (size_t)64 * 1024;
 #endif
   *size = 0;
   *buf = _malloc_r (ptr, c->max);
diff --git a/newlib/libc/stdlib/arc4random.c b/newlib/libc/stdlib/arc4random.c
index 7632de164..5860d644a 100644
--- a/newlib/libc/stdlib/arc4random.c
+++ b/newlib/libc/stdlib/arc4random.c
@@ -99,7 +99,8 @@ _rs_stir(void)
 	rs->rs_have = 0;
 	memset(rsx->rs_buf, 0, sizeof(rsx->rs_buf));
 
-	rs->rs_count = (SIZE_MAX <= 65535) ? 65000 : 1600000;
+	rs->rs_count = (SIZE_MAX <= 65535) ? 65000
+	  : (SIZE_MAX <= 1048575 ? 1048000 : 1600000);
 }
 
 static inline void
diff --git a/newlib/libc/stdlib/nano-mallocr.c b/newlib/libc/stdlib/nano-mallocr.c
index 6ba0eb74b..6dbfba84b 100644
--- a/newlib/libc/stdlib/nano-mallocr.c
+++ b/newlib/libc/stdlib/nano-mallocr.c
@@ -106,8 +106,10 @@
 #define sbrk_start __malloc_sbrk_start
 #define current_mallinfo __malloc_current_mallinfo
 
-#define ALIGN_TO(size, align) \
-    (((size) + (align) -1L) & ~((align) -1L))
+#define ALIGN_PTR(ptr, align) \
+    (((ptr) + (align) - (intptr_t)1) & ~((align) - (intptr_t)1))
+#define ALIGN_SIZE(size, align) \
+    (((size) + (align) - (size_t)1) & ~((align) - (size_t)1))
 
 /* Alignment of allocated block */
 #define MALLOC_ALIGN (8U)
@@ -214,7 +216,7 @@ static void* sbrk_aligned(RARG malloc_size_t s)
     if (p == (void *)-1)
         return p;
 
-    align_p = (char*)ALIGN_TO((unsigned long)p, CHUNK_ALIGN);
+    align_p = (char*)ALIGN_PTR((uintptr_t)p, CHUNK_ALIGN);
     if (align_p != p)
     {
         /* p is not aligned, ask for a few more bytes so that we have s
@@ -239,7 +241,7 @@ void * nano_malloc(RARG malloc_size_t s)
 
     malloc_size_t alloc_size;
 
-    alloc_size = ALIGN_TO(s, CHUNK_ALIGN); /* size of aligned data load */
+    alloc_size = ALIGN_SIZE(s, CHUNK_ALIGN); /* size of aligned data load */
     alloc_size += MALLOC_PADDING; /* padding */
     alloc_size += CHUNK_OFFSET; /* size of chunk head */
     alloc_size = MAX(alloc_size, MALLOC_MINCHUNK);
@@ -305,7 +307,7 @@ void * nano_malloc(RARG malloc_size_t s)
 
     ptr = (char *)r + CHUNK_OFFSET;
 
-    align_ptr = (char *)ALIGN_TO((unsigned long)ptr, MALLOC_ALIGN);
+    align_ptr = (char *)ALIGN_PTR((uintptr_t)ptr, MALLOC_ALIGN);
     offset = align_ptr - ptr;
 
     if (offset)
@@ -578,16 +580,16 @@ void * nano_memalign(RARG size_t align, size_t s)
     if ((align & (align-1)) != 0) return NULL;
 
     align = MAX(align, MALLOC_ALIGN);
-    ma_size = ALIGN_TO(MAX(s, MALLOC_MINSIZE), CHUNK_ALIGN);
+    ma_size = ALIGN_SIZE(MAX(s, MALLOC_MINSIZE), CHUNK_ALIGN);
     size_with_padding = ma_size + align - MALLOC_ALIGN;
 
     allocated = nano_malloc(RCALL size_with_padding);
     if (allocated == NULL) return NULL;
 
     chunk_p = get_chunk_from_ptr(allocated);
-    aligned_p = (char *)ALIGN_TO(
-                  (unsigned long)((char *)chunk_p + CHUNK_OFFSET),
-                  (unsigned long)align);
+    aligned_p = (char *)ALIGN_PTR(
+                  (uintptr_t)((char *)chunk_p + CHUNK_OFFSET),
+                  (uintptr_t)align);
     offset = aligned_p - ((char *)chunk_p + CHUNK_OFFSET);
 
     if (offset)
@@ -642,6 +644,6 @@ void * nano_valloc(RARG size_t s)
 #ifdef DEFINE_PVALLOC
 void * nano_pvalloc(RARG size_t s)
 {
-    return nano_valloc(RCALL ALIGN_TO(s, MALLOC_PAGE_ALIGN));
+    return nano_valloc(RCALL ALIGN_SIZE(s, MALLOC_PAGE_ALIGN));
 }
 #endif /* DEFINE_PVALLOC */


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2020-09-03 11:43 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-09-03 11:43 [newlib-cygwin] Fix warnings when building for msp430-elf Corinna Vinschen

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).