1) Added prototype of constructor and destructor in the library's AutoGen.h. This is necessary for Intel Compiler.

2) Corrected the prototype destructor of EdkUefiRuntimeLib.

git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2271 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
jwang36 2007-01-19 06:25:21 +00:00
parent 8fc81f2a88
commit f9081b646d
3 changed files with 155 additions and 4 deletions

View File

@ -129,7 +129,8 @@ RuntimeDriverLibConstruct (
EFI_STATUS
EFIAPI
RuntimeDriverLibDeconstruct (
VOID
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
{
EFI_STATUS Status;

View File

@ -142,7 +142,8 @@ Returns:
EFI_STATUS
EFIAPI
RuntimeDriverLibDeconstruct (
VOID
IN EFI_HANDLE ImageHandle,
IN EFI_SYSTEM_TABLE *SystemTable
)
/*++

View File

@ -620,12 +620,15 @@ public class AutoGen {
fileBuffer.append("\n");
fileBuffer.append(this.myPcdAutogen.getHAutoGenString());
}
//
// generate function prototype for constructor and destructor
//
LibConstructorToAutogenH(moduleType, fileBuffer);
LibDestructorToAutogenH(moduleType, fileBuffer);
//
// Append the #endif at AutoGen.h
//
fileBuffer.append("#endif\n");
//
// Save content of string buffer to AutoGen.h file.
//
@ -1362,6 +1365,152 @@ public class AutoGen {
LibDestructorToAutogenC(libDestructList, moduleType, fileBuffer/* autogenC */);
}
/**
LibConstructorToAutogenH
This function writes library constructor declarations AutoGen.h. The library
constructor's parameter and return value depend on module type.
@param libInstanceList
List of library construct name.
@param moduleType
Module type.
@param fileBuffer
String buffer for AutoGen.c
@throws Exception
**/
void LibConstructorToAutogenH(String moduleType, StringBuffer fileBuffer) throws EdkException {
boolean isFirst = true;
//
// If not yet parse this library instance's constructor
// element,parse it.
//
String libConstructName = saq.getLibConstructorName();
if (libConstructName == null) {
return;
}
//
// The library constructor's parameter and return value depend on
// module type.
//
if (moduleType.equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {
fileBuffer.append("RETURN_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libConstructName);
fileBuffer.append(" (\n");
fileBuffer.append(" VOID\n");
fileBuffer.append(" );\n");
} else {
switch (CommonDefinition.getModuleType(moduleType)) {
case CommonDefinition.ModuleTypeBase:
fileBuffer.append("RETURN_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libConstructName);
fileBuffer.append(" (\n");
fileBuffer.append(" VOID\n");
fileBuffer.append(" );\n");
break;
case CommonDefinition.ModuleTypePeiCore:
case CommonDefinition.ModuleTypePeim:
fileBuffer.append("EFI_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libConstructName);
fileBuffer.append(" (\n");
fileBuffer.append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\n");
fileBuffer.append(" IN EFI_PEI_SERVICES **PeiServices\n");
fileBuffer.append(" );\n");
break;
case CommonDefinition.ModuleTypeDxeCore:
case CommonDefinition.ModuleTypeDxeDriver:
case CommonDefinition.ModuleTypeDxeRuntimeDriver:
case CommonDefinition.ModuleTypeDxeSmmDriver:
case CommonDefinition.ModuleTypeDxeSalDriver:
case CommonDefinition.ModuleTypeUefiDriver:
case CommonDefinition.ModuleTypeUefiApplication:
fileBuffer.append("EFI_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libConstructName);
fileBuffer.append(" (\n");
fileBuffer.append(" IN EFI_HANDLE ImageHandle,\n");
fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\n");
fileBuffer.append(" );\n");
break;
}
}
}
/**
LibDestructorToAutogenH
This function writes library destructor declarations AutoGen.h. The library
destructor's parameter and return value depend on module type.
@param libInstanceList
List of library destructor name.
@param moduleType
Module type.
@param fileBuffer
String buffer for AutoGen.c
@throws Exception
**/
void LibDestructorToAutogenH(String moduleType, StringBuffer fileBuffer) throws EdkException {
boolean isFirst = true;
String libDestructName = saq.getLibDestructorName();
if (libDestructName == null) {
return;
}
if (moduleType.equalsIgnoreCase(EdkDefinitions.MODULE_TYPE_BASE)) {
fileBuffer.append("RETURN_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libDestructName);
fileBuffer.append(" (\n");
fileBuffer.append(" VOID\n");
fileBuffer.append(" );\n");
} else {
switch (CommonDefinition.getModuleType(moduleType)) {
case CommonDefinition.ModuleTypeBase:
fileBuffer.append("RETURN_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libDestructName);
fileBuffer.append(" (\n");
fileBuffer.append(" VOID\n");
fileBuffer.append(" );\n");
break;
case CommonDefinition.ModuleTypePeiCore:
case CommonDefinition.ModuleTypePeim:
fileBuffer.append("EFI_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libDestructName);
fileBuffer.append(" (\n");
fileBuffer.append(" IN EFI_FFS_FILE_HEADER *FfsHeader,\n");
fileBuffer.append(" IN EFI_PEI_SERVICES **PeiServices\n");
fileBuffer.append(" );\n");
break;
case CommonDefinition.ModuleTypeDxeCore:
case CommonDefinition.ModuleTypeDxeDriver:
case CommonDefinition.ModuleTypeDxeRuntimeDriver:
case CommonDefinition.ModuleTypeDxeSmmDriver:
case CommonDefinition.ModuleTypeDxeSalDriver:
case CommonDefinition.ModuleTypeUefiDriver:
case CommonDefinition.ModuleTypeUefiApplication:
fileBuffer.append("EFI_STATUS\n");
fileBuffer.append("EFIAPI\n");
fileBuffer.append(libDestructName);
fileBuffer.append(" (\n");
fileBuffer.append(" IN EFI_HANDLE ImageHandle,\n");
fileBuffer.append(" IN EFI_SYSTEM_TABLE *SystemTable\n");
fileBuffer.append(" );\n");
break;
}
}
}
/**
LibConstructorToAutogenc