1 /*---------------------------------------------------------------------------* 2 Project: TwlSDK - tools - makelcf 3 File: makelcf.h 4 5 Copyright 2003-2008 Nintendo. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Date:: 2008-09-18#$ 14 $Rev: 8573 $ 15 $Author: okubata_ryoma $ 16 *---------------------------------------------------------------------------*/ 17 #ifndef MAKELCF_H_ 18 #define MAKELCF_H_ 19 20 #include "misc.h" 21 22 /*============================================================================ 23 * CONTAINER 24 */ 25 typedef struct tAfterList 26 { 27 struct tAfter *head; 28 struct tAfter *tail; 29 } 30 tAfterList; 31 32 typedef struct tAfter 33 { 34 struct tAfter *next; 35 const char *name; 36 } 37 tAfter; 38 39 typedef struct tObjectList 40 { 41 struct tObject *head; 42 struct tObject *tail; 43 } 44 tObjectList; 45 46 typedef enum 47 { 48 OBJTYPE_NONE, 49 OBJTYPE_FILE, // Regular file 50 OBJTYPE_STAR, // "*" 51 OBJTYPE_GROUP, // GROUP(xxxx) 52 OBJTYPE_OBJECT // OBJECT(yyy,zzz) 53 } 54 tObjectType; 55 56 #define isNeedSection(obj) ((obj)->objectType != OBJTYPE_OBJECT) 57 58 typedef struct tObject 59 { 60 struct tObject *next; 61 const char *objectName; 62 const char *sectionName; 63 tObjectType objectType; 64 } 65 tObject; 66 67 typedef struct tOverlayList 68 { 69 struct tOverlay *head; 70 struct tOverlay *tail; 71 u32 num; 72 } 73 tOverlayList; 74 75 typedef enum 76 { 77 MEMTYPE_NONE = 0, 78 MEMTYPE_MAIN, 79 MEMTYPE_MAINEX, 80 MEMTYPE_ITCM, 81 MEMTYPE_DTCM, 82 MEMTYPE_ITCM_BSS, 83 MEMTYPE_DTCM_BSS, 84 MEMTYPE_SHARED, 85 MEMTYPE_WRAM, 86 MEMTYPE_WRAM_BSS, 87 MEMTYPE_VRAM, 88 MEMTYPE_DUMMY, 89 } 90 tMemType; 91 92 typedef struct tOverlay 93 { 94 struct tOverlay *next; 95 u32 id; 96 const char *name; 97 const char *group; 98 u32 address; 99 struct tAfterList afters; 100 struct tObjectList objects; 101 struct tObjectList libraries; 102 struct tObjectList searchSymbols; 103 tMemType memtype; 104 105 } 106 tOverlay; 107 108 typedef struct tStatic 109 { 110 const char *name; 111 u32 address; 112 struct tObjectList objects; 113 struct tObjectList libraries; 114 struct tObjectList searchSymbols; 115 u32 stacksize; 116 u32 stacksize_irq; 117 tMemType memtype; 118 119 } 120 tStatic; 121 122 typedef struct 123 { 124 const char *overlaydefs; 125 const char *overlaytable; 126 const char *ltdoverlaydefs; 127 const char *ltdoverlaytable; 128 const char *suffix; 129 const char *flxsuffix; 130 const char *ltdsuffix; 131 132 } 133 tProperty; 134 135 BOOL AddOverlay(const char *overlayName); 136 BOOL AddAutoload(const char *overlayName); 137 BOOL AddLtdoverlay(const char *overlayName); 138 BOOL AddLtdautoload(const char *overlayName); 139 BOOL OverlaySetId(u32 id); 140 BOOL OverlaySetGroup(const char *overlayGroup); 141 BOOL OverlaySetAddress(u32 address); 142 BOOL OverlayAddAfter(const char *overlayName); 143 BOOL OverlayAddObject(const char *objectName, tObjectType objectType); 144 BOOL OverlaySetObjectSection(const char *sectionName); 145 BOOL OverlayAddLibrary(const char *objectName, tObjectType objectType); 146 BOOL OverlaySetLibrarySection(const char *sectionName); 147 BOOL OverlayAddSearchSymbol(const char *searchName); 148 149 BOOL StaticSetName(const char *fileName); 150 BOOL StaticSetAddress(u32 address); 151 BOOL StaticAddObject(const char *objectName, tObjectType objectType); 152 BOOL StaticSetObjectSection(const char *sectionName); 153 BOOL StaticAddLibrary(const char *objectName, tObjectType objectType); 154 BOOL StaticSetLibrarySection(const char *sectionName); 155 BOOL StaticAddSearchSymbol(const char *searchName); 156 BOOL StaticSetStackSize(u32 stacksize); 157 BOOL StaticSetStackSizeIrq(u32 stacksize); 158 BOOL PropertySetOverlayDefs(const char *filename); 159 BOOL PropertySetOverlayTable(const char *filename); 160 BOOL PropertySetLtdoverlayDefs(const char *filename); 161 BOOL PropertySetLtdoverlayTable(const char *filename); 162 BOOL PropertySetSuffix(const char *suffix); 163 BOOL PropertySetFlxsuffix(const char *flxsuffix); 164 BOOL PropertySetLtdsuffix(const char *ltdsuffix); 165 166 BOOL CheckSpec(void); 167 void DumpSpec(void); 168 BOOL isSame(const char *s1, const char *s2); 169 170 int ParseSpecFile(const char *filename); 171 172 extern tStatic Static; 173 extern tProperty Property; 174 extern tOverlayList OverlayList; 175 extern tOverlayList AutoloadList; 176 extern tOverlayList LtdoverlayList; 177 extern tOverlayList LtdautoloadList; 178 179 #define DEFAULT_OVERLAYDEFS "%_defs" 180 #define DEFAULT_OVERLAYTABLE "%_table" 181 #define DEFAULT_LTDOVERLAYDEFS "%_defs" 182 #define DEFAULT_LTDOVERLAYTABLE "%_table" 183 #define DEFAULT_SUFFIX ".sbin" 184 #define DEFAULT_FLXSUFFIX ".TWL.FLX.sbin" 185 #define DEFAULT_LTDSUFFIX ".TWL.LTD.sbin" 186 /* NITRO-SDK4.0RC: increased 0x400->0x800 */ 187 #define DEFAULT_IRQSTACKSIZE 0x800 188 189 int spec_yyparse(void); 190 int spec_yylex(void); 191 void spec_yyerror(const char *str); 192 193 194 /*============================================================================ 195 * TOKEN BUFFER 196 */ 197 typedef struct tTokenBuffer 198 { 199 int id; 200 const char *string; 201 int loop_end; 202 } 203 tTokenBuffer; 204 205 typedef struct tLoopStack 206 { 207 int id; 208 int start; 209 } 210 tLoopStack; 211 212 #define TOKEN_LEN 65536 213 #define LOOP_STACK_MAX 32 214 215 int ParseTlcfFile(const char *filename); 216 int CreateLcfFile(const char *filename); 217 218 extern tTokenBuffer tokenBuffer[TOKEN_LEN]; 219 extern int tokenBufferEnd; 220 221 int tlcf_yyparse(void); 222 int tlcf_yylex(void); 223 void tlcf_yyerror(const char *str); 224 void lcf_error(const char *fmt, ...); 225 226 extern BOOL DebugMode; 227 void debug_printf(const char *str, ...); 228 229 typedef struct 230 { 231 char *string; 232 tObjectType type; 233 } 234 tObjectName; 235 236 // for IF-ELSE-ENDIF 237 #define COND_STACK_MAX 32 238 239 typedef enum 240 { 241 COND_BLOCK_NOCOND, // non conditional block 242 COND_BLOCK_IF, // if(){} block 243 COND_BLOCK_ELSE // else{} block 244 } 245 tCondBlock; 246 247 typedef struct 248 { 249 BOOL valid; // condition is TRUE or FALSE 250 tCondBlock block; // regular/if{}/else{} 251 } 252 tCondStack; 253 254 #endif //MAKELCF_H_ 255