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

    <tr>
        <th>Summary</th>
        <td>
            [LLVM-Tools] [LLVM-ReadElf] Erroneous JSON output when using `-d` or `--unwind` or `--all`
        </td>
    </tr>

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

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

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

<pre>
    ## Description

I am trying to use `llvm-readelf` to dump ELF data in JSON format for further processing. Unfortunately with some flags the output is not a valid JSON file.

## How to reproduce

In an `ubuntu:noble` docker container install `llvm-18` (`18.1.2`), then

```json
# llvm-readelf-18 -d --elf-output-style=JSON --pretty-print /bin/ls
[
  {
 "FileSummary": {
      "File": "/bin/ls",
      "Format": "elf64-x86-64",
      "Arch": "x86_64",
      "AddressSize": "64bit",
      "LoadName": "<Not found>"
    }DynamicSection [ (28 entries)
  Tag                Type         Name/Value
 0x0000000000000001 NEEDED       Shared library: [libselinux.so.1]
 0x0000000000000001 NEEDED       Shared library: [libc.so.6]
 0x000000000000000C INIT         0x4000
  0x000000000000000D FINI 0x18DA4
  0x0000000000000019 INIT_ARRAY   0x21F30
  0x000000000000001B INIT_ARRAYSZ 8 (bytes)
  0x000000000000001A FINI_ARRAY   0x21F38
 0x000000000000001C FINI_ARRAYSZ 8 (bytes)
  0x000000006FFFFEF5 GNU_HASH 0x3B0
  0x0000000000000005 STRTAB       0x1000
  0x0000000000000006 SYMTAB       0x400
  0x000000000000000A STRSZ        1556 (bytes)
 0x000000000000000B SYMENT       24 (bytes)
  0x0000000000000015 DEBUG 0x0
  0x0000000000000003 PLTGOT       0x22C38
  0x0000000000000002 PLTRELSZ     2496 (bytes)
  0x0000000000000014 PLTREL       RELA
 0x0000000000000017 JMPREL       0x2D38
  0x0000000000000007 RELA 0x1808
  0x0000000000000008 RELASZ       5424 (bytes)
 0x0000000000000009 RELAENT      24 (bytes)
  0x000000000000001E FLAGS BIND_NOW 
  0x000000006FFFFFFB FLAGS_1      NOW PIE 
 0x000000006FFFFFFE VERNEED      0x1718
  0x000000006FFFFFFF VERNEEDNUM 2
  0x000000006FFFFFF0 VERSYM       0x1614
  0x000000006FFFFFF9 RELACOUNT    212
  0x0000000000000000 NULL         0x0
]

 }
]
```

```json
# llvm-readelf-18 --unwind --elf-output-style=JSON --pretty-print /bin/ls
[
  {
 "FileSummary": {
      "File": "/bin/ls",
      "Format": "elf64-x86-64",
      "Arch": "x86_64",
      "AddressSize": "64bit",
      "LoadName": "<Not found>"
    },
 "EHFrameHeader": {Address: 0x1e170
Offset: 0x1e170
Size: 0x5ec

      "Corresponding Section": ".eh_frame_hdr",
 "Header": {
        "version": 1eh_frame_ptr_enc: 0x1b
fde_count_enc: 0x3
table_enc: 0x3b
eh_frame_ptr: 0x1e760
,
        "fde_count": 188,
        "entry 0": {initial_location: 0x4020
address: 0x1e790
},
        "entry 1": {initial_location: 0x46b0
address: 0x1e7b8
},
        "entry 2": {initial_location: 0x46f0
address: 0x1e7d0
},
        "entry 3": {initial_location: 0x4d70
address: 0x1ed60
},
...
```

## Related issue

`-d` problem was previously mentioned in https://github.com/llvm/llvm-project/issues/74529#issuecomment-1843851049 as a similar problem, but there only the problem in the issue description was fixed (bad JSON output for `--needed-libs`).

