Skip to content

Commit 7f87a5b

Browse files
committed
tor fixes.
1 parent 8ae255b commit 7f87a5b

File tree

4 files changed

+45
-24
lines changed

4 files changed

+45
-24
lines changed

wllvm/arglistfilter.py

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def __init__(self, inputList, exactMatches={}, patternMatches={}):
3939
'-S' : (0, ArgumentListFilter.assembleOnlyCallback),
4040

4141
'--verbose' : (0, ArgumentListFilter.verboseFlagCallback),
42-
'--param' : (1, ArgumentListFilter.defaultBinaryCallback),
42+
'--param' : (1, ArgumentListFilter.compileBinaryCallback),
4343
'-aux-info' : (1, ArgumentListFilter.defaultBinaryCallback),
4444

4545
#iam: presumably the len(inputFiles) == 0 in this case
@@ -219,7 +219,8 @@ def __init__(self, inputList, exactMatches={}, patternMatches={}):
219219
# Update: found a fix for problem 1: add flag -keep_private_externs when
220220
# calling ld -r.
221221
#
222-
'-Wl,-dead_strip' : (0, ArgumentListFilter.darwinWarningLinkUnaryCallback),
222+
'-Wl,-dead_strip' : (0, ArgumentListFilter.warningLinkUnaryCallback),
223+
'-dead_strip' : (0, ArgumentListFilter.warningLinkUnaryCallback),
223224
'-Oz' : (0, ArgumentListFilter.compileUnaryCallback), #did not find this in the GCC options.
224225
'-mno-global-merge' : (0, ArgumentListFilter.compileUnaryCallback), #clang (do not merge globals)
225226

@@ -285,6 +286,8 @@ def __init__(self, inputList, exactMatches={}, patternMatches={}):
285286
#iam: try and split the args into linker and compiler switches
286287
self.compileArgs = []
287288
self.linkArgs = []
289+
# currently only dead_strip belongs here; but I guess there could be more.
290+
self.forbiddenArgs = []
288291

289292

290293
self.isVerbose = False
@@ -419,13 +422,10 @@ def compileUnaryCallback(self, flag):
419422
_logger.debug('compileUnaryCallback: %s', flag)
420423
self.compileArgs.append(flag)
421424

422-
def darwinWarningLinkUnaryCallback(self, flag):
423-
_logger.debug('darwinWarningLinkUnaryCallback: %s', flag)
424-
if sys.platform.startswith('darwin'):
425-
_logger.warning('The flag "%s" cannot be used with this tool', flag)
426-
sys.exit(1)
427-
else:
428-
self.linkArgs.append(flag)
425+
def warningLinkUnaryCallback(self, flag):
426+
_logger.debug('warningLinkUnaryCallback: %s', flag)
427+
_logger.warning('The flag "%s" cannot be used with this tool; we are ignoring it', flag)
428+
self.forbiddenArgs.append(flag)
429429

430430
def defaultBinaryCallback(self, flag, arg):
431431
_logger.warning('Ignoring compiler arg pair: "%s %s"', flag, arg)

wllvm/compilers.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ def wcompile(mode):
3131
try:
3232
cmd = list(sys.argv)
3333
cmd = cmd[1:]
34+
3435
builder = getBuilder(cmd, mode)
3536

3637
af = builder.getBitcodeArglistFilter()
@@ -182,6 +183,16 @@ def __init__(self, cmd, mode, prefixPath=None):
182183
else:
183184
self.prefixPath = ''
184185

186+
def getCommand(self):
187+
if self.af is not None:
188+
# need to remove things like "-dead_strip"
189+
forbidden = self.af.forbiddenArgs
190+
if forbidden:
191+
for baddy in forbidden:
192+
self.cmd.remove(baddy)
193+
return self.cmd
194+
195+
185196
class ClangBuilder(BuilderBase):
186197
def getBitcodeCompiler(self):
187198
cc = self.getCompiler()
@@ -257,7 +268,7 @@ def getBuilder(cmd, mode):
257268

258269
def buildObject(builder):
259270
objCompiler = builder.getCompiler()
260-
objCompiler.extend(builder.cmd)
271+
objCompiler.extend(builder.getCommand())
261272
proc = Popen(objCompiler)
262273
rc = proc.wait()
263274
_logger.debug('buildObject rc = %d', rc)

wllvm/extraction.py

Lines changed: 20 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020

2121
from .filetype import FileType
2222

23-
from .logconfig import logConfig
23+
from .logconfig import logConfig, informUser
24+
2425

2526

2627
_logger = logConfig(__name__)
@@ -230,7 +231,7 @@ def archiveFiles(pArgs, fileNames):
230231
break
231232

