On Tue, May 26, 2026 at 11:19 PM Iain Sandoe <[email protected]> wrote: > > HJ, > > Bootstrap on 32b Darwin (and 64b Darwin with 32b multilib) is still broken > after > more than three weeks, > > It is reasonable to have a temporary break if there is a trivial typo or > other fix > that can be applied in a timely manner. > > However, in this case, it seems your initial design needed some amendment, > and that means a more complex fix is needed - which needs additional review. > > Today I now faced two concurrent bootstrap breaks on some platform versions > - this is just consuming time in a non-constructive manner.
It only shows that maintainers pay no attention to Darwin. In the meantime, you can submit a very simple libssp patch to fix Darwin build by changing __stack_chk_guard to unsigned long for Darwin. > Please revert your changes until you have an agreed design for this facility. > thanks > Iain > > > On 16 May 2026, at 00:52, H.J. Lu <[email protected]> wrote: > > > > On Mon, May 11, 2026 at 4:49 PM Iain Sandoe <[email protected]> wrote: > >> > >> Hi HJ > >> > >>> On 8 May 2026, at 11:05, H.J. Lu <[email protected]> wrote: > >>> > >>> default_stack_protect_guard calls > >>> > >>> lang_hooks.types.type_for_mode (ptr_mode, 1); > >>> > >>> to get an integer type for __stack_chk_guard which is declared as a > >>> global symbol of type uintptr_t. For 32-bit systems, uintptr_t may > >>> be either unsigned int or unsigned long int. On 32-bit Darwin, we get > >> > >> FWIW, I suspect that, at the very least, Windows does the same. > >> > >>> $ cat /tmp/x.c > >>> __UINTPTR_TYPE__ __stack_chk_guard = 0x1000; > >>> $ ./xgcc -B./ -S /tmp/x.c -m32 > >>> /tmp/x.c:1:18: error: conflicting types for ‘__stack_chk_guard’; have > >>> ‘long unsigned int’ > >>> 1 | __UINTPTR_TYPE__ __stack_chk_guard = 0x1000; > >>> | ^~~~~~~~~~~~~~~~~ > >>> cc1: note: previous declaration of ‘__stack_chk_guard’ with type > >>> ‘unsigned int’ > >>> $ > >>> > >>> since lang_hooks.types.type_for_mode returns unsigned int while Darwin's > >>> uintptr_t is unsigned long int. > >>> > >>> Add LANG_HOOKS_TYPE_FOR_MODE_KIND to specify signed or unsigned integer > >>> type for pointer and update default_stack_protect_guard to call > >>> > >>> lang_hooks.types.type_for_mode_kind > >>> (ptr_mode, 1, KIND_IS_INTEGER_FOR_POINTER); > >>> > >>> to get unsigned integer type for pointer. > >> > >> OK. So this does fix bootstrap on Darwin platform versions with 32b > >> mulitilibs (and > >> 32b hosts). However there is still work to do on the testcases > >> (ABI-related differences > >> at least). > >> > >> It seems rather excessive to need to add two target hooks for this small > >> feature. > >> > >> We have C++ - could you not add a defaulted parameter to the original hook > >> that > >> would allow for querying a specific result for the mode type without > >> needing to > >> churn the code for every other use? > > > > The default function parameter doesn't work on function pointers: > > > > [hjl@gnu-tgl-3 tmp]$ cat x.cc > > void (*foo) (int = 0); > > [hjl@gnu-tgl-3 tmp]$ gcc -S x.cc > > x.cc:1:18: error: default arguments are only permitted for function > > parameters [-fpermissive] > > 1 | void (*foo) (int = 0); > > | ^ > > [hjl@gnu-tgl-3 tmp]$ > > > >> thanks > >> Iain > >> > >>> > >>> gcc/ > >>> > >>> PR c/125226 > >>> * langhooks-def.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New. > >>> (LANG_HOOKS_FOR_TYPES_INITIALIZER): Add > >>> LANG_HOOKS_TYPE_FOR_MODE_KIND. > >>> * langhooks.h (type_kind): New enum. > >>> (lang_hooks_for_types): Add type_for_mode_kind. > >>> * targhooks.c (default_stack_protect_guard): Call > >>> lang_hooks.types.type_for_mode_kind if not NULL. > >>> > >>> gcc/c-family/ > >>> > >>> PR c/125226 > >>> * c-common.cc (c_common_type_for_mode): Renamed to ... > >>> (c_common_type_for_mode_kind): This. Add an argument for type > >>> kind. Return intptr_type_node/uintptr_type_node when asking > >>> for integer type for pointers. > >>> (c_common_type_for_mode): New. Call c_common_type_for_mode_kind > >>> with KIND_IS_UNKNOWN. > >>> * c-common.h: Include "langhooks.h". > >>> (c_common_type_for_mode_kind): New prototype. > >>> * c-objc-common.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New. > >>> > >>> gcc/cp/ > >>> > >>> PR c/125226 > >>> * cp-objcp-common.h (LANG_HOOKS_TYPE_FOR_MODE_KIND): New. > >> > >> > >>> > >>> > >>> -- > >>> H.J. > >>> <0001-c-c-Get-unsigned-integer-type-for-pointer.patch> > >> > > > > > > -- > > H.J. > > -- H.J.
