public static Compile3MsSymbol createCompile3MsSymbol(AbstractPdb pdb, long flags,
			Processor processor, int frontEndMajorVersionNumber, int frontEndMinorVersionNumber,
			int frontEndBuildVersionNumber, int frontEndQuickFixEngineeringVersionNumber,
			int backEndMajorVersionNumber, int backEndMinorVersionNumber,
			int backEndBuildVersionNumber, int backEndQuickFixEngineeringVersionNumber,
			String compilerVersionString) {

		PdbByteWriter writer = new PdbByteWriter();

		writer.putUnsignedInt(flags);
		writer.putUnsignedShort(processor.getValue());
		writer.putUnsignedShort(frontEndMajorVersionNumber);
		writer.putUnsignedShort(frontEndMinorVersionNumber);
		writer.putUnsignedShort(frontEndBuildVersionNumber);
		writer.putUnsignedShort(frontEndQuickFixEngineeringVersionNumber);
		writer.putUnsignedShort(backEndMajorVersionNumber);
		writer.putUnsignedShort(backEndMinorVersionNumber);
		writer.putUnsignedShort(backEndBuildVersionNumber);
		writer.putUnsignedShort(backEndQuickFixEngineeringVersionNumber);
		writer.putNullTerminatedUtf8String(compilerVersionString);

		PdbByteReader reader = new PdbByteReader(writer.get());

		Compile3MsSymbol compile3MsSymbol = null;
		try {
			compile3MsSymbol = new Compile3MsSymbol(pdb, reader);
		}
		catch (PdbException e) {
			e.printStackTrace();
			fail("Failed to construct Compile3MsSymbol");
		}

		assertEquals(reader.getLimit(), writer.getSize());

		assertEquals(flags, compile3MsSymbol.getFlags());
		assertEquals(frontEndMajorVersionNumber, compile3MsSymbol.getFrontEndMajorVersionNumber());
		assertEquals(frontEndMinorVersionNumber, compile3MsSymbol.getFrontEndMinorVersionNumber());
		assertEquals(frontEndBuildVersionNumber, compile3MsSymbol.getFrontEndBuildVersionNumber());
		assertEquals(frontEndQuickFixEngineeringVersionNumber,
			compile3MsSymbol.getFrontEndQuickFixEngineeringVersionNumber());
		assertEquals(backEndMajorVersionNumber, compile3MsSymbol.getBackEndMajorVersionNumber());
		assertEquals(backEndMinorVersionNumber, compile3MsSymbol.getBackEndMinorVersionNumber());
		assertEquals(backEndBuildVersionNumber, compile3MsSymbol.getBackEndBuildVersionNumber());
		assertEquals(backEndQuickFixEngineeringVersionNumber,
			compile3MsSymbol.getBackEndQuickFixEngineeringVersionNumber());
		assertEquals(compilerVersionString, compile3MsSymbol.getCompilerVersionString());

		// Very important: Store target machine information.  It is used elsewhere, including
		// in RegisterName. I think it is just as important here, but maybe should allow
		// reader to set the value, but for testing, that part of the code might not be activated,
		// as we might only be testing small portions of the reader
		pdb.setTargetProcessor(processor);

		return compile3MsSymbol;
	}
Creates an {@link Compile3MsSymbol} from parameters
@param pdb PDB that the Compile3MsSymbol belongs to
@param flags the packed flags (see buildCompile3MsSymbolFlags) unsigned int stored in long
@param processor the processor value
@param frontEndMajorVersionNumber the front end major version number
@param frontEndMinorVersionNumber the front end minor version number
@param frontEndBuildVersionNumber the front end build version number
@param frontEndQuickFixEngineeringVersionNumber the front end quick-fix version number
@param backEndMajorVersionNumber the back end major version number
@param backEndMinorVersionNumber the back end minor version number
@param backEndBuildVersionNumber the back end build version number
@param backEndQuickFixEngineeringVersionNumber the back end quick-fix version number
@param compilerVersionString the compiler version string
@return initialized Compile3MsSymbol
Ghidra/Features/PDB/src/test/java/ghidra/app/util/bin/format/pdb2/pdbreader/PdbTestUtils.java