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

    <tr>
        <th>Summary</th>
        <td>
            [LLVM-Tools] [LLVM-ReadElf] Errorneous JSON Output when using --needed-libs
        </td>
    </tr>

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

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

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

<pre>
    ## Description

I am using LLVM-readelf to find out the needed libraries of a shared object. The data shall be formatted as json and passed to a JSON processing library, where it is parsed and processed.

## How To Reproduce

```shell
$ llvm-readelf-15 --needed-libs --pretty-print --elf-output-style=JSON /usr/lib/libgdiplus.so | jq
...
```

## Expected Behavior

Output like 

```json
[
  {
 "/usr/lib/libgdiplus.so": {
      "FileSummary": {
 "File": "/usr/lib/libgdiplus.so",
        "Format": "elf64-x86-64",
        "Arch": "x86_64",
 "AddressSize": "64bit",
        "LoadName": "libgdiplus.so.0"
 },
      "NeededLibraries": [
         "libX11.so.6",
 "libc.so.6",
         "libcairo.so.2",
 "libexif.so.12",
         "libfontconfig.so.1",
 "libfreetype.so.6",
         "libgif.so.7",
 "libglib-2.0.so.0",
         "libjpeg.so.8",
 "libm.so.6",
         "libpng16.so.16",
 "libpthread.so.0",
         "libtiff.so.5"
      ]
    }
 }
]
```

## Actual Behavior

```
parse error: Invalid numeric literal at line 12, column 0
```

## Output without JQ

```
[
  {
    "/usr/lib/libgdiplus.so": {
 "FileSummary": {
        "File": "/usr/lib/libgdiplus.so",
 "Format": "elf64-x86-64",
        "Arch": "x86_64",
 "AddressSize": "64bit",
        "LoadName": "libgdiplus.so.0"
 },
      "NeededLibraries": [libX11.so.6
libc.so.6
libcairo.so.2
libexif.so.12
libfontconfig.so.1
libfreetype.so.6
libgif.so.7
libglib-2.0.so.0
libjpeg.so.8
libm.so.6
libpng16.so.16
libpthread.so.0
libtiff.so.5
]
 }
  }
]
```

## Versions

Tried with LLVM 

- 11
- 12
- 13
- 14
- 15
- 16
- 17

## Possible Issue Location

I think the faulting location is in [ELFDumper.cpp:2566](https://github.com/llvm/llvm-project/blob/d6fbd96e5eaf3e8acbf1b43dce7a311352907567/llvm/tools/llvm-readobj/ELFDumper.cpp#L2566C1-L2567C32):

Instead of using 

```C++
for (StringRef L : Libs)
    W.startLine() << L << "\n";
```

it should be something like

```C++
 W.printList(Libs);
```

But I actually don't know the interna about ArrayRef and StringRef and have no Idea whether this would work.


</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzkV01z4jgT_jXi0mWXLWMbDhwSCPVmindmd5Ka2duWbLWxEiF5JTkf--u3JDBfw4SavS5FgdxqPd0t9dNuMWvFWiHOSH5L8sWI9a7VZlYzYx2qWnO0o0rz9xmhGaEZLNDWRnROaEWSBUlutr_3wDbQW6HWsFp9-39kkHGUDTgNjVAcdO_AtQgKkSMHKSrDjEALugEGtmUGOejqCWsXw2OLwJkLcimhQmi02TDnkAOz8GS1AqY4dMxa5N4Gg08PXz5DZ3SNNnixtfBO6BxeWzQIwoGw0DHjl4TVW2Xk8XEguzD_p1_hUcNX7IzmfY0nKkWy_doWpRyWjUHKl80QeJTmEEXbaCMpKgtR1Bl07j3qjFAOoshr6d51vYuse5dIskUIgtBlbw2hSymq7e-ai072NrYaSDmHp7-2NuM4PnPoQiB3bx3WfuNusWUvQptjnS_BPEjxjHAxQr_VO1F-ux0AkHIYEko_8tZPZzdH-uFDKF0KiQ_9ZhMO6ExnNz3Ir1ug82P0LX5IlwMEyqYYR2-TIirGP1lyY-r2sOBtUvx5pup1ODdo7YP4-8i9YlwJ9xPQlWb8M9scaZ94Hyd-YgdfLs4QCKWfQ_6sBrIMMPntqaUd8B9p6kGLc7elqOofJ07X1kwY7ZXohdX4Jho_l9IPEBqtXK1VI9ZB9QJMYxDde4fXfFlvrZUXINZSVBGNk_3m_QTiqcPgxuQCxuaa_U6t0yIEcWkrO9d6jl_zwIkmRJEfjng7my8Oj_7QD8e_49niOqlvatczeZHSZ8tCvQM0RhufOvfqhUnBQfUbNKIGKRwaJoH5IqAQ_AnPoday3yhIrjuyKyCvwrW-wn_6_QNXLlaQ7X79UhG5Uj_gpMr8izLyX6gfx9UiLDnUiP3joSIMoqM6MIjOWb-Xn3B9kO6ZvRec8HmQHtg7SDanOMcM3cuOeTkIDyw8JdcR836Ret_QWKGVPZ56NAJ5IEFofk5epRGk6X5E96NsPxrvR_l-VOxH5QUXftPWikoi3FvbI6x0zX5sx1wr1HNouRrWSxdaop2i74OE8mlwt1ou-k2HJq67jmQ3NC8Kvwt00jrXWZLdELokdLkWru2ruNYbzxz5MvxFndG-ZSN0WUntacWLpuLTAnNkTYYTVldNWo0zXmPJsjTNcjpNyrwoDzhOa2kHPH-CunoidHnqGs1W3rd5Gvn_cp5RQqfeveOYlXXIuO8ot43oxVo0J_TWf4O00QYInTw4I9T6KzawAk-Qlaisx9-T6XtsHTNuJRQSOiF0CiSbk2we9MPAUyufq8Cw2w-ySDiwre4l912t1Rv057QOHdh1d-F7HJrHlbCO0Mng5ocGb3sH98DCC0O-A9eK0NLBs9KvITuEcmgUA1b5An5jDHv3G-Eb5MO2-KeWvSAoDfccmW-pXYvGZ5mF1xDPqzbPJ530iM8yPs2mbISztEzSSZpN8nLUzpqiqorJJMma8bSmtJhOxlU9LcY1qzLe0HwkZjShWUqTnNJknJZxMk0LliR0Mp02jJVIxglumJCxT5pYm_VIeCrMynFOpyPJKpQ2XGgoVfgKYTKc0GJkZiHRqn5tyTiRwjp7QHHCyXATCneYx5CZ-QIGwVdk_E42XnTn36gKdW-3N4_hRdii2mXfSfc_6o2c_TKngt-eGyGufwIAAP__21bGKg">