@@ -387,11 +387,42 @@ def load_flags(self):
387387@pytest .mark .skipif (not is_linux or not is_power , reason = "Only for Linux and Power" )
388388class Test_POWER_Features (AbstractTest ):
389389 features = ["VSX" , "VSX2" , "VSX3" , "VSX4" ]
390- features_map = { "VSX" : "ARCH_2_06" , "VSX2" : "ARCH_2_07" , "VSX3" : "ARCH_3_00" , "VSX4" : "ARCH_3_1" }
390+ features_map = {
391+ "VSX" : "ARCH_2_06" ,
392+ "VSX2" : "ARCH_2_07" ,
393+ "VSX3" : "ARCH_3_00" ,
394+ "VSX4" : "ARCH_3_1B"
395+ }
391396
392397 def load_flags (self ):
393398 self .load_flags_auxv ()
394- self .features_flags .add ("ARCH_2_06" )
399+ platform = self ._get_platform ()
400+
401+ if platform :
402+ power_match = re .search (r'power(\d+)' , platform , re .IGNORECASE )
403+ if power_match :
404+ power_gen = int (power_match .group (1 ))
405+ if power_gen >= 7 :
406+ self .features_flags .add ("ARCH_2_06" )
407+ if power_gen >= 8 :
408+ self .features_flags .add ("ARCH_2_07" )
409+ if power_gen >= 9 :
410+ self .features_flags .add ("ARCH_3_00" )
411+ if power_gen >= 10 :
412+ self .features_flags .add ("ARCH_3_1B" )
413+
414+ def _get_platform (self ):
415+ """Get the AT_PLATFORM value from AUXV"""
416+ try :
417+ auxv = subprocess .check_output (['/bin/true' ], env = {"LD_SHOW_AUXV" : "1" })
418+ for line in auxv .split (b'\n ' ):
419+ if line .startswith (b'AT_PLATFORM' ):
420+ parts = line .split (b':' , 1 )
421+ if len (parts ) == 2 :
422+ return parts [1 ].strip ().decode ().lower ()
423+ except Exception :
424+ pass
425+ return None
395426
396427
397428is_zarch = re .match (r"^(s390x)" , machine , re .IGNORECASE )
0 commit comments