diff --git a/generator/sections/gen-section-ccix-per.c b/generator/sections/gen-section-ccix-per.c
new file mode 100644
index 0000000..a61983b
--- /dev/null
+++ b/generator/sections/gen-section-ccix-per.c
@@ -0,0 +1,34 @@
+/**
+ * Functions for generating psuedo-random CCIX PER error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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.
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-cxl-component.c b/generator/sections/gen-section-cxl-component.c
new file mode 100644
index 0000000..d08dc90
--- /dev/null
+++ b/generator/sections/gen-section-cxl-component.c
@@ -0,0 +1,38 @@
+/**
+ * Functions for generating psuedo-random CXL component error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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);
+
+    //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 expected values.
+    UINT32* length = (UINT32*)bytes;
+    *length = size;
+    
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-cxl-protocol.c b/generator/sections/gen-section-cxl-protocol.c
new file mode 100644
index 0000000..64326f9
--- /dev/null
+++ b/generator/sections/gen-section-cxl-protocol.c
@@ -0,0 +1,57 @@
+/**
+ * Functions for generating psuedo-random CXL protocol error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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);
+
+    //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.
+
+    //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 + 20 + 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 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;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-dmar.c b/generator/sections/gen-section-dmar.c
new file mode 100644
index 0000000..d0bbb5e
--- /dev/null
+++ b/generator/sections/gen-section-dmar.c
@@ -0,0 +1,72 @@
+/**
+ * Functions for generating psuedo-random CPER DMAr error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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;
+
+    //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 psuedo-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)
+{
+    //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.
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
+
+//Generates a single psuedo-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)
+{
+    //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.
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-firmware.c b/generator/sections/gen-section-firmware.c
new file mode 100644
index 0000000..09c47ff
--- /dev/null
+++ b/generator/sections/gen-section-firmware.c
@@ -0,0 +1,33 @@
+/**
+ * Functions for generating psuedo-random CPER firmware error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //Create random bytes.
+    int size = 32;
+    UINT8* bytes = generate_random_bytes(size);
+    
+    //Set reserved areas to zero.
+    for (int i=0; i<7; i++)
+        *(bytes + 2 + i) = 0; //Reserved bytes 2-9.
+
+    //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;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-memory.c b/generator/sections/gen-section-memory.c
new file mode 100644
index 0000000..dfa713f
--- /dev/null
+++ b/generator/sections/gen-section-memory.c
@@ -0,0 +1,59 @@
+/**
+ * Functions for generating psuedo-random CPER platform memory error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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
+
+    //Fix values that could be above range.
+    *(bytes + 72) = rand() % 16; //Memory error type
+
+    //Fix error status.
+    create_valid_error_section(bytes + 8);
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
+
+//Generates a single psuedo-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)
+{
+    //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
+
+    //Fix values that could be above range.
+    *(bytes + 61) = rand() % 16; //Memory error type
+    *(bytes + 62) = rand() % 2; //Status
+
+    //Fix error status.
+    create_valid_error_section(bytes + 8);
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-pci-bus.c b/generator/sections/gen-section-pci-bus.c
new file mode 100644
index 0000000..9afd9ad
--- /dev/null
+++ b/generator/sections/gen-section-pci-bus.c
@@ -0,0 +1,38 @@
+/**
+ * Functions for generating psuedo-random CPER PCI/PCI-X bus error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //Create random bytes.
+    int size = 208;
+    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 &= 0x100000000000000; //Bus command bytes bar bit 56.
+
+    //Fix values that could be above range.
+    UINT16* error_type = (UINT16*)(bytes + 16);
+    *error_type = rand() % 8;
+
+    //Fix error status.
+    create_valid_error_section(bytes + 8);
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-pci-dev.c b/generator/sections/gen-section-pci-dev.c
new file mode 100644
index 0000000..1882d6c
--- /dev/null
+++ b/generator/sections/gen-section-pci-dev.c
@@ -0,0 +1,37 @@
+/**
+ * Functions for generating psuedo-random CPER PCI component error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+//Generates a single psuedo-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)
+{
+    //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.
+
+    //Fix error status.
+    create_valid_error_section(bytes + 8);
+
+    //Set return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-section-pcie.c b/generator/sections/gen-section-pcie.c
new file mode 100644
index 0000000..5f67c09
--- /dev/null
+++ b/generator/sections/gen-section-pcie.c
@@ -0,0 +1,38 @@
+/**
+ * Functions for generating psuedo-random CPER PCIe error sections.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdlib.h>
+#include "../../edk/BaseTypes.h"
+#include "../gen-utils.h"
+#include "gen-sections.h"
+
+#define PCIE_PORT_TYPES (int []){0, 1, 4, 5, 6, 7, 8, 9, 10}
+
+//Generates a single psuedo-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)
+{
+    //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 + 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 return values, exit.
+    *location = bytes;
+    return size;
+}
\ No newline at end of file
diff --git a/generator/sections/gen-sections.h b/generator/sections/gen-sections.h
index 33ecd39..50f9350 100644
--- a/generator/sections/gen-sections.h
+++ b/generator/sections/gen-sections.h
@@ -6,5 +6,17 @@
 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);
 
 #endif
\ No newline at end of file
