From: Gabriel Corona Date: Mon, 29 Feb 2016 09:20:36 +0000 (+0100) Subject: [mc] Port stack-cleaner/as in Python X-Git-Tag: v3_13~632^2 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/085e04235ab064182e828e2d25f389b64d81dc12?hp=a4ef63d3afd5abd2f09d4590a3cdffa98a054e43 [mc] Port stack-cleaner/as in Python This time we are Ruby-free. --- diff --git a/tools/stack-cleaner/as b/tools/stack-cleaner/as index 46446cb3f0..a3a385d45d 100755 --- a/tools/stack-cleaner/as +++ b/tools/stack-cleaner/as @@ -1,59 +1,52 @@ -#!/usr/bin/env ruby +#!/usr/bin/env python # Wrapper around the real `as` which adds filtering capabilities. -require "tempfile" -require "fileutils" - -def wrapped_as(argv) - - args=[] - input=nil - - i = 0 - while i= len(sys.argv): + sys.stderr.write("Missing argument\n") + sys.exit(1) + args.append(sys.argv[i+1]) + i = i + 1 + elif re.match('^-', sys.argv[i][0]): + args.append(sys.argv[i]) + elif input_filename: + sys.stdout.write("Too many input files\n") + sys.exit(1) + else: + input_filename = sys.argv[i] i = i + 1 - end - - if input==nil - # We dont handle pipe yet: - exit 1 - end - - # Generate temp file - tempfile = Tempfile.new("as-filter") - tempfile.close - script = File.dirname($0) + "/clean-stack-filter" - unless system([script, script], 0 => input, 1 => tempfile.path) - status=$?.exitstatus - FileUtils.rm tempfile - exit status - end - args.push(tempfile.path) - - # Call the real assembler: - res = system("as", *args) - status = if res != nil - $?.exitstatus - else - 1 - end - FileUtils.rm tempfile - exit status - -end - -wrapped_as(ARGV) +if input_filename == None: + sys.stderr.write("Missing input file\n") + sys.exit(1) + +temp_file, temp_filename = tempfile.mkstemp(suffix=".s", prefix="as_wrapper") +try: + # Generate temporary file with modified assembly code: + script_file = os.path.join(os.path.dirname(sys.argv[0]), "clean-stack-filter") + input_file = os.open(input_filename, os.O_RDONLY) + status = subprocess.call([script_file], stdin=input_file, stdout=temp_file) + os.close(input_file) + if status != 0: + sys.stderr.write("Filtering the assembly code failed.\n") + sys.exit(status) + + # Call the real assembler on this modified assembly code: + args.append(temp_filename) + sys.exit(subprocess.call(args)) +finally: + os.remove(temp_filename)