intel/tools: Initialize offset correctly for i965_asm
If we leave offset uninitialized, access to store will be random depending on stack value and can segfault. Signed-off-by: Mika Kuoppala <mika.kuoppala@linux.intel.com> Reviewed-by: Sagar Ghuge <sagar.ghuge@intel.com> Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:

committed by
Matt Turner

parent
85da1194ec
commit
1fb5ce0a11
@@ -29,7 +29,7 @@
|
|||||||
extern FILE *yyin;
|
extern FILE *yyin;
|
||||||
struct brw_codegen *p;
|
struct brw_codegen *p;
|
||||||
static int c_literal_output = 0;
|
static int c_literal_output = 0;
|
||||||
char *input_filename;
|
char *input_filename = NULL;
|
||||||
int errors;
|
int errors;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@@ -98,7 +98,7 @@ int main(int argc, char **argv)
|
|||||||
bool help = false, compact = false;
|
bool help = false, compact = false;
|
||||||
void *store;
|
void *store;
|
||||||
uint64_t pci_id = 0;
|
uint64_t pci_id = 0;
|
||||||
int offset, err;
|
int offset = 0, err;
|
||||||
int start_offset = 0;
|
int start_offset = 0;
|
||||||
struct disasm_info *disasm_info;
|
struct disasm_info *disasm_info;
|
||||||
struct gen_device_info *devinfo;
|
struct gen_device_info *devinfo;
|
||||||
@@ -205,13 +205,11 @@ int main(int argc, char **argv)
|
|||||||
brw_validate_instructions(p->devinfo, p->store, 0,
|
brw_validate_instructions(p->devinfo, p->store, 0,
|
||||||
p->next_insn_offset, disasm_info);
|
p->next_insn_offset, disasm_info);
|
||||||
|
|
||||||
int nr_insn = (p->next_insn_offset - start_offset) / 16;
|
const int nr_insn = (p->next_insn_offset - start_offset) / 16;
|
||||||
|
|
||||||
if (compact)
|
if (compact)
|
||||||
brw_compact_instructions(p, start_offset, disasm_info);
|
brw_compact_instructions(p, start_offset, disasm_info);
|
||||||
|
|
||||||
ralloc_free(disasm_info);
|
|
||||||
|
|
||||||
for (int i = 0; i < nr_insn; i++) {
|
for (int i = 0; i < nr_insn; i++) {
|
||||||
const brw_inst *insn = store + offset;
|
const brw_inst *insn = store + offset;
|
||||||
bool compacted = false;
|
bool compacted = false;
|
||||||
@@ -226,6 +224,8 @@ int main(int argc, char **argv)
|
|||||||
print_instruction(output, compacted, insn);
|
print_instruction(output, compacted, insn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ralloc_free(disasm_info);
|
||||||
|
|
||||||
if (c_literal_output)
|
if (c_literal_output)
|
||||||
fprintf(output, "}");
|
fprintf(output, "}");
|
||||||
|
|
||||||
@@ -233,11 +233,8 @@ int main(int argc, char **argv)
|
|||||||
goto end;
|
goto end;
|
||||||
|
|
||||||
end:
|
end:
|
||||||
if (input_filename)
|
free(input_filename);
|
||||||
free(input_filename);
|
free(output_file);
|
||||||
|
|
||||||
if (output_file)
|
|
||||||
free(output_file);
|
|
||||||
|
|
||||||
if (yyin)
|
if (yyin)
|
||||||
fclose(yyin);
|
fclose(yyin);
|
||||||
|
Reference in New Issue
Block a user