================ @@ -333,3 +335,41 @@ def expectedCompiler(compilers): return True return False + + +# This is a helper function to determine if a specific version of Xcode's linker +# contains a TLS bug. We want to skip TLS tests if they contain this bug, but +# adding a linker/linker_version conditions to a decorator is challenging due to +# the number of ways linkers can enter the build process. +def darwinLinkerHasTLSBug(): + """Returns true iff a test is running on a darwin platform and the host linker is between versions 1000 and 1109.""" + darwin_platforms = lldbplatform.translate(lldbplatform.darwin_all) + if getPlatform() not in darwin_platforms: + return False + + linker_path = ( + subprocess.check_output(["xcrun", "--find", "ld"]).rstrip().decode("utf-8") + ) + if not is_exe(linker_path): + return False + + raw_linker_info = ( + subprocess.check_output([linker_path, "-version_details"]) + .rstrip() + .decode("utf-8") + ) + parsed_linker_info = json.loads(raw_linker_info) + if "version" not in parsed_linker_info: + return False + + raw_version = parsed_linker_info["version"] + version = None + try: + version = int(raw_version) ---------------- kastiglione wrote:
`float` also isn't sufficient, since some versions can contain 3 separate numbers (ie `100.5.8`). In my related PR, I used this: ```py version_tuple = tuple(int(x) for x in version.split(".")) if (1000,) <= version_tuple <= (1109,): # handle bug ``` Comparisons of tuples appear to behave as desired. https://github.com/llvm/llvm-project/pull/83941 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits