Skip to content

[M680X] errors logged to stdout, which is not suitable for kernel code #1483

Closed
@tmfink

Description

@tmfink

The Problem

We can see that the M680X includes calls to fprintf(stderr, ".."):

$ grep -rn fprintf arch/ *.c *.h windows*
Binary file arch/M680X/M680XDisassembler.o matches
arch/M680X/M680XInstPrinter.c:339:              fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XInstPrinter.c:346:              fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XInstPrinter.c:353:              fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:935:                     fprintf(stderr, "Internal error: Unexpected instruction "
arch/M680X/M680XDisassembler.c:1117:            fprintf(stderr, "Internal error: Unexpected operand0 register "
arch/M680X/M680XDisassembler.c:1563:            fprintf(stderr, "Internal error: Unexpected immediate byte "
arch/M680X/M680XDisassembler.c:1769:            fprintf(stderr, "Internal error: Unexpected post byte "
arch/M680X/M680XDisassembler.c:2148:            fprintf(stderr, "M680X_CPU_TYPE_%s is not suppported\n",
arch/M680X/M680XDisassembler.c:2227:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2234:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2241:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2248:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2255:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2262:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2269:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2276:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2283:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2290:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2297:            fprintf(stderr, "Internal error: Size mismatch in enum "
arch/M680X/M680XDisassembler.c:2304:            fprintf(stderr, "Internal error: Size mismatch in enum "

This would not work in code such as kernel code that do not support

$ nm libcapstone.so.5 | grep ' U' | awk '{ print $2 }' | sed 's/@@.*//' | sort -u
abort
__assert_fail
calloc
__fprintf_chk
free
malloc
memcpy
memmove
realloc
__sprintf_chk
__stack_chk_fail
stderr
strchr
strcmp
strcpy
__strcpy_chk
strlen
strncmp
strncpy
strrchr
strstr
strtol
vsnprintf

Potential solutions

  1. Remove fprintf lines
    • simplest option
  2. Add cs_err variant; add handling in cs_strerror()
  3. Replace with other logging alternative
    • Allow user to define a logging callback in csh with something like cs_set_log_callback; define cs_log_t

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions