From 0452175e4965f2002295afd534f9d5abaa3e3fe6 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 30 Aug 2025 14:06:15 +0200 Subject: [PATCH 1/3] Fix tests for ppc64le The results of one of these tests don't quite make sense to me, but they pass on a builder on this architecture. They likely need review from someone more familiar. --- test_prctl.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/test_prctl.py b/test_prctl.py index df84986..8a2f573 100644 --- a/test_prctl.py +++ b/test_prctl.py @@ -120,6 +120,11 @@ def test_endian(self): prctl.set_endian(prctl.ENDIAN_LITTLE) self.assertEqual(prctl.get_endian(), prctl.ENDIAN_LITTLE) self.assertRaises(ValueError, prctl.set_endian, 999) + if self.arch == 'ppc64le': + # Switching to BIG_ENDIAN crashes due to memory corruption. + prctl.set_endian(prctl.ENDIAN_LITTLE) + self.assertEqual(prctl.get_endian(), prctl.ENDIAN_LITTLE) + self.assertRaises(ValueError, prctl.set_endian, 999) else: self.assertRaises(OSError, prctl.get_endian) self.assertRaises(OSError, prctl.set_endian) @@ -144,6 +149,12 @@ def test_fpexc(self): prctl.set_fpexc(prctl.FP_EXC_SW_ENABLE) self.assertEqual(prctl.get_fpexc() & prctl.PR_FP_EXC_SW_ENABLE, prctl.PR_FP_EXC_SW_ENABLE) self.assertRaises(ValueError, prctl.set_fpexc, 999) + elif self.arch == 'ppc64le': + self.assertEqual(prctl.get_fpexc(), 0) + prctl.set_fpexc() # TODO: raises with any argument? + # TODO: should this really raise? + self.assertRaises(OSError, prctl.set_fpexc, prctl.FP_EXC_SW_ENABLE) + self.assertRaises(ValueError, prctl.set_fpexc, 999) else: self.assertRaises(OSError, prctl.get_fpexc) self.assertRaises(OSError, prctl.set_fpexc) @@ -377,8 +388,8 @@ def test_tsc(self): def test_unalign(self): """Test manipulation of the unaligned access setting""" - if self.arch in ('ia64', 'parisc', 'powerpc', 'alpha'): - # FIXME untested + if self.arch in ('ia64', 'parisc', 'powerpc', 'alpha', 'ppc64le'): + # FIXME untested (tested only on ppc64le) prctl.set_unalign(prctl.UNALIGN_NOPRINT) self.assertEqual(prctl.get_unalign(), prctl.UNALIGN_NOPRINT) prctl.set_unalign(prctl.UNALIGN_SIGBUS) From d5b9daec51bda72acfca84bc3ffdd6be92dab7b2 Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 30 Aug 2025 14:22:04 +0200 Subject: [PATCH 2/3] Fix tests on aarch64 --- test_prctl.py | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test_prctl.py b/test_prctl.py index 8a2f573..ee415e9 100644 --- a/test_prctl.py +++ b/test_prctl.py @@ -244,8 +244,8 @@ def test_no_new_privs(self): @require('pac_reset_keys') def test_pac_reset_keys(self): - if self.arch == 'arm64': - # FIXME untested + if self.arch in ('arm64', 'aarch64'): + # FIXME untested on arm64 self.assertEqual(prctl.pac_reset_keys(prctl.PAC_APIAKEY), None) self.assertRaises(ValueError, prctl.pac_reset_keys, 0xff) else: @@ -376,7 +376,7 @@ def test_timing(self): @require('set_tsc') def test_tsc(self): """Test manipulation of the timestamp counter flag""" - if re.match('i.86|x86_64', self.arch): + if re.match('i.86|x86_64', self.arch) or self.arch == 'aarch64': prctl.set_tsc(prctl.TSC_SIGSEGV) self.assertEqual(prctl.get_tsc(), prctl.TSC_SIGSEGV) prctl.set_tsc(prctl.TSC_ENABLE) From 6ed9a98f1e9125f286fbe65230ed524f88fec0cd Mon Sep 17 00:00:00 2001 From: Hugo Osvaldo Barrera Date: Sat, 30 Aug 2025 14:39:55 +0200 Subject: [PATCH 3/3] Fix mixup in test test_fp_mode called get_fpexc. This failed in architectures which support get_fpexc but not get_fp_mode. --- test_prctl.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test_prctl.py b/test_prctl.py index ee415e9..8c794f1 100644 --- a/test_prctl.py +++ b/test_prctl.py @@ -170,8 +170,8 @@ def test_fp_mode(self): self.assertEqual(prctl.get_fp_mode(), prctl.FP_MODE_FRE) self.assertRaises(ValueError, prctl.set_fp_mode, 999) else: - self.assertRaises(OSError, prctl.get_fpexc) - self.assertRaises(OSError, prctl.set_fpexc) + self.assertRaises(OSError, prctl.get_fp_mode) + self.assertRaises(ValueError, prctl.set_fp_mode) @require('set_io_flusher') def test_io_flusher(self):