]> Sergey Matveev's repositories - public-inbox.git/commitdiff
syscall: fix i386/i686 detection
authorEric Wong <e@80x24.org>
Sun, 25 Dec 2022 13:24:12 +0000 (13:24 +0000)
committerEric Wong <e@80x24.org>
Sun, 25 Dec 2022 13:45:43 +0000 (13:45 +0000)
Both __ILP32__ and __x86_64__ need to be defined for a system to
be considered x32.  Without this, my 32-bit Debian VM on a
64-bit kernel would fail after upgrading to Perl 5.32.1 on
Debian 11 (bullseye).

lib/PublicInbox/Syscall.pm

index cecb12476cefcf7bfe44919d881c9a408899bb76..530ee93bbb39a88e4be4415810bb5a87845a83e1 100644 (file)
@@ -87,7 +87,9 @@ if ($^O eq "linux") {
        # if we're running on an x86_64 kernel, but a 32-bit process,
        # we need to use the x32 or i386 syscall numbers.
        if ($machine eq 'x86_64') {
-           $machine = $Config{cppsymbols} =~ /\b__ILP32__=1\b/ ? 'x32' : 'i386'
+           my $s = $Config{cppsymbols};
+           $machine = ($s =~ /\b__ILP32__=1\b/ && $s =~ /\b__x86_64__=1\b/) ?
+                               'x32' : 'i386'
        } elsif ($machine eq 'mips64') { # similarly for mips64 vs mips
            $machine = 'mips';
        }