diff --git a/generator/sections/gen-section-arm.c b/generator/sections/gen-section-arm.c
index 7ec94a7..cdd71e1 100644
--- a/generator/sections/gen-section-arm.c
+++ b/generator/sections/gen-section-arm.c
@@ -11,174 +11,175 @@
 #include "gen-section.h"
 #define ARM_ERROR_INFO_SIZE 32
 
-void* generate_arm_error_info();
-size_t generate_arm_context_info(void** location);
+void *generate_arm_error_info();
+size_t generate_arm_context_info(void **location);
 
 //Generates a single pseudo-random ARM processor section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_arm(void** location)
+size_t generate_section_arm(void **location)
 {
-    //Set up for generation of error/context structures.
-    UINT16 error_structure_num = rand() % 4 + 1; //Must be at least 1.
-    UINT16 context_structure_num = rand() % 3;
-    void* error_structures[error_structure_num];
-    void* context_structures[context_structure_num];
-    size_t context_structure_lengths[context_structure_num];
+	//Set up for generation of error/context structures.
+	UINT16 error_structure_num = rand() % 4 + 1; //Must be at least 1.
+	UINT16 context_structure_num = rand() % 3 + 1;
+	void *error_structures[error_structure_num];
+	void *context_structures[context_structure_num];
+	size_t context_structure_lengths[context_structure_num];
 
-    //Generate the structures.
-    for (int i=0; i<error_structure_num; i++)
-        error_structures[i] = generate_arm_error_info();
-    for (int i=0; i<context_structure_num; i++)
-        context_structure_lengths[i] = generate_arm_context_info(context_structures + i);
+	//Generate the structures.
+	for (int i = 0; i < error_structure_num; i++) {
+		error_structures[i] = generate_arm_error_info();
+	}
+	for (int i = 0; i < context_structure_num; i++) {
+		context_structure_lengths[i] =
+			generate_arm_context_info(context_structures + i);
+	}
 
-    //Determine a random amount of vendor specific info.
-    int vendor_info_len = rand() % 16;
+	//Determine a random amount of vendor specific info.
+	int vendor_info_len = rand() % 16;
 
-    //Create the section as a whole.
-    size_t total_len = 40 + (error_structure_num * ARM_ERROR_INFO_SIZE);
-    for (int i=0; i<context_structure_num; i++)
-        total_len += context_structure_lengths[i];
-    total_len += vendor_info_len;
-    UINT8* section = generate_random_bytes(total_len);
+	//Create the section as a whole.
+	size_t total_len = 40 + (error_structure_num * ARM_ERROR_INFO_SIZE);
+	for (int i = 0; i < context_structure_num; i++) {
+		total_len += context_structure_lengths[i];
+	}
+	total_len += vendor_info_len;
+	UINT8 *section = generate_random_bytes(total_len);
 
-    //Set header information.
-    UINT16* info_nums = (UINT16*)(section + 4);
-    *info_nums = error_structure_num;
-    *(info_nums + 1) = context_structure_num;
-    UINT32* section_length = (UINT32*)(section + 8);
-    *section_length = total_len;
-    
-    //Error affinity.
-    *(section + 12) = rand() % 4;
+	//Set header information.
+	UINT16 *info_nums = (UINT16 *)(section + 4);
+	*info_nums = error_structure_num;
+	*(info_nums + 1) = context_structure_num;
+	UINT32 *section_length = (UINT32 *)(section + 8);
+	*section_length = total_len;
 
-    //Reserved zero bytes.
-    UINT64* validation = (UINT64*)section;
-    *validation &= 0b111;
-    UINT32* running_state = (UINT32*)(section + 32);
-    *running_state &= 0b1;
-    memset(section + 13, 0, 3);
+	//Error affinity.
+	*(section + 12) = rand() % 4;
 
-    //Copy in the sections/context structures, free resources.
-    UINT8* cur_pos = section + 40;
-    for (int i=0; i<error_structure_num; i++)
-    {
-        memcpy(cur_pos, error_structures[i], ARM_ERROR_INFO_SIZE);
-        free(error_structures[i]);
-        cur_pos += ARM_ERROR_INFO_SIZE;
-    }
-    for (int i=0; i<context_structure_num; i++)
-    {
-        memcpy(cur_pos, context_structures[i], context_structure_lengths[i]);
-        free(context_structures[i]);
-        cur_pos += context_structure_lengths[i];
-    }
+	//Reserved zero bytes.
+	UINT64 *validation = (UINT64 *)section;
+	*validation &= 0x7;
+	UINT32 *running_state = (UINT32 *)(section + 32);
+	*running_state &= 0x1;
+	memset(section + 13, 0, 3);
 
-    //Set return values and exit.
-    *location = section;
-    return total_len;
+	//Copy in the sections/context structures, free resources.
+	UINT8 *cur_pos = section + 40;
+	for (int i = 0; i < error_structure_num; i++) {
+		memcpy(cur_pos, error_structures[i], ARM_ERROR_INFO_SIZE);
+		free(error_structures[i]);
+		cur_pos += ARM_ERROR_INFO_SIZE;
+	}
+	for (int i = 0; i < context_structure_num; i++) {
+		memcpy(cur_pos, context_structures[i],
+		       context_structure_lengths[i]);
+		free(context_structures[i]);
+		cur_pos += context_structure_lengths[i];
+	}
+
+	//Set return values and exit.
+	*location = section;
+	return total_len;
 }
 
 //Generates a single pseudo-random ARM error info structure. Must be later freed.
-void* generate_arm_error_info()
+void *generate_arm_error_info()
 {
-    UINT8* error_info = generate_random_bytes(ARM_ERROR_INFO_SIZE);
+	UINT8 *error_info = generate_random_bytes(ARM_ERROR_INFO_SIZE);
 
-    //Version (zero for revision of table referenced), length.
-    *error_info = 0;
-    *(error_info + 1) = ARM_ERROR_INFO_SIZE;
+	//Version (zero for revision of table referenced), length.
+	*error_info = 0;
+	*(error_info + 1) = ARM_ERROR_INFO_SIZE;
 
-    //Type of error.
-    UINT8 error_type = rand() % 4;
-    *(error_info + 4) = error_type;
+	//Type of error.
+	UINT8 error_type = rand() % 4;
+	*(error_info + 4) = error_type;
 
-    //Reserved bits for error information.
-    UINT16* validation = (UINT16*)(error_info + 2);
-    *validation &= 0x1F;
+	//Reserved bits for error information.
+	UINT16 *validation = (UINT16 *)(error_info + 2);
+	*validation &= 0x1F;
 
-    //Make sure reserved bits are zero according with the type.
-    UINT64* error_subinfo = (UINT64*)(error_info + 8);
-    switch (error_type)
-    {
-        //Cache/TLB
-        case 0:
-        case 1:
-            *error_subinfo &= 0xFFFFFFF;
-            break;
+	//Make sure reserved bits are zero according with the type.
+	UINT64 *error_subinfo = (UINT64 *)(error_info + 8);
+	switch (error_type) {
+	//Cache/TLB
+	case 0:
+	case 1:
+		*error_subinfo &= 0xFFFFFFF;
+		break;
 
-        //Bus
-        case 2:
-            *error_subinfo &= 0xFFFFFFFFFFF;
-            break;
+	//Bus
+	case 2:
+		*error_subinfo &= 0xFFFFFFFFFFF;
+		break;
 
-        //Microarch/other.
-        default:
-            break;
-    }
+	//Microarch/other.
+	default:
+		break;
+	}
 
-    return error_info;
+	return error_info;
 }
 
 //Generates a single pseudo-random ARM context info structure. Must be later freed.
-size_t generate_arm_context_info(void** location)
+size_t generate_arm_context_info(void **location)
 {
-    //Initial length is 8 bytes. Add extra based on type.
-    UINT16 reg_type = rand() % 9;
-    UINT32 reg_size = 0;
+	//Initial length is 8 bytes. Add extra based on type.
+	UINT16 reg_type = rand() % 9;
+	UINT32 reg_size = 0;
 
-    //Set register size.
-    switch (reg_type)
-    {
-        //AARCH32 GPR, AARCH32 EL2
-        case 0:
-        case 2:
-            reg_size = 64;
-            break;
+	//Set register size.
+	switch (reg_type) {
+	//AARCH32 GPR, AARCH32 EL2
+	case 0:
+	case 2:
+		reg_size = 64;
+		break;
 
-        //AARCH32 EL1
-        case 1:
-            reg_size = 96;
-            break;
+	//AARCH32 EL1
+	case 1:
+		reg_size = 96;
+		break;
 
-        //AARCH32 EL3
-        case 3:
-            reg_size = 8;
-            break;
+	//AARCH32 EL3
+	case 3:
+		reg_size = 8;
+		break;
 
-        //AARCH64 GPR
-        case 4:
-            reg_size = 256;
-            break;
+	//AARCH64 GPR
+	case 4:
+		reg_size = 256;
+		break;
 
-        //AARCH64 EL1
-        case 5:
-            reg_size = 136;
-            break;
-        
-        //AARCH64 EL2
-        case 6:
-            reg_size = 120;
-            break;
+	//AARCH64 EL1
+	case 5:
+		reg_size = 136;
+		break;
 
-        //AARCH64 EL3
-        case 7:
-            reg_size = 80;
-            break;
+	//AARCH64 EL2
+	case 6:
+		reg_size = 120;
+		break;
 
-        //Misc. single register.
-        case 8:
-            reg_size = 10;
-            break;
-    }
+	//AARCH64 EL3
+	case 7:
+		reg_size = 80;
+		break;
 
-    //Create context structure randomly.
-    int total_size = 8 + reg_size;
-    UINT16* context_info = (UINT16*)generate_random_bytes(total_size);
+	//Misc. single register.
+	case 8:
+		reg_size = 10;
+		break;
+	}
 
-    //Set header information.
-    *(context_info + 1) = reg_type;
-    *((UINT32*)(context_info + 2)) = reg_size;
+	//Create context structure randomly.
+	int total_size = 8 + reg_size;
+	UINT16 *context_info = (UINT16 *)generate_random_bytes(total_size);
 
-    //Set return values and exit.
-    *location = context_info;
-    return total_size;
-}
\ No newline at end of file
+	//Set header information.
+	*(context_info + 1) = reg_type;
+	*((UINT32 *)(context_info + 2)) = reg_size;
+
+	//Set return values and exit.
+	*location = context_info;
+	return total_size;
+}
diff --git a/generator/sections/gen-section-ccix-per.c b/generator/sections/gen-section-ccix-per.c
index c820d72..1780af7 100644
--- a/generator/sections/gen-section-ccix-per.c
+++ b/generator/sections/gen-section-ccix-per.c
@@ -11,28 +11,29 @@
 
 //Generates a single pseudo-random CCIX PER error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_ccix_per(void** location)
+size_t generate_section_ccix_per(void **location)
 {
-    //Create a random length for the CCIX PER log.
-    //The log attached here does not necessarily conform to the CCIX specification, and is simply random.
-    int log_len = (rand() % 5 + 1) * 32;
+	//Create a random length for the CCIX PER log.
+	//The log attached here does not necessarily conform to the CCIX specification, and is simply random.
+	int log_len = (rand() % 5 + 1) * 32;
 
-    //Create random bytes.
-    int size = 16 + log_len;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)(bytes + 4);
-    *validation &= 0b111; //Validation bits 3-63.
-    *(bytes + 13) &= 0b11111; //CCIX port ID bits 5-7.
-    UINT16* reserved = (UINT16*)(bytes + 14);
-    *reserved = 0; //Reserved bytes 14-15.
+	//Create random bytes.
+	int size = 16 + log_len;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set expected values.
-    UINT32* length = (UINT32*)bytes;
-    *length = size;
+	//Set reserved areas to zero.
+	UINT32 *validation = (UINT32 *)(bytes + 4);
+	*validation &= 0x7;    //Validation bits 3-63.
+	*(validation + 1) = 0; //Validation bits 3-63.
+	*(bytes + 13) &= 0x1F; //CCIX port ID bits 5-7.
+	UINT16 *reserved = (UINT16 *)(bytes + 14);
+	*reserved = 0;	       //Reserved bytes 14-15.
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Set expected values.
+	UINT32 *length = (UINT32 *)bytes;
+	*length = size;
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-cxl-component.c b/generator/sections/gen-section-cxl-component.c
index 5fb6789..b13a1f5 100644
--- a/generator/sections/gen-section-cxl-component.c
+++ b/generator/sections/gen-section-cxl-component.c
@@ -11,28 +11,29 @@
 
 //Generates a single pseudo-random CXL component error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_cxl_component(void** location)
