[prev in list] [next in list] [prev in thread] [next in thread]
List: openjdk-swing-dev
Subject: Re: RFR: 8330988: Implementation of 8288293: Windows/gcc Port for hsdis [v2]
From: Julian Waters <jwaters () openjdk ! org>
Date: 2024-05-16 7:59:07
Message-ID: 4QTrXORVLmXOdBxVAdYyAE9M7HTfxOjcW0NVtitY-og=.aef997d7-96d6-4992-b308-d951046c920f () github ! com
[Download RAW message or body]
On Wed, 15 May 2024 13:32:38 GMT, Magnus Ihse Bursie <ihse@openjdk.org> wrote:
> Hi Julian, sorry for not getting back to you.
>
> The problem from my PoV is that this is a very large and intrusive patch in the \
> build of the actual product, for a claimed problem in the tangential hsdis library. \
> I have not understood a pressing business need to get a Windows/gcc port for hsdis, \
> which means I can't really prioritize trying to understand this patch.
> As you know, the build system does not currently really separate between "the OS is \
> Windows" and "the toolchain is Microsoft". I understand that you want to fix that, \
> and in theory I support it. However, you must also realize that making a complete \
> fix of this requires a lot of work, for something that there is no clearly defined \
> need. (After all, cl.exe works fine to create the build, has no apparent issues, \
> and is as far as an "official" compiler for Windows as you can get.) That makes it \
> fall squarely in the WIBNIs bucked ("wouldn't it be nice if...").
> If you can fix just the hsdis build without changing anything outside the hsdis \
> Makefiles, that would be a different story. Such a change would be limited in \
> scope, easy to say it will not affect the product proper, and be easier to review.
Oh, no worries. Sorry for sounding a little impatient.
The problem is that there are areas in the build system that will need changing to \
support hsdis compilation, not just the hsdis Makefile and autoconf file itself. I \
can try to work on minimizing the amount of changes to non-hsdis files (I was hoping \
the current changes were small enough, but it seems they are not), but I believe it's \
impossible to achieve this by only touching the hsdis Makefile and lib-hsdis.m4. That \
is, there will necessarily be changes, no matter how minimal, to non-hsdis files.
As for why do this at all, I was mainly driven by seeing the hack in place for the \
binutils backend on Windows. It only supports Cygwin, of which the gcc installation \
is subpar compared to the newer gcc provided by some MSYS2 subsystems (MINGW64 gcc is \
primarily battle tested on MSYS2, on Cygwin it doesn't get as much attention and \
misses out further fixes and enhancements from the MSYS2 team, for instance it even \
links to the obsolete msvcrt library), and the hack itself has several flaws that \
don't seem apparent at first (For instance, -lpthread will link to libwinpthread.dll \
and result in an invisible dependency on that dll depending on the Windows platform, \
which will cause loading hsdis to silently fail depending on how it's loaded for \
seemingly random reasons!). I wanted to replace that (or I guess provide a better \
alternative) by adding semi proper support to the hsdis build for the more modern and \
better battle tested gcc that some MSYS2 subsystems provide, to streamline comp \
iling the binutils hsdis on Windows. So this is mainly about hsdis-binutils on \
Windows. hsdis-capstone I also decided to support because it's small and relatively \
easy to pile on top of the existing work, and MSYS2 also provides Capstone as well. \
The same unfortunately could not be said for hsdis-llvm, which was significantly more \
complex than Capstone is
I'm not sure where to go from here. I could support gcc for hsdis binutils by \
extending the hack that exists for Cygwin, but I _really_ don't want to do that. I \
could enhance the build system to semi properly support gcc for hsdis only, as I've \
done, but the changes will necessarily touch non hsdis files as well, no matter how \
minimal they are. I'll return this to draft for the time being I suppose, I'd be \
interested in hearing which way forward you prefer though
But while I work on making this change even smaller and easier to review, could I ask \
the above questions again? (Well, except for the FIXPATH one, you can ignore that)
> @magicus I think I might need some help here. Currently all the Cygwin stuff is \
> gated behind ifeq ($(TOOLCHAIN_TYPE), microsoft) checks... should they be behind \
> isBuildOsEnv cygwin checks instead? I don't know how to add support for Cygwin gcc \
> for most of hsdis, since it is quite different from the more modern gcc \
> distributions that are found in places like MSYS2 and MINGW64. But most of the \
> existing logic seems to accomodate more for the Microsoft compiler than it is \
> concerned about the OS environment being used, and for this reason I can't tell \
> which of the 2 checks to use for the existing hack that switches from microsoft to \
> gcc. Also, gcc doesn't require FIXPATH, but Microsoft does, but I don't want to \
> check for microsoft inside TOOLCHAIN_FIND_COMPILER, what should I do instead to \
> ensure gcc doesn't get FIXPATH while Microsoft does?
> Also @magicus, what is the typical path passed to --with-binutils like on Windows? \
> Something like --with-binutils=/c/Users/vertig0/Downloads/binutils-2.42 doesn't \
> work correctly, since the include path to dis-asm.h would then become `#include \
> "/c/Users/vertig0/Downloads/binutils-2.42/include/dis-asm.h"` Which causes a \
> configure check to fail on the compile stage since gcc cannot recognise the \
> MINGW-esque /c/ as a drive, and then causes configure to erroneously report \
> binutils as using the Old API when it's in fact using the New API. \
> --with-binutils=C:/Users/vertig0/Downloads/binutils-2.42 on the other hand works as \
> expected. Should there be a fixup for the path there so gcc can recognise it \
> properly?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/18915#issuecomment-2114331612
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic