{
int i;
long l;
+ long long ll;
void *p;
bfd_vma v;
struct {
Bad,
Int,
Long,
+ LongLong,
Ptr,
Vma,
RelAddr
break;
case 'l':
+ bool ll_type = false;
+ if (*scan == 'l')
+ {
+ ll_type = true;
+ ++scan;
+ }
if (*scan == 'd' || *scan == 'u' || *scan == 'x')
{
++scan;
- arg_type = Long;
+ arg_type = (ll_type ? LongLong : Long);
}
break;
case Long:
args[arg_no].l = va_arg (ap, long);
break;
+ case LongLong:
+ args[arg_no].ll = va_arg (ap, long long);
+ break;
case Ptr:
args[arg_no].p = va_arg (ap, void *);
break;
++arg_count;
break;
- case 'l': /* (Unsigned) long integer, like printf(). */
+ case 'l': /* (Unsigned) (long) long integer, like printf(). */
+ bool ll_type = false;
+ if (*fmt == 'l')
+ {
+ fmt++;
+ ll_type = true;
+ }
if (*fmt == 'd' || *fmt == 'u' || *fmt == 'x')
{
- cfmt = make_cfmt (fmt - 1 - mods, mods + 2);
- fprintf (fp, cfmt, args[arg_no].l);
+ unsigned int mods_len = (ll_type ? 2 : 1);
+ cfmt = make_cfmt (fmt - mods_len - mods, mods + mods_len + 1);
+ if (ll_type)
+ fprintf (fp, cfmt, args[arg_no].ll);
+ else
+ fprintf (fp, cfmt, args[arg_no].l);
free (cfmt);
++arg_count;
++fmt;