</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzsV11v6rgW_TXmZSsodj4IDzxASU47ovSotGd05gU5iSmeMTaynRbm1185JBBa6KnO1X27ESKJvfby2h-ys6kx_EUyNkLRBEXTHq3sWukRC_7R3PxrOZW9XJX7ESIBIgFMmSk031quJPKnyB8f_u-AbsDqPZcvYBVUhgGKfSFeN55mtGRihWLfzZTVZgvpLIOSWgpcwh-LhzmslN5Q626wqrRdMw1brQpmDJcvfXiWK6VtJallYg9v3K7BqA2DlaAvBuyagarstrLADUhlgcIrFbxsuLlg_a7WxpNb9eYEabbVqqwKduaOBCqdB1VeSVuhYCxVLpjzoVTFP0xDoaSlXDINXBpLhTj6ixMHQ8TdcNLHfYJiH5EhIjdO6lnY3Ez9-9sc40kC6MbNwwl4JXieez646Rm7FwwF09o_z9tqZu3e22ouLSCS5VwikgnTEEaTwwMAGrSPiJCMC7aoNhuq94gQFIw70_XVYNpJQrrU7u3mPbrO4gnPxCoOvV0Se3F40WCsi_UJvkvi5TVgWWpmzIL_25EThzm3F-EzRcs53XSlBzdz5QqskiUKUjdyNEGD6XQv6YYXC1a4wgYUTVwCSQJMWs2Zcelr8E_0Bd5dT_stO74c1s1-UFE1JQX-zj-_MMzTdJpOG5PFmmpWguC5dslwiqOJ4Llhgstq1zeqj1E0_S_ZCscTf8JzA3fzu6ejI_4u9H2_dfsDegrZ3fwO_B1OpuPwGgwPa9Ll-PFx_LMmJTgLrrLiSQe--AsSl4Z8b88y8MFoXEt5t0ZyxU1800H_eok4y7IszSL4Nn9e3o4Xt-Dvgsn1sESweHp8Gk-OQcSfBTGGxc_7Ljr8BDx21Iu_2vzgKIovaP9gNnFrpPM2sST8UkwjmKaT529u4qqgAL7Pnr49PB3VE3JzjPtHOHHwx3TWuEDC4SX9H6WEjV2zzGM6G1_L7QD-uP9-gvo7Mv1E0KDmqkvYv45KatQx7lF4MYIfzIa12THuXwx7Ctls_G0Bk7v5dDl_-BOuVGSWTQ7IJW62nYc_4ftdCh_kNPAUfqSPbp841uUAX_C5QWctev58D-QqzHewxc_7U7HH-MJW0KAPEbl5eD7EhOALxO0F8-fZrLMV-e1ZNu0en27rfj_Rnqi_c8x6lXzj8v-H7f_2sD1RIELS20zTDbt1WdCn0DQa3Ju_wwwPmnw-rFaG2Q_DtdZ6MGLFWYW0Km-U1sxslSzdJ2pz0J8k99l6uXJClutSn7mJCHkvrktdk78ybU50-Mi1tXrJZNHIzQ92q5ItC1VJe5oKDjOW5oJ1RhuDLl3r-eBY4Of5qOUcV2gFJcklmPu22YN_8otLbjkVS6EKWoenXiz0SbMWPU_KYNhq6Ob0PT_-JX-cX-HPky_wk1_zr67wl1_RH_ySvxxc5i_jC_z9fv-zjerQmjwyQS0rgRtTsXcbmVe69mKrXT-ygTdqYKvZK1eVEXvYMOmEOVMJa2u3TgwiGSLZC7frKu8XauP2FPHa3rytVn-zwiKS1csZRLJBGLl-JagHCrVxtB5OwiCJsB8OgRqgYPiGC6pbKa69ySvrWhzNQEmxrxuzViiX9WvNCOWpiaw9WPEdK-vzkTZNW9PPuYbQ-exJxkpWeu6j-NBNNVHslaOgHAZD2mMjPMABiQckDHrrEWVlTEMS4pAFUeFHwxUOg7IooojgKGe4x0fEJ6Ef4hjjIPRJf4iHUZEUkV_GiT9MIhT6bEO56Lso9ZV-6dXiR0mSJH5P0JwJUzfNhEj21uSKENdD61Ed2bx6MSj0BTfWnFgst6LutmezH_fek1LCoGgK7cAjo2UqVm4o1VpJpipzFpO3NZNQucYYjuXQhulwfnVHqBAo9nuVFqPfr4fa5f8EAAD__xjQQ-k">