+size_t generate_section_cxl_component(void **location)
 {
-    //Create a random length for the CXL component event log.
-    //The logs attached here do not necessarily conform to the specification, and are simply random.
-    int log_len = rand() % 64;
+	//Create a random length for the CXL component event log.
+	//The logs attached here do not necessarily conform to the specification, and are simply random.
+	int log_len = rand() % 64;
 
-    //Create random bytes.
-    int size = 32 + log_len;
-    UINT8* bytes = generate_random_bytes(size);
+	//Create random bytes.
+	int size = 32 + log_len;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)(bytes + 4);
-    *validation &= 0b111;
-    UINT16* slot_number = (UINT16*)(bytes + 21);
-    *slot_number &= ~0b111; //Device ID slot number bits 0-2.
-    *(bytes + 23) = 0; //Device ID byte 11.
+	//Set reserved areas to zero.
+	UINT32 *validation = (UINT32 *)(bytes + 4);
+	*validation &= 0x7;
+	*(validation + 1) = 0;
+	UINT8 *slot_number = (UINT8 *)(bytes + 21);
+	*slot_number &= ~0x7; //Device ID slot number bits 0-2.
+	*(bytes + 23) = 0;    //Device ID byte 11.
 
-    //Set expected values.
-    UINT32* length = (UINT32*)bytes;
-    *length = size;
-    
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Set expected values.
+	UINT32 *length = (UINT32 *)bytes;
+	*length = size;
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-cxl-protocol.c b/generator/sections/gen-section-cxl-protocol.c
index 71a1105..cd9d66d 100644
--- a/generator/sections/gen-section-cxl-protocol.c
+++ b/generator/sections/gen-section-cxl-protocol.c
@@ -11,54 +11,56 @@
 
 //Generates a single pseudo-random CXL protocol error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_cxl_protocol(void** location)
