From 33613a85afc4b1481367fbe92a17ee59c240250b Mon Sep 17 00:00:00 2001 From: Sven Eisenhauer Date: Fri, 10 Nov 2023 15:11:48 +0100 Subject: add new repo --- .../ARM202U/SOURCE/WIN32/CLX/ASDFMT.H | 473 +++++++++++++++++++++ 1 file changed, 473 insertions(+) create mode 100644 Bachelor/Mikroprozessorsysteme2/ARM202U/SOURCE/WIN32/CLX/ASDFMT.H (limited to 'Bachelor/Mikroprozessorsysteme2/ARM202U/SOURCE/WIN32/CLX/ASDFMT.H') diff --git a/Bachelor/Mikroprozessorsysteme2/ARM202U/SOURCE/WIN32/CLX/ASDFMT.H b/Bachelor/Mikroprozessorsysteme2/ARM202U/SOURCE/WIN32/CLX/ASDFMT.H new file mode 100644 index 0000000..cbb0034 --- /dev/null +++ b/Bachelor/Mikroprozessorsysteme2/ARM202U/SOURCE/WIN32/CLX/ASDFMT.H @@ -0,0 +1,473 @@ +/* + Title: Acorn Object Format + Status: C Library Extension + Copyright: (C) 1991, 1994, Advanced RISC Machines Limited. All rights reserved. + + RCS $Revision: 1.15.2.1 $ + Checkin $Date: 1995/05/13 17:04:13 $ + Revising $Author: kwelton $ +*/ + +/* + * This header defines the essential structure of ASD debugging tables. + */ + +#ifndef __asd_h +#define __asd_h + +#include "host.h" + +#define ASD_FORMAT_VERSION 3 +/* decaof is already 4, stayed for armsd for the moment */ + +/* Most table items start with a word containing a type code and the length + in bytes of the item (most items end as defined here in an array of size 1, + which in actual tables is made as large as needed). + */ + +typedef unsigned32 CodeAndLen; + +#define asd_code_(x) ((x) & 0xffff) +#define asd_len_(x) ((x) >> 16) + +#define asd_codeword(c, l) ((c) | ((l) << 16)) + +/* the code field of a CodeAndLen may have the following values */ + +#define ITEMSECTION 1 +#define ITEMPROC 2 +#define ITEMENDPROC 3 +#define ITEMVAR 4 +#define ITEMTYPE 5 +#define ITEMSTRUCT 6 +#define ITEMARRAY 7 +#define ITEMSUBR 8 +#define ITEMSET 9 +#define ITEMFILEINFO 10 +#define ITEMENUMC 11 +#define ITEMENUMD 12 +#define ITEMFUNCTION 13 +#define ITEMSCOPEBEGIN 14 +#define ITEMSCOPEEND 15 +#define ITEMBITFIELD 16 +#define ITEMDEFINE 17 +#define ITEMUNDEF 18 +#define ITEMCLASS 19 +#define ITEMUNION 20 +#define ITEMFPMAPFRAG 32 + +/* Type descriptions are contained in items ... */ + +typedef int32 asd_Type; /* with the structure ... */ + +#define TYPE_PTRCOUNT(t) ((t) & 0xff) +#define TYPE_TYPECODE(t) ((t) >> 8) + +#define TYPE_TYPEWORD(t, p) (((t) << 8) | (p)) + +/* where TYPE_TYPECODE(type) is + negative, and its negated value is the offset in the debug data of an + item defining a type + or positive, and its value is one of those listed below + */ + +#define TYPEVOID 0 + +#define TYPESBYTE 10 +#define TYPESHALF 11 +#define TYPESWORD 12 + +#define TYPEUBYTE 20 +#define TYPEUHALF 21 +#define TYPEUWORD 22 + +#define TYPEFLOAT 30 +#define TYPEDOUBLE 31 +#define TYPELDOUBLE 32 + +#define TYPECOMPLEX 40 +#define TYPEDCOMPLEX 41 + +#define TYPESTRING 50 /* a primitive (char *) type (needed for Number) */ + +#define TYPEFUNCTION 100 + +#define type_integral(t) ((unsigned32)(t) < 30) +#define type_signed(t) ((unsigned32)(t) < 20) +#define type_fpoint(t) ((t) >= 30 && (t) < 40) +#define type_complex(t) ((t) >= 40 && (t) < 50) + +typedef unsigned32 asd_Address; +typedef unsigned32 asd_FileOffset; + +/* sourcepos items contain line number and character position fields */ + +#define FILE_LINE(f) ((f) & 0x3fffffL) +#define FILE_CHPOS(f) (((f) >> 22) & 0x3ff) + +#define FILE_POSWORD(f, ch) ((f) | ((ch) << 22)) + +typedef struct ItemFileInfo ItemFileInfo; +typedef struct ItemFileEntry ItemFileEntry; +typedef struct ItemEndProc ItemEndProc; + +/* Values for the lang field of an ItemSection */ + +#define LANG_NONE 0 +#define LANG_C 1 +#define LANG_PASCAL 2 +#define LANG_FORTRAN 3 +#define LANG_ASM 4 + +/* Bits set in the flags field of an ItemSection */ + +#define FLAG_LINES(f) ((f) & 1) +#define FLAG_VARS(f) ((f) & 2) +#define FLAG_FPMAP(f) ((f) & 4) + +typedef union asd_NameP +{ char name[1]; + char *namep; +} asd_Name; + +typedef struct ItemSection +{ CodeAndLen id; + unsigned char lang; + unsigned char flags; + unsigned char unused; + unsigned char asdversion; + asd_Address codestart; + asd_Address datastart; + int32 codesize; + int32 datasize; + union { + asd_FileOffset i; + ItemFileInfo *p; + } fileinfo; + unsigned32 debugsize; + union { + char name[1]; /* high level section */ + unsigned32 nsyms; /* low level section: nsyms ItemSymbols follow */ + char *namep; + } n; +} ItemSection; + +/* the sym field of an ItemSymbol consists of + * 24 (ls) bits of string table index + * 8 (ms) bits of flags. + */ + +#define STR_INDEX(s) ((s) & 0xffffffL) + +#define ASD_LOCSYM 0 +#define ASD_GLOBSYM 0x01000000L +#define ASD_SYMGLOBAL(s) ((s) & 0x1000000L) + +#define ASD_ABSSYM 0 +#define ASD_TEXTSYM 0x02000000L +#define ASD_DATASYM 0x04000000L +#define ASD_ZINITSYM 0x06000000L +#define ASD_SYMTYPE(s) ((s) & 0x6000000L) + +#define ASD_32BITSYM 0 +#define ASD_16BITSYM 0x10000000L +#define ASD_SYM16(s) ((s) & 0x10000000L) + + +typedef struct ItemSymbol +{ unsigned32 sym; + unsigned32 value; +} ItemSymbol; + +typedef union +{ asd_FileOffset i; + ItemFileEntry *p; +} asd_FileEntryP; + +typedef struct ItemProc +{ CodeAndLen id; + asd_Type type; /* of the return value */ + unsigned32 args; + unsigned32 sourcepos; + asd_Address startaddr; + asd_Address entry; + union { + asd_FileOffset i; + ItemEndProc *p; + } endproc; + asd_FileEntryP fileentry; + asd_Name n; +} ItemProc; + +struct ItemEndProc +{ CodeAndLen id; + unsigned32 sourcepos; + asd_Address endpoint; + asd_FileEntryP fileentry; + unsigned32 nreturns; + asd_Address retaddrs[1]; +}; + +/* Values for ItemVar storageclass field */ +typedef enum StgClass { + C_NONE, + C_EXTERN, + C_STATIC, + C_AUTO, + C_REG, + C_VAR, + C_FARG, + C_FCARG, + C_LOCAL, + C_FILTERED, + C_GLOBALREG +} StgClass; + +typedef struct ItemVar +{ CodeAndLen id; + asd_Type type; + unsigned32 sourcepos; + unsigned32 storageclass; /* StgClass really */ + union { + int32 offset; + asd_Address address; + } location; + asd_Name n; +} ItemVar; + +typedef struct ItemType +{ CodeAndLen id; + asd_Type type; + asd_Name n; +} ItemType; + +typedef struct StructField +{ unsigned32 offset; + asd_Type type; + asd_Name n; +} StructField; + +typedef struct SUC +{ CodeAndLen id; + unsigned32 fields; + unsigned32 size; + StructField fieldtable[1]; +} SUC; + +typedef SUC ItemStruct; +typedef SUC ItemClass; +typedef SUC ItemUnion; + +/* Meaning of the flags field in an ItemArray */ + +#define ARRAY_UNDEF_LBOUND(f) ((f) & 1) +#define ARRAY_CONST_LBOUND(f) ((f) & 2) +#define ARRAY_UNDEF_UBOUND(f) ((f) & 4) +#define ARRAY_CONST_UBOUND(f) ((f) & 8) +#define ARRAY_VAR_LBOUND(f) ((f) & 16) +#define ARRAY_VAR_UBOUND(f) ((f) & 32) + +typedef union asd_ArrayBound +{ int32 i; /* (undef), const */ + int32 o; /* no flag bit set: bound is a variable on the stack + * with this fp offset */ + asd_FileOffset v;/* var: file form */ + ItemVar *vp; /* var: in memory form */ +} asd_ArrayBound; + +typedef struct ItemArray +{ CodeAndLen id; + unsigned32 size; + unsigned32 flags; + asd_Type basetype; + asd_ArrayBound lowerbound, + upperbound; +} ItemArray; + +/* The sizeandtype field of an ItemSubRange */ + +#define SUBRANGE_SIZE(s) ((s) & 0xffff) +#define SUBRANGE_TYPECODE(s) ((s) >> 16) + +typedef struct ItemSubrange +{ CodeAndLen id; + int32 sizeandtype; + int32 lb, hb; +} ItemSubrange; + +typedef struct ItemSet +{ CodeAndLen id; + unsigned32 size; +} ItemSet; + +typedef struct ItemEnumC +{ CodeAndLen id; + asd_Type type; /* of the container */ + unsigned32 count; + int32 base; + union { + char nametable[1]; + char *nametablep[1]; + } nt; +} ItemEnumC; + +typedef struct asd_EnumMember +{ int32 val; + asd_Name n; +} asd_EnumMember; + +typedef struct ItemEnumD +{ CodeAndLen id; + asd_Type type; /* of the container */ + unsigned32 count; + asd_EnumMember nametable[1]; +} ItemEnumD; + +typedef struct asd_Arg +{ asd_Type type; + asd_Name n; +} asd_Arg; + +typedef struct ItemFunction +{ CodeAndLen id; + asd_Type type; /* of the returned value */ + unsigned32 argcount; + asd_Arg args[1]; +} ItemFunction; + +typedef struct ItemBitfield +{ CodeAndLen id; + asd_Type type; /* of the extracted value */ + asd_Type container; + unsigned char size, offset, + pad1, pad2; +} ItemBitfield; + +typedef struct ItemScope /* begin or end */ +{ CodeAndLen id; + asd_Address codeaddress; +} ItemScope; + +typedef struct ItemDefine +{ CodeAndLen id; + asd_FileEntryP fileentry; + unsigned32 sourcepos; + union { + asd_FileOffset i; + char *p; + } body; + int32 argcount; + union { + asd_FileOffset i; + asd_Name *p; + } argtable; + asd_Name n; +} ItemDefine; + +typedef struct ItemUndef +{ CodeAndLen id; + asd_FileEntryP fileentry; + unsigned32 sourcepos; + asd_Name n; +} ItemUndef; + +typedef struct Fragment +{ unsigned32 size; + unsigned32 firstline, lastline; + asd_Address codestart; + unsigned32 codesize; + unsigned char lineinfo[1]; +} Fragment; + +#define Asd_LineInfo_Short_MaxLine 63 + +/* short form lineinfo items have code and file position increments < 256. + * If the current file position is (line, col), a file position increment + * fpinc describes a new file position + * (line+fpinc, 1) if inc <= Asd_LineInfo_Short_MaxLine + * (line, col+fpinc-Asd_LineInfo_Short_MaxLine-1) otherwise + * + * fpinc = 0, codeinc = 0 indicates that the item is in long format 1: + * new file position is (line+lineinc, 1) + * + * fpinc = Asd_LineInfo_Short_MaxLine+1, codeinc = 0 indicates that the + * item is in long format 2. new file position is + * (line+lineinc, newcol) + */ + +typedef struct +{ unsigned char codeinc; + unsigned char lineinc; +} asd_LineInfo_Short; + +typedef struct +{ unsigned short marker; + unsigned short lineinc; /* (in target byte order) */ + unsigned short codeinc; /* (in target byte order) */ +} asd_LineInfo_Long_1; + +typedef struct +{ unsigned short marker; + unsigned short lineinc; /* (in target byte order) */ + unsigned short codeinc; /* (in target byte order) */ + unsigned short newcol; /* (in target byte order) */ +} asd_LineInfo_Long_2; + +struct ItemFileEntry +{ unsigned32 len; + unsigned32 date; + char filename[1]; +}; + +struct ItemFileInfo +{ CodeAndLen id; + ItemFileEntry entries[1]; +}; + +typedef struct ItemFPMapFragment { + unsigned32 marker; + int32 bytes; + asd_Address codestart; + asd_Address saveaddr; + unsigned32 codesize; + int32 initoffset; + char b[1]; +} ItemFPMapFragment; + +typedef struct { + unsigned char codeinc; + signed char offsetinc; +} asd_FPInfo_Short; + +typedef struct { + char marker[2]; + unsigned short codeinc; + signed short offsetinc; +} asd_FPInfo_Long; + +typedef union { + unsigned char b; + CodeAndLen c; + ItemSection sect; + ItemProc p; + ItemEndProc e; + ItemVar v; + ItemArray a; + ItemType t; + ItemStruct s; + ItemSubrange sr; + ItemSet set; + ItemFileInfo f; + ItemFileEntry fe; + ItemEnumC ec; + ItemEnumD ed; + ItemFunction fn; + ItemScope sc; + ItemBitfield bf; + ItemDefine def; + ItemUndef undef; + ItemFPMapFragment fp; +} Item; + +#endif + \ No newline at end of file -- cgit v1.2.3