-
Notifications
You must be signed in to change notification settings - Fork 15.2k
[lldb][test] Make Linux cpuinfo check more robust #160675
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
We were looking for any mention of the feature name in cpuinfo, which could have hit anything including features with common prefixes like sme, sme2, smefa64. Luckily this was not a problem but I'm changing this to find the features line and split the features into a list. Then we are only looking for exact matches. Here's the information for one core as an example: ``` processor : 7 BogoMIPS : 200.00 Features : fp asimd evtstrm crc32 atomics fphp asimdhp cpuid <...> CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd0f CPU revision : 0 ``` (and to avoid any doubt, this is from a CPU simulated in Arm's FVP, it's not real) Note that the layout of the label, colon, values is sometimes aligned but not always. So I trim whitespace a few times to normalise that. This repeats once for each core so we only need to find one features line.
|
We could also cache the file but:
|
|
@llvm/pr-subscribers-lldb Author: David Spickett (DavidSpickett) ChangesWe were looking for any mention of the feature name in cpuinfo, which could have hit anything including features with common prefixes like sme, sme2, smefa64. Luckily this was not a problem but I'm changing this to find the features line and split the features into a list. Then we are only looking for exact matches. Here's the information for one core as an example: (and to avoid any doubt, this is from a CPU simulated in Arm's FVP, it's not real) Note that the layout of the label, colon, values is sometimes aligned but not always. So I trim whitespace a few times to normalise that. This repeats once for each core so we only need to find one features line. Full diff: https://github.com/llvm/llvm-project/pull/160675.diff 1 Files Affected:
diff --git a/lldb/packages/Python/lldbsuite/test/cpu_feature.py b/lldb/packages/Python/lldbsuite/test/cpu_feature.py
index 3f43cbba130c0..9cdf46d688dd1 100644
--- a/lldb/packages/Python/lldbsuite/test/cpu_feature.py
+++ b/lldb/packages/Python/lldbsuite/test/cpu_feature.py
@@ -39,9 +39,16 @@ def _is_supported_linux(self, cmd_runner):
if err.Fail() or retcode != 0:
return output, False
- # FIXME: simple substring match, e.g., test for 'sme' will be true if
- # 'sme2' or 'smefa64' is present
- return None, (self.cpu_info_flag in output)
+ # Assume that every processor presents the same features.
+ # Look for the first "Features: ...." line.
+ for line in output.splitlines():
+ line = line.strip()
+ if line.startswith("Features"):
+ # Feature names are space separated.
+ features = line.split(":")[1].strip().split()
+ return None, (self.cpu_info_flag in features)
+
+ return f'No "Features:" line found in /proc/cpuinfo', False
def _is_supported_darwin(self, cmd_runner):
if not self.sysctl_key:
|
We were lucky that no one put another string field in cpuinfo too. |
yln
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Looks good, thanks!
One optional nit to use regex to streamline string parsing.
|
LLVM Buildbot has detected a new failure on builder Full details are available at: https://lab.llvm.org/buildbot/#/builders/181/builds/28659 Here is the relevant piece of the build log for the reference |
We were looking for any mention of the feature name in cpuinfo, which could have hit anything including features with common prefixes like sme, sme2, smefa64. Luckily this was not a problem but I'm changing this to find the features line and split the features into a list. Then we are only looking for exact matches. Here's the information for one core as an example: ``` processor : 7 BogoMIPS : 200.00 Features : fp asimd evtstrm crc32 atomics fphp asimdhp cpuid <...> CPU implementer : 0x41 CPU architecture: 8 CPU variant : 0x0 CPU part : 0xd0f CPU revision : 0 ``` (and to avoid any doubt, this is from a CPU simulated in Arm's FVP, it's not real) Note that the layout of the label, colon, values is sometimes aligned but not always. So I trim whitespace a few times to normalise that. This repeats once for each core so we only need to find one features line.
We were looking for any mention of the feature name in cpuinfo, which could have hit anything including features with common prefixes like sme, sme2, smefa64.
Luckily this was not a problem but I'm changing this to find the features line and split the features into a list. Then we are only looking for exact matches.
Here's the information for one core as an example:
(and to avoid any doubt, this is from a CPU simulated in Arm's FVP, it's not real)
Note that the layout of the label, colon, values is sometimes aligned but not always. So I trim whitespace a few times to normalise that.
This repeats once for each core so we only need to find one features line.