From d52564769985db68dccbedfe13604e8f4cfe61b1 Mon Sep 17 00:00:00 2001 From: Eugene Ingerman Date: Sat, 20 Jul 2002 20:27:22 +0000 Subject: [PATCH] Use kernel.map (text format ntoskrnl symbols) instead of ntosknl.sym in pice. Fixed several bugs. svn path=/trunk/; revision=3279 --- reactos/apps/utils/pice/module/symbols.c | 111 ++++++++++--------- reactos/apps/utils/pice/module/utils.c | 134 +++++++++++------------ reactos/install.bat | 2 + reactos/ntoskrnl/Makefile | 24 ++-- 4 files changed, 132 insertions(+), 139 deletions(-) diff --git a/reactos/apps/utils/pice/module/symbols.c b/reactos/apps/utils/pice/module/symbols.c index 5eae7a48856..7acc7fc5cba 100644 --- a/reactos/apps/utils/pice/module/symbols.c +++ b/reactos/apps/utils/pice/module/symbols.c @@ -270,12 +270,10 @@ BOOLEAN BuildModuleList( void ) ENTER_FUNC(); pdebug_module_tail = pdebug_module_head; - tsk = IoGetCurrentProcess(); ASSERT(IsAddressValid((ULONG)tsk)); if( tsk ){ peb = tsk->Peb; - ASSERT(IsAddressValid((ULONG)peb)); if( peb ){ if( !ListUserModules( peb ) ){ LEAVE_FUNC(); @@ -485,6 +483,7 @@ PICE_SYMBOLFILE_HEADER* FindModuleSymbols(ULONG addr) DPRINT((0,"FindModuleSymbols(): address matches %S %x-%x\n",pd->name,start,end)); for(i=0;iname )); if(PICE_wcsicmp(pd->name,apSymbols[i]->name) == 0) { if(ValidityCheckSymbols(apSymbols[i])) @@ -1915,7 +1914,7 @@ BOOLEAN LoadExports(void) ENTER_FUNC(); Print(OUTPUT_WINDOW,"pICE: loading exports...\n"); - hf = PICE_open(L"\\SystemRoot\\symbols\\ntoskrnl.sym",OF_READ); + hf = PICE_open(L"\\SystemRoot\\symbols\\kernel.map",OF_READ); /* if(hf) { @@ -2415,14 +2414,14 @@ LPSTR ExtractTypeName(LPSTR p) static char temp[1024]; ULONG i; - DPRINT((0,"ExtractTypeName(%s)\n",p)); + DPRINT((1,"ExtractTypeName(%s)\n",p)); for(i=0;IsAddressValid((ULONG)p) && *p!=0 && *p!=':';i++,p++) temp[i] = *p; if(!IsAddressValid((ULONG)p) ) { - DPRINT((0,"hit invalid page %x!\n",(ULONG)p)); + DPRINT((1,"hit invalid page %x!\n",(ULONG)p)); } temp[i]=0; @@ -2443,7 +2442,7 @@ LONG ExtractNumber(LPSTR p) if(!IsAddressValid((ULONG)p) ) { - DPRINT((0,"ExtractNumber(): [1] invalid page %x hit!\n",p)); + DPRINT((1,"ExtractNumber(): [1] invalid page %x hit!\n",p)); return 0; } @@ -2455,7 +2454,7 @@ LONG ExtractNumber(LPSTR p) if(!IsAddressValid((ULONG)p) ) { - DPRINT((0,"ExtractNumber(): [2] invalid page %x hit!\n",p)); + DPRINT((1,"ExtractNumber(): [2] invalid page %x hit!\n",p)); return 0; } @@ -2466,7 +2465,7 @@ LONG ExtractNumber(LPSTR p) if(!IsAddressValid((ULONG)p) ) { - DPRINT((0,"ExtractNumber(): [3] invalid page %x hit!\n",p)); + DPRINT((1,"ExtractNumber(): [3] invalid page %x hit!\n",p)); return 0; } @@ -2477,7 +2476,7 @@ LONG ExtractNumber(LPSTR p) p++; if(!IsAddressValid((ULONG)p) ) { - DPRINT((0,"ExtractNumber(): [4] invalid page %x hit!\n",p)); + DPRINT((1,"ExtractNumber(): [4] invalid page %x hit!\n",p)); return 0; } } @@ -2495,7 +2494,7 @@ BOOLEAN ExtractArray(PVRET pvr,LPSTR p) ULONG lower_bound,upper_bound; LPSTR pTypeDef; - DPRINT((0,"ExtractArray(%s)\n",p)); + DPRINT((1,"ExtractArray(%s)\n",p)); // index-type index-type-number;lower;upper;element-type-number pvr->bArrayType = TRUE; @@ -2519,7 +2518,7 @@ BOOLEAN ExtractArray(PVRET pvr,LPSTR p) type_number = ExtractTypeNumber(p); - DPRINT((0,"ExtractArray(): %x %x %x %x\n",index_typenumber,lower_bound,upper_bound,type_number)); + DPRINT((1,"ExtractArray(): %x %x %x %x\n",index_typenumber,lower_bound,upper_bound,type_number)); pTypeDef = FindTypeDefinition(pvr->pSymbols,type_number,pvr->file); if(pTypeDef) @@ -2546,7 +2545,7 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) static VRET vr; LPSTR pTypeDef,pEqual; - DPRINT((0,"ExtractStructMembers(): %s\n",p)); + DPRINT((1,"ExtractStructMembers(): %s\n",p)); PICE_memset(&vr,0,sizeof(vr)); @@ -2557,14 +2556,14 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) // extract member name PICE_strncpy(member_name,p,len); member_name[len]=0; - DPRINT((0,"ExtractStructMembers(): member_name = %s\n",member_name)); + DPRINT((1,"ExtractStructMembers(): member_name = %s\n",member_name)); // go to char following ':' p += (len+1); if(IsAddressValid((ULONG)p) ) { type_number = ExtractTypeNumber(p); - DPRINT((0,"ExtractStructMembers(): type_number = %x\n",type_number)); + DPRINT((1,"ExtractStructMembers(): type_number = %x\n",type_number)); vr.type = type_number; @@ -2578,7 +2577,7 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) p++; if(*p == 'a') { - DPRINT((0,"ExtractStructMembers(): member is array\n")); + DPRINT((1,"ExtractStructMembers(): member is array\n")); vr.bArrayType = TRUE; p = PICE_strchr(p,';'); p = PICE_strchr(p,';'); @@ -2591,15 +2590,15 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) } else if(*p == '*') { - DPRINT((0,"ExtractStructMembers(): member is ptr\n")); + DPRINT((1,"ExtractStructMembers(): member is ptr\n")); vr.bPtrType = TRUE; type_number = ExtractTypeNumber(p); - DPRINT((0,"ExtractStructMembers(): type_number = %x\n",type_number)); + DPRINT((1,"ExtractStructMembers(): type_number = %x\n",type_number)); vr.father_type = type_number; } else if(*p == 'u') { - DPRINT((0,"ExtractStructMembers(): member is union\n")); + DPRINT((1,"ExtractStructMembers(): member is union\n")); while(*p!=';' && *(p+1)!=';' && *p!=0)p++; } } @@ -2610,14 +2609,14 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) { p++; bit_offset = ExtractNumber(p); - DPRINT((0,"ExtractStructMembers(): bit_offset = %x\n",bit_offset)); + DPRINT((1,"ExtractStructMembers(): bit_offset = %x\n",bit_offset)); p = PICE_strchr(p,','); if(p) { p++; bit_size = ExtractNumber(p); - DPRINT((0,"ExtractStructMembers(): bit_size = %x\n",bit_size)); + DPRINT((1,"ExtractStructMembers(): bit_size = %x\n",bit_size)); vr.address = pvr->value + bit_offset/8; vr.file = pvr->file; @@ -2643,19 +2642,19 @@ PVRET ExtractStructMembers(PVRET pvr,LPSTR p) } } - DPRINT((0,"ExtractStructMembers(): member %s type %x bit_offset %x bit_size%x\n",member_name,type_number,bit_offset,bit_size)); + DPRINT((1,"ExtractStructMembers(): member %s type %x bit_offset %x bit_size%x\n",member_name,type_number,bit_offset,bit_size)); pTypeDef = FindTypeDefinition(pvr->pSymbols,type_number,pvr->file); if(pTypeDef) { - DPRINT((0,"ExtractStructMembers(): pTypedef= %s\n",pTypeDef)); + DPRINT((1,"ExtractStructMembers(): pTypedef= %s\n",pTypeDef)); PICE_strcpy(vr.type_name,ExtractTypeName(pTypeDef)); pTypeDef = PICE_strchr(pTypeDef,':'); if(pTypeDef) { pTypeDef++; type_number = ExtractTypeNumber(pTypeDef); - DPRINT((0,"ExtractStructMembers(): type_number = %x\n",type_number)); + DPRINT((1,"ExtractStructMembers(): type_number = %x\n",type_number)); vr.father_type = type_number; } } @@ -2679,11 +2678,11 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) LONG lLowerRange,lUpperRange,lDelta; static char type_def[2048]; - DPRINT((0,"EvaluateSymbol(%s)\n",pToken)); + DPRINT((1,"EvaluateSymbol(%s)\n",pToken)); if(FindGlobalStabSymbol(pToken,&pvr->value,&pvr->type,&pvr->file)) { - DPRINT((0,"EvaluateSymbol(%s) pvr->value = %x pvr->type = %x\n",pToken,pvr->value,pvr->type)); + DPRINT((1,"EvaluateSymbol(%s) pvr->value = %x pvr->type = %x\n",pToken,pvr->value,pvr->type)); while(!bDone) { if(!(pTypeDef = FindTypeDefinition(pvr->pSymbols,pvr->type,pvr->file))) @@ -2694,7 +2693,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) pTypeName = ExtractTypeName(pTypeDef); - DPRINT((0,"%s %s\n",pTypeName,pToken)); + DPRINT((1,"%s %s\n",pTypeName,pToken)); PICE_strcpy(pvr->type_name,pTypeName); @@ -2709,16 +2708,16 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) { case '(': // type reference ulType = ExtractTypeNumber(pTypeBase); - DPRINT((0,"%x is a type reference to %x\n",pvr->type,ulType)); + DPRINT((1,"%x is a type reference to %x\n",pvr->type,ulType)); pvr->type = ulType; break; case 'r': // subrange pTypeBase++; ulType = ExtractTypeNumber(pTypeBase); - DPRINT((0,"%x is sub range of %x\n",pvr->type,ulType)); + DPRINT((1,"%x is sub range of %x\n",pvr->type,ulType)); if(pvr->type == ulType) { - DPRINT((0,"%x is a self reference\n",pvr->type)); + DPRINT((1,"%x is a self reference\n",pvr->type)); pSemiColon = PICE_strchr(pTypeBase,';'); pSemiColon++; lLowerRange = ExtractNumber(pSemiColon); @@ -2726,7 +2725,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) pSemiColon++; lUpperRange = ExtractNumber(pSemiColon); lDelta = lUpperRange-lLowerRange; - DPRINT((0,"bounds %x-%x range %x\n",lLowerRange,lUpperRange,lDelta)); + DPRINT((1,"bounds %x-%x range %x\n",lLowerRange,lUpperRange,lDelta)); ulBits=0; do { @@ -2736,7 +2735,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) ulBytes = (ulBits+1)/8; if(!ulBytes) ulBytes = 4; - DPRINT((0,"# of bytes = %x\n",ulBytes)); + DPRINT((1,"# of bytes = %x\n",ulBytes)); pvr->address = pvr->value; if(IsRangeValid(pvr->value,ulBytes)) { @@ -2759,7 +2758,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) pvr->type = ulType; break; case 'a': // array type - DPRINT((0,"%x array\n",pvr->type)); + DPRINT((1,"%x array\n",pvr->type)); pTypeBase++; if(!ExtractArray(pvr,pTypeBase)) { @@ -2768,7 +2767,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) } break; case '*': // ptr type - DPRINT((0,"%x is ptr to\n",pvr->type)); + DPRINT((1,"%x is ptr to\n",pvr->type)); bDone = TRUE; // meanwhile break; case 's': // struct type [name:T(#,#)=s#membername1:(#,#),#,#;membername1:(#,#),#,#;;] @@ -2777,7 +2776,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) // extract the the struct size lLowerRange = ExtractNumber(pTypeBase); - DPRINT((0,"%x struct size = %x\n",pvr->type,lLowerRange)); + DPRINT((1,"%x struct size = %x\n",pvr->type,lLowerRange)); // skip over the digits while(PICE_isdigit(*pTypeBase)) @@ -2792,7 +2791,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) while(pStructMembers && *pStructMembers && *pStructMembers!=';' && ulNumStructMemberstype == vrStructMembers[i].type) { PICE_strcpy(pvrThis->type_name,vrStructMembers[i].type_name); @@ -2821,12 +2820,12 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) } } - DPRINT((0,"EvaluateSymbol(): vr.type_name = %s\n",vrStructMembers[ulNumStructMembers].type_name)); - DPRINT((0,"EvaluateSymbol(): vr.name = %s\n",vrStructMembers[ulNumStructMembers].name)); - DPRINT((0,"EvaluateSymbol(): vr.address = %.8X\n",vrStructMembers[ulNumStructMembers].address)); - DPRINT((0,"EvaluateSymbol(): vr.value = %.8X\n",vrStructMembers[ulNumStructMembers].value)); - DPRINT((0,"EvaluateSymbol(): vr.size = %.8X\n",vrStructMembers[ulNumStructMembers].size)); - DPRINT((0,"EvaluateSymbol(): vr.type = %.8X\n",vrStructMembers[ulNumStructMembers].type)); + DPRINT((1,"EvaluateSymbol(): vr.type_name = %s\n",vrStructMembers[ulNumStructMembers].type_name)); + DPRINT((1,"EvaluateSymbol(): vr.name = %s\n",vrStructMembers[ulNumStructMembers].name)); + DPRINT((1,"EvaluateSymbol(): vr.address = %.8X\n",vrStructMembers[ulNumStructMembers].address)); + DPRINT((1,"EvaluateSymbol(): vr.value = %.8X\n",vrStructMembers[ulNumStructMembers].value)); + DPRINT((1,"EvaluateSymbol(): vr.size = %.8X\n",vrStructMembers[ulNumStructMembers].size)); + DPRINT((1,"EvaluateSymbol(): vr.type = %.8X\n",vrStructMembers[ulNumStructMembers].type)); ulNumStructMembers++; @@ -2835,7 +2834,7 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) pStructMembers = PICE_strchr(pStructMembers,':'); if(pStructMembers) { - DPRINT((0,"EvaluateSymbol(): ptr is now %s\n",pStructMembers)); + DPRINT((1,"EvaluateSymbol(): ptr is now %s\n",pStructMembers)); // go back to where member name starts while(*pStructMembers!=';') pStructMembers--; @@ -2848,15 +2847,15 @@ BOOLEAN EvaluateSymbol(PVRET pvr,LPSTR pToken) bDone = TRUE; // meanwhile break; case 'u': // union type - DPRINT((0,"%x union\n",pvr->type)); + DPRINT((1,"%x union\n",pvr->type)); bDone = TRUE; // meanwhile break; case 'e': // enum type - DPRINT((0,"%x enum\n",pvr->type)); + DPRINT((1,"%x enum\n",pvr->type)); bDone = TRUE; // meanwhile break; default: - DPRINT((0,"DEFAULT %x, base: %c\n",pvr->type, *pTypeBase)); + DPRINT((1,"DEFAULT %x, base: %c\n",pvr->type, *pTypeBase)); pvr->address = pvr->value; if(IsRangeValid(pvr->value,ulBytes)) { @@ -2894,7 +2893,7 @@ BOOLEAN Symbol(PVRET pvr) ExtractToken(SymbolToken); - DPRINT((0,"SymbolToken = %s\n",SymbolToken)); + DPRINT((1,"SymbolToken = %s\n",SymbolToken)); return EvaluateSymbol(pvr,SymbolToken); } @@ -2928,8 +2927,8 @@ void Evaluate(PICE_SYMBOLFILE_HEADER* pSymbols,LPSTR p) ulNumStructMembers=0; if(Expression(&vr)) { - DPRINT((0,"\nOK!\n")); - DPRINT((0,"value = %x type = %x\n",vr.value,vr.type)); + DPRINT((1,"\nOK!\n")); + DPRINT((1,"value = %x type = %x\n",vr.value,vr.type)); if(vr.bStructType) { PICE_sprintf(tempSym,"struct %s %s @ %x\n",vr.type_name,p,vr.address); @@ -2980,6 +2979,6 @@ void Evaluate(PICE_SYMBOLFILE_HEADER* pSymbols,LPSTR p) } else { - DPRINT((0,"\nERROR: code %x\n",vr.error)); + DPRINT((1,"\nERROR: code %x\n",vr.error)); } } diff --git a/reactos/apps/utils/pice/module/utils.c b/reactos/apps/utils/pice/module/utils.c index f493a3ce21a..7ddc6e50619 100644 --- a/reactos/apps/utils/pice/module/utils.c +++ b/reactos/apps/utils/pice/module/utils.c @@ -613,30 +613,26 @@ BOOLEAN IsAddressValid(ULONG address) PULONG pPGD; PULONG pPTE; BOOLEAN bResult = FALSE; - PEPROCESS my_current = IoGetCurrentProcess(); address &= (~(_PAGE_SIZE-1)); - if(my_current) - { - pPGD = ADDR_TO_PDE(address); - if(pPGD && ((*pPGD)&_PAGE_PRESENT)) - { - // not large page - if(!((*pPGD)&_PAGE_4M)) + pPGD = ADDR_TO_PDE(address); + if(pPGD && ((*pPGD)&_PAGE_PRESENT)) + { + // not large page + if(!((*pPGD)&_PAGE_4M)) + { + pPTE = ADDR_TO_PTE(address); + if(pPTE) { - pPTE = ADDR_TO_PTE(address); - if(pPTE) - { - bResult = (*pPTE)&(_PAGE_PRESENT | _PAGE_PSE); - } - } - // large page - else - { - bResult = TRUE; + bResult = (*pPTE)&(_PAGE_PRESENT | _PAGE_PSE); } } + // large page + else + { + bResult = TRUE; + } } return bResult; @@ -655,35 +651,30 @@ BOOLEAN IsAddressWriteable(ULONG address) { PULONG pPGD; PULONG pPTE; - PEPROCESS my_current = IoGetCurrentProcess(); //address &= (~(_PAGE_SIZE-1)); + pPGD = ADDR_TO_PDE(address); + if(pPGD && ((*pPGD)&_PAGE_PRESENT)) + { + // not large page + if(!((*pPGD)&_PAGE_4M)) + { + if(!((*pPGD) & _PAGE_RW)) + return FALSE; - if(my_current) - { - pPGD = ADDR_TO_PDE(address); - if(pPGD && ((*pPGD)&_PAGE_PRESENT)) - { - // not large page - if(!((*pPGD)&_PAGE_4M)) + pPTE = ADDR_TO_PTE(address); + if(pPTE) { - if(!((*pPGD) & _PAGE_RW)) - return FALSE; - - pPTE = ADDR_TO_PTE(address); - if(pPTE) - { - if( ((*pPTE)&(_PAGE_PRESENT | _PAGE_PSE)) && - ((*pPTE) & _PAGE_RW)) - return TRUE; - else - return FALSE; - } + if( ((*pPTE)&(_PAGE_PRESENT | _PAGE_PSE)) && + ((*pPTE) & _PAGE_RW)) + return TRUE; + else + return FALSE; } - // large page - else - return ((*pPGD) & _PAGE_RW); } + // large page + else + return ((*pPGD) & _PAGE_RW); } return FALSE; @@ -698,44 +689,41 @@ BOOLEAN SetAddressWriteable(ULONG address,BOOLEAN bSet) { PULONG pPGD; PULONG pPTE; - PEPROCESS my_current = IoGetCurrentProcess(); //address &= (~(_PAGE_SIZE-1)); - if(my_current) - { - pPGD = ADDR_TO_PDE(address); - if(pPGD && ((*pPGD)&_PAGE_PRESENT)) - { - // not large page - if(!((*pPGD)&_PAGE_4M)) + + pPGD = ADDR_TO_PDE(address); + if(pPGD && ((*pPGD)&_PAGE_PRESENT)) + { + // not large page + if(!((*pPGD)&_PAGE_4M)) + { + pPTE = ADDR_TO_PTE(address); + if(pPTE) { - pPTE = ADDR_TO_PTE(address); - if(pPTE) + if( (*pPTE)&(_PAGE_PRESENT | _PAGE_PSE) ) { - if( (*pPTE)&(_PAGE_PRESENT | _PAGE_PSE) ) - { - if( bSet ){ - *pPTE |= _PAGE_RW; - } - else{ - *pPTE &= ~_PAGE_RW; - } - FLUSH_TLB; - return TRUE; - } - } - } - // large page - else - { - if( bSet ) - *pPGD |= _PAGE_RW; - else - *pPGD &= ~_PAGE_RW; - FLUSH_TLB; - return TRUE; + if( bSet ){ + *pPTE |= _PAGE_RW; + } + else{ + *pPTE &= ~_PAGE_RW; + } + FLUSH_TLB; + return TRUE; + } } } + // large page + else + { + if( bSet ) + *pPGD |= _PAGE_RW; + else + *pPGD &= ~_PAGE_RW; + FLUSH_TLB; + return TRUE; + } } return FALSE; } diff --git a/reactos/install.bat b/reactos/install.bat index 7cd69952357..6695d594898 100644 --- a/reactos/install.bat +++ b/reactos/install.bat @@ -111,3 +111,5 @@ copy apps\tests\tokentest\tokentest.exe %ROS_INSTALL%\bin copy media\fonts\helb____.ttf %ROS_INSTALL%\media\fonts copy media\fonts\timr____.ttf %ROS_INSTALL%\media\fonts copy media\nls\*.nls %ROS_INSTALL%\system32 +copy ntoskrnl\kernel.map %ROS_INSTALL%\symbols + diff --git a/reactos/ntoskrnl/Makefile b/reactos/ntoskrnl/Makefile index a65810fd6f9..db9913610b3 100644 --- a/reactos/ntoskrnl/Makefile +++ b/reactos/ntoskrnl/Makefile @@ -1,4 +1,4 @@ -# $Id: Makefile,v 1.75 2002/07/18 18:15:09 ekohl Exp $ +# $Id: Makefile,v 1.76 2002/07/20 20:27:21 ei Exp $ # # ReactOS Operating System # @@ -55,7 +55,8 @@ all: \ bugcodes.rc \ $(TARGETNAME).nostrip.exe \ $(TARGETNAME).exe \ - $(TARGETNAME).sym + $(TARGETNAME).sym \ + kernel.map # # Architecture specific Makefile @@ -375,7 +376,7 @@ $(OBJECTS_PATH)/ke.o: $(OBJECTS_KE) $(LD) \ -r \ -o $(OBJECTS_PATH)/ke.o \ - $(OBJECTS_KE) + $(OBJECTS_KE) $(OBJECTS_PATH)/rtl.o: $(OBJECTS_RTL) $(LD) \ @@ -387,7 +388,7 @@ $(OBJECTS_PATH)/mm.o: $(OBJECTS_MM) $(LD) \ -r \ -o $(OBJECTS_PATH)/mm.o \ - $(OBJECTS_MM) + $(OBJECTS_MM) $(OBJECTS_PATH)/ob.o: $(OBJECTS_OB) $(LD) \ @@ -465,13 +466,13 @@ $(OBJECTS_PATH)/cc.o: $(OBJECTS_CC) $(LD) \ -r \ -o $(OBJECTS_PATH)/cc.o \ - $(OBJECTS_CC) + $(OBJECTS_CC) $(OBJECTS_PATH)/kd.o: $(OBJECTS_KD) $(LD) \ -r \ -o $(OBJECTS_PATH)/kd.o \ - $(OBJECTS_KD) + $(OBJECTS_KD) # Note: arch.o MUST be the first file!!! OBJECTS := \ @@ -500,7 +501,7 @@ CLEAN_FILES = $(OBJECTS_PATH)/*.o cc/*.o cm/*.o dbg/*.o dbg/i386/*.o ex/*.o \ ex/i386/*.o io/*.o ke/*.o ldr/*.o mm/*.o nt/*.o ob/*.o ps/*.o \ rtl/*.o se/*.o ke/i386/*.o mm/i386/*.o fs/*.o po/*.o nls/*.o \ lpc/*.o kd/*.o $(TARGETNAME).o junk.tmp base.tmp temp.exp \ - $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym \ + $(TARGETNAME).exe $(TARGETNAME).nostrip.exe $(TARGETNAME).sym kernel.map \ $(TARGETNAME).coff bugcodes.rc msg?????.bin $(DEP_FILES) $(TARGETNAME).nostrip.exe: $(TARGETNAME).o $(IE_DATA) @@ -620,6 +621,9 @@ $(TARGETNAME).dbg: $(TARGETNAME).dbg.o $(TARGETNAME).a $(TARGETNAME).dbg.lnk $(TARGETNAME).sym: $(TARGETNAME).nostrip.exe $(RSYM) $(TARGETNAME).nostrip.exe $(TARGETNAME).sym +kernel.map: $(TARGETNAME).nostrip.exe + $(NM) --numeric-sort $(TARGETNAME).nostrip.exe > kernel.map + $(TARGETNAME).o: $(OBJECTS) $(LD) \ -r \ @@ -641,10 +645,10 @@ $(DDK_PATH_LIB)/$(TARGETNAME).a: $(TARGETNAME).def implib: $(DDK_PATH_LIB)/$(TARGETNAME).a -clean: +clean: - $(RM) $(CLEAN_FILES) -.PHONY: clean +.PHONY: clean install: all $(INSTALL_DIR)/system32/$(TARGETNAME).exe $(INSTALL_DIR)/symbols/$(TARGETNAME).sym @@ -674,7 +678,7 @@ ke/main.o: ke/main.c $(PATH_TO_TOP)/include/reactos/buildno.h %.o: %.S $(AS) $(ASFLAGS) -c $< -o $@ %.o: %.s - $(AS) $(ASFLAGS) -c $< -o $@ + $(AS) $(ASFLAGS) -c $< -o $@ %.o: %.asm $(NASM_CMD) $(NFLAGS) $< -o $@ %.coff: %.rc