Use try..finally in compiler.targets.Target.link.

This commit is contained in:
whitequark 2015-07-30 10:33:54 +03:00
parent b0185f3917
commit 1e3911ed39

View File

@ -8,7 +8,7 @@ llvm.initialize_all_asmprinters()
class Target:
"""
A description of the target environment where the binaries
generaed by the ARTIQ compiler will be deployed.
generated by the ARTIQ compiler will be deployed.
:var triple: (string)
LLVM target triple, e.g. ``"or1k"``
@ -36,21 +36,20 @@ class Target:
f.flush()
return f
output_file = make_tempfile()
cmdline = [self.triple + "-ld", "-shared", "--eh-frame-hdr", "-init", init_fn] + \
[make_tempfile(obj).name for obj in objects] + \
["-o", output_file.name]
linker = subprocess.Popen(cmdline, stderr=subprocess.PIPE)
stdout, stderr = linker.communicate()
if linker.returncode != 0:
raise Exception("Linker invocation failed: " + stderr.decode('utf-8'))
try:
output_file = make_tempfile()
cmdline = [self.triple + "-ld", "-shared", "--eh-frame-hdr", "-init", init_fn] + \
[make_tempfile(obj).name for obj in objects] + \
["-o", output_file.name]
linker = subprocess.Popen(cmdline, stderr=subprocess.PIPE)
stdout, stderr = linker.communicate()
if linker.returncode != 0:
raise Exception("Linker invocation failed: " + stderr.decode('utf-8'))
output = output_file.read()
for f in files:
f.close()
return output
return output_file.read()
finally:
for f in files:
f.close()
def compile(self, module):
"""Compile the module to a relocatable object for this target."""