From 75b7b4d4a9c4d43edeca2eb3897f86ad36723d12 Mon Sep 17 00:00:00 2001 From: NicJA Date: Wed, 17 May 2017 14:41:22 +0000 Subject: [PATCH] # build AddDataTypes separately. # on cpus != m68k, define TARGETCPU and look for a matching file to the descriptor, with the extension TARGETCPU to loadseg. git-svn-id: https://svn.aros.org/svn/aros/trunk/AROS@54691 fb15a70f-31f2-0310-bbcc-cdcc74a49acc --- workbench/c/AddDataTypes.c | 80 ++++++++++++++++++++++++++++------------------ workbench/c/mmakefile.src | 17 ++++++++-- 2 files changed, 63 insertions(+), 34 deletions(-) diff --git a/workbench/c/AddDataTypes.c b/workbench/c/AddDataTypes.c index 325dd7e0cb..fc580546f4 100644 --- a/workbench/c/AddDataTypes.c +++ b/workbench/c/AddDataTypes.c @@ -55,6 +55,9 @@ ******************************************************************************/ +#define DEBUG 0 +#include + #include #include #include @@ -69,6 +72,7 @@ #include #include +#include #include #include #include @@ -134,7 +138,7 @@ struct CompoundDataType *CreateBasicType(struct StackVars *sv, UWORD Flags, ULONG ID, ULONG GroupID); void LoadDataType(struct StackVars *sv, STRPTR name); struct CompoundDataType *CreateDataType(struct StackVars *sv, - struct IFFHandle *iff); + struct IFFHandle *iff, STRPTR name); struct CompoundDataType *AddDataType(struct StackVars *sv, struct CompoundDataType *cdt); void DeleteDataType(struct StackVars *sv, struct CompoundDataType *cdt); @@ -691,7 +695,7 @@ void LoadDataType(struct StackVars *sv, STRPTR name) while((error = ParseIFF(iff, IFFPARSE_SCAN)) == IFFERR_EOC) { - CreateDataType(sv, iff); + CreateDataType(sv, iff, name); /* FIXME: The while ParseIFF loop here crashes the 2nd time inside the loop, therefore the break below as temp fix */ break; } @@ -776,21 +780,23 @@ LONG MemStreamHook(struct Hook * hook, UBYTE **memptr, Msg msg) */ struct CompoundDataType *CreateDataType(struct StackVars *sv, - struct IFFHandle *iff) + struct IFFHandle *iff, STRPTR name) { struct CompoundDataType *cdt = NULL; struct StoredProperty *prop; - ULONG AllocLen; +#if __mc68000 + LONG DefaultStack = AROS_STACKSIZE; UBYTE *func; - LONG DefaultStack = AROS_STACKSIZE, i; +#endif + ULONG AllocLen, i; BPTR SegList; - + if((prop = FindProp(iff, ID_DTYP, ID_DTHD))) { AllocLen = sizeof(struct CompoundDataType) - 32 + /* was sizeof(struct DataTypeHeader), but we must use struct size as it would be on Amiga */ prop->sp_Size; - + if(!(cdt = AllocVec(AllocLen, MEMF_PUBLIC | MEMF_CLEAR))) { SetIoErr(ERROR_NO_FREE_STORE); @@ -800,14 +806,14 @@ struct CompoundDataType *CreateDataType(struct StackVars *sv, struct FileDataTypeHeader *fdh = NULL; UBYTE *memptr = (UBYTE *)prop->sp_Data; struct Hook hook; - + hook.h_Entry = (HOOKFUNC)HookEntry; hook.h_SubEntry = (HOOKFUNC)MemStreamHook; - + if (ReadStruct(&hook, (APTR *) &fdh, &memptr, FileDataTypeHeaderDesc)) { IPTR extraoffset = sizeof(struct DataTypeHeader) - 32; - + cdt->DT.dtn_Header= &cdt->DTH; cdt->DTH.dth_Name = (STRPTR)(fdh->fdth_NameOffset + extraoffset + (IPTR)&cdt->DTH); @@ -826,35 +832,34 @@ struct CompoundDataType *CreateDataType(struct StackVars *sv, for(i = 0; i < cdt->DTH.dth_MaskLen; i++) { cdt->DTH.dth_Mask[i] = AROS_BE2WORD(cdt->DTH.dth_Mask[i]); -#if 0 - kprintf("mask[%d] = %04x (%c %c)\n", i, + D(bug("[AddDataTypes] mask[%d] = %04x (%c %c)\n", i, cdt->DTH.dth_Mask[i], cdt->DTH.dth_Mask[i] & 255, - (cdt->DTH.dth_Mask[i] >> 8) & 255); -#endif + (cdt->DTH.dth_Mask[i] >> 8) & 255);) } -#if 0 - kprintf("groupid = %c%c%c%c\n", cdt->DTH.dth_GroupID >> 24, - cdt->DTH.dth_GroupID >> 16, - cdt->DTH.dth_GroupID >> 8, - cdt->DTH.dth_GroupID); - kprintf("id = %c%c%c%c\n", cdt->DTH.dth_ID >> 24, - cdt->DTH.dth_ID >> 16, - cdt->DTH.dth_ID >> 8, - cdt->DTH.dth_ID); - kprintf("flags = %x\n", cdt->DTH.dth_Flags); - kprintf("pri = %d\n", cdt->DTH.dth_Priority); - kprintf("name = %s\n", cdt->DTH.dth_Name); - kprintf("basename = %s\n", cdt->DTH.dth_BaseName); - kprintf("pattern = %s\n", cdt->DTH.dth_Pattern); - kprintf("masklen = %d\n", cdt->DTH.dth_MaskLen); -#endif + D( + bug("[AddDataTypes] groupid = %c%c%c%c\n", cdt->DTH.dth_GroupID >> 24, + cdt->DTH.dth_GroupID >> 16, + cdt->DTH.dth_GroupID >> 8, + cdt->DTH.dth_GroupID); + bug("[AddDataTypes] id = %c%c%c%c\n", cdt->DTH.dth_ID >> 24, + cdt->DTH.dth_ID >> 16, + cdt->DTH.dth_ID >> 8, + cdt->DTH.dth_ID); + bug("[AddDataTypes] flags = %x\n", cdt->DTH.dth_Flags); + bug("[AddDataTypes] pri = %d\n", cdt->DTH.dth_Priority); + bug("[AddDataTypes] name = %s\n", cdt->DTH.dth_Name); + bug("[AddDataTypes] basename = %s\n", cdt->DTH.dth_BaseName); + bug("[AddDataTypes] pattern = %s\n", cdt->DTH.dth_Pattern); + bug("[AddDataTypes] masklen = %d\n", cdt->DTH.dth_MaskLen); + ) NewList(&cdt->DT.dtn_ToolList); cdt->DT.dtn_Length = AllocLen; +#if __mc68000 if((prop = FindProp(iff, ID_DTYP, ID_DTCD))) { if((func = AllocVec(prop->sp_Size, MEMF_PUBLIC | MEMF_CLEAR))) @@ -883,7 +888,20 @@ struct CompoundDataType *CreateDataType(struct StackVars *sv, } /* if((func = AllocVec(prop->sp_Size, MEMF_PUBLIC | MEMF_CLEAR))) */ } /* if((prop = FindProp(iff, ID_DTYP, ID_DTCD))) */ - +#else + TEXT CDname[256]; + + __sprintf(CDname,"%s.%s", name, TARGETCPU); + D(bug("[AddDataTypes] Checking for '%s'\n", CDname);) + + if((SegList = LoadSeg(CDname))) + { + D(bug("[AddDataTypes] Found!\n");) + cdt->SegList = SegList; + cdt->Function = BADDR(SegList) + sizeof(BPTR); + D(bug("[AddDataTypes] Entry @ 0x%p\n", cdt->Function);) + } +#endif cdt = AddDataType(sv, cdt); FreeStruct(fdh, FileDataTypeHeaderDesc); diff --git a/workbench/c/mmakefile.src b/workbench/c/mmakefile.src index 3e3800ac5b..aa306834f9 100644 --- a/workbench/c/mmakefile.src +++ b/workbench/c/mmakefile.src @@ -5,7 +5,6 @@ include $(SRCDIR)/config/aros.cfg FILES := \ AddBuffers \ - AddDataTypes \ Automount \ Avail \ Break \ @@ -57,6 +56,9 @@ FILES := \ WaitForPort \ Which +DTFILE := \ + AddDataTypes + BLFILES := \ install-i386-pc \ Install-grub2-i386-pc @@ -87,8 +89,8 @@ USER_LDFLAGS := -static #MM- workbench : workbench-c #MM- workbench-quick : workbench-c-quick -#MM workbench-c : includes kernel-task-includes linklibs workbench-c-sh workbench-c-requeststring workbench-libs-uuid -#MM workbench-c-quick : workbench-c-sh-quick workbench-c-requeststring-quick +#MM workbench-c : includes kernel-task-includes linklibs workbench-c-adddatatypes workbench-c-sh workbench-c-requeststring workbench-libs-uuid +#MM workbench-c-quick : workbench-c-adddatatypes-quick workbench-c-sh-quick workbench-c-requeststring-quick %build_prog mmake=workbench-c-requeststring progname=RequestString \ files=RequestString targetdir=$(AROS_C) @@ -101,9 +103,18 @@ USER_LDFLAGS := -static files=$(SH_FILES) targetdir=$(AROS_C) \ usestartup=no +ifneq ($(AROS_TARGET_CPU),m68k) + USER_CFLAGS += -DTARGETCPU="\"$(AROS_TARGET_CPU)\"" +endif + +%build_prog mmake=workbench-c-adddatatypes progname=AddDataTypes \ + files="$(DTFILE)" targetdir=$(AROS_C) + $(OBJDIR)/evalParser.tab.c : evalParser.y @$(ECHO) Generating $(notdir $@) from $<... @$(BISON) -o $@ $< $(OBJDIR)/Eval.d : $(OBJDIR)/evalParser.tab.c + @$(NOP) +%common \ No newline at end of file -- 2.11.4.GIT