Hi Adrian,

On 27.05.24 17:14, John Paul Adrian Glaubitz wrote:
On Sun, 2024-05-26 at 14:09 +0200, Frank Scheiner wrote:
It was also removed because there was no maintainer for it in glibc and
suffered from a lot of testsuite failures. I tried for a long time to
convince Adhemerval to fix these issues, but he explained that it would
involve rewriting large parts of the math code for ia64 which he thought
wasn't worth the effort.

Adhemerval gave his assessment in [2]: "From glibc point of view,
besides the math issues due the ia64 specific math implementation, the
port status seems in order."

[2]: https://sourceware.org/pipermail/libc-alpha/2023-November/152497.html

As I mentioned, getting the math testsuite to pass would require the 
libm_error.c
code to be adapted that it will work with the new error-handling design. Without
that, FPU error handling will remain broken on ia64.

Oh, we did look into that, but then other things became more important. Because w/o support in the kernel, no support in the glibc. Clearly sets the priorities in my eyes.

There are "some rough spots" mentioned in addition and also that "There
are no emulators widely available, and so boot testing Itanium is
generally infeasible for ordinary contributors.

Well, I've had long discussions over this with Adhemerval and he was more 
reserved
in this announcement mail than in the conversations that we had in private where
he discussed the problems with the port more openly.

Well, maybe he changed his mind since then. I can only refer to public communication here and that sounds different to me.

But all this was not the actual reason to remove ia64 support from the
glibc. Joseph Meyers added: "We should remove any architecture removed
from the Linux kernel. [...]" in [3]. And Carlos O'Donell detailed why
in [4]: "[...] We need an upstream kernel to define the ABI for the
port. [...]". Adhemerval also added in a later message ([5]): "Sorry,
but not being upstream is a no start. [...] The best way is to still
remove it and eventually reinstate it if it were the case.".

The kernel removal may be the main reason, but not the only one.

Other than that, we have a working ia64 emulator (Ski) and in the
meantime, also support for it in Linux was restored ([6]).

Sure, as I said, I think these efforts are always laudable. I just don't think
there is any chance on getting support re-added upstream to the Linux kernel
and glibc. The majority of developers will vote against it, as hard as that
sounds.

Yeah, you expressed your opinion on that already multiple times. It doesn't convince me. I think we can leave it at that now.

You know, a lot depends on how you define your goals. For me in this endeavour, the path is the true goal. Will we get ia64 back into Linux? I don't know. But we try to make it happen.

There seem to be different opinions about this "relation": Xi Ruoyao
pointed out the following recently on the binutils mailing list [7]:

```
The reasoning is incorrect.  The dependency chain of a port is:

- Upstream GCC needs upstream Binutils
- Upstream Linux kernel needs upstream GCC
- Upstream Glibc needs upstream Linux kernel

So the removal of IA64 from the Linux kernel means we should remove it
from Glibc, but you cannot reversely traverse the dependency chain and
claim it should be removed from GCC or Binutils.
[...]
```

I know it doesn't _have_ to be removed from GCC and Binutils. However, removing
it will still relieve the codebase quite a bit and allow for a lot of code
refactoring that people have on their TODO stashes.

Such arguments were not expressed in the relevant threads, see the thread on [1] again for gcc (also take note of the LRA situation) and the thread on [10] for binutils.

[1]: https://gcc.gnu.org/pipermail/gcc/2024-March/243432.html

[10]: https://sourceware.org/pipermail/binutils/2024-May/133998.html

Have you already sorted out who is going to maintain ia64 support in glibc
and the Linux kernel?

Well, since quite a while we maintain out-of-tree versions for both
([8]). Especially for Linux you can follow our progress as replies to
Linus' release messages to the LKML for 6.7, 6.8 and just recently 6.9
([9]) and also on https://lore.kernel.org/linux-ia64/.

[8]: https://github.com/orgs/linux-ia64/repositories

[9]:
https://lore.kernel.org/lkml/d308ad95-bee4-4401-a6f5-27bcf5bcc...@web.de/

There is more involved to maintenance than keeping something buildable and 
bootable.

You will have to review patches, merge them and send pull requests to Linus and 
so on.

You think?

Adrian, keeping something buildable and bootable is the basis and you need to start with something. Can we review patches now? Obviously not. We can react to what gets merged and fix things that break in between.

Sounds like maintenance to me.

And do you already know how to get Ruby upstream to
re-add ia64 support? Ruby is required for a lot of other packages that depend
on it.

Depending on something like Ruby for a lot of packages is a
short-sightedness that should eventually be fixed. I didn't need it to
create a working rebuild of Slackware for ia64. Of course, the package
selection for EPIC Slack is still limited, but I don't hold anyone back
or advise against trying to use Ruby on it.

I don't think these projects that use Ruby in their codebase will waive for it 
just
because there is no working Ruby interpreter on some (deprecated) platforms.

Maybe neither are important enough to have on ia64, I don't know. So far I didn't need Ruby. And if some people need it, they'll find ways to fix that problen, because the basis is still there and they can build on that.

- ia64 uses a 61-bit virtual address space as opposed to the 48-bit virtual
    address space found on x86_64;

Yes, it was done earlier than x86_64.

this causes problems with languages like
    JavaScript which use tagged pointers to encode type information in the
    bits unused on x86_64, see:

    > https://www.ia64-linux.org/doc/IA64linuxkernel.PDF (p. 18)

    (NB: This is expected to improve in the future as x86_64 optionally supports
         larger virtual address spaces in the kernel nowadays as well).

- the math error handling ABI on ia64 in glibc is different from other 
architectures
    and the code for it in sysdeps/ia64/fpu/libm_error.c is quite convoluted; 
as glibc
    tries to unify and simplify FPU error handling, the different semantics of 
the ia64
    ABI would require - quoting Adhemerval here - »a lot boilerplate and 
mechanical
    changes« which he doesn't think is worth the effort

I think we could have done more in this regard, if ia64 support wouldn't
have been removed from Linux last year, requiring additional work
everywhere. But I don't complain, I think it also forced our hands.

Well, I have done a lot of work in this regard in the past to get JavaScript 
fixed on
targets with virtual address space sizes beyond 48 bits. But it's still not 
fixed
everywhere, especially not in Qt5. It has been fixed in Qt6 though.

That's great for everybody that needs it.

Of course, I am not going to stop you from continuing your work and I think 
such efforts
are always laudable. I just don't think the very limited interest in this 
architecture
will be enough to overcome the difficulties that ia64 maintainers have to face.

This is also the reason why the ia64 maintainers of neither Debian nor Gentoo 
were against
the removal of support for the architecture in Ruby, the Linux kernel, glibc 
and so on.

Being not against something and taking care of something are two
different things.

But why would maintainers start an argument with upstream developers over 
something they don't
really care about? That makes no sense.

Arguing with others to keep something alive for you, seems to not work, see for example [11]. But I also didn't say that.

[11]: https://lists.debian.org/debian-sparc/2024/05/msg00003.html

If you want to keep something, you need to make it your own.

Cheers,
Frank

Reply via email to