2020-09-30 17:12:29 +02:00

368 lines
9.7 KiB
C

/***********************************************************************
* Microsoft (R) Debugging Information Dumper
*
* Copyright (C) Microsoft Corp 1987-1995. All rights reserved.
*
* File: dumptyp7.c
*
* File Comments:
*
***********************************************************************/
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include "cvdef.h"
#ifndef CC_BIGINT
#define CC_BIGINT 1
#endif
#include "cvinfo.h"
#include "cvexefmt.h"
#include "cvdump.h" // Miscellaneous definitions
#include "cvtdef.h"
typedef struct TYPNAME
{
CV_typ_t typind; // Constant value
const char *name; // Name of constant used to define
} TYPNAME;
// Used to relate typeind to constant name
#define MAKE_TYPNAME(typ) { typ, #typ }
// A lookup table is used because speed is not important but ease
// of modification is.
const TYPNAME typnameC7[] = {
// CHAR Types
MAKE_TYPNAME(T_CHAR),
MAKE_TYPNAME(T_UCHAR),
MAKE_TYPNAME(T_PCHAR),
MAKE_TYPNAME(T_PUCHAR),
MAKE_TYPNAME(T_PFCHAR),
MAKE_TYPNAME(T_PFUCHAR),
MAKE_TYPNAME(T_PHCHAR),
MAKE_TYPNAME(T_PHUCHAR),
MAKE_TYPNAME(T_32PCHAR),
MAKE_TYPNAME(T_32PUCHAR),
MAKE_TYPNAME(T_32PFCHAR),
MAKE_TYPNAME(T_32PFUCHAR),
// SHORT Types
MAKE_TYPNAME(T_SHORT),
MAKE_TYPNAME(T_USHORT),
MAKE_TYPNAME(T_PSHORT),
MAKE_TYPNAME(T_PUSHORT),
MAKE_TYPNAME(T_PFSHORT),
MAKE_TYPNAME(T_PFUSHORT),
MAKE_TYPNAME(T_PHSHORT),
MAKE_TYPNAME(T_PHUSHORT),
MAKE_TYPNAME(T_32PSHORT),
MAKE_TYPNAME(T_32PUSHORT),
MAKE_TYPNAME(T_32PFSHORT),
MAKE_TYPNAME(T_32PFUSHORT),
// LONG Types
MAKE_TYPNAME(T_LONG),
MAKE_TYPNAME(T_ULONG),
MAKE_TYPNAME(T_PLONG),
MAKE_TYPNAME(T_PULONG),
MAKE_TYPNAME(T_PFLONG),
MAKE_TYPNAME(T_PFULONG),
MAKE_TYPNAME(T_PHLONG),
MAKE_TYPNAME(T_PHULONG),
MAKE_TYPNAME(T_32PLONG),
MAKE_TYPNAME(T_32PULONG),
MAKE_TYPNAME(T_32PFLONG),
MAKE_TYPNAME(T_32PFULONG),
// REAL32 Types
MAKE_TYPNAME(T_REAL32),
MAKE_TYPNAME(T_PREAL32),
MAKE_TYPNAME(T_PFREAL32),
MAKE_TYPNAME(T_PHREAL32),
MAKE_TYPNAME(T_32PREAL32),
MAKE_TYPNAME(T_32PFREAL32),
// REAL48 Types
MAKE_TYPNAME(T_REAL48),
MAKE_TYPNAME(T_PREAL48),
MAKE_TYPNAME(T_PFREAL48),
MAKE_TYPNAME(T_PHREAL48),
MAKE_TYPNAME(T_32PREAL48),
MAKE_TYPNAME(T_32PFREAL48),
// REAL64 Types
MAKE_TYPNAME(T_REAL64),
MAKE_TYPNAME(T_PREAL64),
MAKE_TYPNAME(T_PFREAL64),
MAKE_TYPNAME(T_PHREAL64),
MAKE_TYPNAME(T_32PREAL64),
MAKE_TYPNAME(T_32PFREAL64),
// REAL80 Types
MAKE_TYPNAME(T_REAL80),
MAKE_TYPNAME(T_PREAL80),
MAKE_TYPNAME(T_PFREAL80),
MAKE_TYPNAME(T_PHREAL80),
MAKE_TYPNAME(T_32PREAL80),
MAKE_TYPNAME(T_32PFREAL80),
// REAL128 Types
MAKE_TYPNAME(T_REAL128),
MAKE_TYPNAME(T_PREAL128),
MAKE_TYPNAME(T_PFREAL128),
MAKE_TYPNAME(T_PHREAL128),
MAKE_TYPNAME(T_32PREAL128),
MAKE_TYPNAME(T_32PFREAL128),
// CPLX32 Types
MAKE_TYPNAME(T_CPLX32),
MAKE_TYPNAME(T_PCPLX32),
MAKE_TYPNAME(T_PFCPLX32),
MAKE_TYPNAME(T_PHCPLX32),
MAKE_TYPNAME(T_32PCPLX32),
MAKE_TYPNAME(T_32PFCPLX32),
// CPLX64 Types
MAKE_TYPNAME(T_CPLX64),
MAKE_TYPNAME(T_PCPLX64),
MAKE_TYPNAME(T_PFCPLX64),
MAKE_TYPNAME(T_PHCPLX64),
MAKE_TYPNAME(T_32PCPLX64),
MAKE_TYPNAME(T_32PFCPLX64),
// CPLX80 Types
MAKE_TYPNAME(T_CPLX80),
MAKE_TYPNAME(T_PCPLX80),
MAKE_TYPNAME(T_PFCPLX80),
MAKE_TYPNAME(T_PHCPLX80),
MAKE_TYPNAME(T_32PCPLX80),
MAKE_TYPNAME(T_32PFCPLX80),
// CPLX128 Types
MAKE_TYPNAME(T_CPLX128),
MAKE_TYPNAME(T_PCPLX128),
MAKE_TYPNAME(T_PFCPLX128),
MAKE_TYPNAME(T_PHCPLX128),
MAKE_TYPNAME(T_32PCPLX128),
MAKE_TYPNAME(T_32PFCPLX128),
// BOOL Types
MAKE_TYPNAME(T_BOOL08),
MAKE_TYPNAME(T_BOOL16),
MAKE_TYPNAME(T_BOOL32),
MAKE_TYPNAME(T_BOOL64),
MAKE_TYPNAME(T_PBOOL08),
MAKE_TYPNAME(T_PBOOL16),
MAKE_TYPNAME(T_PBOOL32),
MAKE_TYPNAME(T_PBOOL64),
MAKE_TYPNAME(T_PFBOOL08),
MAKE_TYPNAME(T_PFBOOL16),
MAKE_TYPNAME(T_PFBOOL32),
MAKE_TYPNAME(T_PFBOOL64),
MAKE_TYPNAME(T_PHBOOL08),
MAKE_TYPNAME(T_PHBOOL16),
MAKE_TYPNAME(T_PHBOOL32),
MAKE_TYPNAME(T_PHBOOL64),
MAKE_TYPNAME(T_32PBOOL08),
MAKE_TYPNAME(T_32PBOOL16),
MAKE_TYPNAME(T_32PBOOL32),
MAKE_TYPNAME(T_32PBOOL64),
MAKE_TYPNAME(T_32PFBOOL08),
MAKE_TYPNAME(T_32PFBOOL16),
MAKE_TYPNAME(T_32PFBOOL32),
MAKE_TYPNAME(T_32PFBOOL64),
// Special Types
MAKE_TYPNAME(T_NOTYPE),
MAKE_TYPNAME(T_ABS),
MAKE_TYPNAME(T_SEGMENT),
MAKE_TYPNAME(T_VOID),
MAKE_TYPNAME(T_PVOID),
MAKE_TYPNAME(T_PFVOID),
MAKE_TYPNAME(T_PHVOID),
MAKE_TYPNAME(T_32PVOID),
MAKE_TYPNAME(T_32PFVOID),
MAKE_TYPNAME(T_CURRENCY),
MAKE_TYPNAME(T_NBASICSTR),
MAKE_TYPNAME(T_FBASICSTR),
MAKE_TYPNAME(T_NOTTRANS),
MAKE_TYPNAME(T_BIT),
MAKE_TYPNAME(T_PASCHAR),
// Integer types
MAKE_TYPNAME(T_RCHAR),
MAKE_TYPNAME(T_PRCHAR),
MAKE_TYPNAME(T_PFRCHAR),
MAKE_TYPNAME(T_PHRCHAR),
MAKE_TYPNAME(T_32PRCHAR),
MAKE_TYPNAME(T_32PFRCHAR),
MAKE_TYPNAME(T_WCHAR),
MAKE_TYPNAME(T_PWCHAR),
MAKE_TYPNAME(T_PFWCHAR),
MAKE_TYPNAME(T_PHWCHAR),
MAKE_TYPNAME(T_32PWCHAR),
MAKE_TYPNAME(T_32PFWCHAR),
MAKE_TYPNAME(T_INT1),
MAKE_TYPNAME(T_UINT1),
MAKE_TYPNAME(T_PINT1),
MAKE_TYPNAME(T_PUINT1),
MAKE_TYPNAME(T_PFINT1),
MAKE_TYPNAME(T_PFUINT1),
MAKE_TYPNAME(T_PHINT1),
MAKE_TYPNAME(T_PHUINT1),
MAKE_TYPNAME(T_32PINT1),
MAKE_TYPNAME(T_32PUINT1),
MAKE_TYPNAME(T_32PFINT1),
MAKE_TYPNAME(T_32PFUINT1),
MAKE_TYPNAME(T_INT2),
MAKE_TYPNAME(T_UINT2),
MAKE_TYPNAME(T_PINT2),
MAKE_TYPNAME(T_PUINT2),
MAKE_TYPNAME(T_PFINT2),
MAKE_TYPNAME(T_PFUINT2),
MAKE_TYPNAME(T_PHINT2),
MAKE_TYPNAME(T_PHUINT2),
MAKE_TYPNAME(T_32PINT2),
MAKE_TYPNAME(T_32PUINT2),
MAKE_TYPNAME(T_32PFINT2),
MAKE_TYPNAME(T_32PFUINT2),
MAKE_TYPNAME(T_INT4),
MAKE_TYPNAME(T_UINT4),
MAKE_TYPNAME(T_PINT4),
MAKE_TYPNAME(T_PUINT4),
MAKE_TYPNAME(T_PFINT4),
MAKE_TYPNAME(T_PFUINT4),
MAKE_TYPNAME(T_PHINT4),
MAKE_TYPNAME(T_PHUINT4),
MAKE_TYPNAME(T_32PINT4),
MAKE_TYPNAME(T_32PUINT4),
MAKE_TYPNAME(T_32PFINT4),
MAKE_TYPNAME(T_32PFUINT4),
MAKE_TYPNAME(T_QUAD),
MAKE_TYPNAME(T_UQUAD),
MAKE_TYPNAME(T_PQUAD),
MAKE_TYPNAME(T_PUQUAD),
MAKE_TYPNAME(T_PFQUAD),
MAKE_TYPNAME(T_PFUQUAD),
MAKE_TYPNAME(T_PHQUAD),
MAKE_TYPNAME(T_PHUQUAD),
MAKE_TYPNAME(T_32PQUAD),
MAKE_TYPNAME(T_32PUQUAD),
MAKE_TYPNAME(T_32PFQUAD),
MAKE_TYPNAME(T_32PFUQUAD),
MAKE_TYPNAME(T_INT8),
MAKE_TYPNAME(T_UINT8),
MAKE_TYPNAME(T_PINT8),
MAKE_TYPNAME(T_PUINT8),
MAKE_TYPNAME(T_PFINT8),
MAKE_TYPNAME(T_PFUINT8),
MAKE_TYPNAME(T_PHINT8),
MAKE_TYPNAME(T_PHUINT8),
MAKE_TYPNAME(T_32PINT8),
MAKE_TYPNAME(T_32PUINT8),
MAKE_TYPNAME(T_32PFINT8),
MAKE_TYPNAME(T_32PFUINT8),
MAKE_TYPNAME(T_OCT),
MAKE_TYPNAME(T_UOCT),
MAKE_TYPNAME(T_POCT),
MAKE_TYPNAME(T_PUOCT),
MAKE_TYPNAME(T_PFOCT),
MAKE_TYPNAME(T_PFUOCT),
MAKE_TYPNAME(T_PHOCT),
MAKE_TYPNAME(T_PHUOCT),
MAKE_TYPNAME(T_32POCT),
MAKE_TYPNAME(T_32PUOCT),
MAKE_TYPNAME(T_32PFOCT),
MAKE_TYPNAME(T_32PFUOCT),
MAKE_TYPNAME(T_INT16),
MAKE_TYPNAME(T_UINT16),
MAKE_TYPNAME(T_PINT16),
MAKE_TYPNAME(T_PUINT16),
MAKE_TYPNAME(T_PFINT16),
MAKE_TYPNAME(T_PFUINT16),
MAKE_TYPNAME(T_PHINT16),
MAKE_TYPNAME(T_PHUINT16),
MAKE_TYPNAME(T_32PINT16),
MAKE_TYPNAME(T_32PUINT16),
MAKE_TYPNAME(T_32PFINT16),
MAKE_TYPNAME(T_32PFUINT16),
MAKE_TYPNAME(T_NCVPTR),
MAKE_TYPNAME(T_FCVPTR),
MAKE_TYPNAME(T_HCVPTR),
MAKE_TYPNAME(T_32NCVPTR),
MAKE_TYPNAME(T_32FCVPTR),
MAKE_TYPNAME(T_64NCVPTR),
};
const char *SzNameC7Type(ushort type)
{
static char buf[40];
int i;
if (type >= CV_FIRST_NONPRIM) { // Not primitive
sprintf(buf, "0x%04x", type);
return(buf);
}
for (i = 0; i < sizeof (typnameC7) / sizeof (typnameC7[0]); i++) {
if( typnameC7[i].typind == type ){
sprintf (buf, "%s(0x%04x)", typnameC7[i].name, type);
return( buf );
}
}
sprintf(buf, "%s(0x%04x)", "???", type);
return(buf);
}
// Right justifies the type name
const char *SzNameC7Type2(ushort type)
{
static char buf2[40];
int i;
if (type >= CV_FIRST_NONPRIM) { // Not primitive
sprintf (buf2, "%11s0x%04x", "", type);
return (buf2);
}
for (i = 0; i < sizeof (typnameC7) / sizeof (typnameC7[0]); i++) {
if( typnameC7[i].typind == type ){
sprintf (buf2, "%9s(0x%04x)", typnameC7[i].name, type);
return( buf2 );
}
}
sprintf(buf2, "%9s(0x%04x)", "???", type);
return(buf2);
}