I have identified a routine that behaves exactly like printf in an ARM64 binary. Arguments are passed in the standard fashion (e.g. X0, X1, X2 ...) and I have given the function the signature (Y) of:
int printf(char* fmt, ...)
This does the "right thing" some of the time, but not very frequently. Usually it'll miss any arguments after the second one.
Is there any way to tell HexRays more about this routine, so that it "does the right thing" and displays the data correctly? As an example, one of the lines is effectively:
printf("%s: %s: foo: 0x%llx, bar: 0x%llx, baz: %u\n", "function_name");
When it should have several more arguments, as indicated by the format string (and which are actually loaded into registers immediately before the call).