tools/testing/selftests/arm64/signal/testcases/testcases.c

Source file repositories/reference/linux-study-clean/tools/testing/selftests/arm64/signal/testcases/testcases.c

File Facts

System
Linux kernel
Corpus path
tools/testing/selftests/arm64/signal/testcases/testcases.c
Extension
.c
Size
8384 bytes
Lines
332
Domain
Support Tooling And Documentation
Bucket
tools
Inferred role
Support Tooling And Documentation: implementation source
Status
source implementation candidate

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

if ((uint64_t)head & 0x0fUL) {
			*err = "Misaligned HEAD";
			return false;
		}

		new_flags = 0;

		switch (head->magic) {
		case 0:
			if (head->size) {
				*err = "Bad size for terminator";
			} else if (extra_data) {
				/* End of main data, walking the extra data */
				head = extra_data;
				resv_sz = extra_sz;
				offs = 0;

				extra_data = NULL;
				extra_sz = 0;
				continue;
			} else {
				terminated = true;
			}
			break;
		case FPSIMD_MAGIC:
			if (flags & FPSIMD_CTX)
				*err = "Multiple FPSIMD_MAGIC";
			else if (head->size !=
				 sizeof(struct fpsimd_context))
				*err = "Bad size for fpsimd_context";
			new_flags |= FPSIMD_CTX;
			break;
		case ESR_MAGIC:
			if (head->size != sizeof(struct esr_context))
				*err = "Bad size for esr_context";
			break;
		case POE_MAGIC:
			if (head->size != sizeof(struct poe_context))
				*err = "Bad size for poe_context";
			break;
		case TPIDR2_MAGIC:
			if (head->size != sizeof(struct tpidr2_context))
				*err = "Bad size for tpidr2_context";
			break;
		case SVE_MAGIC:
			if (flags & SVE_CTX)
				*err = "Multiple SVE_MAGIC";
			/* Size is validated in validate_sve_context() */
			sve = (struct sve_context *)head;
			new_flags |= SVE_CTX;
			break;
		case ZA_MAGIC:
			if (flags & ZA_CTX)
				*err = "Multiple ZA_MAGIC";
			/* Size is validated in validate_za_context() */
			za = (struct za_context *)head;
			new_flags |= ZA_CTX;
			break;
		case ZT_MAGIC:
			if (flags & ZT_CTX)
				*err = "Multiple ZT_MAGIC";
			/* Size is validated in validate_za_context() */
			zt = (struct zt_context *)head;
			new_flags |= ZT_CTX;
			break;
		case FPMR_MAGIC:
			if (flags & FPMR_CTX)
				*err = "Multiple FPMR_MAGIC";
			else if (head->size !=
				 sizeof(struct fpmr_context))
				*err = "Bad size for fpmr_context";
			new_flags |= FPMR_CTX;
			break;
		case GCS_MAGIC:
			if (flags & GCS_CTX)
				*err = "Multiple GCS_MAGIC";
			if (head->size != sizeof(struct gcs_context))
				*err = "Bad size for gcs_context";
			new_flags |= GCS_CTX;
			break;
		case EXTRA_MAGIC:
			if (flags & EXTRA_CTX)
				*err = "Multiple EXTRA_MAGIC";
			else if (head->size !=
				 sizeof(struct extra_context))
				*err = "Bad size for extra_context";
			new_flags |= EXTRA_CTX;
			extra = (struct extra_context *)head;
			break;
		case KSFT_BAD_MAGIC:

Annotation

Implementation Notes