On Mon, 10 Oct 2022, Mark Harmstone wrote: > On 7/10/22 13:16, Martin Storsjö wrote: >> On Mon, 3 Oct 2022, Martin Storsjö wrote: >> >>> On Mon, 3 Oct 2022, Mark Harmstone wrote: >>> >>>> Hi Martin, >>>> >>>>> As I assume you're aware, lld's mingw port also supports PDB generation >>>>> - and the description of this option also sounds like it's chosen to >>>>> match lld's option for outputting PDB files - that's good! >>>> >>>> Yes, that's right. One notable difference is that the parameter here is >>>> optional, unlike with lld, making it a lot easier to fit this into e.g. >>>> CMake toolchain files or LDFLAGS. >>> >>> LLD also has got that behaviour, since >>> https://github.com/llvm/llvm-project/commit/2c52ddf31f5421c5373923535b958b84c79772e3 >>> in 2019. That's in particular why I wanted to make sure that this case >>> works the same in binutils too. >>> >>>> It looks like the equals sign is mandatory when providing optional >>>> parameters, otherwise it interprets the filename as another parameter. >>> >>> Yep, that's the case in LLD too. >>> >>> Unfortunately I didn't think of this behaviour initially when I first >>> added this option - otherwise we could have had e.g. --pdb as a boolean >>> option to just output to the default name, and e.g. --output-pdb= if >>> you wanted to specify the name. But oh well, "-pdb=" works, and I guess it >>> isn't the worst thing in the world. >>> >>>> But it does mean that the form "-pdb=out.pdb" will work on both ld and >>>> lld, which I think is the most important thing. >>> >>> TBH, I consider the "-pdb=" case equally important too - that's what most >>> people would use in the end. >> >> FWIW, I'm actually a bit concerned about the interop between binutils and >> lld here. I don't want interop between binutils and lld to work only for >> some subset of the used parameter forms, I'd like it to work for all >> commonly used forms. >> >> >> First off, the (slightly awkward) syntax that lld uses for an optional >> empty output name, "-pdb=" really should be handled by binutils too - >> handling that doesn't conflict with anything else and should be simple to >> support. >> >> This is the format of the option that I've been recommending people to use, >> and this has been in use in third party projects for years already - e.g. >> this: >> https://code.videolan.org/videolan/vlc/-/blob/master/configure.ac#L429 >> >> This should be trivial to support in your patch: >> >> diff --git a/ld/emultempl/pep.em b/ld/emultempl/pep.em >> index 11216830dd3..538fdf5054b 100644 >> --- a/ld/emultempl/pep.em >> +++ b/ld/emultempl/pep.em >> @@ -926,7 +926,7 @@ gld${EMULATION_NAME}_handle_option (int optc) >>        if (emit_build_id == NULL) >>         emit_build_id = xstrdup (DEFAULT_BUILD_ID_STYLE); >>        pdb = 1; >> -      if (optarg) >> +      if (optarg && optarg[0]) >>         pdb_name = xstrdup (optarg); >>        break; >>      } >> >> (And the same for pe.em.) >> >> >> Secondly, for explicitly naming an output file, I've documented to end >> users that they can use either -Wl,-pdb= or -Wl,-pdb, - >> see >> https://github.com/mstorsjo/llvm-mingw/blob/master/README.md?plain=1#L175. >> >> In the original implementation in the mingw frontend in lld in 2018, the >> "-pdb " format was the only format for the option: >> https://github.com/llvm/llvm-project/commit/b7d50115ba4900da6db7afb6460ad42ff19ba6a2 >> >> Only one year later with the implicit output name, the "-pdb=" and >> "-pdb=" form was added: >> https://github.com/llvm/llvm-project/commit/2c52ddf31f5421c5373923535b958b84c79772e3 >> >> In one of my test scripts, I use the initial form of the option, >> -Wl,-pdb,: >> https://github.com/mstorsjo/llvm-mingw/blob/master/run-tests.sh#L234 >> >> It seems like Wine has picked up on the -Wl,-pdb, form: >> https://gitlab.winehq.org/wine/wine/-/blob/wine-7.18/tools/winegcc/winegcc.c#L467 >> >> Also here are a couple of other cases I found that all seem to use that >> form: >> https://youtrack.jetbrains.com/issue/KT-47175/How-to-generate-kotlin-native-debug-info-filesPDB-on-windows-platform >> https://git.kernel.dk/?p=fio.git;a=commitdiff;h=76bc30ca118fda404f19c17d97bafdba9779c4c2 >> >> So with all these users, I'd be kinda hesitant to change lld's >> interpretation of this option form, and to have binutils ld in parallel >> interpreting that form differently. What do you think? >> >> >> // Martin > Hi Martin, > > Fair enough - I'm not overly wedded to this, and will change it if, as you > say, it'll cause issues elsewhere. Ok, great, thanks! However this patchset also lost the ability to get an automatically chosen output file name, which currently is used via the slightly awkward syntax "--pdb=" without an empty parameter. I see you refactored a bit of code in this revision of the patch, which lost that ability. With the patch I'm attaching, applied on top of v1 of your patch, I think it behaves as a reasonable compromise; getopt's required_argument does allow the --pdb= form too (which I think is the one we still should recommend going forward), and passing "--pdb=" allows implying the automatic naming behaviour. // Martin