Daniel Jacobowitz wrote: > A standard printf. We're not trying to print out new things, we're > trying to print out standard things using different sorts of arguments. > > Here's an example. You can open up GDB and say this: > > (gdb) printf "%lld\n", 1 > 1
OK, thanks, I see the intent and the cross-compilation issues... > > How does what you need compare with the register_printf_function / > > parse_printf_format facility in glibc's public header file <printf.h> ? > > Wow, I knew about register_printf_function, but I'd never noticed > parse_printf_format before. But without the other part, which constructs the output string, this function is useless to gdb, right? So there's no point in gnulib trying to make a 100% glibc compatible parse_printf_format. > printf breaks down into three stages: parsing the format string, > recovering the arguments, and constructing the output string. We need > completely normal versions of the first and third, but a non-va_arg > based version of the second. Are you sure you can use the parsing stage and the output stage without modifications? - In the parsing phase, you need to recognize %lld also if the host environment doesn't support long longs (e.g. on MSVC hosts). This means the #ifdef HAVE_LONG_LONG_INT in printf-args.h needs to be adjusted for your use case. - In the output stage, when the host has 32-bit 'long's and the target environment has 64-bit 'long's, the output routine that converts a 'long' to decimal needs to be able to produce 20 decimal digits, not just 10. - Also in the output stage, when you encounter a %ls directive with a wide string argument, to you perform the wcstombs on the host machine or on the target machine? Bruno