Re: [PATCH] or1k: Fix compiler warnings

Corinna Vinschen <[email protected]>
Newsgroups gmane.comp.lib.newlib
Message-ID <[email protected]>
Hi Stafford,

I'm not engaged in this stuff, so maybe this is dumb...

Changing the parameter from uint32_t to void* sounds like it would have
been the right thing from the start, but it's also an ABI change on 64
bit or1k.  I could imagine the uint32_t is just a pointer value from the
lower 4G space on 64 bit.  Do we even support 64 bit or1k?


Corinna



On Dec 10 12:58, Stafford Horne wrote:
> In my build the below are treated as error now and causing failures.
> 
>       CC       libc/sys/or1k/libc_a-mlock.o
>     newlib/libc/sys/or1k/mlock.c: In function ‘__malloc_lock’:
>     newlib/libc/sys/or1k/mlock.c:56:19: warning: implicit declaration of function ‘or1k_critical_begin’ [-Wimplicit-function-declaration]
>        56 |         restore = or1k_critical_begin();
> 	  |                   ^~~~~~~~~~~~~~~~~~~
>     newlib/libc/sys/or1k/mlock.c: In function ‘__malloc_unlock’:
>     newlib/libc/sys/or1k/mlock.c:93:17: warning: implicit declaration of function ‘or1k_critical_end’ [-Wimplicit-function-declaration]
>        93 |                 or1k_critical_end(restore);
> 	  |                 ^~~~~~~~~~~~~~~~~
> 
>     libgloss/or1k/or1k_uart.c: In function ‘or1k_uart_set_read_cb’:
>     libgloss/or1k/or1k_uart.c:163:25: warning: passing argument 2 of ‘or1k_interrupt_handler_add’ from incompatible pointer type [-Wincompatible-pointer-types]
>       163 |                         _or1k_uart_interrupt_handler, 0);
> 	  |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
> 	  |                         |
> 	  |                         void (*)(uint32_t) {aka void (*)(long unsigned int)}
>     In file included from libgloss/or1k/or1k_uart.c:19:
>     libgloss/or1k/include/or1k-support.h:97:45: note: expected ‘or1k_interrupt_handler_fptr’ {aka ‘void (*)(void *)’} but argument is of type ‘void (*)(uint32_t)’ {aka ‘void (*)(long unsigned int)’}
>        97 |                 or1k_interrupt_handler_fptr handler,
> 	  |                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~~~~
> 
>     libgloss/or1k/interrupts.c: In function ‘or1k_interrupt_handler_add’:
>     libgloss/or1k/interrupts.c:41:52: warning: assignment to ‘void *’ from ‘long unsigned int’ makes pointer from integer without a cast [-Wint-conversion]
>        41 |         _or1k_interrupt_handler_data_ptr_table[id] = (uint32_t) data_ptr;
> 	  |                                                    ^
> 
>     libgloss/or1k/sbrk.c:23:29: warning: initialization of ‘uint32_t’ {aka ‘long unsigned int’} from ‘uint32_t *’ {aka ‘long unsigned int *’} makes integer from pointer without a cast [-Wint-conversion]
>        23 | uint32_t _or1k_heap_start = &end;
> 	  |
> 
> Signed-off-by: Stafford Horne <[email protected]>
> ---
>  libgloss/or1k/interrupts.c   | 4 ++--
>  libgloss/or1k/or1k_uart.c    | 2 +-
>  libgloss/or1k/or1k_uart.h    | 2 +-
>  libgloss/or1k/sbrk.c         | 2 +-
>  newlib/libc/sys/or1k/mlock.c | 3 +++
>  5 files changed, 8 insertions(+), 5 deletions(-)
> 
> diff --git a/libgloss/or1k/interrupts.c b/libgloss/or1k/interrupts.c
> index 6badc497c..516d74be3 100644
> --- a/libgloss/or1k/interrupts.c
> +++ b/libgloss/or1k/interrupts.c
> @@ -35,10 +35,10 @@ void or1k_interrupt_handler_add(uint32_t id,
>  {
>  #ifdef __OR1K_MULTICORE__
>  	_or1k_interrupt_handler_table[or1k_coreid()][id] = handler;
> -	_or1k_interrupt_handler_data_ptr_table[or1k_coreid()][id] = (uint32_t) data_ptr;
> +	_or1k_interrupt_handler_data_ptr_table[or1k_coreid()][id] = data_ptr;
>  #else
>  	_or1k_interrupt_handler_table[id] = handler;
> -	_or1k_interrupt_handler_data_ptr_table[id] = (uint32_t) data_ptr;
> +	_or1k_interrupt_handler_data_ptr_table[id] = data_ptr;
>  #endif
>  }
>  
> diff --git a/libgloss/or1k/or1k_uart.c b/libgloss/or1k/or1k_uart.c
> index 0a991e6ba..1391d565c 100644
> --- a/libgloss/or1k/or1k_uart.c
> +++ b/libgloss/or1k/or1k_uart.c
> @@ -90,7 +90,7 @@ void (*_or1k_uart_read_cb)(char c);
>   * This is the interrupt handler that is registered for the callback
>   * function.
>   */
> -void _or1k_uart_interrupt_handler(uint32_t data)
> +void _or1k_uart_interrupt_handler(void *data)
>  {
>  	uint8_t iir = REG8(IIR);
>  
> diff --git a/libgloss/or1k/or1k_uart.h b/libgloss/or1k/or1k_uart.h
> index 4cbb68350..201b7749f 100644
> --- a/libgloss/or1k/or1k_uart.h
> +++ b/libgloss/or1k/or1k_uart.h
> @@ -30,7 +30,7 @@ extern void (*_or1k_uart_read_cb)(char c);
>  /**
>   * The UART interrupt handler
>   */
> -void _or1k_uart_interrupt_handler(uint32_t data);
> +void _or1k_uart_interrupt_handler(void *data);
>  
>  /**
>   * Initialize UART
> diff --git a/libgloss/or1k/sbrk.c b/libgloss/or1k/sbrk.c
> index 0c3e66e87..ca196d228 100644
> --- a/libgloss/or1k/sbrk.c
> +++ b/libgloss/or1k/sbrk.c
> @@ -20,7 +20,7 @@
>  #include "include/or1k-support.h"
>  
>  extern uint32_t	end; /* Set by linker.  */
> -uint32_t _or1k_heap_start = &end;
> +uint32_t _or1k_heap_start = (uint32_t) &end;
>  uint32_t _or1k_heap_end;
>  
>  void *
> diff --git a/newlib/libc/sys/or1k/mlock.c b/newlib/libc/sys/or1k/mlock.c
> index ccb840161..a0c038335 100644
> --- a/newlib/libc/sys/or1k/mlock.c
> +++ b/newlib/libc/sys/or1k/mlock.c
> @@ -38,6 +38,9 @@ volatile uint32_t _or1k_malloc_lock_restore;
>  
>  extern uint32_t or1k_sync_cas(void *address, uint32_t compare, uint32_t swap);
>  
> +extern uint32_t or1k_critical_begin();
> +extern void or1k_critical_end(uint32_t restore);
> +
>  /**
>   * Recursive lock of the malloc
>   */
> -- 
> 2.47.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.