[PATCH] bsp/i386/pc686: Clean up warnings

chrisj at rtems.org chrisj at rtems.org
Wed Oct 4 05:10:00 UTC 2023


From: Chris Johns <chrisj at rtems.org>

---
 bsps/i386/include/bsp/irq.h                   |  2 ++
 bsps/i386/pc386/console/exar17d15x.c          |  6 +++---
 bsps/i386/pc386/console/fb_vesa_rm.c          | 19 +++++++++++++++----
 bsps/i386/pc386/console/i386-stub.c           |  2 +-
 bsps/i386/pc386/console/outch.c               | 14 ++++++++++----
 bsps/i386/pc386/console/rtd316.c              |  4 ++--
 bsps/i386/pc386/console/tty_drv.c             |  4 ++--
 bsps/i386/pc386/console/uart_bus_pci.c        | 16 ++++++++--------
 bsps/i386/pc386/console/vgacons.c             |  8 ++++++--
 bsps/i386/pc386/include/bsp/rtd316.h          |  4 ++--
 bsps/i386/pc386/include/tm27.h                |  2 +-
 bsps/i386/pc386/start/realmode_int.c          |  9 +++++++++
 .../score/cpu/i386/include/rtems/score/cpu.h  |  8 ++++----
 13 files changed, 65 insertions(+), 33 deletions(-)

