return snprintf(buf, bufsz, "%s", x86_exc_short_name(vec));
}
+bool arch_fmt_pointer(
+ char **str_ptr, char *end, const char **fmt_ptr, const void *arg,
+ int width, int precision, unsigned int flags)
+{
+ const char *fmt = *fmt_ptr;
+ char *str = *str_ptr;
+
+ switch ( fmt[1] )
+ {
+ case 'e':
+ {
+ exinfo_t ex = _u(arg);
+ char buf[16];
+
+ /* Consumed 'e' from the format string. */
+ ++*fmt_ptr;
+
+ x86_decode_exinfo(buf, sizeof buf, ex);
+
+ str = fmt_string(str, end, buf, width, precision, flags);
+ break;
+ }
+
+ default:
+ return false;
+ }
+
+ *str_ptr = str;
+ return true;
+}
+
/*
* Local variables:
* mode: C
}
}
break;
+
+ default:
+ if ( arch_fmt_pointer(&str, end, fmt_ptr,
+ arg, width, precision, flags) )
+ return str;
}
/* Fall back to plain 32/64bit hex integer. */
char *fmt_string(char *str, char *end, const char *val,
int width, int precision, unsigned int flags);
+/* Arch hook for vsnprintf() custom %p handling. */
+bool arch_fmt_pointer(
+ char **str, char *end, const char **fmt_ptr, const void *arg,
+ int width, int precision, unsigned int flags);
+
#endif /* XTF_LIBC_H */
/*