RFC: Adding a fixed format output mode to readelf

Mike Frysinger vapier@gentoo.org
Fri Feb 26 18:51:53 GMT 2021


On 26 Feb 2021 17:03, Nick Clifton via Binutils wrote:
>    PR 27309 got me thinking about readelf's output, and whilst it is
>    true that we do not make any guarantees about the format or contents
>    of the output it appears that other packages are becoming reliant
>    upon its currently established behaviour.
> 
>    So I was wondering whether it would be a good idea to introduce
>    some kind of fixed format output option, and what exactly this
>    format might look like.  Do you have any opinions on the matter ?

having an official machine readable output format would be nice.  it's def
true that a number of scripts out there have already grown dependencies on
various output modes of readelf for lack of alternatives.

i added a --format option to the scanelf utility many moons ago because
there was no other utility available that would provide stable output.
but that's heavily tailored towards scanelf's operating mode (kind of a
`find` for ELFs for distro packagers).

only two options generally come to mind in this space: output a stable
known format like JSON, or hoist it onto the user with a --format option
(like what git log does).

the --format mode only works well though when there's not repeated fields,
and the data is simple (e.g. just printable ASCII).  unfortunately ELFs
are the opposite of this :).  for example, if the user wanted to dump all
DT_NEEDED or DT_RPATH tags, how would those be shown in a way that is
reliable and parseable ?

JSON would handle both of these issues.  but i think in the low-level tool
space that we occupy, there's a general aversion towards things like JSON,
so i'm not confident how well it'd be adopted, which would kind of defeat
the purpose of doing this in the first place.  i think the biggest reason
for JSON dislike is that there is no standard tool for parsing the format,
so people have to use something higher level (like python) or something a
bit non-standard (like jq), or something terrible (like sed/awk + regex).
-mike


More information about the Binutils mailing list