diff --git a/bsps/i386/include/bsp/irq.h b/bsps/i386/include/bsp/irq.h
index c5ef954142..4ec25b0c5a 100644
--- a/bsps/i386/include/bsp/irq.h
+++ b/bsps/i386/include/bsp/irq.h
@@ -42,7 +42,9 @@ extern "C" {
 
 #include <bsp/irq_asm.h>
 #include <rtems.h>
+#ifndef BSP_SHARED_HANDLER_SUPPORT
 #define BSP_SHARED_HANDLER_SUPPORT      1
+#endif
 #include <rtems/irq.h>
 #include <rtems/irq-extension.h>
 
diff --git a/bsps/i386/pc386/console/exar17d15x.c b/bsps/i386/pc386/console/exar17d15x.c
index 1e6cb6fbeb..787e9a24d0 100644
--- a/bsps/i386/pc386/console/exar17d15x.c
+++ b/bsps/i386/pc386/console/exar17d15x.c
@@ -94,7 +94,7 @@ typedef struct {
 /*
  *  Register Access Routines
  */
-static uint8_t xr17d15x_get_register(uint32_t addr, uint8_t i)
+static uint8_t xr17d15x_get_register(uintptr_t addr, uint8_t i)
 {
   uint8_t          val = 0;
   volatile uint8_t *reg = (volatile uint8_t *)(addr + i);
@@ -104,7 +104,7 @@ static uint8_t xr17d15x_get_register(uint32_t addr, uint8_t i)
   return val;
 }
 
-static void xr17d15x_set_register(uint32_t addr, uint8_t i, uint8_t val)
+static void xr17d15x_set_register(uintptr_t addr, uint8_t i, uint8_t val)
 {
   volatile uint8_t *reg = (volatile uint8_t *)(addr + i);
 
@@ -187,7 +187,7 @@ rtems_device_driver exar17d15x_initialize(
     printk(
       "Found Exar 17D15x %d at 0x%08lx IRQ %d with %d ports\n",
       instance,
-      conf[instance].base,
+      (uintptr_t) conf[instance].base,
       conf[instance].irq,
       conf[instance].ports
     );
diff --git a/bsps/i386/pc386/console/fb_vesa_rm.c b/bsps/i386/pc386/console/fb_vesa_rm.c
index 3263bc262b..d14aa826d6 100644
--- a/bsps/i386/pc386/console/fb_vesa_rm.c
+++ b/bsps/i386/pc386/console/fb_vesa_rm.c
@@ -63,6 +63,17 @@
 
 #define FB_VESA_NAME    "FB_VESA_RM"
 
+/*
+ * GCC complains that access to packed data may not be aligned and
+ * fair enough. The warning is:
+ *
+ *   warning: taking address of packed member of 'struct <anonymous>' may
+ *   result in an unaligned pointer value [-Waddress-of-packed-member]
+ *
+ * Disable the warning.
+ */
+#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
+
 /**
  * @brief Allows to enable initialization of VESA real mode driver from
  * an application by setting the value of this variable to non null value in
@@ -788,7 +799,7 @@ void vesa_realmode_bootup_init(void)
         (vbe_ret_val>>8)!=VBE_callSuccessful)
     {
         printk(FB_VESA_NAME " Cannot get mode info anymore. ax=0x%lx\n",
-            vbe_ret_val);
+               (uintptr_t) vbe_ret_val);
     }
 
     fb_var.xres = mib->XResolution;
@@ -970,9 +981,9 @@ frame_buffer_control(
 {
   rtems_libio_ioctl_args_t *args = arg;
 
-  printk( FB_VESA_NAME " ioctl called, cmd=%" PRIx32 "\n", args->command  );
-    printk("fbxres %lu, fbyres %lu\n", fb_var.xres, fb_var.yres);
-    printk("fbbpp %lu\n", fb_var.bits_per_pixel);
+  printk( FB_VESA_NAME " ioctl called, cmd=%lx\n", (uintptr_t) args->command  );
+  printk("fbxres %d, fbyres %d\n", (int) fb_var.xres, (int) fb_var.yres);
+  printk("fbbpp %d\n", (int) fb_var.bits_per_pixel);
 
   switch (args->command)
   {
diff --git a/bsps/i386/pc386/console/i386-stub.c b/bsps/i386/pc386/console/i386-stub.c
index 1eff100e9e..4b237e0a34 100644
--- a/bsps/i386/pc386/console/i386-stub.c
+++ b/bsps/i386/pc386/console/i386-stub.c
@@ -502,7 +502,7 @@ getpacket (char *buffer)
       count = 0;
 
       /* now, read until a # or end of buffer is found */
-      while (count < BUFMAX)
+      while (count < (BUFMAX - 1))
 	{
 	  ch = getDebugChar () & 0x7f;
 	  if (ch == '#')
diff --git a/bsps/i386/pc386/console/outch.c b/bsps/i386/pc386/console/outch.c
index 90ffedf250..83dbcdbcdf 100644
--- a/bsps/i386/pc386/console/outch.c
+++ b/bsps/i386/pc386/console/outch.c
@@ -283,7 +283,13 @@ static int escaped = 0;
 void
 _IBMPC_initVideo(void)
 {
-    unsigned char* pt = (unsigned char*) (VIDEO_MODE_ADDR);
+    /*
+     * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578#c16
+     */
+    unsigned char* volatile pt = (unsigned char*) (VIDEO_MODE_ADDR);
+    unsigned short* volatile crt_base = (unsigned short*) DISPLAY_CRT_BASE_IO_ADDR;
+    uint8_t* volatile nb_max_row = (uint8_t*) NB_MAX_ROW_ADDR;
+    uint16_t* volatile nb_max_col = (uint16_t*) NB_MAX_COL_ADDR;
 
     if (*pt == VGAMODE7) {
       bitMapBaseAddr = (unsigned short*) V_MONO;
@@ -291,9 +297,9 @@ _IBMPC_initVideo(void)
     else {
       bitMapBaseAddr = (unsigned short*) V_COLOR;
     }
-    ioCrtBaseAddr = *(unsigned short*) DISPLAY_CRT_BASE_IO_ADDR;
-    maxCol  = * (unsigned short*) NB_MAX_COL_ADDR;
-    maxRow  = * (unsigned char*)  NB_MAX_ROW_ADDR;
+    ioCrtBaseAddr = *crt_base;
+    maxCol  = *nb_max_col;
+    maxRow  = *nb_max_row;
     column  = 0;
     row     = 0;
     attribute = ((BLACK << 4) | WHITE)<<8;
diff --git a/bsps/i386/pc386/console/rtd316.c b/bsps/i386/pc386/console/rtd316.c
index 1669c633b7..193c0249ae 100644
--- a/bsps/i386/pc386/console/rtd316.c
+++ b/bsps/i386/pc386/console/rtd316.c
@@ -49,7 +49,7 @@
 
 #define RTD_CLOCK_RATE  (460800 * 32)
 
-uint8_t rtd316_com_get_register(uint32_t addr, uint8_t reg)
+uint8_t rtd316_com_get_register(uintptr_t addr, uint8_t reg)
 {
   register uint8_t val = 0;
 
@@ -60,7 +60,7 @@ uint8_t rtd316_com_get_register(uint32_t addr, uint8_t reg)
   return val;
 }
 
-void rtd316_com_set_register(uint32_t addr,uint8_t reg, uint8_t val)
+void rtd316_com_set_register(uintptr_t addr, uint8_t reg, uint8_t val)
 {
   outport_byte( addr, reg );
   /* It appears the no delay is needed between the accesses. */
diff --git a/bsps/i386/pc386/console/tty_drv.c b/bsps/i386/pc386/console/tty_drv.c
index 121820061a..dcec080b54 100644
--- a/bsps/i386/pc386/console/tty_drv.c
+++ b/bsps/i386/pc386/console/tty_drv.c
@@ -264,8 +264,8 @@ conSetAttr(int port, int minor, const struct termios *t)
     stopbits = 0;
   }
 
-  printk("Setting attributes, port=%X, baud=%" PRId32 ", linemode = 0x%02" PRIx32 "\n",
-         port, baud, databits | parity | stopbits );
+  printk("Setting attributes, port=%X, baud=%d, linemode = 0x%02x\n",
+         port, (int) baud, (int) (databits | parity | stopbits) );
   BSP_uart_set_attributes(port, baud, databits, parity, stopbits);
   return 0;
 }
diff --git a/bsps/i386/pc386/console/uart_bus_pci.c b/bsps/i386/pc386/console/uart_bus_pci.c
index 2ad8323f05..763d90d5b8 100644
--- a/bsps/i386/pc386/console/uart_bus_pci.c
+++ b/bsps/i386/pc386/console/uart_bus_pci.c
@@ -260,7 +260,7 @@ typedef struct {
 
 #define UART_PCI_IO (0)
 
-static uint8_t pci_ns16550_mem_get_register(uint32_t addr, uint8_t i)
+static uint8_t pci_ns16550_mem_get_register(uintptr_t addr, uint8_t i)
 {
   uint8_t          val = 0;
   volatile uint32_t *reg = (volatile uint32_t *)(addr + (i*4));
@@ -270,7 +270,7 @@ static uint8_t pci_ns16550_mem_get_register(uint32_t addr, uint8_t i)
   return val;
 }
 
-static void pci_ns16550_mem_set_register(uint32_t addr, uint8_t i, uint8_t val)
+static void pci_ns16550_mem_set_register(uintptr_t addr, uint8_t i, uint8_t val)
 {
   volatile uint32_t *reg = (volatile uint32_t *)(addr + (i*4));
   if (UART_PCI_IO)
@@ -281,7 +281,7 @@ static void pci_ns16550_mem_set_register(uint32_t addr, uint8_t i, uint8_t val)
 /*
  *  IO Register Access Routines
  */
-static uint8_t pci_ns16550_io_get_register(uint32_t addr, uint8_t i)
+static uint8_t pci_ns16550_io_get_register(uintptr_t addr, uint8_t i)
 {
   uint8_t val = rtems_inb(addr + i);
   if (UART_PCI_IO)
@@ -289,7 +289,7 @@ static uint8_t pci_ns16550_io_get_register(uint32_t addr, uint8_t i)
   return val;
 }
 
-static void pci_ns16550_io_set_register(uint32_t addr, uint8_t i, uint8_t val)
+static void pci_ns16550_io_set_register(uintptr_t addr, uint8_t i, uint8_t val)
 {
   if (UART_PCI_IO)
     printk( "WR(%p <- 0x%02x) ", (void*) addr + i, val );
@@ -452,11 +452,11 @@ void pci_uart_probe(void)
 	port_p->ulIntVector   = conf[b].irq;
 
 
-        printk(
-          "%s:%d:%s,%s:0x%lx%s%s,irq:%d,clk:%lu\n", /*  */
+	printk(
+	  "%s:%d:%s,%s:0x%lx%s%s,irq:%d,clk:%lu\n", /*  */
 	  name, b, conf[b].desc,
-	  io ? "io" : "mem", base, locatable, prefectable,
-	  conf[b].irq, conf[b].clock
+	  io ? "io" : "mem", (uintptr_t) base, locatable, prefectable,
+	  conf[b].irq, (uintptr_t) conf[b].clock
         );
 
 
diff --git a/bsps/i386/pc386/console/vgacons.c b/bsps/i386/pc386/console/vgacons.c
index 9aa1ed4fb1..a3b326d8e1 100644
--- a/bsps/i386/pc386/console/vgacons.c
+++ b/bsps/i386/pc386/console/vgacons.c
@@ -170,8 +170,12 @@ bool vgacons_probe(
   rtems_status_code status;
   static bool firstTime = true;
 
-  if ((*(unsigned char*) NB_MAX_ROW_ADDR == 0) &&
-      (*(unsigned short*)NB_MAX_COL_ADDR == 0)) {
+  /*
+   * See https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578#c16
+   */
+  const uint8_t* volatile nb_max_row = (const uint8_t*) NB_MAX_ROW_ADDR;
+  const uint16_t* volatile nb_max_col = (const uint16_t*) NB_MAX_COL_ADDR;
+  if ((*nb_max_row == 0) && (*nb_max_col == 0)) {
     return false;
   }
 
diff --git a/bsps/i386/pc386/include/bsp/rtd316.h b/bsps/i386/pc386/include/bsp/rtd316.h
index 9a2bb62fd6..0bc99d24e8 100644
--- a/bsps/i386/pc386/include/bsp/rtd316.h
+++ b/bsps/i386/pc386/include/bsp/rtd316.h
@@ -76,7 +76,7 @@ rtems_device_driver rtd316_initialize(
  *
  *  @return This method returns the value of the register.
  */
-uint8_t rtd316_com_get_register(uint32_t addr, uint8_t reg);
+uint8_t rtd316_com_get_register(uintptr_t addr, uint8_t reg);
 
 /**
  *  @brief RTD316 Set Register Helper
@@ -86,7 +86,7 @@ uint8_t rtd316_com_get_register(uint32_t addr, uint8_t reg);
  *  @param[in] addr is the base address
  *  @param[in] reg is the register number
  */
-void rtd316_com_set_register(uint32_t addr,uint8_t reg, uint8_t val);
+void rtd316_com_set_register(uintptr_t addr,uint8_t reg, uint8_t val);
 
 #ifdef __cplusplus
 }
diff --git a/bsps/i386/pc386/include/tm27.h b/bsps/i386/pc386/include/tm27.h
index 229590b6bc..6286169ca5 100644
--- a/bsps/i386/pc386/include/tm27.h
+++ b/bsps/i386/pc386/include/tm27.h
@@ -27,7 +27,7 @@
 
 #define MUST_WAIT_FOR_INTERRUPT 0
 
-#define Install_tm27_vector(handler)
+#define Install_tm27_vector(handler) (void) handler
 
 #define Cause_tm27_intr() __asm__ volatile("int $0x90" : :);
 
diff --git a/bsps/i386/pc386/start/realmode_int.c b/bsps/i386/pc386/start/realmode_int.c
index a6db9efe1b..16412b1c88 100644
--- a/bsps/i386/pc386/start/realmode_int.c
+++ b/bsps/i386/pc386/start/realmode_int.c
@@ -89,7 +89,16 @@ typedef struct {
  *
  * @note Struct members not necessarily used in C. This serves also as
  *       layout of memory and it is used within inline assembler.
+ *
+ * @note GCC complains that access to packed data may not be aligned and
+ *       fair enough. The warning is:
+ *
+ *   warning: taking address of packed member of 'struct <anonymous>' may
+ *   result in an unaligned pointer value [-Waddress-of-packed-member]
+ *
+ * Disable the warning.
  */
+#pragma GCC diagnostic ignored "-Waddress-of-packed-member"
 typedef struct {
     /** spot for backup protected mode interrupt descriptor table register */
     uint16_t idtr_lim_bkp;
diff --git a/cpukit/score/cpu/i386/include/rtems/score/cpu.h b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
index 6aa97d309e..76ee238b6e 100644
--- a/cpukit/score/cpu/i386/include/rtems/score/cpu.h
+++ b/cpukit/score/cpu/i386/include/rtems/score/cpu.h
@@ -2,9 +2,9 @@
 
 /**
  * @file
- * 
+ *
  * @brief Intel I386 CPU Dependent Source
- * 
+ *
  * This include file contains information pertaining to the Intel
  * i386 processor.
  */
@@ -51,7 +51,7 @@ extern "C" {
 #include <rtems/score/paravirt.h>
 #endif
 #include <rtems/score/i386.h>
-    
+
 /**
  * @defgroup RTEMSScoreCPUi386 i386 Specific Support
  *
@@ -163,7 +163,7 @@ typedef struct {
 }   Context_Control;
 
 #define _CPU_Context_Get_SP( _context ) \
-  (_context)->esp
+  (uintptr_t) (_context)->esp
 
 #ifdef RTEMS_SMP
   static inline bool _CPU_Context_Get_is_executing(
-- 
2.37.1



More information about the devel mailing list