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
next prev 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.