All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dev Jain <dev.jain@arm.com>
To: shuah@kernel.org, linux-arm-kernel@lists.infradead.org
Cc: linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
	Anshuman.Khandual@arm.com, suzuki.poulose@arm.com,
	ryan.roberts@arm.com, rob.herring@arm.com,
	Catalin.Marinas@arm.com, broonie@kernel.org, will@kernel.org,
	mark.rutland@arm.com, Dev Jain <dev.jain@arm.com>
Subject: [PATCH 3/4] selftests/arm: Add elf test
Date: Fri,  5 Apr 2024 14:14:09 +0530	[thread overview]
Message-ID: <20240405084410.256788-4-dev.jain@arm.com> (raw)
In-Reply-To: <20240405084410.256788-1-dev.jain@arm.com>

This patch introduces an ELF parsing test; the 5th byte of the ELF header
must be 0x01 for a 32-bit process. A basic sanity check is required to ensure
that we are actually testing a 32-bit build.

Signed-off-by: Dev Jain <dev.jain@arm.com>
---
 tools/testing/selftests/arm/elf/parse_elf.c | 75 +++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 tools/testing/selftests/arm/elf/parse_elf.c

diff --git a/tools/testing/selftests/arm/elf/parse_elf.c b/tools/testing/selftests/arm/elf/parse_elf.c
new file mode 100644
index 000000000000..decd65699858
--- /dev/null
+++ b/tools/testing/selftests/arm/elf/parse_elf.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2024 ARM Limited
+ *
+ * Author : Dev Jain <dev.jain@arm.com>
+ *
+ * Parse elf header to confirm 32-bit process
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <elf.h>
+#include <stdint.h>
+
+#include <kselftest.h>
+
+/* The ELF file header.  This appears at the start of every ELF file. */
+
+struct elf_header {
+	unsigned char	e_ident[16];	/* Magic number and other info */
+	uint16_t	e_type;		/* Object file type */
+	uint16_t	e_machine;	/* Architecture */
+	uint32_t	e_version;	/* Object file version */
+	uint64_t	e_entry;	/* Entry point virtual address */
+	uint64_t	e_phoff;	/* Program header table file offset */
+	uint64_t	e_shoff;	/* Section header table file offset */
+	uint32_t	e_flags;	/* Processor-specific flags */
+	uint16_t	e_ehsize;	/* ELF header size in bytes */
+	uint16_t	e_phentsize;	/* Program header table entry size */
+	uint16_t	e_phnum;	/* Program header table entry count */
+	uint16_t	e_shentsize;	/* Section header table entry size */
+	uint16_t	e_shnum;	/* Section header table entry count */
+	uint16_t	e_shstrndx;	/* Section header string table index */
+};
+
+static int read_elf_header(const char  *elfFile)
+{
+	struct elf_header header;
+	FILE *file;
+
+	file = fopen(elfFile, "r");
+	if (file) {
+
+		/* store header in struct */
+		fread(&header, 1, sizeof(header), file);
+		fclose(file);
+
+		/* sanity check: does it really follow ELF format */
+		if (header.e_ident[0] == 0x7f &&
+		    header.e_ident[1] == 'E' &&
+		    header.e_ident[2] == 'L' &&
+		    header.e_ident[3] == 'F') {
+			if (header.e_ident[4] == 0x01)
+				return 0;
+			return 1;
+		}
+		ksft_exit_fail_msg("Cannot parse /proc/self/exe\n");
+	}
+	ksft_exit_fail_msg("Cannot open /proc/self/exe\n");
+	exit(EXIT_FAILURE);
+}
+
+int main(int argc, char *argv[])
+{
+	const char *file_name;
+
+	ksft_print_header();
+	ksft_set_plan(1);
+
+	file_name = "/proc/self/exe";
+	ksft_test_result(read_elf_header(file_name) == 0, "ELF is 32 bit\n");
+	ksft_finished();
+}
-- 
2.39.2


WARNING: multiple messages have this Message-ID (diff)
From: Dev Jain <dev.jain@arm.com>
To: shuah@kernel.org, linux-arm-kernel@lists.infradead.org
Cc: linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org,
	Anshuman.Khandual@arm.com, suzuki.poulose@arm.com,
	ryan.roberts@arm.com, rob.herring@arm.com,
	Catalin.Marinas@arm.com, broonie@kernel.org, will@kernel.org,
	mark.rutland@arm.com, Dev Jain <dev.jain@arm.com>
Subject: [PATCH 3/4] selftests/arm: Add elf test
Date: Fri,  5 Apr 2024 14:14:09 +0530	[thread overview]
Message-ID: <20240405084410.256788-4-dev.jain@arm.com> (raw)
In-Reply-To: <20240405084410.256788-1-dev.jain@arm.com>

This patch introduces an ELF parsing test; the 5th byte of the ELF header
must be 0x01 for a 32-bit process. A basic sanity check is required to ensure
that we are actually testing a 32-bit build.

Signed-off-by: Dev Jain <dev.jain@arm.com>
---
 tools/testing/selftests/arm/elf/parse_elf.c | 75 +++++++++++++++++++++
 1 file changed, 75 insertions(+)
 create mode 100644 tools/testing/selftests/arm/elf/parse_elf.c