232233
if retCode == 0:
233-
_logger.info('Generated LLVM bitcode archive %s', pArgs.outputFile)
234+
informUser('Generated LLVM bitcode archive {0}\n'.format(pArgs.outputFile))
234235
else:
235236
_logger.error('Failed to generate LLVM bitcode archive')
236237

@@ -347,6 +348,8 @@ def handleArchiveDarwin(pArgs):
347348
bitCodeFiles = [ ]
348349
retCode=0
349350
try:
351+
352+
350353
tempDir = tempfile.mkdtemp(suffix='wllvm')
351354
os.chdir(tempDir)
352355

@@ -358,19 +361,21 @@ def handleArchiveDarwin(pArgs):
358361
errorMsg = 'Your ar does not seem to be easy to find.\n'
359362
else:
360363
errorMsg = 'OS error({0}): {1}'.format(e.errno, e.strerror)
361-
logging.error(errorMsg)
364+
_logger.error(errorMsg)
362365
raise Exception(errorMsg)
363366

364367
arPE = arP.wait()
365368

366369
if arPE != 0:
367370
errorMsg = 'Failed to execute archiver with command {0}'.format(pArgs.arCmd)
368-
logging.error(errorMsg)
371+
_logger.error(errorMsg)
369372
raise Exception(errorMsg)
370373

374+
_logger.debug(2)
375+
371376
# Iterate over objects and examine their bitcode inserts
372377
for (root, dirs, files) in os.walk(tempDir):
373-
logging.debug('Exploring "{0}"'.format(root))
378+
_logger.debug('Exploring "{0}"'.format(root))
374379
for f in files:
375380
fPath = os.path.join(root, f)
376381
if FileType.getFileType(fPath) == pArgs.fileType:
@@ -381,18 +386,18 @@ def handleArchiveDarwin(pArgs):
381386
for bcFile in contents:
382387
if bcFile != '':
383388
if not os.path.exists(bcFile):
384-
logging.warning('{0} lists bitcode library "{1}" but it could not be found'.format(f, bcFile))
389+
_logger.warning('{0} lists bitcode library "{1}" but it could not be found'.format(f, bcFile))
385390
else:
386391
bitCodeFiles.append(bcFile)
387392
else:
388-
logging.info('Ignoring file "{0}" in archive'.format(f))
393+
_logger.info('Ignoring file "{0}" in archive'.format(f))
389394

390-
logging.info('Found the following bitcode file names to build bitcode archive:\n{0}'.format(
395+
_logger.info('Found the following bitcode file names to build bitcode archive:\n{0}'.format(
391396
pprint.pformat(bitCodeFiles)))
392397

393398
finally:
394399
# Delete the temporary folder
395-
logging.debug('Deleting temporary folder "{0}"'.format(tempDir))
400+
_logger.debug('Deleting temporary folder "{0}"'.format(tempDir))
396401
shutil.rmtree(tempDir)
397402

398403
#write the manifest file if asked for
@@ -496,8 +501,7 @@ def buildArchive(pArgs, bitCodeFiles):
496501
pArgs.outputFile = pArgs.inputFile
497502
pArgs.outputFile += '.' + moduleExtension
498503

499-
_logger.warning('Writing output to %s', pArgs.outputFile)
500-
504+
informUser('Writing output to {0}\n'.format(pArgs.outputFile))
501505
return linkFiles(pArgs, bitCodeFiles)
502506

503507
else:
@@ -512,8 +516,7 @@ def buildArchive(pArgs, bitCodeFiles):
512516
else:
513517
pArgs.outputFile = pArgs.inputFile + bcaExtension
514518

515-
_logger.warning('Writing output to %s', pArgs.outputFile)
516-
519+
informUser('Writing output to {0}\n'.format(pArgs.outputFile))
517520
return archiveFiles(pArgs, bitCodeFiles)
518521

519522

@@ -655,7 +658,10 @@ def process_file_darwin(pArgs):
655658
_logger.info('Generating LLVM Bitcode module')
656659
retval = handleExecutable(pArgs)
657660
elif ft == FileType.ARCHIVE:
658-
retval = handleArchiveDarwin(pArgs, True)
661+
_logger.info('Handling archive')
662+
retval = handleArchiveDarwin(pArgs)
663+
664+
659665
else:
660666
_logger.error('File "%s" of type %s cannot be used', pArgs.inputFile, FileType.revMap[ft])
661667
return retval

wllvm/logconfig.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,7 @@ def loggingConfiguration():
5050
destination = os.getenv(_loggingDestination)
5151
level = os.getenv(_loggingEnvLevel_new)
5252
return (destination, level)
53+
54+
55+
def informUser(msg):
56+
sys.stderr.write(msg)

0 commit comments

Comments
 (0)