1
0
mirror of https://git.yoctoproject.org/meta-arm synced 2026-07-17 16:17:09 +00:00

Compare commits

..

26 Commits

Author SHA1 Message Date
James McGregor 03eedad2ad arm-gcs: add recipe for GDB with GCS support
The GCS support patches are based on GDB 15.
Copy the GDB 14.2 recipe from meta, upgrade to 15.1, and add the patches.

Signed-off-by: James McGregor <james.mcgregor2@arm.com>
2024-09-13 12:35:03 +01:00
James McGregor d2733037ad arm-gcs/linux-yocto: update to 6.11-rc3 and v12 of the GCS patches
Update the GCS patches to v12.
They've been rebased onto 6.11-rc3, so update to use that too.
GCS support now depends on !UPROBES, so add a config fragment to disable it.

Signed-off-by: James McGregor <james.mcgregor2@arm.com>
2024-09-02 15:46:08 +01:00
Ross Burton 27f7248eac arm-gcs: set compiler tune to 8.0
This matches the behaviour from mainstream distributions which don't tune
for 8.4.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-07 11:53:21 +01:00
James McGregor a9fde75f5f arm-gcs: add test for GCS CHKFEAT
Add a new recipes-test layer and GCS test.
The test checks that CHKFEAT reports GCS as enabled.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:37:55 +01:00
James McGregor fe553984a9 arm-gcs/glibc: fix prctl() argument definitions
The values prctl() expects for shadow stack operations have changed.
Update the glibc patch to match the values in the kernel.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:37:52 +01:00
Ross Burton d2c43f9aba arm-gcs/README: show how to run tests 2024-08-06 13:36:29 +01:00
Ross Burton 1aef83326a glibc: refresh GCS patch
No large changes, but incorporates the HWCAP2_GCS fix.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton 2c74be10d8 gcs.yml: fix a comment
Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton bb98b3c2dc kselftest: add kselftest recipe and integrate into testimage
Package up the kselftest from the kernel, and execute the arm64 GCS tests
inside CI.

At the moment some of the tests fail: gcs_write_fault and gcs_stress.
Mark the test as expected to fail until this is resolved.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton 0d3bc7947a linux-libc-headers: add 6.10 patched kernel headers
kselftest needs bleeding-edge kernel headers as it wants to use the new
symbols, so add a recipe.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton b368aecda5 glibc: fix HWCAP2_GCS definition
The bit index for HWCAP2_GCS changed, so update the glibc patch to
reflect the number used in the kernel.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton 062c2c9e10 CI: remove duplicated testimage options
Change gcs-test.yml so that it just enables automatic testimage and does
not duplicate options.

Also change debug-tweaks to the specific features that we want.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton a66b286e73 arm-gcs/linux-yocto: update to 6.10-rc3 and v9 of the GCS patches
Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton db69a338d9 Add CI for GCS
Add a basic job for testing the GCS patches that runs testimage with the
gcs test suite.

For speed, disable all the other jobs.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton 1b294d0dbe Add some automated GCS testing 2024-08-06 13:36:29 +01:00
Ross Burton 3ba2ff271a arm-gcs: tighten layer dependencies
Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Ross Burton b1dd7d90f6 Add GCS prototype
Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-08-06 13:36:29 +01:00
Luca Fancellu 38bce82e42 arm/oeqa: Introduce retry mechanism for fvp_devices run_cmd
Currently the run_cmd, which is a wrapper for self.target.run()
that uses SSH to spawn commands on the target, can fail spuriously
with error 255 and cause the test to fail on slow systems.

In order to address that, introduce a retry mechanism for the call,
that is able to wait some time for the system to settle and retry
the command when the error code from SSH is 255.

Signed-off-by: Luca Fancellu <luca.fancellu@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-08-01 11:33:42 -04:00
Amr Mohamed ecece16871 kas: Add new yml file for Distros unattended installation
Define “DISTRO_UNATTENDED_INST_TESTS” variable in meta-arm-systemready
independently from meta-arm-auto-solutions. This will allow running
the unattended installation without meta-arm-auto-solutions.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-07-31 11:00:22 -04:00
Amr Mohamed aa85142b5b arm-systemready/oeqa: Add new test for Fedora unattended installation
The oeqa test responds to the boot loader prompt error message and
waits till the distro installation is finished.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-07-31 11:00:22 -04:00
Amr Mohamed 54fa370dde arm-systemready/linux-distros: Add kickstart file for Fedora unattended
Add the Fedora kickstart configuration file and define a function to
modify the unpacked ISO image to add the kickstart file inside and
modify the grub.cfg file.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-07-31 11:00:22 -04:00
Amr Mohamed 79c41bb917 arm-systemready/linux-distros: new inc file for unattended installation
Add a new inc file to unpack and repack the distro ISO image after
adding the kickstart configuration file inside.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-07-31 11:00:22 -04:00
Amr Mohamed 1b85bbb4ca kas: Update kas configuration for fvp-base.yml file
Change defaults repo refspec in fvp-base.yml file from master to
scarthgap.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-07-19 10:00:23 -04:00
Ziad Elhanafy 58268ddccb arm/oeqa: Enable pexpect profiling for testcase debugging
This patch enables logging with timestamps for individual pexpect
assertions to ease the debugging of failed tests and the tuning of
timeouts. It measures the execution time of all pexpect calls and logs
the actual duration for each.

Only "callable" pexpect calls are timed (e.g. expect, sendline, but not
before or after).

Signed-off-by: Divin Raj <divin.raj@arm.com>
Signed-off-by: Ziad Elhanafy <ziad.elhanafy@arm.com>
Signed-off-by: Peter Hoyes <peter.hoyes@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-06-27 10:00:26 -04:00
Ross Burton 29799b787d Revert "CI: temporarily backport the procps fix"
This procps fix has been merged upstream in oe-core aaced482, so we can
remove this patch now.

This reverts commit fef5eafc08.

Signed-off-by: Ross Burton <ross.burton@arm.com>
2024-06-20 14:22:59 +01:00
Amr Mohamed a88dd94883 arm-systemready/linux-distros: Add a third Linux distribution installation
Add Fedora distribution version 39.1.5 installation to fulfill
the SystemReady IR.