diff --git a/tools/testing/selftests/arm/elf/parse_elf.c b/tools/testing/selftests/arm/elf/parse_elf.c
new file mode 100644
index 000000000000..decd65699858
--- /dev/null
+++ b/tools/testing/selftests/arm/elf/parse_elf.c
@@ -0,0 +1,75 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2024 ARM Limited
+ *
+ * Author : Dev Jain <dev.jain@arm.com>
+ *
+ * Parse elf header to confirm 32-bit process
+ */
+
+#define _GNU_SOURCE
+#include <stdio.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <elf.h>
+#include <stdint.h>
+
+#include <kselftest.h>
+
+/* The ELF file header.  This appears at the start of every ELF file. */
+
+struct elf_header {
+	unsigned char	e_ident[16];	/* Magic number and other info */
+	uint16_t	e_type;		/* Object file type */
+	uint16_t	e_machine;	/* Architecture */
+	uint32_t	e_version;	/* Object file version */
+	uint64_t	e_entry;	/* Entry point virtual address */
+	uint64_t	e_phoff;	/* Program header table file offset */
+	uint64_t	e_shoff;	/* Section header table file offset */
+	uint32_t	e_flags;	/* Processor-specific flags */
+	uint16_t	e_ehsize;	/* ELF header size in bytes */
+	uint16_t	e_phentsize;	/* Program header table entry size */
+	uint16_t	e_phnum;	/* Program header table entry count */
+	uint16_t	e_shentsize;	/* Section header table entry size */
+	uint16_t	e_shnum;	/* Section header table entry count */
+	uint16_t	e_shstrndx;	/* Section header string table index */
+};
+
+static int read_elf_header(const char  *elfFile)
+{
+	struct elf_header header;
+	FILE *file;
+
+	file = fopen(elfFile, "r");
+	if (file) {
+
+		/* store header in struct */
+		fread(&header, 1, sizeof(header), file);
+		fclose(file);
+
+		/* sanity check: does it really follow ELF format */
+		if (header.e_ident[0] == 0x7f &&
+		    header.e_ident[1] == 'E' &&
+		    header.e_ident[2] == 'L' &&
+		    header.e_ident[3] == 'F') {
+			if (header.e_ident[4] == 0x01)
+				return 0;
+			return 1;
+		}
+		ksft_exit_fail_msg("Cannot parse /proc/self/exe\n");
+	}
+	ksft_exit_fail_msg("Cannot open /proc/self/exe\n");
+	exit(EXIT_FAILURE);
+}
+
+int main(int argc, char *argv[])
+{
+	const char *file_name;
+
+	ksft_print_header();
+	ksft_set_plan(1);
+
+	file_name = "/proc/self/exe";
+	ksft_test_result(read_elf_header(file_name) == 0, "ELF is 32 bit\n");
+	ksft_finished();
+}
-- 
2.39.2


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  parent reply	other threads:[~2024-04-05  8:50 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-04-05  8:44 [PATCH 0/4] A new selftests/ directory for arm compatibility testing Dev Jain
2024-04-05  8:44 ` Dev Jain
2024-04-05  8:44 ` [PATCH 1/4] selftests/arm: Add mm test Dev Jain
2024-04-05  8:44   ` Dev Jain
2024-04-06 21:23   ` Muhammad Usama Anjum
2024-04-06 21:23     ` Muhammad Usama Anjum
2024-04-10  4:15     ` Dev Jain
2024-04-10  4:15       ` Dev Jain
2024-04-17  4:53       ` Dev Jain
2024-04-17  4:53         ` Dev Jain
2024-04-05  8:44 ` [PATCH 2/4] selftests/arm: Add signal tests Dev Jain
2024-04-05  8:44   ` Dev Jain
2024-04-06 21:28   ` Muhammad Usama Anjum
2024-04-06 21:28     ` Muhammad Usama Anjum
2024-04-08 12:12     ` Mark Brown
2024-04-08 12:12       ` Mark Brown
2024-04-10  4:43     ` Dev Jain
2024-04-10  4:43       ` Dev Jain
2024-04-05  8:44 ` Dev Jain [this message]
2024-04-05  8:44   ` [PATCH 3/4] selftests/arm: Add elf test Dev Jain
2024-04-06 21:30   ` Muhammad Usama Anjum
2024-04-06 21:30     ` Muhammad Usama Anjum
2024-04-10  4:11     ` Dev Jain
2024-04-10  4:11       ` Dev Jain
2024-04-05  8:44 ` [PATCH 4/4] selftests: Add build infrastructure along with README Dev Jain
2024-04-05  8:44   ` Dev Jain
2024-04-06 21:15   ` Muhammad Usama Anjum
2024-04-06 21:15     ` Muhammad Usama Anjum
2024-04-08 12:24     ` Mark Brown
2024-04-08 12:24       ` Mark Brown
2024-04-11  5:15     ` Dev Jain
2024-04-11  5:15       ` Dev Jain
2024-04-05 17:37 ` [PATCH 0/4] A new selftests/ directory for arm compatibility testing Mark Brown
2024-04-05 17:37   ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240405084410.256788-4-dev.jain@arm.com \
    --to=dev.jain@arm.com \
    --cc=Anshuman.Khandual@arm.com \
    --cc=Catalin.Marinas@arm.com \
    --cc=broonie@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=mark.rutland@arm.com \
    --cc=rob.herring@arm.com \
    --cc=ryan.roberts@arm.com \
    --cc=shuah@kernel.org \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.