nathanchance wrote:

> We should disable the warning if we're preprocessing asm, which should mostly 
> solve the issue with warnings.

Yes although the warnings from `arch/x86/include/asm/nospec-branch.h` do show 
up from `.c` files so that would only partially fix it.

```
In file included from drivers/gpio/gpio-brcmstb.c:5:
In file included from include/linux/gpio/driver.h:8:
In file included from include/linux/irqchip/chained_irq.h:10:
In file included from include/linux/irq.h:14:
In file included from include/linux/spinlock.h:59:
In file included from include/linux/irqflags.h:18:
In file included from arch/x86/include/asm/irqflags.h:9:
arch/x86/include/asm/nospec-branch.h:80:7: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
   80 |         movq    $-1, PER_CPU_VAR(__x86_call_depth);
      |                 ^
arch/x86/include/asm/nospec-branch.h:84:6: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
   84 |         bts     $63, %rax;                                      \
      |                 ^
arch/x86/include/asm/nospec-branch.h:88:7: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
   88 |         movb    $0xfc, %al;                                     \
      |                 ^
arch/x86/include/asm/nospec-branch.h:89:6: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
   89 |         shl     $56, %rax;                                      \
      |                 ^
arch/x86/include/asm/nospec-branch.h:94:7: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
   94 |         sarq    $5, PER_CPU_VAR(__x86_call_depth);              \
      |                 ^
arch/x86/include/asm/nospec-branch.h:142:6: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
  142 |         mov     $(nr/2), reg;                           \
      |                 ^
arch/x86/include/asm/nospec-branch.h:146:6: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
  146 |         add     $(BITS_PER_LONG/8) * 2, %_ASM_SP;       \
      |                 ^
arch/x86/include/asm/nospec-branch.h:176:6: warning: '$' in identifier; did you 
mean to enable '-fdollars-in-identifiers'? [-Wdollar-in-identifier]
  176 |         add     $(BITS_PER_LONG/8), %_ASM_SP;           \
      |                 ^
8 warnings generated.
```

> For the Linux kernel, does anything break other than the warnings?

Does not look like it (aside from one file that does not respect the global 
`-Werror` configuration and includes it regardless).

Since I already tested it, I figured I might as well report it anyways. If I 
add `-fdollars-in-identifiers` to `CLANG_FLAGS`, several things break because 
it looks like the preprocessor no longer properly expands certain macros that 
were used to define assembly immediate:

```
arch/x86/platform/pvh/head.S:73:11: error: unexpected token in argument list
 subl $rva(1b), %ebp
          ^
make[6]: *** [scripts/Makefile.build:335: arch/x86/platform/pvh/head.o] Error 1
make[6]: Target 'arch/x86/platform/pvh/' not remade because of errors.
make[5]: *** [scripts/Makefile.build:461: arch/x86/platform/pvh] Error 2

ld.lld: error: undefined symbol: X86_CR0_PE
>>> referenced by wakeup_asm.S:53 (arch/x86/realmode/rm/wakeup_asm.S:53)
>>>               arch/x86/realmode/rm/wakeup_asm.o:(wakeup_start)

ld.lld: error: undefined symbol: WAKEUP_HEADER_SIGNATURE
>>> referenced by wakeup_asm.S:84 (arch/x86/realmode/rm/wakeup_asm.S:84)
>>>               arch/x86/realmode/rm/wakeup_asm.o:(wakeup_start)

ld.lld: error: undefined symbol: REALMODE_END_SIGNATURE
>>> referenced by wakeup_asm.S:89 (arch/x86/realmode/rm/wakeup_asm.S:89)
>>>               arch/x86/realmode/rm/wakeup_asm.o:(wakeup_start)

ld.lld: error: undefined symbol: WAKEUP_BEHAVIOR_RESTORE_MISC_ENABLE
>>> referenced by wakeup_asm.S:98 (arch/x86/realmode/rm/wakeup_asm.S:98)
>>>               arch/x86/realmode/rm/wakeup_asm.o:(wakeup_start)

ld.lld: error: undefined symbol: MSR_IA32_MISC_ENABLE
>>> referenced by wakeup_asm.S:103 (arch/x86/realmode/rm/wakeup_asm.S:103)
>>>               arch/x86/realmode/rm/wakeup_asm.o:(wakeup_start)
>>> referenced by verify_cpu.S:97 (arch/x86/include/../kernel/verify_cpu.S:97)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)

ld.lld: error: undefined symbol: __KERNEL_DS
>>> referenced by trampoline_64.S:89 (arch/x86/realmode/rm/trampoline_64.S:89)
>>>               arch/x86/realmode/rm/trampoline_64.o:(trampoline_start)
>>> referenced by reboot.S:27 (arch/x86/realmode/rm/reboot.S:27)
>>>               arch/x86/realmode/rm/reboot.o:(machine_real_restart_asm)
>>> referenced by trampoline_64.S:199 (arch/x86/realmode/rm/trampoline_64.S:199)
>>>               arch/x86/realmode/rm/trampoline_64.o:(pa_trampoline_compat)
>>> referenced 1 more times

ld.lld: error: undefined symbol: __KERNEL32_CS
>>> referenced by trampoline_64.S:96 (arch/x86/realmode/rm/trampoline_64.S:96)
>>>               arch/x86/realmode/rm/trampoline_64.o:(trampoline_start)
>>> referenced by reboot.S:35 (arch/x86/realmode/rm/reboot.S:35)
>>>               arch/x86/realmode/rm/reboot.o:(machine_real_restart_asm)
>>> referenced by trampoline_64.S:203 (arch/x86/realmode/rm/trampoline_64.S:203)
>>>               arch/x86/realmode/rm/trampoline_64.o:(pa_trampoline_compat)

ld.lld: error: undefined symbol: REQUIRED_MASK0
>>> referenced by verify_cpu.S:106 (arch/x86/include/../kernel/verify_cpu.S:106)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)
>>> referenced by verify_cpu.S:107 (arch/x86/include/../kernel/verify_cpu.S:107)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)

ld.lld: error: undefined symbol: REQUIRED_MASK1
>>> referenced by verify_cpu.S:117 (arch/x86/include/../kernel/verify_cpu.S:117)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)
>>> referenced by verify_cpu.S:118 (arch/x86/include/../kernel/verify_cpu.S:118)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)

ld.lld: error: undefined symbol: SSE_MASK
>>> referenced by verify_cpu.S:124 (arch/x86/include/../kernel/verify_cpu.S:124)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)
>>> referenced by verify_cpu.S:125 (arch/x86/include/../kernel/verify_cpu.S:125)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)

ld.lld: error: undefined symbol: MSR_K7_HWCR
>>> referenced by verify_cpu.S:129 (arch/x86/include/../kernel/verify_cpu.S:129)
>>>               arch/x86/realmode/rm/trampoline_64.o:(verify_cpu)

ld.lld: error: undefined symbol: TH_FLAGS_SME_ACTIVE_BIT
>>> referenced by trampoline_64.S:142 (arch/x86/realmode/rm/trampoline_64.S:142)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)

ld.lld: error: undefined symbol: MSR_AMD64_SYSCFG
>>> referenced by trampoline_64.S:144 (arch/x86/realmode/rm/trampoline_64.S:144)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)

ld.lld: error: undefined symbol: MSR_AMD64_SYSCFG_MEM_ENCRYPT_BIT
>>> referenced by trampoline_64.S:146 (arch/x86/realmode/rm/trampoline_64.S:146)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)

ld.lld: error: undefined symbol: MSR_EFER
>>> referenced by reboot.S:40 (arch/x86/realmode/rm/reboot.S:40)
>>>               arch/x86/realmode/rm/reboot.o:(machine_real_restart_asm)
>>> referenced by trampoline_64.S:164 (arch/x86/realmode/rm/trampoline_64.S:164)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)

ld.lld: error: undefined symbol: CR0_STATE
>>> referenced by trampoline_64.S:181 (arch/x86/realmode/rm/trampoline_64.S:181)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)

ld.lld: error: undefined symbol: __KERNEL_CS
>>> referenced by trampoline_64.S:190 (arch/x86/realmode/rm/trampoline_64.S:190)
>>>               arch/x86/realmode/rm/trampoline_64.o:(startup_32)
>>> referenced by trampoline_64.S:246 (arch/x86/realmode/rm/trampoline_64.S:246)
>>>               arch/x86/realmode/rm/trampoline_64.o:(trampoline_start64)

ld.lld: error: undefined symbol: X86_CR4_LA57
>>> referenced by trampoline_64.S:228 (arch/x86/realmode/rm/trampoline_64.S:228)
>>>               arch/x86/realmode/rm/trampoline_64.o:(trampoline_start64)
make[7]: *** [arch/x86/realmode/rm/Makefile:49: 
arch/x86/realmode/rm/realmode.elf] Error 1
make[7]: Target 'arch/x86/realmode/rm/realmode.bin' not remade because of 
errors.
make[6]: *** [arch/x86/realmode/Makefile:22: arch/x86/realmode/rm/realmode.bin] 
Error 2
make[6]: Target 'arch/x86/realmode/' not remade because of errors.
make[5]: *** [scripts/Makefile.build:461: arch/x86/realmode] Error 2

/tmp/entry_64_compat-eb247c.s:956:2: error: expected relocatable expression
 testl $X86_EFLAGS_NT|((1) << (18))|((1) << (8)), 144(%rsp)
 ^
make[6]: *** [scripts/Makefile.build:335: arch/x86/entry/entry_64_compat.o] 
Error 1

ld.lld: error: undefined symbol: EENTER
>>> referenced by arch/x86/entry/vdso/vsgx.o:(__vdso_sgx_enter_enclave)

ld.lld: error: undefined symbol: ERESUME
>>> referenced by arch/x86/entry/vdso/vsgx.o:(__vdso_sgx_enter_enclave)

ld.lld: error: undefined symbol: SGX_ENCLAVE_RUN_RESERVED_START
>>> referenced by arch/x86/entry/vdso/vsgx.o:(__vdso_sgx_enter_enclave)

ld.lld: error: undefined symbol: SGX_ENCLAVE_RUN_RESERVED_END
>>> referenced by arch/x86/entry/vdso/vsgx.o:(__vdso_sgx_enter_enclave)

ld.lld: error: undefined symbol: EEXIT
>>> referenced by arch/x86/entry/vdso/vsgx.o:(__vdso_sgx_enter_enclave)
make[7]: *** [arch/x86/entry/vdso/Makefile:39: 
arch/x86/entry/vdso/vdso64.so.dbg] Error 1

ld.lld: error: undefined symbol: __NR_sigreturn
>>> referenced by arch/x86/entry/vdso/vdso32/sigreturn.o:(__kernel_sigreturn)

ld.lld: error: undefined symbol: __NR_rt_sigreturn
>>> referenced by arch/x86/entry/vdso/vdso32/sigreturn.o:(__kernel_rt_sigreturn)

drivers/firmware/efi/libstub/x86-mixed.S:162:17: error: unexpected token in 
argument list
 movl $GDT_ENTRY(((0x0010 | 0x0080 | 0x0001 | 0x0002 | 0x0008) | 0x8000 | 
0x2000), 0, 0xfffff) & 0xffffffff, (%edi,%ecx)
                ^
drivers/firmware/efi/libstub/x86-mixed.S:163:17: error: unexpected token in 
argument list
 movl $GDT_ENTRY(((0x0010 | 0x0080 | 0x0001 | 0x0002 | 0x0008) | 0x8000 | 
0x2000), 0, 0xfffff) >> 32, 4(%edi,%ecx)
                ^
make[8]: *** [scripts/Makefile.build:335: 
drivers/firmware/efi/libstub/x86-mixed.o] Error 1
```


https://github.com/llvm/llvm-project/pull/135407
_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to