Signed-off-by: Amr Mohamed <amr.mohamed@arm.com>
Signed-off-by: Jon Mason <jon.mason@arm.com>
2024-06-17 14:00:29 -04:00
39 changed files with 15557 additions and 90 deletions
+8
View File
@@ -28,6 +28,7 @@ stages:
# Common job fragment to get a worker ready
.setup:
when: manual
tags:
- $DEFAULT_TAG
stage: build
@@ -89,6 +90,7 @@ stages:
#
update-repos:
extends: .setup
when: on_success
stage: prep
allow_failure:
exit_codes: 128
@@ -353,3 +355,9 @@ sgi575:
toolchains:
extends: .build
gcs:
when: on_success
extends: .setup
script:
- kas build meta-arm-gcs/gcs-test.yml
@@ -1,79 +0,0 @@
From 42358d889ed652a8c386862f8c65e5fbe7484de2 Mon Sep 17 00:00:00 2001
From: Ross Burton <ross.burton@arm.com>
Date: Fri, 26 Apr 2024 10:38:28 +0000
Subject: [PATCH] procps: fix build with new glibc but old kernel headers
If you're building procps with a newer glibc (with pidfd_open()) but
older kernel headers (say 4.x, before __NR_pidfd_open) then procps will
fail to build because of a typo in configure.ac.
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
.../procps/procps/pidfd.patch | 42 +++++++++++++++++++
meta/recipes-extended/procps/procps_4.0.4.bb | 1 +
2 files changed, 43 insertions(+)
create mode 100644 meta/recipes-extended/procps/procps/pidfd.patch
diff --git a/meta/recipes-extended/procps/procps/pidfd.patch b/meta/recipes-extended/procps/procps/pidfd.patch
new file mode 100644
index 00000000000..f5e8183e547
--- /dev/null
+++ b/meta/recipes-extended/procps/procps/pidfd.patch
@@ -0,0 +1,42 @@
+From c8f625e085b8249cc009e8b19c3a19100217eb35 Mon Sep 17 00:00:00 2001
+From: Ross Burton <ross.burton@arm.com>
+Date: Thu, 25 Apr 2024 13:33:15 +0000
+Subject: [PATCH] Fix pidfd_open detection
+
+This check for pidfd_open uses AC_CHECK_FUNC which just runs the specified code, but
+src/pgrep.c checks HAVE_PIDFD_OPEN which will only be defined by AC_CHECK_FUNCS.
+
+Also pidfd_open is defined in sys/pidfd.h so that needs including.
+
+Upstream-Status: Pending
+Signed-off-by: Ross Burton <ross.burton@arm.com>
+---
+
+diff --git a/configure.ac b/configure.ac
+index fec27e3f..024731c7 100644
+--- a/configure.ac
++++ b/configure.ac
+@@ -170,7 +170,7 @@ AC_TRY_COMPILE([#include <errno.h>],
+ AC_MSG_RESULT(yes),
+ AC_MSG_RESULT(no))
+
+-AC_CHECK_FUNC([pidfd_open], [enable_pidwait=yes], [
++AC_CHECK_FUNCS([pidfd_open], [enable_pidwait=yes], [
+ AC_MSG_CHECKING([for __NR_pidfd_open])
+ AC_COMPILE_IFELSE([AC_LANG_SOURCE([
+ #include <sys/syscall.h>
+diff --git a/src/pgrep.c b/src/pgrep.c
+index d8e57dff..c5211aec 100644
+--- a/src/pgrep.c
++++ b/src/pgrep.c
+@@ -44,7 +44,9 @@
+
+ #ifdef ENABLE_PIDWAIT
+ #include <sys/epoll.h>
+-#ifndef HAVE_PIDFD_OPEN
++#ifdef HAVE_PIDFD_OPEN
++#include <sys/pidfd.h>
++#else
+ #include <sys/syscall.h>
+ #endif /* !HAVE_PIDFD_OPEN */
+ #endif
diff --git a/meta/recipes-extended/procps/procps_4.0.4.bb b/meta/recipes-extended/procps/procps_4.0.4.bb
index 800384f22f7..ec8c4b0261b 100644
--- a/meta/recipes-extended/procps/procps_4.0.4.bb
+++ b/meta/recipes-extended/procps/procps_4.0.4.bb
@@ -14,6 +14,7 @@ inherit autotools gettext pkgconfig update-alternatives
SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https;branch=master \
file://sysctl.conf \
+ file://pidfd.patch \
"
SRCREV = "4ddcef2fd843170c8e2d59a83042978f41037a2b"
--
2.34.1
+1
View File
@@ -16,3 +16,4 @@ target:
- arm-systemready-ir-acs
- arm-systemready-linux-distros-debian
- arm-systemready-linux-distros-opensuse
- arm-systemready-linux-distros-fedora
-4
View File
@@ -21,10 +21,6 @@ repos:
layers:
meta:
meta-poky:
patches:
procps:
path: 0001-procps-fix-build-with-new-glibc-but-old-kernel-heade.patch
repo: meta-arm
env:
BB_LOGCONFIG: ""
@@ -0,0 +1,8 @@
header:
version: 16
includes:
- kas/arm-systemready-firmware.yml
- kas/arm-systemready-linux-distros-unattended-installation.yml
target:
- arm-systemready-linux-distros-fedora
@@ -0,0 +1,11 @@
header:
version: 16
env:
DISTRO_UNATTENDED_INST_TESTS:
# The full testimage run typically takes around 12-24h on fvp-base.
TEST_OVERALL_TIMEOUT: "${@ 24*60*60}"
local_conf_header:
systemready-unattended-inst: |
TESTIMAGE_AUTO = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "1", "", d)}"
+1 -1
View File
@@ -14,7 +14,7 @@ machine: fvp-base
defaults:
repos:
refspec: master
refspec: scarthgap
repos:
meta-arm:
+3
View File
@@ -0,0 +1,3 @@
build
meta-arm
poky
+17
View File
@@ -0,0 +1,17 @@
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
+36
View File
@@ -0,0 +1,36 @@
Guarded Control Stack prototype
===============================
To build:
First, install Kas if you don't already have it:
$ pip3 install --user kas
Then use Kas to build an image:
$ kas build --update gcs.yml
To run the image inside an FVP:
$ kas shell gcs.yml -c "../../scripts/runfvp --console"
To run the tests automatically, Kas can be used:
$ kas build --update meta-arm-gcs/gcs-test.yml
Verification:
On boot, the kernel should detect that the cores have GCS:
CPU features: detected: Guarded Control Stack (GCS)
Binaries should be tagged with PAC/BTI/GCS:
$ readelf -n /bin/bash | grep AArch
Properties: AArch64 feature: BTI, PAC, GCS
Enabling GCS tunables shouldn't cause crashes:
$ GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1:glibc.cpu.aarch64_gcs_policy=2 ls /
bin boot dev etc home lib lost+found media mnt proc run sbin sys tmp usr var
+15
View File
@@ -0,0 +1,15 @@
# We have a conf and classes directory, add to BBPATH
BBPATH .= ":${LAYERDIR}"
# We have recipes-* directories, add to BBFILES
BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \
${LAYERDIR}/recipes-*/*/*.bbappend"
BBFILE_COLLECTIONS += "meta-arm-gcs"
BBFILE_PATTERN_meta-arm-gcs = "^${LAYERDIR}/"
BBFILE_PRIORITY_meta-arm-gcs = "5"
LAYERDEPENDS_meta-arm-gcs = "core"
LAYERSERIES_COMPAT_meta-arm-gcs = " scarthgap"
addpylib ${LAYERDIR}/lib oeqa
+8
View File
@@ -0,0 +1,8 @@
header:
version: 14
includes:
- meta-arm-gcs/gcs.yml
local_conf_header:
autotestimage: |
TESTIMAGE_AUTO = "1"
+62
View File
@@ -0,0 +1,62 @@
header:
version: 14
distro: poky
machine: fvp-base
repos:
meta-arm:
layers:
meta-arm:
meta-arm-bsp:
meta-arm-toolchain:
meta-arm-gcs:
poky:
url: https://git.yoctoproject.org/git/poky-contrib
branch: ross/gcc14
layers:
meta:
meta-poky:
local_conf_header:
setup: |
# We accept the FVP EULA
LICENSE_FLAGS_ACCEPTED += "Arm-FVP-EULA"
# Enable running an image inside a FVP
IMAGE_CLASSES += "fvpboot"
# Use the -dev patched kernel
PREFERRED_PROVIDER_virtual/kernel = "linux-yocto-dev"
LINUXLIBCVERSION = "6.11"
# No root password for ease
EXTRA_IMAGE_FEATURES += "empty-root-password allow-empty-password allow-root-login"
# Install a toolchain
EXTRA_IMAGE_FEATURES += "tools-sdk"
# Install a pre-generated SSH key because key generation in a FVP is tiresome
CORE_IMAGE_EXTRA_INSTALL += "ssh-pregen-hostkeys"
fvp_options: |
# Set the instruction set tune to 8.0 to match binary distributions
DEFAULTTUNE = "armv8a-crc"
# Set the cores to v9.4 and turn on more features
FVP_CONFIG[cluster0.has_arm_v9-4] = "1"
FVP_CONFIG[cluster1.has_arm_v9-4] = "1"
FVP_CONFIG[cluster0.has_branch_target_exception] = "1"
FVP_CONFIG[cluster1.has_branch_target_exception] = "1"
FVP_CONFIG[cluster0.has_gcs] = "1"
FVP_CONFIG[cluster1.has_gcs] = "1"
FVP_CONFIG[cluster0.has_chkfeat] = "1"
FVP_CONFIG[cluster1.has_chkfeat] = "1"
FVP_CONFIG[cluster0.has_permission_indirection_s1] = "1"
FVP_CONFIG[cluster1.has_permission_indirection_s1] = "1"
testimage: |
IMAGE_CLASSES += "testimage"
TEST_SUITES = "ping ssh gcs"
IMAGE_FEATURES += "ssh-server-dropbear"
CORE_IMAGE_EXTRA_INSTALL += "ssh-pregen-hostkeys binutils kselftest gcs-test"
target:
- core-image-full-cmdline
@@ -0,0 +1,83 @@
#
# SPDX-License-Identifier: MIT
#
import unittest
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.runtime.decorator.package import OEHasPackage
class GCSTests(OERuntimeTestCase):
def test_dmesg(self):
"""
Verify that the kernel detected the GCS processor feature.
If this fails the FVP configuration or kernel is at fault.
"""
status, output = self.target.run("dmesg | grep 'CPU features'")
self.assertEqual(status, 0, f"dmesg failed: {output}")
self.assertIn("CPU features: detected: Guarded Control Stack (GCS)", output)
@OEHasPackage(['binutils'])
def test_elf_tags(self):
"""
Verify that ELF binaries have the GCS feature enabled.
If this fails the toolchain doesn't have GCS enabled, or the compilation
flags don't enable GCS.
"""
status, output = self.target.run("readelf -n /bin/bash | grep 'AArch64 feature'")
self.assertEqual(status, 0, f"readelf failed: {output}")
self.assertIn("Properties: AArch64 feature: BTI, PAC, GCS", output)
def test_execution(self):
"""
Verify that enabling GCS with the glibc tunables doesn't cause a crash.
This is an incredibly low bar, but if this fails then the GCS patches
are at fault.
"""
cmd = "GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1:glibc.cpu.aarch64_gcs_policy=2 ls -d /u*"
status, output = self.target.run(cmd)
self.assertEqual(status, 0, f"ls failed: {output}")
self.assertEqual(output, "/usr")
def test_chkfeat(self):
"""
Verify that CHKFEAT reports GCS as enabled when running with the tunables.
If this fails then GCS is not being properly enabled at runtime glibc. The kernel
and glibc patches may be out of sync.
"""
cmd = "GLIBC_TUNABLES=glibc.cpu.aarch64_gcs=1:glibc.cpu.aarch64_gcs_policy=2 gcs-test"
status, output = self.target.run(cmd)
self.assertEqual(status, 0, f"gcs-test failed: {output}")
# gcs-test should return 1 if GCS is not enabled via the tunables
cmd = "gcs-test"
status, output = self.target.run(cmd)
self.assertEqual(status, 1, f"gcs-test failed: {output}")
@OEHasPackage(['kselftest'])
@unittest.expectedFailure
def test_kselftest(self):
"""
Run the GCS tests in the kselftest.
"""
cmd = """
cd /usr/libexec/kselftest; \
./run_kselftest.sh $(./run_kselftest.sh -l | awk -e '/arm64.*gcs/ { print "-t " $1 }') \
"""
status, output = self.target.run(cmd)
# kselftest normally returns 0 even if tests fail, so a failure here is serious
self.assertEqual(status, 0, f"kselftest failed: {output}")
# Identify any test failure lines, and assert that the list is empty
fails = [l for l in output.splitlines() if "not ok " in l]
self.assertFalse(fails)
@@ -0,0 +1 @@
EXTRA_OEMAKE:append:fvp-base = " CTX_INCLUDE_AARCH32_REGS=0"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,3 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://gcs.patch"
@@ -0,0 +1,3 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://gcs.patch"
@@ -0,0 +1,973 @@
From afe69c2e274db719e1835ee112150012271b62b7 Mon Sep 17 00:00:00 2001
From: Srinath Parvathaneni <srinath.parvathaneni@arm.com>
Date: Tue, 30 Jan 2024 08:59:53 +0000
Subject: [PATCH] aarch64: Add support for GCS in AArch64 linker.
This patch adds support for GCS in AArch64 linker.
This patch implements the following:
1) Defines GNU_PROPERTY_AARCH64_FEATURE_1_GCS bit for GCS in
GNU_PROPERTY_AARCH64_FEATURE_1_AND macro.
2) Adds readelf support to read and print the GNU properties
in AArch64.
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
Properties: AArch64 feature: GCS
3) Adds support for -z experimental-gcs linker option and document
all the values allowed with option (-z experimental-gcs[=always|never|implicit]).
-z experimental-gcs is equivalent to -z experimental-gcs=always and
when option is not passed in the command line, it defaults to implicit.
4) Adds support for -z experimental-gcs-report linker option and document
all the values allowed with this option (-z experimental-gcs-report[=none|warning|error]).
-z experimental-gcs-report is equivalent to -z experimental-gcs-report=none
and when option is not passed in the command line, it defaults to none.
The ABI changes adding GNU_PROPERTY_AARCH64_FEATURE_1_GCS to the
GNU property GNU_PROPERTY_AARCH64_FEATURE_1_AND is merged into main and
can be found below.
https://github.com/ARM-software/abi-aa/blob/main/sysvabi64/sysvabi64.rst
Upstream-Status: Pending [https://sourceware.org/git/?p=binutils-gdb.git;a=shortlog;h=refs/heads/users/ARM/gcs-binutils-gdb-master]
Signed-off-by: Ross Burton <ross.burton@arm.com>
---
bfd/elfnn-aarch64.c | 87 +++++++++++++++++----
bfd/elfxx-aarch64.c | 37 ++++++++-
bfd/elfxx-aarch64.h | 36 +++++++--
binutils/readelf.c | 4 +
include/elf/common.h | 1 +
ld/emultempl/aarch64elf.em | 45 ++++++++++-
ld/testsuite/ld-aarch64/aarch64-elf.exp | 23 ++++++
ld/testsuite/ld-aarch64/property-bti-pac1.d | 2 +-
ld/testsuite/ld-aarch64/property-bti-pac1.s | 14 ++++
ld/testsuite/ld-aarch64/property-gcs.s | 25 ++++++
ld/testsuite/ld-aarch64/property-gcs1.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs10.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs11.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs12.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs13.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs14.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs15.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs16.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs17.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs18.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs19.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs2.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs2.s | 33 ++++++++
ld/testsuite/ld-aarch64/property-gcs20.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs21.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs22.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs3.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs4.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs5.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs6.d | 12 +++
ld/testsuite/ld-aarch64/property-gcs7.d | 6 ++
ld/testsuite/ld-aarch64/property-gcs8.d | 11 +++
ld/testsuite/ld-aarch64/property-gcs9.d | 12 +++
33 files changed, 495 insertions(+), 26 deletions(-)
create mode 100644 ld/testsuite/ld-aarch64/property-gcs.s
create mode 100644 ld/testsuite/ld-aarch64/property-gcs1.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs10.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs11.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs12.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs13.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs14.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs15.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs16.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs17.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs18.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs19.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs2.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs2.s
create mode 100644 ld/testsuite/ld-aarch64/property-gcs20.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs21.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs22.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs3.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs4.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs5.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs6.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs7.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs8.d
create mode 100644 ld/testsuite/ld-aarch64/property-gcs9.d
diff --git a/bfd/elfnn-aarch64.c b/bfd/elfnn-aarch64.c
index 109517db4aa..428f2c3507d 100644
--- a/bfd/elfnn-aarch64.c
+++ b/bfd/elfnn-aarch64.c
@@ -2546,6 +2546,12 @@ struct elf_aarch64_obj_tdata
GNU_PROPERTY_AARCH64_FEATURE_1_BTI. */
int no_bti_warn;
+ /* Mark ouput with GCS based on -z experimental-gcs. */
+ aarch64_gcs_type gcs_type;
+ /* Report linker warning/error for -z experimental-gcs-report based on
+ -z experimental-gcs. */
+ aarch64_gcs_report gcs_report;
+
/* PLT type based on security. */
aarch64_plt_type plt_type;
};
@@ -5011,7 +5017,7 @@ bfd_elfNN_aarch64_set_options (struct bfd *output_bfd,
int fix_erratum_835769,
erratum_84319_opts fix_erratum_843419,
int no_apply_dynamic_relocs,
- aarch64_bti_pac_info bp_info)
+ aarch64_gnu_prop_info bp_info)
{
struct elf_aarch64_link_hash_table *globals;
@@ -5039,6 +5045,24 @@ bfd_elfNN_aarch64_set_options (struct bfd *output_bfd,
default:
break;
}
+
+ switch (bp_info.gcs_type)
+ {
+ case GCS_ALWAYS:
+ elf_aarch64_tdata (output_bfd)->gnu_and_prop
+ |= GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ break;
+ case GCS_NEVER:
+ elf_aarch64_tdata (output_bfd)->gnu_and_prop
+ &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ break;
+
+ default:
+ break;
+ }
+
+ elf_aarch64_tdata (output_bfd)->gcs_type = bp_info.gcs_type;
+ elf_aarch64_tdata (output_bfd)->gcs_report = bp_info.gcs_report;
elf_aarch64_tdata (output_bfd)->plt_type = bp_info.plt_type;
setup_plt_values (link_info, bp_info.plt_type);
}
@@ -10196,7 +10220,12 @@ static bfd *
elfNN_aarch64_link_setup_gnu_properties (struct bfd_link_info *info)
{
uint32_t prop = elf_aarch64_tdata (info->output_bfd)->gnu_and_prop;
- bfd *pbfd = _bfd_aarch64_elf_link_setup_gnu_properties (info, &prop);
+ aarch64_gcs_report gcs_report
+ = elf_aarch64_tdata (info->output_bfd)->gcs_report;
+ aarch64_gcs_report gcs_type
+ = elf_aarch64_tdata (info->output_bfd)->gcs_type;
+ bfd *pbfd = _bfd_aarch64_elf_link_setup_gnu_properties (info, &prop,
+ gcs_report, gcs_type);
elf_aarch64_tdata (info->output_bfd)->gnu_and_prop = prop;
elf_aarch64_tdata (info->output_bfd)->plt_type
|= (prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI) ? PLT_BTI : 0;
@@ -10215,30 +10244,54 @@ elfNN_aarch64_merge_gnu_properties (struct bfd_link_info *info,
{
uint32_t prop
= elf_aarch64_tdata (info->output_bfd)->gnu_and_prop;
+ aarch64_gcs_report gcs_report
+ = elf_aarch64_tdata (info->output_bfd)->gcs_report;
+ aarch64_gcs_type gcs_type
+ = elf_aarch64_tdata (info->output_bfd)->gcs_type;
- /* If output has been marked with BTI using command line argument, give out
- warning if necessary. */
/* Properties are merged per type, hence only check for warnings when merging
GNU_PROPERTY_AARCH64_FEATURE_1_AND. */
- if (((aprop && aprop->pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)
+ if ((aprop && aprop->pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND)
|| (bprop && bprop->pr_type == GNU_PROPERTY_AARCH64_FEATURE_1_AND))
- && (prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)
- && (!elf_aarch64_tdata (info->output_bfd)->no_bti_warn))
{
- if ((aprop && !(aprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
- || !aprop)
+ /* If output has been marked with BTI using command line argument, give
+ out warning if necessary. */
+ if ((prop & GNU_PROPERTY_AARCH64_FEATURE_1_BTI)
+ && (!elf_aarch64_tdata (info->output_bfd)->no_bti_warn))
{
- _bfd_error_handler (_("%pB: warning: BTI turned on by -z force-bti when "
- "all inputs do not have BTI in NOTE section."),
- abfd);
+ if ((aprop && !(aprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
+ || !aprop)
+ {
+ _bfd_error_handler (_("%pB: warning: BTI turned on by -z "
+ "force-bti when all inputs do not have BTI "
+ "in NOTE section."), abfd);
+ }
+ if ((bprop && !(bprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
+ || !bprop)
+ {
+ _bfd_error_handler (_("%pB: warning: BTI turned on by -z "
+ "force-bti when all inputs do not have BTI "
+ "in NOTE section."), bbfd);
+ }
}
- if ((bprop && !(bprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_BTI))
- || !bprop)
+
+ /* If output has been marked with GCS using -z experimental-gcs and input
+ is missing GCS marking throw warning/error on
+ -z experimental-gcs-report=warning/error. */
+ if ((prop & GNU_PROPERTY_AARCH64_FEATURE_1_GCS) && gcs_report != GCS_NONE)
{
- _bfd_error_handler (_("%pB: warning: BTI turned on by -z force-bti when "
- "all inputs do not have BTI in NOTE section."),
- bbfd);
+ if ((aprop && !(aprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_GCS))
+ || !aprop)
+ _bfd_aarch64_elf_check_gcs_report (gcs_report, abfd);
+ if ((bprop && !(bprop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_GCS))
+ || !bprop)
+ _bfd_aarch64_elf_check_gcs_report (gcs_report, bbfd);
}
+
+ if (gcs_type == GCS_NEVER && aprop != NULL)
+ aprop->u.number &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ if (gcs_type == GCS_NEVER && bprop != NULL)
+ bprop->u.number &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
}
return _bfd_aarch64_elf_merge_gnu_properties (info, abfd, aprop,
diff --git a/bfd/elfxx-aarch64.c b/bfd/elfxx-aarch64.c
index d1279adc2e4..dd64f2067ac 100644
--- a/bfd/elfxx-aarch64.c
+++ b/bfd/elfxx-aarch64.c
@@ -702,7 +702,9 @@ _bfd_aarch64_elf_write_core_note (bfd *abfd, char *buf, int *bufsiz, int note_ty
GPROP accordingly. */
bfd *
_bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
- uint32_t *gprop)
+ uint32_t *gprop,
+ aarch64_gcs_report gcs_report,
+ aarch64_gcs_type gcs_type)
{
asection *sec;
bfd *pbfd;
@@ -738,6 +740,11 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
_bfd_error_handler (_("%pB: warning: BTI turned on by -z force-bti "
"when all inputs do not have BTI in NOTE "
"section."), ebfd);
+
+ if ((gnu_prop & GNU_PROPERTY_AARCH64_FEATURE_1_GCS)
+ && !(prop->u.number & GNU_PROPERTY_AARCH64_FEATURE_1_GCS))
+ _bfd_aarch64_elf_check_gcs_report (gcs_report, ebfd);
+
prop->u.number |= gnu_prop;
prop->pr_kind = property_number;
@@ -765,6 +772,14 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
elf_section_type (sec) = SHT_NOTE;
}
}
+ else if (ebfd != NULL && gcs_type == GCS_NEVER)
+ {
+ prop = _bfd_elf_get_property (ebfd, GNU_PROPERTY_AARCH64_FEATURE_1_AND,
+ 4);
+ prop->u.number &= ~GNU_PROPERTY_AARCH64_FEATURE_1_GCS;
+ if (prop->u.number == 0)
+ prop->pr_kind = property_remove;
+ }
pbfd = _bfd_elf_link_setup_gnu_properties (info);
@@ -785,7 +800,8 @@ _bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *info,
{
gnu_prop = (p->property.u.number
& (GNU_PROPERTY_AARCH64_FEATURE_1_PAC
- | GNU_PROPERTY_AARCH64_FEATURE_1_BTI));
+ | GNU_PROPERTY_AARCH64_FEATURE_1_BTI
+ | GNU_PROPERTY_AARCH64_FEATURE_1_GCS));
break;
}
else if (GNU_PROPERTY_AARCH64_FEATURE_1_AND < p->property.pr_type)
@@ -922,3 +938,20 @@ _bfd_aarch64_elf_link_fixup_gnu_properties
}
}
}
+
+/* Check AArch64 GCS report. */
+void
+_bfd_aarch64_elf_check_gcs_report (aarch64_gcs_report gcs_report, bfd *ebfd)
+{
+ if (gcs_report == GCS_WARN)
+ _bfd_error_handler (_("%pB: warning: GCS turned on by -z experimental-gcs "
+ "on the output when all inputs do not have GCS in NOTE "
+ "section."), ebfd);
+ else if (gcs_report == GCS_ERROR)
+ {
+ _bfd_error_handler (_("%pB: error: GCS turned on by -z experimental-gcs "
+ "on the output when all inputs do not have GCS in "
+ "NOTE section."), ebfd);
+ _exit (EXIT_FAILURE);
+ }
+}
diff --git a/bfd/elfxx-aarch64.h b/bfd/elfxx-aarch64.h
index 6c084f75796..ca523d81df1 100644
--- a/bfd/elfxx-aarch64.h
+++ b/bfd/elfxx-aarch64.h
@@ -46,6 +46,27 @@ typedef enum
BTI_WARN = 1, /* BTI is enabled with -z force-bti. */
} aarch64_enable_bti_type;
+/* To indicate whether GNU_PROPERTY_AARCH64_FEATURE_1_GCS bit is
+ enabled/disabled on the output when -z experimental-gcs linker
+ command line option is passed. */
+typedef enum
+{
+ GCS_NEVER = 0, /* gcs is disabled on output. */
+ GCS_IMPLICIT = 1, /* gcs is deduced from input object. */
+ GCS_ALWAYS = 2, /* gsc is enabled on output. */
+} aarch64_gcs_type;
+
+/* To indicate whether to generate linker warning/errors for
+ -z experimental-gcs-report when -z experimental-gcs=always is passed. */
+typedef enum
+{
+ GCS_NONE = 0, /* Does not emit any warning/error messages. */
+ GCS_WARN = 1, /* Emit warning when the input objects are missing gcs
+ markings and output have gcs marking. */
+ GCS_ERROR = 2, /* Emit error when the input objects are missing gcs
+ markings and output have gcs marking. */
+} aarch64_gcs_report;
+
/* A structure to encompass all information coming from BTI or PAC
related command line options. This involves the "PLT_TYPE" to determine
which version of PLTs to pick and "BTI_TYPE" to determine if
@@ -54,7 +75,9 @@ typedef struct
{
aarch64_plt_type plt_type;
aarch64_enable_bti_type bti_type;
-} aarch64_bti_pac_info;
+ aarch64_gcs_type gcs_type;
+ aarch64_gcs_report gcs_report;
+} aarch64_gnu_prop_info;
/* An enum to define what kind of erratum fixes we should apply. This gives the
user a bit more control over the sequences we generate. */
@@ -67,11 +90,11 @@ typedef enum
extern void bfd_elf64_aarch64_set_options
(bfd *, struct bfd_link_info *, int, int, int, int, erratum_84319_opts, int,
- aarch64_bti_pac_info);
+ aarch64_gnu_prop_info);
extern void bfd_elf32_aarch64_set_options
(bfd *, struct bfd_link_info *, int, int, int, int, erratum_84319_opts, int,
- aarch64_bti_pac_info);
+ aarch64_gnu_prop_info);
/* AArch64 stub generation support for ELF64. Called from the linker. */
extern int elf64_aarch64_setup_section_lists
@@ -135,8 +158,9 @@ _bfd_aarch64_elf_write_core_note (bfd *, char *, int *, int, ...);
#define elf_backend_write_core_note _bfd_aarch64_elf_write_core_note
extern bfd *
-_bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *,
- uint32_t *);
+_bfd_aarch64_elf_link_setup_gnu_properties (struct bfd_link_info *, uint32_t *,
+ aarch64_gcs_report,
+ aarch64_gcs_type);
extern enum elf_property_kind
_bfd_aarch64_elf_parse_gnu_properties (bfd *, unsigned int,
@@ -146,6 +170,8 @@ extern bool
_bfd_aarch64_elf_merge_gnu_properties (struct bfd_link_info *, bfd *,
elf_property *, elf_property *,
uint32_t);
+extern void
+_bfd_aarch64_elf_check_gcs_report (aarch64_gcs_report, bfd *);
extern void
_bfd_aarch64_elf_link_fixup_gnu_properties (struct bfd_link_info *,
diff --git a/binutils/readelf.c b/binutils/readelf.c
index 5e4ad6ea6ad..794cbb77a9c 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -20636,6 +20636,10 @@ decode_aarch64_feature_1_and (unsigned int bitmask)
printf ("PAC");
break;
+ case GNU_PROPERTY_AARCH64_FEATURE_1_GCS:
+ printf ("GCS");
+ break;
+
default:
printf (_("<unknown: %x>"), bit);
break;
diff --git a/include/elf/common.h b/include/elf/common.h
index 6a66456cd22..289b8821b7d 100644
--- a/include/elf/common.h
+++ b/include/elf/common.h
@@ -1001,6 +1001,7 @@
#define GNU_PROPERTY_AARCH64_FEATURE_1_BTI (1U << 0)
#define GNU_PROPERTY_AARCH64_FEATURE_1_PAC (1U << 1)
+#define GNU_PROPERTY_AARCH64_FEATURE_1_GCS (1U << 2)
/* Values used in GNU .note.ABI-tag notes (NT_GNU_ABI_TAG). */
#define GNU_ABI_TAG_LINUX 0
diff --git a/ld/emultempl/aarch64elf.em b/ld/emultempl/aarch64elf.em
index b647909ae63..fb331e06553 100644
--- a/ld/emultempl/aarch64elf.em
+++ b/ld/emultempl/aarch64elf.em
@@ -36,6 +36,12 @@ static erratum_84319_opts fix_erratum_843419 = ERRAT_NONE;
static int no_apply_dynamic_relocs = 0;
static aarch64_plt_type plt_type = PLT_NORMAL;
static aarch64_enable_bti_type bti_type = BTI_NONE;
+static aarch64_gcs_type gcs_type = GCS_IMPLICIT;
+static aarch64_gcs_report gcs_report = GCS_NONE;
+static const char * egr = "experimental-gcs-report";
+static const char * eg = "experimental-gcs";
+#define EGR_LEN strlen (egr)
+#define EG_LEN strlen (eg)
static void
gld${EMULATION_NAME}_before_parse (void)
@@ -321,9 +327,11 @@ aarch64_elf_create_output_section_statements (void)
return;
}
- aarch64_bti_pac_info bp_info;
+ aarch64_gnu_prop_info bp_info;
bp_info.plt_type = plt_type;
bp_info.bti_type = bti_type;
+ bp_info.gcs_type = gcs_type;
+ bp_info.gcs_report = gcs_report;
bfd_elf${ELFSIZE}_aarch64_set_options (link_info.output_bfd, &link_info,
no_enum_size_warning,
@@ -408,6 +416,19 @@ PARSE_AND_LIST_OPTIONS='
fprintf (file, _(" --no-apply-dynamic-relocs Do not apply link-time values for dynamic relocations\n"));
fprintf (file, _(" -z force-bti Turn on Branch Target Identification mechanism and generate PLTs with BTI. Generate warnings for missing BTI on inputs\n"));
fprintf (file, _(" -z pac-plt Protect PLTs with Pointer Authentication.\n"));
+ fprintf (file, _("\
+ -z experimental-gcs[=always|never|implicit] Turn on Guarded Control Stack(gcs) mechanism on the output.\n\
+ implicit(default): deduce gcs from input objects.\n\
+ always: always marks the output with gcs.\n\
+ never: never marks the output with gcs.\n"));
+ fprintf (file, _("\
+ -z experimental-gcs-report[=none|warning|error] Emit warning/error on mismatch of gcs marking between input objects and ouput.\n\
+ none (default): Does not emit any warning/error messages.\n\
+ warning: Emit warning when the input objects are missing gcs markings\n\
+ and output have gcs marking.\n\
+ error: Emit error when the input objects are missing gcs markings\n\
+ and output have gcs marking.\n"));
+
'
PARSE_AND_LIST_ARGS_CASE_Z_AARCH64='
@@ -418,6 +439,28 @@ PARSE_AND_LIST_ARGS_CASE_Z_AARCH64='
}
else if (strcmp (optarg, "pac-plt") == 0)
plt_type |= PLT_PAC;
+ else if (strncmp (optarg, egr, EGR_LEN) == 0)
+ {
+ if (strlen (optarg) == EGR_LEN || strcmp (optarg + EGR_LEN, "=none") == 0)
+ gcs_report = GCS_NONE;
+ else if (strcmp (optarg + EGR_LEN, "=warning") == 0)
+ gcs_report = GCS_WARN;
+ else if (strcmp (optarg + EGR_LEN, "=error") == 0)
+ gcs_report = GCS_ERROR;
+ else
+ einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg);
+ }
+ else if (strncmp (optarg, eg, EG_LEN) == 0)
+ {
+ if (strlen (optarg) == EG_LEN || strcmp (optarg + EG_LEN, "=always") == 0)
+ gcs_type = GCS_ALWAYS;
+ else if (strcmp (optarg + EG_LEN, "=never") == 0)
+ gcs_type = GCS_NEVER;
+ else if (strcmp (optarg + EG_LEN, "=implicit") == 0)
+ gcs_type = GCS_IMPLICIT;
+ else
+ einfo (_("%P: error: unrecognized: `%s'\''\n"), optarg);
+ }
'
PARSE_AND_LIST_ARGS_CASE_Z="$PARSE_AND_LIST_ARGS_CASE_Z $PARSE_AND_LIST_ARGS_CASE_Z_AARCH64"
diff --git a/ld/testsuite/ld-aarch64/aarch64-elf.exp b/ld/testsuite/ld-aarch64/aarch64-elf.exp
index 9ce61579e6c..31abc5a07d8 100644
--- a/ld/testsuite/ld-aarch64/aarch64-elf.exp
+++ b/ld/testsuite/ld-aarch64/aarch64-elf.exp
@@ -471,3 +471,26 @@ run_dump_test_lp64 "bti-far-3"
if { ![skip_sframe_tests] } {
run_dump_test "sframe-simple-1"
}
+
+run_dump_test "property-gcs1"
+run_dump_test "property-gcs2"
+run_dump_test "property-gcs3"
+run_dump_test "property-gcs4"
+run_dump_test "property-gcs5"
+run_dump_test "property-gcs6"
+run_dump_test "property-gcs7"
+run_dump_test "property-gcs8"
+run_dump_test "property-gcs9"
+run_dump_test "property-gcs10"
+run_dump_test "property-gcs11"
+run_dump_test "property-gcs12"
+run_dump_test "property-gcs13"
+run_dump_test "property-gcs14"
+run_dump_test "property-gcs15"
+run_dump_test "property-gcs16"
+run_dump_test "property-gcs17"
+run_dump_test "property-gcs18"
+run_dump_test "property-gcs19"
+run_dump_test "property-gcs20"
+run_dump_test "property-gcs21"
+run_dump_test "property-gcs22"
diff --git a/ld/testsuite/ld-aarch64/property-bti-pac1.d b/ld/testsuite/ld-aarch64/property-bti-pac1.d
index 59fa695165a..c28a0cbf850 100644
--- a/ld/testsuite/ld-aarch64/property-bti-pac1.d
+++ b/ld/testsuite/ld-aarch64/property-bti-pac1.d
@@ -8,4 +8,4 @@
Displaying notes found in: .note.gnu.property
[ ]+Owner[ ]+Data size[ ]+Description
GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
- Properties: AArch64 feature: BTI, PAC
+ Properties: AArch64 feature: BTI, PAC, GCS
diff --git a/ld/testsuite/ld-aarch64/property-bti-pac1.s b/ld/testsuite/ld-aarch64/property-bti-pac1.s
index 414c9277f1d..42156917d58 100644
--- a/ld/testsuite/ld-aarch64/property-bti-pac1.s
+++ b/ld/testsuite/ld-aarch64/property-bti-pac1.s
@@ -12,6 +12,20 @@ _start:
.long 5f - 2f /* data length */
.long 5 /* note type */
0: .asciz "GNU" /* vendor name */
+1:
+ .p2align 3
+2: .long 0xc0000000 /* pr_type. */
+ .long 4f - 3f /* pr_datasz. */
+3:
+ .long 0x4 /* GCS. */
+4:
+ .p2align 3
+5:
+ .p2align 3
+ .long 1f - 0f /* name length */
+ .long 5f - 2f /* data length */
+ .long 5 /* note type */
+0: .asciz "GNU" /* vendor name */
1:
.p2align 3
2: .long 0xc0000000 /* pr_type. */
diff --git a/ld/testsuite/ld-aarch64/property-gcs.s b/ld/testsuite/ld-aarch64/property-gcs.s
new file mode 100644
index 00000000000..bc7e66e8933
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs.s
@@ -0,0 +1,25 @@
+ .text
+ .globl _start
+ .type _start,@function
+_start:
+ mov x1, #2
+.ifndef __mult__
+ bl foo
+.endif
+.ifdef __property_gcs__
+ .section ".note.gnu.property", "a"
+ .p2align 3
+ .long 1f - 0f /* name length */
+ .long 5f - 2f /* data length */
+ .long 5 /* note type */
+0: .asciz "GNU" /* vendor name */
+1:
+ .p2align 3
+2: .long 0xc0000000 /* pr_type. */
+ .long 4f - 3f /* pr_datasz. */
+3:
+ .long 0x4 /* GCS. */
+4:
+ .p2align 3
+5:
+.endif
diff --git a/ld/testsuite/ld-aarch64/property-gcs1.d b/ld/testsuite/ld-aarch64/property-gcs1.d
new file mode 100644
index 00000000000..c724ac56ca3
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs1.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input without gcs)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -shared
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/property-gcs10.d b/ld/testsuite/ld-aarch64/property-gcs10.d
new file mode 100644
index 00000000000..4b6deedc0c2
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs10.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs=always experimental-gcs-report=error)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=always -z experimental-gcs-report=error
+#error: .*property-gcs.*: error: GCS turned on by -z experimental-gcs on the output when all inputs do not have GCS in NOTE section.
diff --git a/ld/testsuite/ld-aarch64/property-gcs11.d b/ld/testsuite/ld-aarch64/property-gcs11.d
new file mode 100644
index 00000000000..8abacf28eb1
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs11.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs output forced with experimental-gcs)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs12.d b/ld/testsuite/ld-aarch64/property-gcs12.d
new file mode 100644
index 00000000000..0fe246dfa3a
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs12.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs=always)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=always
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs13.d b/ld/testsuite/ld-aarch64/property-gcs13.d
new file mode 100644
index 00000000000..c6077aeaa5a
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs13.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs experimental-gcs-report=none)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs -z experimental-gcs-report=none
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs14.d b/ld/testsuite/ld-aarch64/property-gcs14.d
new file mode 100644
index 00000000000..0f7490ef4a5
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs14.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs experimental-gcs-report=warning)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs -z experimental-gcs-report=warning
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs15.d b/ld/testsuite/ld-aarch64/property-gcs15.d
new file mode 100644
index 00000000000..d1e723e0ea6
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs15.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs experimental-gcs-report=error)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs -z experimental-gcs-report=error
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs16.d b/ld/testsuite/ld-aarch64/property-gcs16.d
new file mode 100644
index 00000000000..340577f1758
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs16.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs=always experimental-gcs-report=none)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=always -z experimental-gcs-report=none
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs17.d b/ld/testsuite/ld-aarch64/property-gcs17.d
new file mode 100644
index 00000000000..4ba9583ee92
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs17.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs=always experimental-gcs-report=warning)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=always -z experimental-gcs-report=warning
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs18.d b/ld/testsuite/ld-aarch64/property-gcs18.d
new file mode 100644
index 00000000000..f71c10e2523
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs18.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs ouput forced with experimental-gcs=always experimental-gcs-report=error)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=always -z experimental-gcs-report=error
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs19.d b/ld/testsuite/ld-aarch64/property-gcs19.d
new file mode 100644
index 00000000000..468f96edcf1
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs19.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input without gcs output forced with experimental-gcs=never)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=never
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/property-gcs2.d b/ld/testsuite/ld-aarch64/property-gcs2.d
new file mode 100644
index 00000000000..ed545a180b3
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs2.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -shared
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs2.s b/ld/testsuite/ld-aarch64/property-gcs2.s
new file mode 100644
index 00000000000..6db7d8396c8
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs2.s
@@ -0,0 +1,33 @@
+ .text
+ .global foo
+ .type foo, %function
+foo:
+ sub sp, sp, #16
+ mov w0, 9
+ str w0, [sp, 12]
+ ldr w0, [sp, 12]
+ add w0, w0, 4
+ str w0, [sp, 12]
+ nop
+ add sp, sp, 16
+ ret
+ .size foo, .-foo
+ .global bar
+ .type bar, %function
+.ifdef __property_gcs__
+ .section ".note.gnu.property", "a"
+ .p2align 3
+ .long 1f - 0f /* name length */
+ .long 5f - 2f /* data length */
+ .long 5 /* note type */
+0: .asciz "GNU" /* vendor name */
+1:
+ .p2align 3
+2: .long 0xc0000000 /* pr_type. */
+ .long 4f - 3f /* pr_datasz. */
+3:
+ .long 0x4 /* GCS. */
+4:
+ .p2align 3
+5:
+.endif
diff --git a/ld/testsuite/ld-aarch64/property-gcs20.d b/ld/testsuite/ld-aarch64/property-gcs20.d
new file mode 100644
index 00000000000..2bdff88a27a
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs20.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input without gcs output forced with experimental-gcs=implicit)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=implicit
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/property-gcs21.d b/ld/testsuite/ld-aarch64/property-gcs21.d
new file mode 100644
index 00000000000..b42b11d14ea
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs21.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input with gcs output forced with experimental-gcs=never)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=never
+#readelf: -n
diff --git a/ld/testsuite/ld-aarch64/property-gcs22.d b/ld/testsuite/ld-aarch64/property-gcs22.d
new file mode 100644
index 00000000000..431fc1ed35b
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs22.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input with gcs output forced with experimental-gcs=implicit)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0 -defsym __property_gcs__=1
+#ld: -z experimental-gcs=implicit
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs3.d b/ld/testsuite/ld-aarch64/property-gcs3.d
new file mode 100644
index 00000000000..68d50be0823
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs3.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input without gcs output forced with experimental-gcs)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs4.d b/ld/testsuite/ld-aarch64/property-gcs4.d
new file mode 100644
index 00000000000..cd5711e3da3
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs4.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs=always)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=always
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs5.d b/ld/testsuite/ld-aarch64/property-gcs5.d
new file mode 100644
index 00000000000..b7a751c0276
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs5.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs experimental-gcs-report=none)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs -z experimental-gcs-report=none
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs6.d b/ld/testsuite/ld-aarch64/property-gcs6.d
new file mode 100644
index 00000000000..5abf8126d89
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs6.d
@@ -0,0 +1,12 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs experimental-gcs-report=warning)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs -z experimental-gcs-report=warning
+#readelf: -n
+#warning: .*property-gcs.*: warning: GCS turned on by -z experimental-gcs on the output when all inputs do not have GCS in NOTE section.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs7.d b/ld/testsuite/ld-aarch64/property-gcs7.d
new file mode 100644
index 00000000000..4df5693a27b
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs7.d
@@ -0,0 +1,6 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs experimental-gcs-report=error)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs -z experimental-gcs-report=error
+#error: .*property-gcs.*: error: GCS turned on by -z experimental-gcs on the output when all inputs do not have GCS in NOTE section.
diff --git a/ld/testsuite/ld-aarch64/property-gcs8.d b/ld/testsuite/ld-aarch64/property-gcs8.d
new file mode 100644
index 00000000000..463c3ad4197
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs8.d
@@ -0,0 +1,11 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs=always experimental-gcs-report=none)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=always -z experimental-gcs-report=none
+#readelf: -n
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
diff --git a/ld/testsuite/ld-aarch64/property-gcs9.d b/ld/testsuite/ld-aarch64/property-gcs9.d
new file mode 100644
index 00000000000..c3083675c8f
--- /dev/null
+++ b/ld/testsuite/ld-aarch64/property-gcs9.d
@@ -0,0 +1,12 @@
+#name: GNU Property (input without gcs ouput forced with experimental-gcs=always experimental-gcs-report=warning)
+#source: property-gcs.s
+#alltargets: [check_shared_lib_support] *linux*
+#as: -march=armv9.4-a+gcs -defsym __mult__=0
+#ld: -z experimental-gcs=always -z experimental-gcs-report=warning
+#readelf: -n
+#warning: .*property-gcs.*: warning: GCS turned on by -z experimental-gcs on the output when all inputs do not have GCS in NOTE section.
+
+Displaying notes found in: .note.gnu.property
+[ ]+Owner[ ]+Data size[ ]+Description
+ GNU 0x00000010 NT_GNU_PROPERTY_TYPE_0
+ Properties: AArch64 feature: GCS
--
2.34.1
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,3 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://gcs.patch"
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,40 @@
require recipes-devtools/gdb/gdb-common.inc
inherit gettext pkgconfig
PACKAGES =+ "gdbserver"
FILES:gdbserver = "${bindir}/gdbserver"
require recipes-devtools/gdb/gdb.inc
FILESEXTRAPATHS:prepend := "${COREBASE}/meta/recipes-devtools/gdb/gdb:"
# This patch doesn't apply to 15.1
SRC_URI:remove = "file://0005-Change-order-of-CFLAGS.patch"
SRC_URI[sha256sum] = "38254eacd4572134bca9c5a5aa4d4ca564cbbd30c369d881f733fb6b903354f2"
inherit python3-dir
EXTRA_OEMAKE:append:libc-musl = "\
gt_cv_func_gnugettext1_libc=yes \
gt_cv_func_gnugettext2_libc=yes \
gl_cv_func_working_strerror=yes \
gl_cv_func_strerror_0_works=yes \
gl_cv_func_gettimeofday_clobber=no \
"
do_configure:prepend() {
if [ "${@bb.utils.filter('PACKAGECONFIG', 'python', d)}" ]; then
cat > ${WORKDIR}/python << EOF
#!/bin/sh
case "\$2" in
--includes) echo "-I${STAGING_INCDIR}/${PYTHON_DIR}${PYTHON_ABI}/" ;;
--ldflags) echo "-Wl,-rpath-link,${STAGING_LIBDIR}/.. -Wl,-rpath,${libdir}/.. -lpthread -ldl -lutil -lm -lpython${PYTHON_BASEVERSION}${PYTHON_ABI}" ;;
--exec-prefix) echo "${exec_prefix}" ;;
*) exit 1 ;;
esac
exit 0
EOF
chmod +x ${WORKDIR}/python
fi
}
@@ -0,0 +1,3 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
SRC_URI += "file://gcs.patch"
@@ -0,0 +1,14 @@
require ${COREBASE}/meta/recipes-kernel/linux-libc-headers/linux-libc-headers.inc
FILESEXTRAPATHS:prepend = "${THISDIR}/../linux/files/:"
KBRANCH = "v6.11/standard/base"
# 6.11-rc3
SRCREV = "7c626ce4bae1ac14f60076d00eafe71af30450ba"
SRC_URI = "git://git.yoctoproject.org/linux-yocto-dev.git;branch=${KBRANCH};protocol=https"
SRC_URI += "file://gcs.patch"
LIC_FILES_CHKSUM = "file://COPYING;md5=6bc538ed5bd9a7fc9398086aedcd7e46"
S = "${WORKDIR}/git"
@@ -0,0 +1 @@
CONFIG_UPROBE_EVENTS=n
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,51 @@
SUMMARY = "kselftest, the kernel test suite"
SECTION = "kernel"
LICENSE = "GPL-2.0-only"
DEPENDS = "rsync-native alsa-lib libcap libcap-ng numactl popt libmnl"
inherit kernelsrc kernel-arch
PACKAGE_ARCH = "${MACHINE_ARCH}"
B = "${WORKDIR}/build"
do_compile[cleandirs] = "${B}"
CC:remove:aarch64 = "-mbranch-protection=standard"
SECURITY_CFLAGS = ""
# Disable BPF and HID as they need clang for BPF compilation
SKIP_TARGETS ?= "bpf hid"
EXTRA_OEMAKE += "\
O=${B} \
V=1 \
ARCH=${ARCH} \
CROSS_COMPILE=${TARGET_PREFIX} \
CC="${CC}" \
AR="${AR}" \
LD="${LD}" \
KHDR_INCLUDES="-isystem ${STAGING_KERNEL_BUILDDIR}" \
SKIP_TARGETS="${SKIP_TARGETS}" \
"
# Force all tests to build successfully
#EXTRA_OEMAKE += "FORCE_TARGETS=1"
do_compile() {
oe_runmake -C ${S}/tools/testing/selftests
}
do_install() {
oe_runmake -C ${S}/tools/testing/selftests install INSTALL_PATH=${D}/${libexecdir}/kselftest
# install uses rsync -a
chown -R root:root ${D}/${libexecdir}/kselftest
}
RDEPENDS:${PN} += "bash python3-core python3 perl perl-module-io-handle"
INHIBIT_PACKAGE_DEBUG_SPLIT = "1"
INSANE_SKIP:${PN} = "already-stripped buildpaths ldflags textrel"
# TODO test with musl
@@ -0,0 +1,13 @@
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
KBRANCH = "v6.11/standard/base"
SRCREV_machine = "7c626ce4bae1ac14f60076d00eafe71af30450ba"
SRCREV_meta = "66aec68f0ba1d15ba0e9c19f1ec0d2b4a75c5333"
LINUX_VERSION = "6.11.0"
SRC_URI += "file://gcs.patch file://disable_uprobe.cfg"
# TMPDIR references in:
# /usr/src/debug/linux-yocto-dev/6.8.0+git/drivers/tty/vt/consolemap_deftbl.c
# /usr/src/debug/linux-yocto-dev/6.8.0+git/lib/oid_registry_data.c
INSANE_SKIP:${PN}-src += "buildpaths"
@@ -0,0 +1,22 @@
/* Copyright (C) 2024 Arm Ltd */
/* SPDX-License-Identifier: MIT */
.global gcs_enabled
.type gcs_enabled,@function
gcs_enabled:
mov x16, #0x1
hint 40
eor x0, x16, #0x1
ret
.pushsection .note.gnu.property, "a"
.balign 8
.long 4
.long 0x10
.long 0x5
.asciz "GNU"
.long 0xc0000000
.long 4
.long 4
.long 0
.popsection
@@ -0,0 +1,9 @@
// Copyright (C) 2024 Arm Ltd
// SPDX-License-Identifier: MIT
extern int gcs_enabled(void);
int main(void)
{
return gcs_enabled() ? 0 : 1;
}
@@ -0,0 +1,18 @@
SUMMARY = "test"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
SRC_URI = "file://chkfeat.s file://gcs_enabled.c"
S = "${WORKDIR}"
LDFLAGS:append = " -z experimental-gcs=always"
do_compile() {
${CC} ${CFLAGS} ${LDFLAGS} ${WORKDIR}/gcs_enabled.c ${WORKDIR}/chkfeat.s -o gcs-test
}
do_install() {
install -d ${D}${bindir}
install -m 0755 gcs-test ${D}${bindir}
}
@@ -0,0 +1,39 @@
from oeqa.runtime.case import OERuntimeTestCase
class SystemReadyFedoraUnattendedTest(OERuntimeTestCase):
def setUp(self):
super().setUp()
self.console = self.target.DEFAULT_CONSOLE
def test_fedora_unattended(self):
# Turn on the FVP.
self.target.transition('on')
# Timeout value = elapsed time * 2; where elapsed time was collected
# from the elapsed time in the log.do_testimage for each function after
# the build is finished on the development machine.
self.target.expect(self.console,
' Booting `Install Fedora 39\'',
timeout=(2 * 60))
bb.plain('Installation status: Loading the installer, kernel and initrd...')
self.target.expect(self.console,
'Setting up the installation environment',
timeout=(2 * 60 * 60))
bb.plain('Installation status: Setting up the installation environment...')
self.target.expect(self.console,
'Installing the software',
timeout=(30 * 60))
bb.plain('Installation status: Installing the software packages...')
# Waiting to respond to the boot loader prompt error message.
self.target.expect(self.console,
'Please respond \'yes\' or \'no\': ',
timeout=(16 * 60 * 60))
self.target.sendline(self.console, 'yes')
# Waiting till the installation is finished.
self.target.expect(self.console, r'.*login: ', timeout=(5 * 60 * 60))
bb.plain('Installation status: Fedora installation finished successfully.')
@@ -0,0 +1,119 @@
require arm-systemready-linux-distros.inc
# The Fedora project does not provide a license manifest for the distributed ISO images.
# The following list only contains the SPDX license identifiers found on the rpm
# packages from the ISO image and is not exhaustive.
# For more information about Fedora licenses, including the non-free ones, refer to
# https://docs.fedoraproject.org/en-US/legal/fedora-linux-license/.
LICENSE = "GPL-1.0-only & GPL-1.0-or-later & GPL-2.0-only & GPL-2.0-or-later & GPL-2.0-with-font-exception \
& GPL-2.0-with-GCC-exception & GPL-3.0-only & GPL-3.0-or-later & GPL-3-with-bison-exception \
& LGPL-2.0-only & LGPL-2.0-or-later & LGPL-2.1-only & LGPL-2.1-or-later & LGPL-3.0-only & LGPL-3.0-or-later \
& 0BSD & BSD-2-Clause & BSD-3-Clause & BSD-3-Clause-Modification & BSD-4-Clause & BSD-4-Clause-UC \
& ClArtistic & Artistic-2.0 & Artistic-1.0-Perl & Apache-2.0 & Apache-2.0-with-LLVM-exception & Zlib \
& zlib-acknowledgement & Sleepycat & MIT & MIT-open-group & MIT-Modern-Variant & Unlicense & ISC \
& AFL-2.1 & AGPL-3.0-only & AGPL-3.0-or-later & FSFAP & MPL-1.1 & MPL-2.0 & CC-BY-3.0 & CC-BY-4.0 \
& CC-BY-SA-4.0 & CC0-1.0 & NCSA & APSL-2.0 & IJG & psutils & Sendmail & blessing & NTP & BSL-1.0 \
& GFDL-1.1-or-later & GFDL-1.2-or-later & GFDL-1.3 & GFDL-1.3-or-later & GFDL-1.3-no-invariants-or-later \
& NPL-1.1 & libtiff & Vim & curl & EUPL-1.1 & OFL-1.1 & OFL-1.1-RFN & FTL & Info-ZIP & Interbase-1.0 \
& Unicode-DFS-2016 & SISSL & LPPL-1.3a & SGI-B-2.0 & PSF-2.0 & X11 & OLDAP-2.8 & PostgreSQL & OPUBL-1.0"
LIC_FILES_CHKSUM = "\
file://${COMMON_LICENSE_DIR}/GPL-1.0-only;md5=e9e36a9de734199567a4d769498f743d \
file://${COMMON_LICENSE_DIR}/GPL-1.0-or-later;md5=30c0b8a5048cc2f4be5ff15ef0d8cf61 \
file://${COMMON_LICENSE_DIR}/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6 \
file://${COMMON_LICENSE_DIR}/GPL-2.0-or-later;md5=fed54355545ffd980b814dab4a3b312c \
file://${COMMON_LICENSE_DIR}/GPL-2.0-with-font-exception;md5=bf93e21a513f6f923474e62fb920434d \
file://${COMMON_LICENSE_DIR}/GPL-2.0-with-GCC-exception;md5=14c42911132e8c9008911385aede6449 \
file://${COMMON_LICENSE_DIR}/GPL-3.0-only;md5=c79ff39f19dfec6d293b95dea7b07891 \
file://${COMMON_LICENSE_DIR}/GPL-3.0-or-later;md5=1c76c4cc354acaac30ed4d5eefea7245 \
file://${COMMON_LICENSE_DIR}/GPL-3-with-bison-exception;md5=6e1bac3dc21fcc4fa049cf5c407eb7a2 \
file://${COMMON_LICENSE_DIR}/LGPL-2.0-only;md5=9427b8ccf5cf3df47c29110424c9641a \
file://${COMMON_LICENSE_DIR}/LGPL-2.0-or-later;md5=6d2d9952d88b50a51a5c73dc431d06c7 \
file://${COMMON_LICENSE_DIR}/LGPL-2.1-only;md5=1a6d268fd218675ffea8be556788b780 \
file://${COMMON_LICENSE_DIR}/LGPL-2.1-or-later;md5=2a4f4fd2128ea2f65047ee63fbca9f68 \
file://${COMMON_LICENSE_DIR}/LGPL-3.0-only;md5=bfccfe952269fff2b407dd11f2f3083b \
file://${COMMON_LICENSE_DIR}/LGPL-3.0-or-later;md5=c51d3eef3be114124d11349ca0d7e117 \
file://${COMMON_LICENSE_DIR}/0BSD;md5=f667a3c3830a55a17ec3067709f4526c \
file://${COMMON_LICENSE_DIR}/BSD-2-Clause;md5=cb641bc04cda31daea161b1bc15da69f \
file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9 \
file://${COMMON_LICENSE_DIR}/BSD-3-Clause-Modification;md5=27b46022df7bdef61a1e404fc3573f83 \
file://${COMMON_LICENSE_DIR}/BSD-4-Clause;md5=624d9e67e8ac41a78f6b6c2c55a83a2b \
file://${COMMON_LICENSE_DIR}/BSD-4-Clause-UC;md5=1da3cf8ad50cd8d5d1de3cfc53196d01 \
file://${COMMON_LICENSE_DIR}/ClArtistic;md5=f633bbf0697ec33066b83adfa9ebe51d \
file://${COMMON_LICENSE_DIR}/Artistic-2.0;md5=8bbc66f0ba93cec26ef526117e280266 \
file://${COMMON_LICENSE_DIR}/Artistic-1.0-Perl;md5=8feedd169dbd5738981843bd7d931f9f \
file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \
file://${COMMON_LICENSE_DIR}/Apache-2.0-with-LLVM-exception;md5=0bcd48c3bdfef0c9d9fd17726e4b7dab \
file://${COMMON_LICENSE_DIR}/Zlib;md5=87f239f408daca8a157858e192597633 \
file://${COMMON_LICENSE_DIR}/zlib-acknowledgement;md5=c76c64e2cf99efcfb5e2b26aa86b12e6 \
file://${COMMON_LICENSE_DIR}/Sleepycat;md5=1cbb64231c94198653282f3ccab88ffb \
file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302 \
file://${COMMON_LICENSE_DIR}/MIT-open-group;md5=a7c50bba311e4b09d48a526eedcef837 \
file://${COMMON_LICENSE_DIR}/MIT-Modern-Variant;md5=272dea2b67586002978254bc04648ab2 \
file://${COMMON_LICENSE_DIR}/Unlicense;md5=7246f848faa4e9c9fc0ea91122d6e680 \
file://${COMMON_LICENSE_DIR}/ISC;md5=f3b90e78ea0cffb20bf5cca7947a896d \
file://${COMMON_LICENSE_DIR}/AFL-2.1;md5=e40039b90e182a056bcd9ad3e47ddd71 \
file://${COMMON_LICENSE_DIR}/AGPL-3.0-only;md5=73f1eb20517c55bf9493b7dd6e480788 \
file://${COMMON_LICENSE_DIR}/AGPL-3.0-or-later;md5=a4af3f9f0c0fc9de318e4df46665906e \
file://${COMMON_LICENSE_DIR}/FSFAP;md5=232368338ef6dc99de71c2e05ff12176 \
file://${COMMON_LICENSE_DIR}/MPL-1.1;md5=1d38e87ed8d522c49f04e1efe0fab3ab \
file://${COMMON_LICENSE_DIR}/MPL-2.0;md5=815ca599c9df247a0c7f619bab123dad \
file://${COMMON_LICENSE_DIR}/CC-BY-3.0;md5=dfa02b5755629022e267f10b9c0a2ab7 \
file://${COMMON_LICENSE_DIR}/CC-BY-4.0;md5=9b33bbd06fb58995fb0e299cd38d1838 \
file://${COMMON_LICENSE_DIR}/CC-BY-SA-4.0;md5=4084714af41157e38872e798eb3fe1b1 \
file://${COMMON_LICENSE_DIR}/CC0-1.0;md5=0ceb3372c9595f0a8067e55da801e4a1 \
file://${COMMON_LICENSE_DIR}/NCSA;md5=1b5fdec70ee13ad8a91667f16c1959d7 \
file://${COMMON_LICENSE_DIR}/APSL-2.0;md5=f9e4701d9a216a87ba145bbe25f54c58 \
file://${COMMON_LICENSE_DIR}/IJG;md5=d9fc5ebaa95c14466091d25e0d34e688 \
file://${COMMON_LICENSE_DIR}/psutils;md5=29046009c1f269661e7b74196fb8f6a0 \
file://${COMMON_LICENSE_DIR}/Sendmail;md5=8037c42e05a5d4bfce06a44729fb6f1a \
file://${COMMON_LICENSE_DIR}/blessing;md5=d5407b61870d6dc19d0bdc04ae4cc654 \
file://${COMMON_LICENSE_DIR}/NTP;md5=0926fd147301b2a65e45e21adb3a6f14 \
file://${COMMON_LICENSE_DIR}/BSL-1.0;md5=65a7df9ad57aacf825fd252c4c33288c \
file://${COMMON_LICENSE_DIR}/GFDL-1.1-or-later;md5=03322744a1a73f36ebf29f98cced39a4 \
file://${COMMON_LICENSE_DIR}/GFDL-1.2-or-later;md5=9f58808219e9a42ff1228309d6f83dc6 \
file://${COMMON_LICENSE_DIR}/GFDL-1.3;md5=1083add59b39991c748ea70a92166959 \
file://${COMMON_LICENSE_DIR}/GFDL-1.3-or-later;md5=e0771ae6a62dc8a2e50b1d450fea66b7 \
file://${COMMON_LICENSE_DIR}/GFDL-1.3-no-invariants-or-later;md5=e0771ae6a62dc8a2e50b1d450fea66b7 \
file://${COMMON_LICENSE_DIR}/NPL-1.1;md5=f9c017c062c1b02462efb915d9f2cb63 \
file://${COMMON_LICENSE_DIR}/libtiff;md5=b99383975855adc28712577c9cd56485 \
file://${COMMON_LICENSE_DIR}/Vim;md5=676d28582e2dca824e7e309a9865eeb1 \
file://${COMMON_LICENSE_DIR}/curl;md5=f7adb1397db248527ffed14d947e445c \
file://${COMMON_LICENSE_DIR}/EUPL-1.1;md5=3f12b8134016fd7ba5a010afd690abaa \
file://${COMMON_LICENSE_DIR}/OFL-1.1;md5=fac3a519e5e9eb96316656e0ca4f2b90 \
file://${COMMON_LICENSE_DIR}/OFL-1.1-RFN;md5=2680fce30f17e5fed9bcebd9336e5b78 \
file://${COMMON_LICENSE_DIR}/FTL;md5=f0bf6b09ee8b02121ed10709d9e49d8b \
file://${COMMON_LICENSE_DIR}/Info-ZIP;md5=83a1c8ea099b3b58beb6e55dcbe4c15f \
file://${COMMON_LICENSE_DIR}/Interbase-1.0;md5=f65304bc0e87e6700fe1e4ab5affdc6f \
file://${COMMON_LICENSE_DIR}/Unicode-DFS-2016;md5=907371994d651afe53e98adc27824669 \
file://${COMMON_LICENSE_DIR}/SISSL;md5=fded06bff75eb4a2899bd051e2e128f5 \
file://${COMMON_LICENSE_DIR}/LPPL-1.3a;md5=8e2e8e1428b39cd78927c2ad28734ff7 \
file://${COMMON_LICENSE_DIR}/SGI-B-2.0;md5=5f5dd7bd973dff1594131b1e9c7981f1 \
file://${COMMON_LICENSE_DIR}/PSF-2.0;md5=76c1502273262a5ebefb50dfb20d7c4f \
file://${COMMON_LICENSE_DIR}/X11;md5=87f08485cf6ba3c63a00eda8ecba7f1d \
file://${COMMON_LICENSE_DIR}/OLDAP-2.8;md5=bb28ada4fbb5c3f52c233899b2e410a5 \
file://${COMMON_LICENSE_DIR}/PostgreSQL;md5=a9c78964f52e27f4c01140a1a16da8e2 \
file://${COMMON_LICENSE_DIR}/OPUBL-1.0;md5=99367d4750dbf0ae6cc74209ddd52f6d \
"
ARM_SYSTEMREADY_LINUX_DISTRO_INSTALL_SIZE = "6144"
TEST_SUITES = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "arm_systemready_fedora_unattended", "", d)}"
ISO_LABEL = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "Fedora-S-dvd-aarch64-39", "", d)}"
BOOT_CATALOG = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "boot.catalog", "", d)}"
BOOT_IMAGE = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "EFI/BOOT/BOOTAA64.EFI", "", d)}"
EFI_IMAGE = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "images/efiboot.img", "", d)}"
PV = "39.1.5"
SRC_URI = "https://download.fedoraproject.org/pub/fedora/linux/releases/39/Server/aarch64/iso/Fedora-Server-dvd-aarch64-39-1.5.iso;unpack=0;downloadfilename=${ISO_IMAGE_NAME}.iso"
SRC_URI[sha256sum] = "d19dc2a39758155fa53e6fd555d0d173ccc8175b55dea48002d499f39cb30ce0"
modifyiso() {
UNATTENDED_CONF_DIR="${THISDIR}/unattended-boot-conf/Fedora"
cp "${UNATTENDED_CONF_DIR}/ks.cfg" ${EXTRACTED_ISO_TEMP_DIR}
sed -i 's/set default="1"/set default="0"/g' "${EXTRACTED_ISO_TEMP_DIR}/EFI/BOOT/grub.cfg"
sed -i 's/set timeout=60/set timeout=0/g' "${EXTRACTED_ISO_TEMP_DIR}/EFI/BOOT/grub.cfg"
sed -i '0,/vmlinuz/s/vmlinuz/& inst.ks=hd:LABEL=Fedora-S-dvd-aarch64-39:\/ks.cfg/' "${EXTRACTED_ISO_TEMP_DIR}/EFI/BOOT/grub.cfg"
}
@@ -0,0 +1,45 @@
SUMMARY = "Arm SystemReady Linux distros unattended requirements"
DESCRIPTION = "Arm SystemReady Linux distro unattended configurations \
and ISO image modification"
EXTRACTED_ISO_TEMP_DIR = "${WORKDIR}/extracted_iso_temp_dir"
NEW_ISO_TEMP_DIR = "${WORKDIR}/new_iso_temp_dir"
# oeqa test case must be added to TEST_SUITES to acknowledge that the unattended
# installation was successful.
inherit testimage
python () {
unattended_required_vars = ['ISO_LABEL', 'BOOT_CATALOG', 'BOOT_IMAGE', 'EFI_IMAGE']
for var in unattended_required_vars:
if not d.getVar(var):
raise bb.parse.SkipRecipe(f'{var} variable is not set')
}
unpackiso() {
# Unpack the ISO image
bsdtar -xf ${WORKDIR}/${ISO_IMAGE_NAME}.iso -C ${EXTRACTED_ISO_TEMP_DIR}
chmod -R u+rw ${EXTRACTED_ISO_TEMP_DIR}
}
modifyiso() {
}
repackiso() {
# Repack the ISO image
mkisofs -o ${NEW_ISO_TEMP_DIR}/${ISO_IMAGE_NAME}.iso -U -r -v -T -J -joliet-long -V ${ISO_LABEL} \
-volset ${ISO_LABEL} -A ${ISO_LABEL} -b ${BOOT_IMAGE} -c ${BOOT_CATALOG} -no-emul-boot \
-boot-load-size 4 -boot-info-table -J -R -V ${ISO_LABEL} -eltorito-alt-boot \
-eltorito-boot ${EFI_IMAGE} -no-emul-boot ${EXTRACTED_ISO_TEMP_DIR}
mv -f ${NEW_ISO_TEMP_DIR}/${ISO_IMAGE_NAME}.iso ${WORKDIR}
}
# Write the test data in IMAGE_POSTPROCESS_COMMAND
IMAGE_POSTPROCESS_COMMAND += "write_image_test_data; "
do_unpack[depends] += "cdrtools-native:do_populate_sysroot libarchive-native:do_populate_sysroot"
do_unpack[postfuncs] += "unpackiso modifyiso repackiso"
do_unpack[cleandirs] += "${EXTRACTED_ISO_TEMP_DIR} ${NEW_ISO_TEMP_DIR}"
@@ -2,7 +2,12 @@ SUMMARY = "Arm SystemReady Linux distros installation"
DESCRIPTION = "Arm SystemReady Linux distro CD/DVD images and installation \
target disk image"
IMAGE_CLASSES:remove = "license_image testimage"
DISTRO_UNATTENDED_INST_TESTS ?= "0"
require ${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "arm-systemready-linux-distros-unattended.inc", "", d)}
IMAGE_CLASSES:remove = "license_image"
IMAGE_CLASSES:remove = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "", "testimage", d)}"
BUILDHISTORY_FEATURES:remove = "image"
INHIBIT_DEFAULT_DEPS = "1"
@@ -15,7 +20,7 @@ do_configure[noexec] = "1"
do_compile[noexec] = "1"
ISO_IMAGE_NAME = "${PN}-${PV}"
IMAGE_LINK_NAME = "${PN}-${PV}-${MACHINE}"
IMAGE_LINK_NAME = "${PN}-${MACHINE}"
ARM_SYSTEMREADY_LINUX_DISTRO_ISO_IMAGE = \
"${DEPLOY_DIR_IMAGE}/${ISO_IMAGE_NAME}.iso"
@@ -44,7 +49,13 @@ python do_image_complete() {
from oe.utils import execute_pre_post_process
post_process_cmds = d.getVar("IMAGE_POSTPROCESS_COMMAND")
execute_pre_post_process(d, post_process_cmds)
if d.getVar('DISTRO_UNATTENDED_INST_TESTS') == "1":
# Ensure an empty rootfs manifest exists (required by testimage)
fname = os.path.join(d.getVar('IMGDEPLOYDIR'), d.getVar('IMAGE_LINK_NAME') + ".manifest")
open(fname, 'w').close()
}
do_image_complete[nostamp] = "1"
addtask image_complete after do_deploy before do_build
@@ -0,0 +1,39 @@
# Generated by Anaconda 39.32.6
# Generated by pykickstart v3.48
#version=DEVEL
# Use text mode install
text
# Keyboard layouts
keyboard --vckeymap=us --xlayouts='us'
# System language
lang en_GB.UTF-8
# Use CDROM installation media
cdrom
%packages --excludedocs --ignoremissing
@core --nodefaults
%end
# Run the Setup Agent on first boot
firstboot --enable
# Do not configure the X Window System
skipx
# System bootloader configuration
bootloader --location=mbr --boot-drive=vda
autopart
# Partition clearing information
clearpart --all --initlabel --drives=vda
# System timezone
timezone Europe/London --utc
# Root password
rootpw --lock
user --groups=wheel --name=user --password=unsafe --gecos="usr1"
# Reboot after installation with an attempt to eject the installation media
reboot --eject
+13 -2
View File
@@ -3,6 +3,7 @@ import enum
import pathlib
import pexpect
import os
import time
from oeqa.core.target.ssh import OESSHTarget
from fvp import runner
@@ -127,9 +128,19 @@ class OEFVPTarget(OESSHTarget):
def call_pexpect(terminal, *args, **kwargs):
attr = getattr(self.terminals[terminal], name)
if callable(attr):
return attr(*args, **kwargs)
self.logger.debug(f"Calling {name} on {terminal} : with arguments -> {args} : {kwargs}")
start_time = time.monotonic() # Record the start time
attr = getattr(self.terminals[terminal], name)
result = attr(*args, **kwargs)
end_time = time.monotonic() # Record the end time
elapsed_time = end_time - start_time
self.logger.debug(f"Execution time for result: [ {result} ] - elapsed_time: {elapsed_time} seconds")
else:
return attr
result = attr
return result
return call_pexpect
+15 -2
View File
@@ -1,16 +1,29 @@
from oeqa.runtime.case import OERuntimeTestCase
from oeqa.core.decorator.data import skipIfNotInDataVar
from oeqa.core.decorator.depends import OETestDepends
from time import sleep
class FvpDevicesTest(OERuntimeTestCase):
def run_cmd(self, cmd, check=True):
def run_cmd(self, cmd, check=True, retry=3):
"""
A wrapper around self.target.run, which:
* Fails the test on command failure by default
* Allows the "run" behavior to be overridden in sub-classes
* Has a retry mechanism when SSH returns 255
"""
(status, output) = self.target.run(cmd)
status = 255
# The loop is retrying the self.target.run() which uses SSH only when
# the SSH return code is 255, which might be an issue with
# "Connection refused" because the port isn't open yet
while status == 255 and retry > 0:
(status, output) = self.target.run(cmd)
retry -= 1
# In case the status is 255, delay the next retry to give time to
# the system to settle
if status == 255:
sleep(30)
if status and check:
self.fail("Command '%s' returned non-zero exit "
"status %d:\n%s" % (cmd, status, output))