+size_t generate_section_cxl_protocol(void **location)
 {
-    //Create a random length for the CXL DVSEC and CXL error log.
-    //The logs attached here do not necessarily conform to the specification, and are simply random.
-    int dvsec_len = rand() % 64;
-    int error_log_len = rand() % 64;
+	//Create a random length for the CXL DVSEC and CXL error log.
+	//The logs attached here do not necessarily conform to the specification, and are simply random.
+	int dvsec_len = rand() % 64;
+	int error_log_len = rand() % 64;
 
-    //Create random bytes.
-    int size = 116 + dvsec_len + error_log_len;
-    UINT8* bytes = generate_random_bytes(size);
+	//Create random bytes.
+	int size = 116 + dvsec_len + error_log_len;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set CXL agent type.
-    int cxl_agent_type = rand() % 2;
-    *(bytes + 8) = cxl_agent_type;
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0b111111; //Validation bits 6-63.
-    for (int i=0; i<7; i++)
-        *(bytes + 9 + i) = 0; //Reserved bytes 9-15.
+	//Set CXL agent type.
+	int cxl_agent_type = rand() % 2;
+	*(bytes + 8) = cxl_agent_type;
 
-    //We only reserve bytes if it's a CXL 1.1 device, and not a host downstream port.
-    if (cxl_agent_type == 0)
-    {
-        for (int i=0; i<3; i++)
-            *(bytes + 21 + i) = 0; //CXL agent address bytes 5-7.
-    }
-    
-    *(bytes + 34) &= ~0b111; //Device ID byte 10 bits 0-2.
-    UINT32* reserved = (UINT32*)(bytes + 36);
-    *reserved = 0; //Device ID bytes 12-15.
-    reserved = (UINT32*)(bytes + 112);
-    *reserved = 0; //Reserved bytes 112-115.
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0x3F;	      //Validation bits 6-63.
+	for (int i = 0; i < 7; i++) {
+		*(bytes + 9 + i) = 0; //Reserved bytes 9-15.
+	}
 
-    //If the device is a host downstream port, serial/capability structure is invalid.
-    if (cxl_agent_type != 0)
-    {
-        for (int i=0; i<68; i++)
-            *(bytes + 40 + i) = 0; //Device serial & capability structure.
-    }
+	//We only reserve bytes if it's a CXL 1.1 device, and not a host downstream port.
+	if (cxl_agent_type == 0) {
+		for (int i = 0; i < 3; i++) {
+			*(bytes + 21 + i) = 0; //CXL agent address bytes 5-7.
+		}
+	}
 
-    //Set expected values.
-    UINT16* dvsec_length_field = (UINT16*)(bytes + 108);
-    UINT16* error_log_len_field = (UINT16*)(bytes + 110);
-    *dvsec_length_field = dvsec_len;
-    *error_log_len_field = error_log_len;
+	*(bytes + 34) &= ~0x7; //Device ID byte 10 bits 0-2.
+	UINT32 *reserved = (UINT32 *)(bytes + 36);
+	*reserved = 0;	       //Device ID bytes 12-15.
+	reserved = (UINT32 *)(bytes + 112);
+	*reserved = 0;	       //Reserved bytes 112-115.
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//If the device is a host downstream port, serial/capability structure is invalid.
+	if (cxl_agent_type != 0) {
+		for (int i = 0; i < 68; i++) {
+			*(bytes + 40 + i) =
+				0; //Device serial & capability structure.
+		}
+	}
+
+	//Set expected values.
+	UINT16 *dvsec_length_field = (UINT16 *)(bytes + 108);
+	UINT16 *error_log_len_field = (UINT16 *)(bytes + 110);
+	*dvsec_length_field = dvsec_len;
+	*error_log_len_field = error_log_len;
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-dmar.c b/generator/sections/gen-section-dmar.c
index 66cc70a..6e405c8 100644
--- a/generator/sections/gen-section-dmar.c
+++ b/generator/sections/gen-section-dmar.c
@@ -11,68 +11,71 @@
 
 //Generates a single pseudo-random generic DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_generic(void** location)
+size_t generate_section_dmar_generic(void **location)
 {
-    //Create random bytes.
-    int size = 32;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* reserved = (UINT64*)(bytes + 16);
-    *reserved = 0;
-    *(reserved + 1) = 0;
+	//Create random bytes.
+	int size = 32;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set expected values.
-    *(bytes + 4) = rand() % 0xC; //Fault reason.
-    *(bytes + 5) = rand() % 2; //Access type.
-    *(bytes + 6) = rand() % 2; //Address type.
-    *(bytes + 7) = rand() % 2 + 1; //Architecture type.
+	//Set reserved areas to zero.
+	UINT64 *reserved = (UINT64 *)(bytes + 16);
+	*reserved = 0;
+	*(reserved + 1) = 0;
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
+	//Set expected values.
+	*(bytes + 4) = rand() % 0xC;   //Fault reason.
+	*(bytes + 5) = rand() % 2;     //Access type.
+	*(bytes + 6) = rand() % 2;     //Address type.
+	*(bytes + 7) = rand() % 2 + 1; //Architecture type.
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
 }
 
 //Generates a single pseudo-random VT-d DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_vtd(void** location)
+size_t generate_section_dmar_vtd(void **location)
 {
-    //Create random bytes.
-    int size = 144;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    for (int i=0; i<12; i++)
-        *(bytes + 36 + i) = 0; //Reserved bytes 36-47.
-    UINT8* fault_record = bytes + 48;
-    UINT32* reserved = (UINT32*)(fault_record);
-    *reserved &= ~0xFFF; //First 12 bits of fault record.
-    reserved = (UINT32*)(fault_record + 10);
-    *reserved &= ~0x1FFF; //Bits 80-92 of fault record.
-    *(fault_record + 15) &= 0x7; //Very last bit of fault record.
+	//Create random bytes.
+	int size = 144;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
+	//Set reserved areas to zero.
+	for (int i = 0; i < 12; i++) {
+		*(bytes + 36 + i) = 0; //Reserved bytes 36-47.
+	}
+	UINT8 *fault_record = bytes + 48;
+	UINT32 *reserved = (UINT32 *)(fault_record);
+	*reserved &= ~0xFFF;	     //First 12 bits of fault record.
+	reserved = (UINT32 *)(fault_record + 8);
+	*reserved &= ~0x1FFF0000;    //Bits 80-92 of fault record.
+	*(fault_record + 15) &= 0x7; //Very last bit of fault record.
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
 }
 
 //Generates a single pseudo-random IOMMU DMAr error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_dmar_iommu(void** location)
+size_t generate_section_dmar_iommu(void **location)
 {
-    //Create random bytes.
-    int size = 144;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    for (int i=0; i<7; i++)
-        *(bytes + 1 + i) = 0; //Reserved bytes 1 to 7.
-    UINT64* reserved = (UINT64*)(bytes + 24);
-    *reserved = 0; //Reserved bytes 24-31.
-    for (int i=0; i<16; i++)
-        *(bytes + 48 + i) = 0; //Reserved bytes 48-63.
+	//Create random bytes.
+	int size = 144;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Set reserved areas to zero.
+	for (int i = 0; i < 7; i++) {
+		*(bytes + 1 + i) = 0; //Reserved bytes 1 to 7.
+	}
+	UINT64 *reserved = (UINT64 *)(bytes + 24);
+	*reserved = 0;		       //Reserved bytes 24-31.
+	for (int i = 0; i < 16; i++) {
+		*(bytes + 48 + i) = 0; //Reserved bytes 48-63.
+	}
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-firmware.c b/generator/sections/gen-section-firmware.c
index 7ba93ee..9eb3f69 100644
--- a/generator/sections/gen-section-firmware.c
+++ b/generator/sections/gen-section-firmware.c
@@ -11,23 +11,24 @@
 
 //Generates a single pseudo-random firmware error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_firmware(void** location)
+size_t generate_section_firmware(void **location)
 {
-    //Create random bytes.
-    int size = 32;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    for (int i=0; i<6; i++)
-        *(bytes + 2 + i) = 0; //Reserved bytes 2-7.
+	//Create random bytes.
+	int size = 32;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set expected values.
-    *(bytes + 1) = 2; //Revision, referenced version of spec is 2.
-    UINT64* record_id = (UINT64*)(bytes + 8);
-    *record_id = 0; //Record ID, should be forced to NULL.
-    *bytes = rand() % 3; //Record type.
+	//Set reserved areas to zero.
+	for (int i = 0; i < 6; i++) {
+		*(bytes + 2 + i) = 0; //Reserved bytes 2-7.
+	}
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Set expected values.
+	*(bytes + 1) = 2;    //Revision, referenced version of spec is 2.
+	UINT64 *record_id = (UINT64 *)(bytes + 8);
+	*record_id = 0;	     //Record ID, should be forced to NULL.
+	*bytes = rand() % 3; //Record type.
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-generic.c b/generator/sections/gen-section-generic.c
index e9a2ea0..061ff10 100644
--- a/generator/sections/gen-section-generic.c
+++ b/generator/sections/gen-section-generic.c
@@ -11,28 +11,29 @@
 
 //Generates a single pseudo-random generic processor section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_generic(void** location)
+size_t generate_section_generic(void **location)
 {
-    //Create random bytes.
-    size_t size = generate_random_section(location, 192);
+	//Create random bytes.
+	size_t size = generate_random_section(location, 192);
 
-    //Set reserved locations to zero.
-    UINT8* start_byte = (UINT8*)*location;
-    *((UINT64*)start_byte) &= 0xFFF;
-    *(start_byte + 12) &= 0b111;
-    *((UINT16*)(start_byte + 14)) = 0x0;
-    
-    //Ensure CPU brand string does not terminate early.
-    for (int i=0; i<128; i++)
-    {
-        UINT8* byte = start_byte + 24 + i;
-        if (*byte == 0x0)
-            *byte = rand() % 127 + 1;
+	//Set reserved locations to zero.
+	UINT8 *start_byte = (UINT8 *)*location;
+	*((UINT64 *)start_byte) &= 0xFFF;
+	*(start_byte + 12) &= 0x7;
+	*((UINT16 *)(start_byte + 14)) = 0x0;
 
-        //Null terminate last byte.
-        if (i == 127)
-            *byte = 0x0;
-    }
+	//Ensure CPU brand string does not terminate early.
+	for (int i = 0; i < 128; i++) {
+		UINT8 *byte = start_byte + 24 + i;
+		if (*byte == 0x0) {
+			*byte = rand() % 127 + 1;
+		}
 
-    return size;
-}
\ No newline at end of file
+		//Null terminate last byte.
+		if (i == 127) {
+			*byte = 0x0;
+		}
+	}
+
+	return size;
+}
diff --git a/generator/sections/gen-section-ia32x64.c b/generator/sections/gen-section-ia32x64.c
index a01d2b7..2bd9c72 100644
--- a/generator/sections/gen-section-ia32x64.c
+++ b/generator/sections/gen-section-ia32x64.c
@@ -11,155 +11,160 @@
 #include "gen-section.h"
 #define IA32X64_ERROR_STRUCTURE_SIZE 64
 
-void* generate_ia32x64_error_structure();
-size_t generate_ia32x64_context_structure(void** location);
+void *generate_ia32x64_error_structure();
+size_t generate_ia32x64_context_structure(void **location);
 
 //Generates a single pseudo-random IA32/x64 section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_ia32x64(void** location)
+size_t generate_section_ia32x64(void **location)
 {
-    //Set up for generation of error/context structures.
-    UINT16 error_structure_num = rand() % 5;
-    UINT16 context_structure_num = rand() % 5;
-    void* error_structures[error_structure_num];
-    void* context_structures[context_structure_num];
-    size_t context_structure_lengths[context_structure_num];
+	//Set up for generation of error/context structures.
+	UINT16 error_structure_num = rand() % 4 + 1;
+	UINT16 context_structure_num = rand() % 4 + 1;
+	void *error_structures[error_structure_num];
+	void *context_structures[context_structure_num];
+	size_t context_structure_lengths[context_structure_num];
 
-    //Generate the structures.
-    for (int i=0; i<error_structure_num; i++)
-        error_structures[i] = generate_ia32x64_error_structure();
-    for (int i=0; i<context_structure_num; i++)
-        context_structure_lengths[i] = generate_ia32x64_context_structure(context_structures + i);
+	//Generate the structures.
+	for (int i = 0; i < error_structure_num; i++) {
+		error_structures[i] = generate_ia32x64_error_structure();
+	}
+	for (int i = 0; i < context_structure_num; i++) {
+		context_structure_lengths[i] =
+			generate_ia32x64_context_structure(context_structures +
+							   i);
+	}
 
-    //Create a valid IA32/x64 section.
-    size_t total_len = 64 + (IA32X64_ERROR_STRUCTURE_SIZE * error_structure_num);
-    for (int i=0; i<context_structure_num; i++)
-        total_len += context_structure_lengths[i];
-    UINT8* section = generate_random_bytes(total_len);
+	//Create a valid IA32/x64 section.
+	size_t total_len =
+		64 + (IA32X64_ERROR_STRUCTURE_SIZE * error_structure_num);
+	for (int i = 0; i < context_structure_num; i++) {
+		total_len += context_structure_lengths[i];
+	}
+	UINT8 *section = generate_random_bytes(total_len);
 
-    //Null extend the end of the CPUID in the header.
-    for (int i=0; i<16; i++)
-        *(section + 48 + i) = 0x0;
+	//Null extend the end of the CPUID in the header.
+	for (int i = 0; i < 16; i++) {
+		*(section + 48 + i) = 0x0;
+	}
 
-    //Set header information.
-    UINT64* validation = (UINT64*)section;
-    *validation &= 0b11;
-    *validation |= error_structure_num << 2;
-    *validation |= context_structure_num << 8;
+	//Set header information.
+	UINT64 *validation = (UINT64 *)section;
+	*validation &= 0x3;
+	*validation |= error_structure_num << 2;
+	*validation |= context_structure_num << 8;
 
-    //Copy in structures, free resources.
-    UINT8* cur_pos = section + 64;
-    for (int i=0; i<error_structure_num; i++)
-    {
-        memcpy(cur_pos, error_structures[i], IA32X64_ERROR_STRUCTURE_SIZE);
-        free(error_structures[i]);
-        cur_pos += IA32X64_ERROR_STRUCTURE_SIZE;
-    }
-    for (int i=0; i<context_structure_num; i++)
-    {
-        memcpy(cur_pos, context_structures[i], context_structure_lengths[i]);
-        free(context_structures[i]);
-        cur_pos += context_structure_lengths[i];
-    }
+	//Copy in structures, free resources.
+	UINT8 *cur_pos = section + 64;
+	for (int i = 0; i < error_structure_num; i++) {
+		memcpy(cur_pos, error_structures[i],
+		       IA32X64_ERROR_STRUCTURE_SIZE);
+		free(error_structures[i]);
+		cur_pos += IA32X64_ERROR_STRUCTURE_SIZE;
+	}
+	for (int i = 0; i < context_structure_num; i++) {
+		memcpy(cur_pos, context_structures[i],
+		       context_structure_lengths[i]);
+		free(context_structures[i]);
+		cur_pos += context_structure_lengths[i];
+	}
 
-    //Set return values, exist.
-    *location = section;
-    return total_len;
+	//Set return values, exist.
+	*location = section;
+	return total_len;
 }
 
 //Generates a single IA32/x64 error structure. Must later be freed.
-void* generate_ia32x64_error_structure()
+void *generate_ia32x64_error_structure()
 {
-    UINT8* error_structure = generate_random_bytes(IA32X64_ERROR_STRUCTURE_SIZE);
+	UINT8 *error_structure =
+		generate_random_bytes(IA32X64_ERROR_STRUCTURE_SIZE);
 
-    //Set error structure reserved space to zero.
-    UINT64* validation = (UINT64*)(error_structure + 16);
-    *validation &= 0x1F;
+	//Set error structure reserved space to zero.
+	UINT64 *validation = (UINT64 *)(error_structure + 16);
+	*validation &= 0x1F;
 
-    //Create a random type of error structure.
-    EFI_GUID* guid = (EFI_GUID*)error_structure;
-    UINT64* check_info = (UINT64*)(error_structure + 24);
-    int error_structure_type = rand() % 4;
-    switch (error_structure_type)
-    {
-        //Cache
-        case 0:
-            memcpy(guid, &gEfiIa32x64ErrorTypeCacheCheckGuid, sizeof(EFI_GUID));
+	//Create a random type of error structure.
+	EFI_GUID *guid = (EFI_GUID *)error_structure;
+	UINT64 *check_info = (UINT64 *)(error_structure + 24);
+	int error_structure_type = rand() % 4;
+	switch (error_structure_type) {
+	//Cache
+	case 0:
+		memcpy(guid, &gEfiIa32x64ErrorTypeCacheCheckGuid,
+		       sizeof(EFI_GUID));
 
-            //Set reserved space to zero.
-            *check_info &= ~0xFF00;
-            *check_info &= 0x3FFFFFFF;
-            break;
+		//Set reserved space to zero.
+		*check_info &= ~0x20FF00;
+		*check_info &= 0x3FFFFFFF;
+		break;
 
-        //TLB
-        case 1:
-            memcpy(guid, &gEfiIa32x64ErrorTypeTlbCheckGuid, sizeof(EFI_GUID));
+	//TLB
+	case 1:
+		memcpy(guid, &gEfiIa32x64ErrorTypeTlbCheckGuid,
+		       sizeof(EFI_GUID));
 
-            //Set reserved space to zero.
-            *check_info &= ~0xFF00;
-            *check_info &= 0x3FFFFFFF;
-            break;
+		//Set reserved space to zero.
+		*check_info &= ~0x20FF00;
+		*check_info &= 0x3FFFFFFF;
+		break;
 
-        //Bus
-        case 2:
-            memcpy(guid, &gEfiIa32x64ErrorTypeBusCheckGuid, sizeof(EFI_GUID));
+	//Bus
+	case 2:
+		memcpy(guid, &gEfiIa32x64ErrorTypeBusCheckGuid,
+		       sizeof(EFI_GUID));
 
-            //Set reserved space to zero.
-            *check_info &= ~0xF800;
-            *check_info &= 0x7FFFFFFFF;
-            break;
+		//Set reserved space to zero.
+		*check_info &= ~0x20F800;
+		*check_info &= 0x7FFFFFFFF;
+		break;
 
-        //MS
-        case 3:
-            memcpy(guid, &gEfiIa32x64ErrorTypeMsCheckGuid, sizeof(EFI_GUID));
+	//MS
+	case 3:
+		memcpy(guid, &gEfiIa32x64ErrorTypeMsCheckGuid,
+		       sizeof(EFI_GUID));
 
-            //Set reserved space to zero.
-            *check_info &= ~0xFFE0;
-            *check_info &= 0xFFFFFF;
-            break;
-    }
+		//Set reserved space to zero.
+		*check_info &= ~0xFFE0;
+		*check_info &= 0xFFFFFF;
+		break;
+	}
 
-    return error_structure;
+	return error_structure;
 }
 
 //Generates a single IA32/x64 context structure. Must later be freed.
-size_t generate_ia32x64_context_structure(void** location)
+size_t generate_ia32x64_context_structure(void **location)
 {
-    //Initial length is 16 bytes. Add extra based on type.
-    int reg_type = rand() % 8;
-    int reg_size = 0;
+	//Initial length is 16 bytes. Add extra based on type.
+	int reg_type = rand() % 8;
+	int reg_size = 0;
 
-    //Set register size.
-    if (reg_type == 2)
-    {
-        reg_size = 92; //IA32 registers.
-    }
-    else if (reg_type == 3)
-    {
-        reg_size = 244; //x64 registers.
-    }
-    else
-    {
-        reg_size = (rand() % 5 + 1) * 32; //Not table defined.
-    }
+	//Set register size.
+	if (reg_type == 2) {
+		reg_size = 92;			  //IA32 registers.
+	} else if (reg_type == 3) {
+		reg_size = 244;			  //x64 registers.
+	} else {
+		reg_size = (rand() % 5 + 1) * 32; //Not table defined.
+	}
 
-    //Create structure randomly.
-    int total_size = 16 + reg_size;
-    UINT16* context_structure = (UINT16*)generate_random_bytes(total_size);
+	//Create structure randomly.
+	int total_size = 16 + reg_size;
+	UINT16 *context_structure = (UINT16 *)generate_random_bytes(total_size);
 
-    //If it is x64 registers, set reserved area accordingly.
-    if (reg_type == 3)
-    {
-        UINT8* reg_bytes = (UINT8*)(context_structure + 8);
-        UINT32* reserved = (UINT32*)(reg_bytes + 140);
-        *reserved = 0;
-    }
+	//If it is x64 registers, set reserved area accordingly.
+	if (reg_type == 3) {
+		UINT8 *reg_bytes = (UINT8 *)(context_structure + 8);
+		UINT32 *reserved = (UINT32 *)(reg_bytes + 140);
+		*reserved = 0;
+	}
 
-    //Set header information.
-    *(context_structure) = reg_type;
-    *(context_structure + 1) = reg_size;
+	//Set header information.
+	*(context_structure) = reg_type;
+	*(context_structure + 1) = reg_size;
 
-    //Set return values and exit.
-    *location = context_structure;
-    return total_size;
-}
\ No newline at end of file
+	//Set return values and exit.
+	*location = context_structure;
+	return total_size;
+}
diff --git a/generator/sections/gen-section-memory.c b/generator/sections/gen-section-memory.c
index 9d405a4..46eaed3 100644
--- a/generator/sections/gen-section-memory.c
+++ b/generator/sections/gen-section-memory.c
@@ -11,49 +11,49 @@
 
 //Generates a single pseudo-random platform memory error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_memory(void** location)
+size_t generate_section_memory(void **location)
 {
-    //Create random bytes.
-    int size = 80;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0x2FFFFF; //Validation 22-63
-    *(bytes + 73) &= ~0b11100; //Extended bits 2-4
+	//Create random bytes.
+	int size = 80;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Fix values that could be above range.
-    *(bytes + 72) = rand() % 16; //Memory error type
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0x2FFFFF; //Validation 22-63
+	*(bytes + 73) &= ~0x1C;	 //Extended bits 2-4
 
-    //Fix error status.
-    create_valid_error_section(bytes + 8);
+	//Fix values that could be above range.
+	*(bytes + 72) = rand() % 16; //Memory error type
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
+	//Fix error status.
+	create_valid_error_section(bytes + 8);
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
 }
 
 //Generates a single pseudo-random memory 2 error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_memory2(void** location)
+size_t generate_section_memory2(void **location)
 {
-    //Create random bytes.
-    int size = 96;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0x2FFFFF; //Validation 22-63
-    *(bytes + 63) = 0; //Reserved byte 63
+	//Create random bytes.
+	int size = 96;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Fix values that could be above range.
-    *(bytes + 61) = rand() % 16; //Memory error type
-    *(bytes + 62) = rand() % 2; //Status
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0x2FFFFF; //Validation 22-63
+	*(bytes + 63) = 0;	 //Reserved byte 63
 
-    //Fix error status.
-    create_valid_error_section(bytes + 8);
+	//Fix values that could be above range.
+	*(bytes + 61) = rand() % 16; //Memory error type
+	*(bytes + 62) = rand() % 2;  //Status
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Fix error status.
+	create_valid_error_section(bytes + 8);
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-pci-bus.c b/generator/sections/gen-section-pci-bus.c
index 1aee19a..c814069 100644
--- a/generator/sections/gen-section-pci-bus.c
+++ b/generator/sections/gen-section-pci-bus.c
@@ -11,28 +11,28 @@
 
 //Generates a single pseudo-random PCI/PCI-X bus error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pci_bus(void** location)
+size_t generate_section_pci_bus(void **location)
 {
-    //Create random bytes.
-    int size = 72;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0x1FF; //Validation 9-63
-    UINT32* reserved = (UINT32*)(bytes + 20);
-    *reserved = 0;
-    UINT64* bus_command = (UINT64*)(bytes + 40);
-    *bus_command &= ((UINT64)0b1 << 56); //Bus command bytes bar bit 56.
+	//Create random bytes.
+	int size = 72;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Fix values that could be above range.
-    UINT16* error_type = (UINT16*)(bytes + 16);
-    *error_type = rand() % 8;
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0x1FF; //Validation 9-63
+	UINT32 *reserved = (UINT32 *)(bytes + 20);
+	*reserved = 0;
+	UINT64 *bus_command = (UINT64 *)(bytes + 40);
+	*bus_command &= ((UINT64)0x1 << 56); //Bus command bytes bar bit 56.
 
-    //Fix error status.
-    create_valid_error_section(bytes + 8);
+	//Fix values that could be above range.
+	UINT16 *error_type = (UINT16 *)(bytes + 16);
+	*error_type = rand() % 8;
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Fix error status.
+	create_valid_error_section(bytes + 8);
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-pci-dev.c b/generator/sections/gen-section-pci-dev.c
index 339f98c..a164719 100644
--- a/generator/sections/gen-section-pci-dev.c
+++ b/generator/sections/gen-section-pci-dev.c
@@ -11,33 +11,34 @@
 
 //Generates a single pseudo-random PCI component error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pci_dev(void** location)
+size_t generate_section_pci_dev(void **location)
 {
-    //Generate how many register pairs will be attached to this section.
-    UINT32 num_memory_pairs = rand() % 4;
-    UINT32 num_io_pairs = rand() % 4;
-    UINT32 num_registers = num_memory_pairs + num_io_pairs;
+	//Generate how many register pairs will be attached to this section.
+	UINT32 num_memory_pairs = rand() % 4;
+	UINT32 num_io_pairs = rand() % 4;
+	UINT32 num_registers = num_memory_pairs + num_io_pairs;
 
-    //Create random bytes.
-    int size = 40 + (num_registers * 16);
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0b11111; //Validation 5-63
-    for (int i=0; i<5; i++)
-        *(bytes + 27 + i) = 0; //Bytes 11-15 of ID info.
-        
-    //Set expected values.
-    UINT32* memory_number_field = (UINT32*)(bytes + 32);
-    UINT32* io_number_field = (UINT32*)(bytes + 36);
-    *memory_number_field = num_memory_pairs;
-    *io_number_field = num_io_pairs;
+	//Create random bytes.
+	int size = 40 + (num_registers * 16);
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Fix error status.
-    create_valid_error_section(bytes + 8);
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0x1F;	       //Validation 5-63
+	for (int i = 0; i < 5; i++) {
+		*(bytes + 27 + i) = 0; //Bytes 11-15 of ID info.
+	}
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Set expected values.
+	UINT32 *memory_number_field = (UINT32 *)(bytes + 32);
+	UINT32 *io_number_field = (UINT32 *)(bytes + 36);
+	*memory_number_field = num_memory_pairs;
+	*io_number_field = num_io_pairs;
+
+	//Fix error status.
+	create_valid_error_section(bytes + 8);
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section-pcie.c b/generator/sections/gen-section-pcie.c
index aa1be6b..82b2031 100644
--- a/generator/sections/gen-section-pcie.c
+++ b/generator/sections/gen-section-pcie.c
@@ -9,37 +9,42 @@
 #include "../gen-utils.h"
 #include "gen-section.h"
 
-#define PCIE_PORT_TYPES (int []){0, 1, 4, 5, 6, 7, 8, 9, 10}
+#define PCIE_PORT_TYPES                                                        \
+	(int[])                                                                \
+	{                                                                      \
+		0, 1, 4, 5, 6, 7, 8, 9, 10                                     \
+	}
 
 //Generates a single pseudo-random PCIe error section, saving the resulting address to the given
 //location. Returns the size of the newly created section.
-size_t generate_section_pcie(void** location)
+size_t generate_section_pcie(void **location)
 {
-    //Create random bytes.
-    int size = 208;
-    UINT8* bytes = generate_random_bytes(size);
-    
-    //Set reserved areas to zero.
-    UINT64* validation = (UINT64*)bytes;
-    *validation &= 0xFF; //Validation 8-63
-    UINT32* version = (UINT32*)(bytes + 12);
-    *version &= 0xFFFF; //Version bytes 2-3
-    UINT32* reserved = (UINT32*)(bytes + 20);
-    *reserved = 0; //Reserved bytes 20-24
-    *(bytes + 37) &= ~0b111; //Device ID byte 13 bits 0-3
-    *(bytes + 39) = 0; //Device ID byte 15
+	//Create random bytes.
+	int size = 208;
+	UINT8 *bytes = generate_random_bytes(size);
 
-    //Set expected values.
-    int minor = rand() % 128;
-    int major = rand() % 128;
-    *version = int_to_bcd(minor);
-    *version |= int_to_bcd(major) << 8;
+	//Set reserved areas to zero.
+	UINT64 *validation = (UINT64 *)bytes;
+	*validation &= 0xFF;   //Validation 8-63
+	UINT32 *version = (UINT32 *)(bytes + 12);
+	*version &= 0xFFFF;    //Version bytes 2-3
+	UINT32 *reserved = (UINT32 *)(bytes + 20);
+	*reserved = 0;	       //Reserved bytes 20-24
+	*(bytes + 37) &= ~0x7; //Device ID byte 13 bits 0-3
+	*(bytes + 39) = 0;     //Device ID byte 15
 
-    //Fix values that could be above range.
-    UINT32* port_type = (UINT32*)(bytes + 8);
-    *port_type = PCIE_PORT_TYPES[rand() % (sizeof(PCIE_PORT_TYPES) / sizeof(int))];
+	//Set expected values.
+	int minor = rand() % 128;
+	int major = rand() % 128;
+	*version = int_to_bcd(minor);
+	*version |= int_to_bcd(major) << 8;
 
-    //Set return values, exit.
-    *location = bytes;
-    return size;
-}
\ No newline at end of file
+	//Fix values that could be above range.
+	UINT32 *port_type = (UINT32 *)(bytes + 8);
+	*port_type = PCIE_PORT_TYPES[rand() %
+				     (sizeof(PCIE_PORT_TYPES) / sizeof(int))];
+
+	//Set return values, exit.
+	*location = bytes;
+	return size;
+}
diff --git a/generator/sections/gen-section.c b/generator/sections/gen-section.c
index 012f88f..0b07af0 100644
--- a/generator/sections/gen-section.c
+++ b/generator/sections/gen-section.c
@@ -6,25 +6,42 @@
 #include "gen-section.h"
 
 CPER_GENERATOR_DEFINITION generator_definitions[] = {
-    {&gEfiProcessorGenericErrorSectionGuid, "generic", generate_section_generic},
-    {&gEfiIa32X64ProcessorErrorSectionGuid, "ia32x64", generate_section_ia32x64},
-    {&gEfiArmProcessorErrorSectionGuid, "arm", generate_section_arm},
-    {&gEfiPlatformMemoryErrorSectionGuid, "memory", generate_section_memory},
-    {&gEfiPlatformMemoryError2SectionGuid, "memory2", generate_section_memory2},
-    {&gEfiPcieErrorSectionGuid, "pcie", generate_section_pcie},
-    {&gEfiFirmwareErrorSectionGuid, "firmware", generate_section_firmware},
-    {&gEfiPciBusErrorSectionGuid, "pcibus", generate_section_pci_bus},
-    {&gEfiPciDevErrorSectionGuid, "pcidev", generate_section_pci_dev},
-    {&gEfiDMArGenericErrorSectionGuid, "dmargeneric", generate_section_dmar_generic},
-    {&gEfiDirectedIoDMArErrorSectionGuid, "dmarvtd", generate_section_dmar_vtd},
-    {&gEfiIommuDMArErrorSectionGuid, "dmariommu", generate_section_dmar_iommu},
-    {&gEfiCcixPerLogErrorSectionGuid, "ccixper", generate_section_ccix_per},
-    {&gEfiCxlProtocolErrorSectionGuid, "cxlprotocol", generate_section_cxl_protocol},
-    {&gEfiCxlGeneralMediaErrorSectionGuid, "cxlcomponent-media", generate_section_cxl_component},
-    {&gEfiCxlDramEventErrorSectionGuid, "cxlcomponent-dram", generate_section_cxl_component},
-    {&gEfiCxlMemoryModuleErrorSectionGuid, "cxlcomponent-memory", generate_section_cxl_component},
-    {&gEfiCxlPhysicalSwitchErrorSectionGuid, "cxlcomponent-pswitch", generate_section_cxl_component},
-    {&gEfiCxlVirtualSwitchErrorSectionGuid, "cxlcomponent-vswitch", generate_section_cxl_component},
-    {&gEfiCxlMldPortErrorSectionGuid, "cxlcomponent-mld", generate_section_cxl_component},
+	{ &gEfiProcessorGenericErrorSectionGuid, "generic",
+	  generate_section_generic },
+	{ &gEfiIa32X64ProcessorErrorSectionGuid, "ia32x64",
+	  generate_section_ia32x64 },
+	{ &gEfiArmProcessorErrorSectionGuid, "arm", generate_section_arm },
+	{ &gEfiPlatformMemoryErrorSectionGuid, "memory",
+	  generate_section_memory },
+	{ &gEfiPlatformMemoryError2SectionGuid, "memory2",
+	  generate_section_memory2 },
+	{ &gEfiPcieErrorSectionGuid, "pcie", generate_section_pcie },
+	{ &gEfiFirmwareErrorSectionGuid, "firmware",
+	  generate_section_firmware },
+	{ &gEfiPciBusErrorSectionGuid, "pcibus", generate_section_pci_bus },
+	{ &gEfiPciDevErrorSectionGuid, "pcidev", generate_section_pci_dev },
+	{ &gEfiDMArGenericErrorSectionGuid, "dmargeneric",
+	  generate_section_dmar_generic },
+	{ &gEfiDirectedIoDMArErrorSectionGuid, "dmarvtd",
+	  generate_section_dmar_vtd },
+	{ &gEfiIommuDMArErrorSectionGuid, "dmariommu",
+	  generate_section_dmar_iommu },
+	{ &gEfiCcixPerLogErrorSectionGuid, "ccixper",
+	  generate_section_ccix_per },
+	{ &gEfiCxlProtocolErrorSectionGuid, "cxlprotocol",
+	  generate_section_cxl_protocol },
+	{ &gEfiCxlGeneralMediaErrorSectionGuid, "cxlcomponent-media",
+	  generate_section_cxl_component },
+	{ &gEfiCxlDramEventErrorSectionGuid, "cxlcomponent-dram",
+	  generate_section_cxl_component },
+	{ &gEfiCxlMemoryModuleErrorSectionGuid, "cxlcomponent-memory",
+	  generate_section_cxl_component },
+	{ &gEfiCxlPhysicalSwitchErrorSectionGuid, "cxlcomponent-pswitch",
+	  generate_section_cxl_component },
+	{ &gEfiCxlVirtualSwitchErrorSectionGuid, "cxlcomponent-vswitch",
+	  generate_section_cxl_component },
+	{ &gEfiCxlMldPortErrorSectionGuid, "cxlcomponent-mld",
+	  generate_section_cxl_component },
 };
-const size_t generator_definitions_len = sizeof(generator_definitions) / sizeof(CPER_GENERATOR_DEFINITION);
\ No newline at end of file
+const size_t generator_definitions_len =
+	sizeof(generator_definitions) / sizeof(CPER_GENERATOR_DEFINITION);
diff --git a/generator/sections/gen-section.h b/generator/sections/gen-section.h
index ac0a024..df1e227 100644
--- a/generator/sections/gen-section.h
+++ b/generator/sections/gen-section.h
@@ -5,30 +5,30 @@
 #include "../../edk/Cper.h"
 
 //Section generator function predefinitions.
-size_t generate_section_generic(void** location);
-size_t generate_section_ia32x64(void** location);
-size_t generate_section_arm(void** location);
-size_t generate_section_memory(void** location);
-size_t generate_section_memory2(void** location);
-size_t generate_section_pcie(void** location);
-size_t generate_section_pci_bus(void** location);
-size_t generate_section_pci_dev(void** location);
-size_t generate_section_firmware(void** location);
-size_t generate_section_dmar_generic(void** location);
-size_t generate_section_dmar_vtd(void** location);
-size_t generate_section_dmar_iommu(void** location);
-size_t generate_section_ccix_per(void** location);
-size_t generate_section_cxl_protocol(void** location);
-size_t generate_section_cxl_component(void** location);
+size_t generate_section_generic(void **location);
+size_t generate_section_ia32x64(void **location);
+size_t generate_section_arm(void **location);
+size_t generate_section_memory(void **location);
+size_t generate_section_memory2(void **location);
+size_t generate_section_pcie(void **location);
+size_t generate_section_pci_bus(void **location);
+size_t generate_section_pci_dev(void **location);
+size_t generate_section_firmware(void **location);
+size_t generate_section_dmar_generic(void **location);
+size_t generate_section_dmar_vtd(void **location);
+size_t generate_section_dmar_iommu(void **location);
+size_t generate_section_ccix_per(void **location);
+size_t generate_section_cxl_protocol(void **location);
+size_t generate_section_cxl_component(void **location);
 
 //Definition structure for a single CPER section generator.
 typedef struct {
-    EFI_GUID* Guid;
-    const char* ShortName;
-    size_t (*Generate)(void**);
+	EFI_GUID *Guid;
+	const char *ShortName;
+	size_t (*Generate)(void **);
 } CPER_GENERATOR_DEFINITION;
 
 extern CPER_GENERATOR_DEFINITION generator_definitions[];
 extern const size_t generator_definitions_len;
 
-#endif
\ No newline at end of file
+#endif
