================ @@ -574,47 +591,67 @@ def bolt_optimize(args): opts = parser.parse_args(args) - output = subprocess.check_output( - [opts.readelf, "-WS", opts.input], universal_newlines=True - ) + inputs = opts.input.split(";") + instrumented_outputs = opts.instrumented_output.split(";") + assert len(inputs) == len( + instrumented_outputs + ), "inconsistent --input / --instrumented-output arguments" - # This binary has already been bolt-optimized, so skip further processing. - if re.search("\\.bolt\\.org\\.text", output, re.MULTILINE): + inputs, instrumented_outputs = filter_bolt_optimized(inputs, instrumented_outputs) + if not inputs: return 0 + environ = os.environ.copy() if opts.method == "INSTRUMENT": - process = subprocess.run( - [ + preloads = [] + for input, instrumented_output in zip(inputs, instrumented_outputs): + args = [ opts.bolt, - opts.input, + input, "-o", - opts.instrumented_output, + instrumented_output, "-instrument", "--instrumentation-file-append-pid", f"--instrumentation-file={opts.fdata}", - ], - stdout=subprocess.PIPE, - stderr=subprocess.STDOUT, - text=True, - ) + ] + print("Running: " + " ".join(args)) + process = subprocess.run( + args, + stdout=subprocess.PIPE, + stderr=subprocess.STDOUT, + text=True, + ) - print(process.args) - for line in process.stdout: - sys.stdout.write(line) - process.check_returncode() + for line in process.stdout: + sys.stdout.write(line) + process.check_returncode() + output = subprocess.check_output( + [opts.readelf, "--file-header", input], universal_newlines=True + ) + if re.search(r"Type:\s*((Shared)|(DYN))", output): + # force using the instrumented version + preloads.append(instrumented_output) + + if preloads: + print("Patching execution environment for dynamic library") + environ["LD_PRELOAD"] = os.pathsep.join(preloads) ---------------- tstellar wrote:
Why do we need this? https://github.com/llvm/llvm-project/pull/127020 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits