<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/129437>129437</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            [clang-17] [BPF] Crash to compile bpf code with .percpu section
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            new issue
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          Asphaltt
      </td>
    </tr>
</table>

<pre>
    I'm going to implement a new feature to support global percpu data in bpf. But it crashed to compile the following bpf code with clang-17:

```c
// SPDX-License-Identifier: GPL-2.0
#include <linux/bpf.h>
#include <bpf/bpf_helpers.h>

int data SEC(".percpu") = -1;
char run SEC(".percpu") = 0;
int nums[7] SEC(".percpu");
struct {
        char set;
        int i;
        int nums[7];
} struct_data SEC(".percpu") = {
        .set = 0,
        .i = -1,
};

SEC("raw_tp/task_rename")
int update_percpu_data(struct __sk_buff *skb)
{
        data = 1;
        run = 1;
        nums[6] = 0xc0de;

        struct_data.i = 1;
        struct_data.set = 1;
        struct_data.nums[6] = 0xc0de;

        return 0;
}

char _license[] SEC("license") = "GPL";
```

Here is the crash log:

```crash
fatal error: error in backend: unable to write nop sequence of 3 bytes
  PLEASE submit a bug report to https://github.com/llvm/llvm-project/issues/ and include the crash backtrace, preprocessed source, and associated run script.
  Stack dump:
  0.    Program arguments: clang-17 -g -Wall -Werror -D__TARGET_ARCH_x86 -mlittle-endian -I/tmp/work/bpf/bpf/tools/testing/selftests/bpf/tools/include -I/tmp/work/bpf/bpf/tools/testing/selftests/bpf -I/tmp/work/bpf/bpf/tools/include/uapi -I/tmp/work/bpf/bpf/tools/testing/selftests/usr/include -std=gnu11 -fno-strict-aliasing -Wno-compare-distinct-pointer-types -idirafter /usr/lib/llvm-17/lib/clang/17/include -idirafter /usr/local/include -idirafter /usr/include/x86_64-linux-gnu -idirafter /usr/include -DENABLE_ATOMICS_TESTS -O2 --target=bpfel -c progs/test_global_percpu_data.c -mcpu=v3 -o /tmp/work/bpf/bpf/tools/testing/selftests/bpf/test_global_percpu_data.bpf.o
 1.     <eof> parser at end of file
  2.    Code generation
  Stack dump without symbol names (ensure you have llvm-symbolizer in your PATH or set the environment var `LLVM_SYMBOLIZER_PATH` to point to it):
    CLNG-BPF [test_progs] test_ksyms.bpf.o
    CLNG-BPF [test_progs] test_ksyms_module.bpf.o
    CLNG-BPF [test_progs] test_ksyms_weak.bpf.o
  0 libLLVM-17.so.1    0x00007fc1d214dbbf llvm::sys::PrintStackTrace(llvm::raw_ostream&, int) + 63
  1 libLLVM-17.so.1    0x00007fc1d214bee9 llvm::sys::RunSignalHandlers() + 89
 2  libLLVM-17.so.1    0x00007fc1d209ce43
  3  libLLVM-17.so.1 0x00007fc1d209cdf2
  4  libLLVM-17.so.1    0x00007fc1d2148720 llvm::sys::Process::Exit(int, bool) + 48
  5  clang-17 0x00005575c8e4452b
  6  libLLVM-17.so.1    0x00007fc1d20aaffc llvm::report_fatal_error(llvm::Twine const&, bool) + 284
  7 libLLVM-17.so.1    0x00007fc1d3747512 llvm::MCAssembler::writeSectionData(llvm::raw_ostream&, llvm::MCSection const*, llvm::MCAsmLayout const&) const + 4658
  8  libLLVM-17.so.1 0x00007fc1d37324b9
  9  libLLVM-17.so.1    0x00007fc1d3730fd4
  10 libLLVM-17.so.1    0x00007fc1d3747eef llvm::MCAssembler::Finish() + 79
  11 libLLVM-17.so.1 0x00007fc1d3[767](https://github.com/kernel-patches/bpf/actions/runs/13483517280/job/37671704896?pr=8543#step:9:769)00a llvm::MCELFStreamer::finishImpl() + 202
  12 libLLVM-17.so.1 0x00007fc1d2a1f876 llvm::AsmPrinter::doFinalization(llvm::Module&) + 6214
 13 libLLVM-17.so.1    0x00007fc1d229d4d1 llvm::FPPassManager::doFinalization(llvm::Module&) + 65
  14 libLLVM-17.so.1 0x00007fc1d2297ca1 llvm::legacy::PassManagerImpl::run(llvm::Module&) + 1249
    CLNG-BPF [test_progs] test_l4lb.bpf.o
  15 libclang-cpp.so.17 0x00007fc1da51e2be clang::EmitBackendOutput(clang::DiagnosticsEngine&, clang::HeaderSearchOptions const&, clang::CodeGenOptions const&, clang::TargetOptions const&, clang::LangOptions const&, llvm::StringRef, llvm::Module*, clang::BackendAction, llvm::IntrusiveRefCntPtr<llvm::vfs::FileSystem>, std::unique_ptr<llvm::raw_pwrite_stream, std::default_delete<llvm::raw_pwrite_stream>>) + 6878
  16 libclang-cpp.so.17 0x00007fc1da89fee2
    CLNG-BPF [test_progs] test_l4lb_noinline.bpf.o
  17 libclang-cpp.so.17 0x00007fc1d9534ec6 clang::ParseAST(clang::Sema&, bool, bool) + 598
  18 libclang-cpp.so.17 0x00007fc1db2916dc clang::FrontendAction::Execute() + 92
  19 libclang-cpp.so.17 0x00007fc1db20efa4 clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) + 708
  20 libclang-cpp.so.17 0x00007fc1db30c8d3 clang::ExecuteCompilerInvocation(clang::CompilerInstance*) + 675
  21 clang-17           0x00005575c8e44126 cc1_main(llvm::ArrayRef<char const*>, char const*, void*) + 2454
  22 clang-17           0x00005575c8e41b94
  23 libclang-cpp.so.17 0x00007fc1daecf372
  24 libLLVM-17.so.1 0x00007fc1d209cdc7 llvm::CrashRecoveryContext::RunSafely(llvm::function_ref<void ()>) + 151
 25 libclang-cpp.so.17 0x00007fc1daeceb07 clang::driver::CC1Command::Execute(llvm::ArrayRef<std::optional<llvm::StringRef>>, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>*, bool*) const + 407
  26 libclang-cpp.so.17 0x00007fc1dae97b8f clang::driver::Compilation::ExecuteCommand(clang::driver::Command const&, clang::driver::Command const*&, bool) const + 879
  27 libclang-cpp.so.17 0x00007fc1dae97def clang::driver::Compilation::ExecuteJobs(clang::driver::JobList const&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&, bool) const + 159
    CLNG-BPF [test_progs] test_l4lb_noinline_dynptr.bpf.o
  28 libclang-cpp.so.17 0x00007fc1daeb3490 clang::driver::Driver::ExecuteCompilation(clang::driver::Compilation&, llvm::SmallVectorImpl<std::pair<int, clang::driver::Command const*>>&) + 352
  29 clang-17           0x00005575c8e414e5 clang_main(int, char**, llvm::ToolContext const&) + 11253
  30 clang-17           0x00005575c8e4ddc5 main + 53
  31 libc.so.6          0x00007fc1d0ee71ca
  32 libc.so.6 0x00007fc1d0ee728b __libc_start_main + 139
  33 clang-17 0x00005575c8e3e505 _start + 37
  clang-17: error: clang frontend command failed with exit code 70 (use -v to see invocation)
  Ubuntu clang version 17.0.6 (9ubuntu1)
  Target: bpfel
  Thread model: posix
  InstalledDir: /usr/bin
    CLNG-BPF [test_progs] test_ldsx_insn.bpf.o
    CLNG-BPF [test_progs] test_legacy_printk.bpf.o
  clang-17: note: diagnostic msg: 
 ********************
  
  PLEASE ATTACH THE FOLLOWING FILES TO THE BUG REPORT:
  Preprocessed source(s) and associated run script(s) are located at:
  clang-17: note: diagnostic msg: /tmp/test_global_percpu_data-5ecaf1.c
  clang-17: note: diagnostic msg: /tmp/test_global_percpu_data-5ecaf1.sh
  clang-17: note: diagnostic msg: 
 
  ********************
```

More details can be found in the failed jobs of https://github.com/kernel-patches/bpf/pull/8543.

On Linux OS, if `clang version 17.0.6`, it should be reproduced by:

```bash
git clone --depth 5 --branch bpf/global-percpu-data-v3 https://github.com/Asphaltt/bpf.git
cd bpf
cat tools/testing/selftests/bpf/config{,.$(uname -m),.vm} > .config
make olddefconfig
make -j$(($(nproc)*4)) # build the kernel if necessary
make -j$(($(nproc)*4)) -C tools/testing/selftests/bpf
```
</pre>
<img width="1" height="1" alt="" src="http://email.email.llvm.org/o/eJy8Wltzoz6W_zTkRYULBBj7IQ_El-5Muf9JxZ7p3X2hhDjY6oDESCKJ59NvScI2zs3pf9dul6tjpKNzP78jIROl2JYDXHvJjZfMr0ind0JeZ6rdkVrrq0KU--tbD6cN2grGt0gLxJq2hga4RgRxeEYVEN1JMFOqa1shNdrWoiA1akHStkMl0QQxjoq2GqGbTiOmEZVE7aA0i6hoWlYD0jtAlahr8WwEFW2FqCgBPTO9Q7QmfOuHqRdlXmA_48B9qHnASw8v0fp-_l_-ilHgCvzbErhmFQPpRRn6dr_y8SiwtBHjtO5KQF40qxnvXjy8NKrtvGjxhqBoKzed76BuQaojWZAxrp1t68XMwxMP45Gz2MPYw1PkRXPkh1504wUZ3RGJZMc_ow0cqWHLu0Z5yU3qJfMPVjhapWVHNfLSG6vS1IpRoN2sF0wNM3b2NGDdj6dz5Pjkl6w5yhkp0L3OeNYPsYPBbiQ9sA-yI0dJnnPdenipiXrMJXDSQG-Os7trS6Ihd4KtOh6e9EbmuXrMi66qkIcz9Vi4VUeVrO5Gg_BorvH3-Uhv_Nj41ar_QoMSjop6wXTgid6i0-rh3MEB789eliNBd5IfYm68ZWdsAPPaJbErylNADsODgGD87X5lBhybQ1U4Zt9BAmLKVpYtOFSL7TslZKa8IKuIJjUCKYWtGfvF1i2hj8BLM9ZxUtS21J8l04C4aJGCf3fAKSBRoQgVew3KCzKE7leLbL1AqisaZrCi6LZIgsUHLdBO61YZXWztbpnedcWIisbDy7p-OvzxWyl-AdUeXjKlOlCmzgkv0aFET6YZLbUkFDw8Q62EVgoKSkGJlOikGzYriVKCMqKhtPWoqGStHlmN15rQR1R2TeuchFAw8oLpvRRbSRpE5LYzuGfUPiIS8rfI_0nqGvk_ncf8eZ5vsodvi02ePcy-5y-TMfKbmmldgw-8ZIQj_9YUQWNK4VnIRwcxx_-1ELWxVIPSjG89vFRQV-ZJvaE5OOIPOX5xfS_Nw8uOtOyPhHZKDtVXuvSi-ZZ3YYj8igtfacmo9knNiDINwf_JhW96BZHgl8ywpNpvBeMapK_3LSjks5JJUmmQ6CihZsUhmcL0-GzD5-GlHToq8d5yQUl9gebklZfJOB_Hvm0r_pZ3n5Ejf774K7tZLfJsc_fjdrbON4v1Zo38O4x8XxO5NTg-L9oKauRT1EqxPbgzdx12CJQjivzGwHU0f4qQL9AfZ9gHckyvFKY6QlMcXjQDUXnRArVEKpCIaAS8NGBQsRpsFWFDODPNfAscJNFM8FcFZ9u86DRS-6YQNTKdQSEPT4Ars7nYiw7tyBMgG0hHxP4DFp_2opPoPtt8R8I2PwsKwJ-YFNzuU56IRN44WK3-9SNf__ePm7vV7f8sHnKzxBsHBo1sGtnNjba91VU_QrPVX9_8m_sl8pIb6w8XhGSO7NOj2jfq5JAvLsgbUXY1_P66ZyCPg1UBqllhjPLDdKTEKDSMgpcgCIK0omGJw7gsisq6zJgUZWqv3Jd7ybi23t84yJyciEyTFkpLII2HxwY2Gde24eAbNI6s6PCy6AJg-p7oh46v2ZaT-jvhZQ1S2d7muE9MR0cYXeIeTCnETpPoLfEryrLCljK-yDaMJykO3veXbSbuYfFismRivTJDhRD1Qf94YiUl6NQeHP8kSRM6gThOcGFJxpdtJKSq6EAZ1ztz26Vz16WHYds8Mw6ICq50H7ahZngSW7npBbFRGqdJiAdif8wypaAparuT9qLMdv41UFPFc7dD-yx5hpz6VQcts9fzmWpWZG9g4GTH1H13_h0nzsOTT6MepRGOC5tLaHrJ0VEaBVXpvBNeKinjHoDqM_csGWdqN0jq1CkSvq2ZIWOzJR_bTTmefLI3egTJofZboukOTlhNrF_Ns-zsnzCKJ1ESpngSeHj5S5ieF6XjNEyDeDIde9GylV40nyRx5OFIaTBbHgN86Xjq4WkQkDMbF6vl2gb1YGVlrbxt2npgKQ5cpZn8-aQmSVhN0vGAf6YaC0gH5qVYMk5q9h_XKYb59cNCZ58YFpBwaGMXRpcKCk_LuAwHYpf390SpH4ST7d-SnDhj40-NxdOUkqHUGraE7ntYOcm3rnQl1F0QHOJ4-rW2Ucd1MWgYYWJUddBE29Yqmw61JUkIuACHXj3YNUzfuAPAXafbziDfYHrOyJYLpRlVC75lHPqqH5B8B1KCXAORdHfX2jw9g6kBqdkjfAN-gWpjt0YXiFaEb98jOfl1rSXj2weoXqFQ7-7sFcPeCRl1mTFccsu17BR7ggeoZlzfa-lFs9P0U6UO0FDDeq80NF60MCzsptfMdJz9u4O8fbXSoGlr8TY_YOpgUQkV6Wqdl1CDhgsLo4WV2afuJHU4Go4vZcRkWgHgr6dbzgXjNePD7U2YXpAyTaIY6Hjo7nuzm8zWm_N0W0NDzrrbeZdLpr1ZkwsCCzwNxyUdClxKwfUpwH2nB9ppGEDctEe46UUBAVQkPk9u-55L3nKlCadwJuKQVpOPNToBQBo4M3FwSYsooJMyOqtnJ--kzJOg5K3sN8qaeuiTJ3XAh8PTLuf079V-J8RjRGmYN4Sdo1omJdmb4otm9p3HcUvgKuN8DM_Qk2DlQAkcJ65lY3xZi7CY9sTRpXQHWkWpizH-HNjNzpKmAxSYSaJ2D0DFE8j9zITuRZ-2vKSCen_mgarjNrC5tF4wBiKXaYNKDZPQbokvIjdQKIJ0GOlSsqdDX5vNwploGsLL14n9bkSOECMsgpL6DFxOwNmDygCT8py-vISheyiIYtQAkDliujifEZuBXEvCtDpMv2JHanP-1kIO5g1Jdqr87NUWMUhd9C4iG0zTYlJ96DFbAOQNFhzceFYtrxYago_60iek2at9-8moSb-HxJeA1BhVwm8b9Q9RqI8t-ocoVkzpj9poQ-r6X0C16Pcwp-xpCTOB6w9KX3VCH-IPXBEmv7H3OTajvNzzVstBT8KXWgSBIoqnwUdqzwffzzD1HTD9KAT_j650aBIlPbRNvwCaMSSO6gDeB-G2jLM3x7eNEHUPe2fHNxu1ECf9eT24LLosaYKMUNfU-4X2_ERNoMavF9qABQBpSIkjxgPiVzR4UqA8N9O50kTq_CgpjFxuRdEH5_cIkiBBbplzqAObwfXU6f25HURV38QR7YNTEVZD6a614IVpd8uVBgb7OwXIf7I3aQCIDXqzU-yfRcd113N-AqnMYTpMR8FobJZPOzsfHsg3_TvEDNmXiG5sJ4GUqBElmPMGaoViL3bGtvq6hnLOrP7H95UF418suVK95Iwr_juvttx5KG_NAXD4dmvoUy7M_jZD5fG0gRq1tUoGRtHs73-MqOF1RbbZZLPvaPN9gZZ3q9Xdz9u_vqHl7WqxRps7O3zzz2_oYXF_97A5vCe8f--2YaJM8n9443AkkIBsj4MSEX3g-EXjD294P3hV6ydASRWO6P8BT3tj9FtRsp7-s1C9ut_6ISSgEjRhtUKUcFQAqkRnr4fcdbKrtV-iUEhUn905ffBepe3q2sPLSRJHIyfzjqMV490LulvbV6MV8sbBewVptDQEGqmd6OrSKGfzpOwolKjYv72IK9w93NaAQi04IN8vodU7lCDfLyThdIecXi4uvouLb-PyFH1m3-FGv7_r3jLtBRktLbsgo0Sjr1wJUMErtvXSGw_PRh6ODWRx0gDyG4M5eDZ6arx0jrxogUY9cZA15BGQqMsSqvMx_5fjYT_mCzdlZDllsf1jukeEio7VpQ2oC5PxOgdTb0Tuf4eZP_uCmYOAXJXXUTmNpuQKrsM0DqY4SnBwtbueBhhXEAZVGJKoojSOJzGBguIqLUIcBlfsGgc4CaIAh2ZJMCJVHE-mxXgSTMeYYOrFATSE1SPTQEdCbq_sBed1iKdxlF7VpIBa2Z9lYMzhGdlZD2MvmV_Ja3sLUnRb5cVBzZRWJzaa6dr-nuNYmsncQO_N_dJ8s6eU4c8uzn9o0d_5I-Xe1F51sr7--1e1vTFP1_h_AwAA__9YLGnZ">