NetBSD-Bugs archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

bin/59989: Compiler abort when using -O0 optimization on building



>Number:         59989
>Category:       bin
>Synopsis:       Compiler abort when using -O0 optimization on building
>Confidential:   no
>Severity:       non-critical
>Priority:       medium
>Responsible:    bin-bug-people
>State:          open
>Class:          sw-bug
>Submitter-Id:   net
>Arrival-Date:   Mon Feb 09 10:30:00 +0000 2026
>Originator:     Georg Kühberger
>Release:        10.1
>Organization:
Robert Bosch 
>Environment:
Linux 6.14.0-37-generic #37~24.04.1-Ubuntu SMP PREEMPT_DYNAMIC Thu Nov 20 10:25:38 UTC 2 x86_64 x86_64 x86_64 GNU/Linux
>Description:
When trying to build NetBSD 10.1 without optimization -O0 (for debugging purpose). An abort is happening in intel_dp.c.
In file included from /home/scripts/netbsd/usr/src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c:30:
/home/scripts/netbsd/usr/src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c: In function 'intel_dp_aux_wait_done':
/home/scripts/netbsd/usr/src/sys/external/bsd/common/include/linux/build_bug.h:36:2: error: negative width in bit-field '__ctassert62'
   36 |  CTASSERT(__builtin_choose_expr(__builtin_constant_p(EXPR), !(EXPR), 1))
      |  ^~~~~~~~
/home/scripts/netbsd/usr/src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:435:2: note: in expansion of macro 'BUILD_BUG_ON'
  435 |  BUILD_BUG_ON(!__builtin_constant_p(US)); \
      |  ^~~~~~~~~~~~
/home/scripts/netbsd/usr/src/sys/external/bsd/drm2/dist/drm/i915/i915_utils.h:440:35: note: in expansion of macro 'wait_for_atomic_us'
  440 | #define wait_for_atomic(COND, MS) wait_for_atomic_us((COND), (MS) * 1000)
      |                                   ^~~~~~~~~~~~~~~~~~
/home/scripts/netbsd/usr/src/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c:1208:10: note: in expansion of macro 'wait_for_atomic'
 1208 |   done = wait_for_atomic(C, timeout_ms) == 0;
      |          ^~~~~~~~~~~~~~~
This is due to to the definition of timeout_ms as const unsigned int which is not optimized to a constant expression like in default build option.


>How-To-Repeat:
Build netbsd 10.1 with the following command:

 ./build.sh -m amd64 -U -r   -V "CFLAGS=-O0"  -O ../obj.chimaera7.amd64/ -T ../obj.chimaera7.amd64/tooldir -j8 distribution
>Fix:
Patch that fixes the Problem:

From: "Kuehberger Georg (XC-HWP/EEB4)" <Georg.Kuehberger%at.bosch.com@localhost>
Date: Wed, 10 Dec 2025 17:03:53 +0100
Subject:[PATCH] Add -O0  support

---
 .../bsd/drm2/dist/drm/i915/display/intel_dp.c         | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c b/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c
index f3a8b7aa1648..72698b08aaf5 100644
--- a/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c
+++ b/sys/external/bsd/drm2/dist/drm/i915/display/intel_dp.c
@@ -1184,10 +1184,10 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp)
 {
 	struct drm_i915_private *i915 = dp_to_i915(intel_dp);
 	i915_reg_t ch_ctl = intel_dp->aux_ch_ctl_reg(intel_dp);
-	const unsigned int timeout_ms = 10;
 	u32 status;
 	bool done;
 
+#define TIMEOUT_MS 10
 #define C (((status = intel_uncore_read_notrace(&i915->uncore, ch_ctl)) & DP_AUX_CH_CTL_SEND_BUSY) == 0)
 #ifdef __NetBSD__
 	if (!cold) {
@@ -1195,7 +1195,7 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp)
 		spin_lock(&i915->gmbus_wait_lock);
 		DRM_SPIN_TIMED_WAIT_NOINTR_UNTIL(ret,
 		    &i915->gmbus_wait_queue, &i915->gmbus_wait_lock,
-		    msecs_to_jiffies_timeout(timeout_ms),
+		    msecs_to_jiffies_timeout(TIMEOUT_MS),
 		    C);
 		/*
 		 * ret<0 on error (-ERESTARTSYS, interrupt); ret=0 on
@@ -1205,11 +1205,11 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp)
 		done = (ret > 0);
 		spin_unlock(&i915->gmbus_wait_lock);
 	} else {
-		done = wait_for_atomic(C, timeout_ms) == 0;
+		done = wait_for_atomic(C, TIMEOUT_MS) == 0;
 	}
 #else
 	done = wait_event_timeout(i915->gmbus_wait_queue, C,
-				  msecs_to_jiffies_timeout(timeout_ms));
+				  msecs_to_jiffies_timeout(TIMEOUT_MS));
 
 #endif
 
@@ -1218,8 +1218,9 @@ intel_dp_aux_wait_done(struct intel_dp *intel_dp)
 
 	if (!done)
 		DRM_ERROR("%s did not complete or timeout within %ums (status 0x%08x)\n",
-			  intel_dp->aux.name, timeout_ms, status);
+			  intel_dp->aux.name, TIMEOUT_MS, status);
 #undef C
+#undef TIMEOUT_MS
 
 	return status;
 }
-- 
2.43.0



Home | Main Index | Thread Index | Old Index