blob: 1ab318f775d8cbebeb505d7fdd27c4c8da69d0e0 [file] [log] [blame]
Lawrence Tang02c801a2022-07-18 14:43:52 +01001/**
2 * Utility functions to assist in generating psuedo-random CPER sections.
3 *
4 * Author: Lawrence.Tang@arm.com
5 **/
6#include <stdlib.h>
7#include <time.h>
8#include "../edk/BaseTypes.h"
9#include "gen-utils.h"
10
11//Generates a random section of the given byte size, saving the result to the given location.
12//Returns the length of the section as passed in.
13size_t generate_random_section(void** location, size_t size)
14{
15 *location = generate_random_bytes(size);
16 return size;
17}
18
19//Generates a random byte allocation of the given size.
20UINT8* generate_random_bytes(size_t size)
21{
22 UINT8* bytes = malloc(size);
23 for (size_t i = 0; i < size; i++)
24 bytes[i] = rand();
25 return bytes;
26}
27
Lawrence Tangde9707f2022-07-19 10:54:31 +010028//Creates a valid common CPER error section, given the start of the error section.
29//Clears reserved bits.
30void create_valid_error_section(UINT8* start)
31{
32 //Fix reserved bits.
33 UINT64* error_section = (UINT64*)start;
34 *error_section &= ~0xFF; //Reserved bits 0-7.
35 *error_section &= 0x7FFFFF; //Reserved bits 23-63
36
37 //Ensure error type has a valid value.
38 *(start + 1) = CPER_ERROR_TYPES_KEYS[rand() % (sizeof(CPER_ERROR_TYPES_KEYS) / sizeof(int))];
39}
40
Lawrence Tang02c801a2022-07-18 14:43:52 +010041//Initializes the random seed for rand() using the current time.
42void init_random()
43{
44 srand((unsigned int)time(NULL));
45}