bugpoint - ferramenta automática de redução de casos de teste
bugpoint [options] [input LLVM ll/bc files] [LLVM passes] --args program arguments
bugpoint restringe a fonte de problemas nas ferramentas e passagens LLVM. Ele pode ser usado para depurar três tipos de falhas: falhas do otimizador, erros de compilação por otimizadores ou geração de código nativo ruim (incluindo problemas nos compiladores estáticos e JIT). O objetivo é reduzir grandes casos de teste a pequenos e úteis. Para obter mais informações sobre o design e o funcionamento interno do bugpoint, bem como conselhos sobre o uso do bugpoint, consulte ferramenta LLVM bugpoint: design and using na distribuição do LLVM.
Carregue a biblioteca do objeto compartilhado dinâmico no programa de teste sempre que for executado. Isso é útil se você estiver depurando programas que dependem de bibliotecas não LLVM (como as bibliotecas X ou curses) para serem executados.
Anexe o código de saída dos programas de teste ao arquivo de saída para que uma alteração no código de saída seja considerada uma falha de teste. O padrão é falso.
Passe todos os argumentos especificados após --args para o programa de teste sempre que ele for executado. Observe que se qualquer um dos args do programa começar com um "-", você deve usar:
bugpoint [bugpoint args] --args -- [program args]
O "--" logo após a opção --args diz ao bugpoint para considerar qualquer opção que comece com "- " para fazer parte da opção --args, não como opções para o próprio bugpoint.
Passe todos os argumentos especificados após --tool-args para a ferramenta LLVM em teste (llc, lli, etc.) sempre que ela for executada. Você deve usar esta opção da seguinte maneira:
bugpoint [bugpoint args] --tool-args -- [tool args]
O "--" logo após a opção --tool-args diz ao bugpoint para considerar qualquer opção que comece com "-" para fazer parte da opção --tool-args, não como opções para o próprio bugpoint. (Consulte --args, acima.)
Passe todos os argumentos especificados após --safe-tool-args para a ferramenta de execução "segura".
Passe todos os argumentos especificados após --gcc-tool-args para a chamada de gcc.
Passe todos os argumentos especificados após --opt-args para a chamada de opt.
Não execute as passagens especificadas para limpar e reduzir o tamanho do programa de teste. Por padrão, o bugpoint usa essas passagens internamente ao tentar reduzir os programas de teste. Se você está tentando encontrar um bug em uma dessas passagens, o bugpoint pode travar.
Use valgrind para encontrar falhas na fase de otimização. Isso permitirá que o bugpoint encontre problemas assintomáticos causados por gerenciamento incorreto de memória.
Randomize continuamente as passagens especificadas e execute-as no programa de teste até que um bug seja encontrado ou o usuário elimine o bugpoint.
Imprima um resumo das opções de linha de comando.
Abra filename e redirecione a entrada padrão do programa de teste, sempre que for executado, para vir desse arquivo.
Carregue o objeto dinâmico plugin no próprio bugpoint. Este objeto deve registrar novos passes de otimização. Depois de carregado, o objeto adicionará novas opções de linha de comando para permitir várias otimizações. Para ver a nova lista completa de otimizações, use as opções -help e --load juntas; por exemplo:
bugpoint --load myNewPass.so -help
Especifica um limite superior no uso de memória da otimização e codegen. Defina como zero para desativar o limite.
Sempre que o programa de teste produz saída em seu fluxo de saída padrão, ele deve corresponder ao conteúdo de filename (a "saída de referência"). Se você não usar esta opção, o bugpoint tentará gerar uma saída de referência compilando o programa com o back-end "seguro" e executando-o.
Sempre que o programa de teste for compilado, bugpoint deve gerar código para ele usando o gerador de código especificado. Essas opções permitem que você escolha o interpretador, o compilador JIT, o compilador de código nativo estático ou um comando personalizado (consulte --exec-command) respectivamente.
Ao depurar um gerador de código, o bugpoint deve usar o gerador de código especificado como o gerador de código "seguro". Este é um gerador de código conhecido usado para gerar a "saída de referência" se não tiver sido fornecida e para compilar partes do programa que foram excluídas do caso de teste. Essas opções permitem que você escolha o compilador de código nativo estático ou um comando personalizado (consulte --exec-command) respectivamente. O interpretador e os backends JIT não podem ser usados atualmente como backends "seguros".
Esta opção define o comando a ser usado com as opções --run-custom e --safe-custom para executar o caso de teste de bitcode. Isso pode ser útil para compilação cruzada.
Esta opção define o comando a ser usado com a opção --compile-custom para compilar o caso de teste de bitcode. O comando deve sair com um código de saída de falha se o arquivo for "interessante" e deve sair com um código de saída de sucesso (ou seja, 0) caso contrário (é o mesmo que travar em entradas "interessantes").
Isso pode ser útil para testar a saída do compilador sem executar nenhum link ou executar estágios. Para gerar um teste de unidade reduzido, você pode adicionar diretivas CHECK ao testcase e passar o nome de um script de comando de compilação executável neste formato:
#!/bin/sh llc "$@" not FileCheck [bugpoint input file].ll < bugpoint-test-program.s
Este script irá "falhar" enquanto o FileCheck for aprovado. Portanto, o resultado será o bitcode mínimo que passa no FileCheck.
Esta opção define o caminho para o comando a ser executado com a opção --safe-{int,jit,llc,custom}.
O comportamento padrão do bugpoint é imprimir "
Se o bugpoint conseguir encontrar um problema, ele sairá com 0. Caso contrário, se ocorrer um erro, ele sairá com um valor diferente de zero.
opt(1)
Mantido pela Equipe LLVM (https://llvm.org/).
2003-2023, Projeto LLVM