diff --git a/src/amd/compiler/aco_print_asm.cpp b/src/amd/compiler/aco_print_asm.cpp index 2e6519fe57b..d4b0e0edbcf 100644 --- a/src/amd/compiler/aco_print_asm.cpp +++ b/src/amd/compiler/aco_print_asm.cpp @@ -69,11 +69,17 @@ void print_asm_gfx6_gfx7(Program *program, std::vector& binary, sprintf(command, "clrxdisasm --gpuType=%s -r %s", gpu_type, path); p = popen(command, "r"); - if (!p || errno == ENOENT) { - out << "clrxdisasm not found\n"; - } else { - while (fgets(line, sizeof(line), p)) + if (p) { + if (!fgets(line, sizeof(line), p)) { + out << "clrxdisasm not found\n"; + pclose(p); + goto fail; + } + + do { out << line; + } while (fgets(line, sizeof(line), p)); + pclose(p); }