On 17/03/2025 8:43 am, Jan Beulich wrote:
> On 14.03.2025 18:59, Andrew Cooper wrote:
>> This is an unnecessary indirection.
>>
>> Signed-off-by: Andrew Cooper <andrew.coop...@citrix.com>
> Reviewed-by: Jan Beulich <jbeul...@suse.com>

So, this is the patch causing build chaos.  I've reproduced locally,
even though I still can't explain what is going on.

One example breakage is:

> In file included from drivers/passthrough/amd/iommu_acpi.c:20:
> In file included from ./include/xen/acpi.h:41:
> In file included from ./include/xen/list.h:10:
> ./include/xen/bug.h:107:5: error: invalid operand for inline asm
> constraint 'i'
>     BUG_FRAME(BUGFRAME_run_fn, 0, fn, 0, NULL);
>     ^
> ./include/xen/bug.h:94:20: note: expanded from macro 'BUG_FRAME'
>     asm volatile (
> _ASM_BUGFRAME_TEXT(second_frame)                          \
>                    ^
> ./include/xen/bug.h:68:5: note: expanded from macro '_ASM_BUGFRAME_TEXT'
>    
> ".Lbug%=:"BUG_INSTR"\n"                                                       
>  
> \
>     ^
> 1 error generated.
> make[4]: *** [Rules.mk:249: drivers/passthrough/amd/iommu_acpi.o] Error 1

although most translation units fail in the same way.

This is run_in_exception_handler(), but there's nothing obviously wrong
in the preprocessed source.  The parameters are respectively:

: [bf_type] "i" (0),
  [bf_ptr] "i" (fn),
  [bf_msg] "i" (((void*)0)),
  [bf_line_lo] "i" (((0) & ((1 << (31 - 24)) - 1)) << 24),
  [bf_line_hi] "i" (((0) >> (31 - 24)) << 24)

which is as expected.


There is one difference I have noticed which is clearly relevant but I'm
not sure how.

__section() isn't exactly __attribute__((__section__(s))), because (just
out of scope of the patch), __clang__ adds a __used attribute to
__section().

The logic doing this is ahead of __used being defined, and the TUs which
break are -DINIT_SECTIONS_ONLY which includes init.h prior to __used
having being defined.

And yet, there's no un-expanded __used in the preprocessed source.

Also, this only goes wrong in the Shim build, not in the main build.

Also, building the object file in isolation seems to work fine, although
this seems to remove -DINIT_SECTIONS_ONLY from the cmdline which is
almost certainly masking what's going wrong.

~Andrew

Reply via email to