[igt-dev] [PATCH i-g-t] lib/intel_reg: fix shift undefined behaviour

Simon Ser simon.ser at intel.com
Thu Mar 21 10:26:56 UTC 2019


1<<31 (same as 2<<30) is undefined behaviour in C. When compiling with
GCC and UBSan, it gives this error:

../tools/intel_reg_decode.c: In function ‘ivb_debug_port’:
../tools/intel_reg_decode.c:398:3: error: case label does not reduce to an integer constant
   case PORT_DBG_DRRS_HW_STATE_HIGH:
   ^~~~

This happens because 1<<31 isn't representable as a signed int. Instead,
use am unsigned int.

Signed-off-by: Simon Ser <simon.ser at intel.com>
---
 lib/intel_reg.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/lib/intel_reg.h b/lib/intel_reg.h
index f85fb742..069440cb 100644
--- a/lib/intel_reg.h
+++ b/lib/intel_reg.h
@@ -3383,7 +3383,7 @@ typedef enum {
 #define PORT_DBG                    0x42308
 #define  PORT_DBG_DRRS_HW_STATE_OFF     (0<<30)
 #define  PORT_DBG_DRRS_HW_STATE_LOW     (1<<30)
-#define  PORT_DBG_DRRS_HW_STATE_HIGH    (2<<30)
+#define  PORT_DBG_DRRS_HW_STATE_HIGH    (2U<<30)
 
 /* RC6 residence counters
  */
-- 
2.21.0

---------------------------------------------------------------------
Intel Finland Oy
Registered Address: PL 281, 00181 Helsinki 
Business Identity Code: 0357606 - 4 
Domiciled in Helsinki 

This e-mail and any attachments may contain confidential material for
the sole use of the intended recipient(s). Any review or distribution
by others is strictly prohibited. If you are not the intended
recipient, please contact the sender and delete all copies.


More information about the igt-dev mailing list