From: Eric Wong <e@80x24.org>
Date: Sun, 25 Dec 2022 13:24:12 +0000 (+0000)
Subject: syscall: fix i386/i686 detection
X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=48f19407e04593eca64fc31b69d7a27483f06fe3;p=public-inbox.git

syscall: fix i386/i686 detection

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).
---

diff --git a/lib/PublicInbox/Syscall.pm b/lib/PublicInbox/Syscall.pm
index cecb1247..530ee93b 100644
--- a/lib/PublicInbox/Syscall.pm
+++ b/lib/PublicInbox/Syscall.pm
@@ -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';
 	}