[PATCH v5] ld: Add --encoded-package-metadata

Benjamin Drung benjamin.drung@canonical.com
Wed Jul 24 09:01:19 GMT 2024


On Wed, 2024-07-24 at 07:48 +0200, Jan Beulich wrote:
> On 24.07.2024 01:28, Benjamin Drung wrote:
> > Specifying the compiler flag `-Wl,--package-metadata=<JSON>` will not
> > work in case the JSON contains a comma, because compiler drivers eat
> > commas. Example:
> > 
> > ```
> > $ echo "void main() { }" > test.c
> > $ gcc '-Wl,--package-metadata={"type":"deb","os":"ubuntu"}' test.c
> > /usr/bin/ld: cannot find "os":"ubuntu"}: No such file or directory
> > collect2: error: ld returned 1 exit status
> > ```
> > 
> > The quotation marks in the JSON value do not work well with shell nor
> > make. Specifying the `--package-metadata` linker flag in a `LDFLAGS`
> > environment variable might loose its quotation marks when it hits the
> > final compiler call.
> > 
> > So introduce a `--encoded-package-metadata` linker flag that takes a
> > percent-encoded JSON. Percent-encoding is used because it is a
> > standard, simple to implement, and does take too many additional
> > characters.
> > 
> > Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=32003
> > Bug-Ubutru: https://bugs.launchpad.net/bugs/2071468
> > Signed-off-by: Benjamin Drung <benjamin.drung@canonical.com>
> > ---
> >  ld/NEWS                              |  5 +++
> >  ld/emultempl/elf.em                  | 19 +++++++++++
> >  ld/ld.texi                           | 15 ++++++++-
> >  ld/ldlex.h                           |  1 +
> >  ld/ldmisc.c                          | 49 ++++++++++++++++++++++++++++
> >  ld/ldmisc.h                          |  1 +
> >  ld/lexsup.c                          |  2 ++
> >  ld/testsuite/ld-elf/package-note.exp | 18 ++++++++++
> >  ld/testsuite/ld-elf/package-note2.rd |  6 ++++
> >  9 files changed, 115 insertions(+), 1 deletion(-)
> >  create mode 100644 ld/testsuite/ld-elf/package-note2.rd
> 
> And what exactly has changed in v5? There's no revlog anywhere here,
> afaics.

v2 reformats the code.

v3 adds test cases and addresses compiler warnings.

v4 makes the %% parsing code path a little bit more readable.

v5 is v4 with updated commit description (including referencing the open
bug).

-- 
Benjamin Drung
Debian & Ubuntu Developer


More information about the Binutils mailing list