mirror of
https://git.yoctoproject.org/meta-arm
synced 2026-07-18 04:27:08 +00:00
Compare commits
23 Commits
testing/gcs
..
5.0.2
| Author | SHA1 | Date | |
|---|---|---|---|
| 8e0f8af90f | |||
| f5f8dfb5a8 | |||
| f3640941c6 | |||
| b6e214752a | |||
| 3cadb81ffa | |||
| a8fe9d22ea | |||
| c22b4f89f7 | |||
| 309d93f9e5 | |||
| a6233bf5fd | |||
| 415215c074 | |||
| a7f27d1641 | |||
| acbba48ee5 | |||
| 7088279c0a | |||
| d67a9b6070 | |||
| 60e31ef2c4 | |||
| 0ce566fb86 | |||
| 218c3bbfea | |||
| 62a4a0a71a | |||
| ba9451a818 | |||
| 950a4afce4 | |||
| ea21deb5e9 | |||
| 1947c00029 | |||
| 313ad2a0e6 |
@@ -28,7 +28,6 @@ stages:
|
||||
|
||||
# Common job fragment to get a worker ready
|
||||
.setup:
|
||||
when: manual
|
||||
tags:
|
||||
- $DEFAULT_TAG
|
||||
stage: build
|
||||
@@ -90,7 +89,6 @@ stages:
|
||||
#
|
||||
update-repos:
|
||||
extends: .setup
|
||||
when: on_success
|
||||
stage: prep
|
||||
allow_failure:
|
||||
exit_codes: 128
|
||||
@@ -355,9 +353,3 @@ sgi575:
|
||||
|
||||
toolchains:
|
||||
extends: .build
|
||||
|
||||
gcs:
|
||||
when: on_success
|
||||
extends: .setup
|
||||
script:
|
||||
- kas build meta-arm-gcs/gcs-test.yml
|
||||
|
||||
+1
-1
@@ -17,7 +17,7 @@ repos:
|
||||
meta-arm-toolchain:
|
||||
|
||||
poky:
|
||||
url: https://git.yoctoproject.org/git/poky
|
||||
url: https://git.yoctoproject.org/poky
|
||||
layers:
|
||||
meta:
|
||||
meta-poky:
|
||||
|
||||
+2
-2
@@ -20,9 +20,9 @@ def repo_shortname(url):
|
||||
.replace('*', '.'))
|
||||
|
||||
repositories = (
|
||||
"https://git.yoctoproject.org/git/poky",
|
||||
"https://git.yoctoproject.org/poky",
|
||||
"https://git.openembedded.org/meta-openembedded",
|
||||
"https://git.yoctoproject.org/git/meta-virtualization",
|
||||
"https://git.yoctoproject.org/meta-virtualization",
|
||||
"https://github.com/kraj/meta-clang",
|
||||
)
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ header:
|
||||
version: 13
|
||||
includes:
|
||||
- kas/arm-systemready-firmware.yml
|
||||
- kas/arm-systemready-linux-distros-unattended-installation.yml
|
||||
|
||||
target:
|
||||
- arm-systemready-linux-distros-opensuse
|
||||
|
||||
@@ -0,0 +1,6 @@
|
||||
header:
|
||||
version: 14
|
||||
|
||||
local_conf_header:
|
||||
extsys: |
|
||||
MACHINE_FEATURES += "corstone1000-extsys"
|
||||
@@ -38,6 +38,16 @@ Platform Support
|
||||
- This software release is tested on Corstone-1000 Fast Model platform (FVP) version 11.23_25
|
||||
https://developer.arm.com/tools-and-software/open-source-software/arm-platforms-software/arm-ecosystem-fvps
|
||||
|
||||
SystemReady IR v2.0 Certification Milestone
|
||||
-------------------------------------------
|
||||
|
||||
As of this release, Corstone-1000 has achieved `SystemReady IR v2.0 certification <https://www.arm.com/architecture/system-architectures/systemready-certification-program/ve>`__.
|
||||
This milestone confirms compliance with the SystemReady IR requirements, ensuring broader compatibility and reliability for deployment.
|
||||
|
||||
Applied patch `313ad2a0e600 <https://git.yoctoproject.org/meta-arm/commit/?h=scarthgap&id=313ad2a0e600655d9bfbe53646e356372ff02644>`__ to address compatibility requirements for SystemReady IR v2.0.
|
||||
|
||||
This update is included in tag `CORSTONE1000-2024.06-systemready-ir-v2.0 <https://git.yoctoproject.org/meta-arm/tag/?h=CORSTONE1000-2024.06-systemready-ir-v2.0>`__ and builds on the `CORSTONE1000-2024.06` release.
|
||||
|
||||
***********************
|
||||
Release notes - 2023.11
|
||||
***********************
|
||||
|
||||
@@ -180,6 +180,12 @@ then run:
|
||||
|
||||
kas build meta-arm/kas/corstone1000-fvp.yml:meta-arm/ci/debug.yml
|
||||
|
||||
By default, the external system is disabled. To build the Corstone-1000 image with external system enabled, run:
|
||||
|
||||
::
|
||||
|
||||
kas build meta-arm/kas/corstone1000-<fvp,mps3>.yml:meta-arm/ci/debug.yml:meta-arm/kas/corstone1000-extsys.yml
|
||||
|
||||
The initial clean build will be lengthy, given that all host utilities are to
|
||||
be built as well as the target images. This includes host executables (python,
|
||||
cmake, etc.) and the required toolchain(s).
|
||||
@@ -1444,6 +1450,7 @@ The above commands will delete the Platform key (PK) and allow the normal system
|
||||
|
||||
Testing the External System
|
||||
---------------------------
|
||||
Before testing the external system, please make sure to build the Corstone-1000 image with external system enabled as mentioned in section `Building the software stack`_.
|
||||
|
||||
During Linux boot the remoteproc subsystem automatically starts
|
||||
the external system.
|
||||
|
||||
+88
@@ -0,0 +1,88 @@
|
||||
From 4d3ebb03b89b122af490824ca73287954a35bd07 Mon Sep 17 00:00:00 2001
|
||||
From: Jamie Fox <jamie.fox@arm.com>
|
||||
Date: Thu, 22 Aug 2024 16:54:45 +0100
|
||||
Subject: [PATCH] Platform: corstone1000: Fix isolation L2 memory protection
|
||||
|
||||
The whole of the SRAM was configured unprivileged on this platform, so
|
||||
the memory protection required for isolation level 2 was not present.
|
||||
|
||||
This patch changes the S_DATA_START to S_DATA_LIMIT MPU region to be
|
||||
configured for privileged access only. It also reorders the MPU regions
|
||||
so that the App RoT sub-region overlapping S_DATA has a higher region
|
||||
number and so takes priority in the operation of the Armv6-M MPU.
|
||||
|
||||
Signed-off-by: Jamie Fox <jamie.fox@arm.com>
|
||||
Upstream-Status: Submitted [https://review.trustedfirmware.org/c/TF-M/trusted-firmware-m/+/30951]
|
||||
---
|
||||
.../arm/corstone1000/tfm_hal_isolation.c | 43 +++++++++----------
|
||||
1 file changed, 21 insertions(+), 22 deletions(-)
|
||||
|
||||
diff --git a/platform/ext/target/arm/corstone1000/tfm_hal_isolation.c b/platform/ext/target/arm/corstone1000/tfm_hal_isolation.c
|
||||
index 39b19c535..498f14ed2 100644
|
||||
--- a/platform/ext/target/arm/corstone1000/tfm_hal_isolation.c
|
||||
+++ b/platform/ext/target/arm/corstone1000/tfm_hal_isolation.c
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
- * Copyright (c) 2020-2023, Arm Limited. All rights reserved.
|
||||
+ * Copyright (c) 2020-2024, Arm Limited. All rights reserved.
|
||||
* Copyright (c) 2022 Cypress Semiconductor Corporation (an Infineon
|
||||
* company) or an affiliate of Cypress Semiconductor Corporation. All rights
|
||||
* reserved.
|
||||
@@ -99,6 +99,26 @@ enum tfm_hal_status_t tfm_hal_set_up_static_boundaries(
|
||||
return ret;
|
||||
}
|
||||
|
||||
+ /* Set the RAM attributes. It is needed because the first region overlaps the whole
|
||||
+ * SRAM and it has to be overridden.
|
||||
+ * The RAM_MPU_REGION_BLOCK_1_SIZE and RAM_MPU_REGION_BLOCK_2_SIZE are calculated manually
|
||||
+ * and added to the platform_region_defs compile definitions.
|
||||
+ */
|
||||
+ base = S_DATA_START;
|
||||
+ limit = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE;
|
||||
+ ret = configure_mpu(rnr++, base, limit,
|
||||
+ XN_EXEC_NOT_OK, AP_RW_PRIV_ONLY);
|
||||
+ if (ret != TFM_HAL_SUCCESS) {
|
||||
+ return ret;
|
||||
+ }
|
||||
+
|
||||
+ base = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE;
|
||||
+ limit = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE + RAM_MPU_REGION_BLOCK_2_SIZE;
|
||||
+ ret = configure_mpu(rnr++, base, limit,
|
||||
+ XN_EXEC_NOT_OK, AP_RW_PRIV_ONLY);
|
||||
+ if (ret != TFM_HAL_SUCCESS) {
|
||||
+ return ret;
|
||||
+ }
|
||||
|
||||
/* RW, ZI and stack as one region */
|
||||
base = (uint32_t)®ION_NAME(Image$$, TFM_APP_RW_STACK_START, $$Base);
|
||||
@@ -133,27 +153,6 @@ enum tfm_hal_status_t tfm_hal_set_up_static_boundaries(
|
||||
|
||||
#endif
|
||||
|
||||
- /* Set the RAM attributes. It is needed because the first region overlaps the whole
|
||||
- * SRAM and it has to be overridden.
|
||||
- * The RAM_MPU_REGION_BLOCK_1_SIZE and RAM_MPU_REGION_BLOCK_2_SIZE are calculated manually
|
||||
- * and added to the platform_region_defs compile definitions.
|
||||
- */
|
||||
- base = S_DATA_START;
|
||||
- limit = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE;
|
||||
- ret = configure_mpu(rnr++, base, limit,
|
||||
- XN_EXEC_NOT_OK, AP_RW_PRIV_UNPRIV);
|
||||
- if (ret != TFM_HAL_SUCCESS) {
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
- base = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE;
|
||||
- limit = S_DATA_START + RAM_MPU_REGION_BLOCK_1_SIZE + RAM_MPU_REGION_BLOCK_2_SIZE;
|
||||
- ret = configure_mpu(rnr++, base, limit,
|
||||
- XN_EXEC_NOT_OK, AP_RW_PRIV_UNPRIV);
|
||||
- if (ret != TFM_HAL_SUCCESS) {
|
||||
- return ret;
|
||||
- }
|
||||
-
|
||||
arm_mpu_enable();
|
||||
|
||||
#endif /* CONFIG_TFM_ENABLE_MEMORY_PROTECT */
|
||||
--
|
||||
2.25.1
|
||||
|
||||
@@ -29,6 +29,7 @@ SRC_URI:append:corstone1000 = " \
|
||||
file://0010-CC312-alignment-of-cc312-differences-between-fvp-and.patch \
|
||||
file://0011-Platform-corstone1000-Increase-buffers-for-EFI-vars.patch \
|
||||
file://0012-corstone1000-Remove-reset-after-capsule-update.patch \
|
||||
file://0013-Platform-corstone1000-Fix-isolation-L2-memory-protection.patch \
|
||||
"
|
||||
|
||||
# TF-M ships patches for external dependencies that needs to be applied
|
||||
|
||||
@@ -64,6 +64,8 @@ SRC_URI:append = " \
|
||||
file://0046-Corstone1000-Change-MMCOMM-buffer-location.patch \
|
||||
file://0047-corstone1000-dts-add-external-system-node.patch \
|
||||
file://0048-corstone1000-Enable-UEFI-Secure-boot.patch \
|
||||
${@bb.utils.contains('MACHINE_FEATURES', 'corstone1000-extsys', \
|
||||
'', 'file://0049-corstone1000-purge-remoteproc-dts-node.patch' , d)} \
|
||||
"
|
||||
|
||||
do_configure:append() {
|
||||
|
||||
+34
@@ -0,0 +1,34 @@
|
||||
From 4e0ab7af882fcf498fd8beb4024ea024e6464cef Mon Sep 17 00:00:00 2001
|
||||
From: Harsimran Singh Tungal <harsimransingh.tungal@arm.com>
|
||||
Date: Wed, 14 Aug 2024 14:33:50 +0000
|
||||
Subject: [PATCH] corstone1000: purge remoteproc DTS node
|
||||
|
||||
Purge remoteproc DTS node
|
||||
This is done to remove the remote proc node from the DTS passed
|
||||
to Linux from U-Boot because the device tree binding for remoteproc
|
||||
has not been upstreamed yet. Existence of remoteproc DTS node in Linux
|
||||
is causing dt-schema test for SystemReady-IR v2.0 certification to fail.
|
||||
|
||||
Upstream-Status: Pending
|
||||
Signed-off-by: Harsimran Singh Tungal <harsimransingh.tungal@arm.com>
|
||||
---
|
||||
board/armltd/corstone1000/corstone1000.c | 3 +--
|
||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||
|
||||
diff --git a/board/armltd/corstone1000/corstone1000.c b/board/armltd/corstone1000/corstone1000.c
|
||||
index ef74dc9032..d474fce1b2 100644
|
||||
--- a/board/armltd/corstone1000/corstone1000.c
|
||||
+++ b/board/armltd/corstone1000/corstone1000.c
|
||||
@@ -30,8 +30,7 @@ DT_NON_COMPLIANT_PURGE_LIST(foo) = {
|
||||
{ .node_path = "/soc/mhu@1b010000" },
|
||||
{ .node_path = "/soc/mhu@1b020000" },
|
||||
{ .node_path = "/soc/mhu@1b030000" },
|
||||
- { .node_path = "/soc/client" },
|
||||
- { .node_path = "/soc/extsys@1A010310" },
|
||||
+ { .node_path = "/soc/remoteproc@1a010310" },
|
||||
};
|
||||
|
||||
#define CORSTONE1000_KERNEL_PARTS 2
|
||||
--
|
||||
2.34.1
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
CONFIG_MTD_NAND_FSL_IFC=n
|
||||
@@ -36,13 +36,21 @@ SRC_URI:append:corstone1000 = " ${@bb.utils.contains('MACHINE_FEATURES', \
|
||||
'file://corstone1000_kernel_debug.cfg', \
|
||||
'', \
|
||||
d)}"
|
||||
|
||||
SRC_URI:append:corstone1000 = " \
|
||||
file://extsys.cfg \
|
||||
file://0001-remoteproc-Add-Arm-remoteproc-driver.patch \
|
||||
file://0002-arm64-dts-Add-corstone1000-external-system-device-no.patch \
|
||||
file://0003-dt-bindings-remoteproc-Add-Arm-remoteproc.patch \
|
||||
"
|
||||
${@bb.utils.contains( \
|
||||
'MACHINE_FEATURES', \
|
||||
'corstone1000-extsys', \
|
||||
' \
|
||||
file://extsys.cfg \
|
||||
file://0001-remoteproc-Add-Arm-remoteproc-driver.patch \
|
||||
file://0002-arm64-dts-Add-corstone1000-external-system-device-no.patch \
|
||||
file://0003-dt-bindings-remoteproc-Add-Arm-remoteproc.patch \
|
||||
', \
|
||||
'', \
|
||||
d \
|
||||
) \
|
||||
} \
|
||||
"
|
||||
|
||||
# Default kernel features not needed for corstone1000
|
||||
# otherwise the extra kernel modules will increase the rootfs size
|
||||
@@ -69,6 +77,9 @@ SRC_URI:append:fvp-base = " \
|
||||
#
|
||||
COMPATIBLE_MACHINE:juno = "juno"
|
||||
FILESEXTRAPATHS:prepend:juno := "${ARMBSPFILESPATHS}"
|
||||
SRC_URI:append:juno = " \
|
||||
file://no-fsl-ifc-nand.cfg \
|
||||
"
|
||||
|
||||
#
|
||||
# Musca B1/S2 can't run Linux
|
||||
@@ -95,6 +106,7 @@ SRC_URI:append:n1sdp = " \
|
||||
file://enable-realtek-R8169.cfg \
|
||||
file://enable-usb_conn_gpio.cfg \
|
||||
file://usb_xhci_pci_renesas.cfg \
|
||||
file://no-fsl-ifc-nand.cfg \
|
||||
"
|
||||
# Since we use the intree defconfig and the preempt-rt turns off some configs
|
||||
# do_kernel_configcheck will display warnings. So, lets disable it.
|
||||
|
||||
@@ -1,46 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Source function library
|
||||
. /etc/init.d/functions
|
||||
|
||||
NAME=tee-supplicant
|
||||
PATH=/sbin:/bin:/usr/sbin:/usr/bin
|
||||
DESC="OP-TEE Supplicant"
|
||||
|
||||
DAEMON=@sbindir@/$NAME
|
||||
|
||||
test -f $DAEMON || exit 0
|
||||
|
||||
test -f @sysconfdir@/default/$NAME && . @sysconfdir@/default/$NAME
|
||||
test -f @sysconfdir@/default/rcS && . @sysconfdir@/default/rcS
|
||||
|
||||
SSD_OPTIONS="--oknodo --quiet --exec $DAEMON -- -d $OPTARGS"
|
||||
|
||||
set -e
|
||||
|
||||
case $1 in
|
||||
start)
|
||||
echo -n "Starting $DESC: "
|
||||
start-stop-daemon --start $SSD_OPTIONS
|
||||
echo "${DAEMON##*/}."
|
||||
;;
|
||||
stop)
|
||||
echo -n "Stopping $DESC: "
|
||||
start-stop-daemon --stop $SSD_OPTIONS
|
||||
echo "${DAEMON##*/}."
|
||||
;;
|
||||
restart|force-reload)
|
||||
$0 stop
|
||||
sleep 1
|
||||
$0 start
|
||||
;;
|
||||
status)
|
||||
status ${DAEMON} || exit $?
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start|stop|restart|force-reload|status}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
@@ -1,10 +0,0 @@
|
||||
[Unit]
|
||||
Description=TEE Supplicant on %i
|
||||
|
||||
[Service]
|
||||
User=root
|
||||
EnvironmentFile=-@sysconfdir@/default/tee-supplicant
|
||||
ExecStart=@sbindir@/tee-supplicant $OPTARGS
|
||||
|
||||
[Install]
|
||||
WantedBy=basic.target
|
||||
@@ -1,3 +0,0 @@
|
||||
build
|
||||
meta-arm
|
||||
poky
|
||||
@@ -1,17 +0,0 @@
|
||||
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.
|
||||
@@ -1,36 +0,0 @@
|
||||
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
|
||||
@@ -1,15 +0,0 @@
|
||||
# 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
|
||||
@@ -1,8 +0,0 @@
|
||||
header:
|
||||
version: 14
|
||||
includes:
|
||||
- meta-arm-gcs/gcs.yml
|
||||
|
||||
local_conf_header:
|
||||
autotestimage: |
|
||||
TESTIMAGE_AUTO = "1"
|
||||
@@ -1,62 +0,0 @@
|
||||
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
|
||||
@@ -1,83 +0,0 @@
|
||||
#
|
||||
# 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)
|
||||
@@ -1 +0,0 @@
|
||||
EXTRA_OEMAKE:append:fvp-base = " CTX_INCLUDE_AARCH32_REGS=0"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,3 +0,0 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
|
||||
|
||||
SRC_URI += "file://gcs.patch"
|
||||
@@ -1,3 +0,0 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
|
||||
|
||||
SRC_URI += "file://gcs.patch"
|
||||
@@ -1,973 +0,0 @@
|
||||
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
@@ -1,3 +0,0 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
|
||||
|
||||
SRC_URI += "file://gcs.patch"
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,40 +0,0 @@
|
||||
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
|
||||
}
|
||||
@@ -1,3 +0,0 @@
|
||||
FILESEXTRAPATHS:prepend := "${THISDIR}/files:"
|
||||
|
||||
SRC_URI += "file://gcs.patch"
|
||||
@@ -1,14 +0,0 @@
|
||||
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"
|
||||
@@ -1 +0,0 @@
|
||||
CONFIG_UPROBE_EVENTS=n
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,51 +0,0 @@
|
||||
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
|
||||
@@ -1,13 +0,0 @@
|
||||
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"
|
||||
@@ -1,22 +0,0 @@
|
||||
/* 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
|
||||
@@ -1,9 +0,0 @@
|
||||
// Copyright (C) 2024 Arm Ltd
|
||||
// SPDX-License-Identifier: MIT
|
||||
|
||||
extern int gcs_enabled(void);
|
||||
|
||||
int main(void)
|
||||
{
|
||||
return gcs_enabled() ? 0 : 1;
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
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,42 @@
|
||||
from oeqa.runtime.case import OERuntimeTestCase
|
||||
|
||||
class SystemReadyOpenSUSEUnattendedTest(OERuntimeTestCase):
|
||||
def setUp(self):
|
||||
super().setUp()
|
||||
self.console = self.target.DEFAULT_CONSOLE
|
||||
|
||||
def test_opensuse_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 `Installation\'',
|
||||
timeout=(2 * 60))
|
||||
bb.plain('Installation status: Loading the kernel, initrd and basic drivers...')
|
||||
|
||||
self.target.expect(self.console,
|
||||
'Starting hardware detection...',
|
||||
timeout=(40 * 60))
|
||||
bb.plain('Installation status: Starting hardware detection...')
|
||||
|
||||
self.target.expect(self.console,
|
||||
'Loading Installation System',
|
||||
timeout=(60 * 60))
|
||||
bb.plain('Installation status: Loading Installation System...')
|
||||
|
||||
self.target.expect(self.console,
|
||||
'Starting Installer',
|
||||
timeout=(40 * 60))
|
||||
bb.plain('Installation status: Performing Installation...')
|
||||
|
||||
self.target.expect(self.console,
|
||||
'Finishing Configuration',
|
||||
timeout=(15 * 60 * 60))
|
||||
bb.plain('Installation status: Finishing Configuration...')
|
||||
|
||||
# Waiting till the installation is finished.
|
||||
self.target.expect(self.console, r'.*login: ', timeout=(6 * 60 * 60))
|
||||
bb.plain('Installation status: openSUSE installation finished successfully.')
|
||||
@@ -49,9 +49,9 @@ PV = "2.0.0"
|
||||
PV_DATE = "23.03"
|
||||
FULL_PV = "v${PV_DATE}_${PV}"
|
||||
ARM_SYSTEMREADY_IR_ACS_BRANCH ?= "main"
|
||||
IMAGE_FILENAME = "ir-acs-live-image-generic-arm64.wic"
|
||||
IMAGE_FILENAME = "ir-acs-live-image-generic-arm64-${PV}.wic"
|
||||
SRC_URI = " \
|
||||
https://github.com/ARM-software/arm-systemready/raw/${ARM_SYSTEMREADY_IR_ACS_BRANCH}/IR/prebuilt_images/${FULL_PV}/${IMAGE_FILENAME}.xz;name=acs-img \
|
||||
https://github.com/ARM-software/arm-systemready/raw/${ARM_SYSTEMREADY_IR_ACS_BRANCH}/IR/prebuilt_images/${FULL_PV}/ir-acs-live-image-generic-arm64.wic.xz;name=acs-img;downloadfilename=${IMAGE_FILENAME}.xz \
|
||||
git://git.gitlab.arm.com/systemready/systemready-ir-template.git;protocol=https;nobranch=1;destsuffix=systemready-ir-template;name=sr-ir-template \
|
||||
"
|
||||
SRC_URI[acs-img.sha256sum] = "ea52f84dab44bde97de3e2d2224d883acaae35724dd8e2bdfb125de49040f9b3"
|
||||
|
||||
+15
@@ -72,3 +72,18 @@ ISO_TYPE = "DVD"
|
||||
BUILD_NO = "491.1"
|
||||
SRC_URI = "https://download.opensuse.org/distribution/leap/${PV}/iso/openSUSE-Leap-${PV}-${ISO_TYPE}-aarch64-Build${BUILD_NO}-Media.iso;unpack=0;downloadfilename=${ISO_IMAGE_NAME}.iso"
|
||||
SRC_URI[sha256sum] = "456cc4f99b044429d8a89bd302c06e9e382d6ac4dc590139a7096ebb54f5357b"
|
||||
|
||||
TEST_SUITES = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "arm_systemready_opensuse_unattended", "", d)}"
|
||||
|
||||
ISO_LABEL = "${@oe.utils.vartrue("DISTRO_UNATTENDED_INST_TESTS", "OEMDRV", "", 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", "boot/aarch64/efi", "", d)}"
|
||||
|
||||
modifyiso() {
|
||||
UNATTENDED_CONF_DIR="${THISDIR}/unattended-boot-conf/openSUSE"
|
||||
|
||||
#create installation configuration files, remove grub timeout, setup network
|
||||
cp "${UNATTENDED_CONF_DIR}/autoinst.xml" ${EXTRACTED_ISO_TEMP_DIR}
|
||||
sed -i 's/timeout=60/timeout=0/g' "${EXTRACTED_ISO_TEMP_DIR}/EFI/BOOT/grub.cfg"
|
||||
}
|
||||
+935
@@ -0,0 +1,935 @@
|
||||
<?xml version="1.0"?>
|
||||
<!DOCTYPE profile>
|
||||
<profile xmlns="http://www.suse.com/1.0/yast2ns" xmlns:config="http://www.suse.com/1.0/configns">
|
||||
<bootloader t="map">
|
||||
<global t="map">
|
||||
<append>splash=silent preempt=full mitigations=auto quiet security=apparmor</append>
|
||||
<cpu_mitigations>auto</cpu_mitigations>
|
||||
<gfxmode>auto</gfxmode>
|
||||
<hiddenmenu>false</hiddenmenu>
|
||||
<os_prober>true</os_prober>
|
||||
<secure_boot>true</secure_boot>
|
||||
<terminal>gfxterm</terminal>
|
||||
<timeout t="integer">8</timeout>
|
||||
<update_nvram>true</update_nvram>
|
||||
</global>
|
||||
<loader_type>grub2-efi</loader_type>
|
||||
</bootloader>
|
||||
<firewall t="map">
|
||||
<default_zone>public</default_zone>
|
||||
<enable_firewall t="boolean">true</enable_firewall>
|
||||
<log_denied_packets>off</log_denied_packets>
|
||||
<start_firewall t="boolean">true</start_firewall>
|
||||
<zones t="list">
|
||||
<zone t="map">
|
||||
<description>Unsolicited incoming network packets are rejected. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>block</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list"/>
|
||||
<short>Block</short>
|
||||
<target>%%REJECT%%</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For computers in your demilitarized zone that are publicly-accessible with limited access to your internal network. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>dmz</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>DMZ</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>All network connections are accepted.</description>
|
||||
<interfaces t="list">
|
||||
<interface>docker0</interface>
|
||||
</interfaces>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>docker</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list"/>
|
||||
<short>docker</short>
|
||||
<target>ACCEPT</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>Unsolicited incoming network packets are dropped. Incoming packets that are related to outgoing network connections are accepted. Outgoing network connections are allowed.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>drop</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list"/>
|
||||
<short>Drop</short>
|
||||
<target>DROP</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For use on external networks. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">true</masquerade>
|
||||
<name>external</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>External</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For use in home areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>home</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>dhcpv6-client</service>
|
||||
<service>mdns</service>
|
||||
<service>samba-client</service>
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>Home</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For use on internal networks. You mostly trust the other computers on the networks to not harm your computer. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>internal</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>dhcpv6-client</service>
|
||||
<service>mdns</service>
|
||||
<service>samba-client</service>
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>Internal</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list">
|
||||
<interface>eth0</interface>
|
||||
</interfaces>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>public</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>dhcpv6-client</service>
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>Public</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>All network connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>trusted</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list"/>
|
||||
<short>Trusted</short>
|
||||
<target>ACCEPT</target>
|
||||
</zone>
|
||||
<zone t="map">
|
||||
<description>For use in work areas. You mostly trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
|
||||
<interfaces t="list"/>
|
||||
<masquerade t="boolean">false</masquerade>
|
||||
<name>work</name>
|
||||
<ports t="list"/>
|
||||
<protocols t="list"/>
|
||||
<services t="list">
|
||||
<service>dhcpv6-client</service>
|
||||
<service>ssh</service>
|
||||
</services>
|
||||
<short>Work</short>
|
||||
<target>default</target>
|
||||
</zone>
|
||||
</zones>
|
||||
</firewall>
|
||||
<general t="map">
|
||||
<mode t="map">
|
||||
<confirm t="boolean">false</confirm>
|
||||
</mode>
|
||||
</general>
|
||||
<groups t="list">
|
||||
<group t="map">
|
||||
<gid>100</gid>
|
||||
<groupname>users</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>499</gid>
|
||||
<groupname>messagebus</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>1</gid>
|
||||
<groupname>bin</groupname>
|
||||
<userlist>daemon</userlist>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>488</gid>
|
||||
<groupname>input</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>495</gid>
|
||||
<groupname>kmem</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>493</gid>
|
||||
<groupname>utmp</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>62</gid>
|
||||
<groupname>man</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>477</gid>
|
||||
<groupname>polkitd</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>479</gid>
|
||||
<groupname>systemd-timesync</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>2</gid>
|
||||
<groupname>daemon</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>480</gid>
|
||||
<groupname>systemd-network</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>71</gid>
|
||||
<groupname>ntadmin</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>490</gid>
|
||||
<groupname>dialout</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>59</gid>
|
||||
<groupname>maildrop</groupname>
|
||||
<userlist>postfix</userlist>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>478</gid>
|
||||
<groupname>nscd</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>51</gid>
|
||||
<groupname>postfix</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>485</gid>
|
||||
<groupname>tape</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>487</gid>
|
||||
<groupname>render</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>476</gid>
|
||||
<groupname>sshd</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>491</gid>
|
||||
<groupname>cdrom</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>486</gid>
|
||||
<groupname>sgx</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>0</gid>
|
||||
<groupname>root</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>489</gid>
|
||||
<groupname>disk</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>15</gid>
|
||||
<groupname>shadow</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>484</gid>
|
||||
<groupname>video</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>496</gid>
|
||||
<groupname>wheel</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>483</gid>
|
||||
<groupname>audit</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>498</gid>
|
||||
<groupname>mail</groupname>
|
||||
<userlist>postfix</userlist>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>5</gid>
|
||||
<groupname>tty</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>65533</gid>
|
||||
<groupname>nogroup</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>65534</gid>
|
||||
<groupname>nobody</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>497</gid>
|
||||
<groupname>lp</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>482</gid>
|
||||
<groupname>chrony</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>492</gid>
|
||||
<groupname>audio</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>494</gid>
|
||||
<groupname>lock</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>36</gid>
|
||||
<groupname>kvm</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>42</gid>
|
||||
<groupname>trusted</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
<group t="map">
|
||||
<gid>481</gid>
|
||||
<groupname>systemd-journal</groupname>
|
||||
<userlist/>
|
||||
</group>
|
||||
</groups>
|
||||
<host t="map">
|
||||
<hosts t="list">
|
||||
<hosts_entry t="map">
|
||||
<host_address>127.0.0.1</host_address>
|
||||
<names t="list">
|
||||
<name>localhost</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>::1</host_address>
|
||||
<names t="list">
|
||||
<name>localhost ipv6-localhost ipv6-loopback</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>fe00::0</host_address>
|
||||
<names t="list">
|
||||
<name>ipv6-localnet</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>ff00::0</host_address>
|
||||
<names t="list">
|
||||
<name>ipv6-mcastprefix</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>ff02::1</host_address>
|
||||
<names t="list">
|
||||
<name>ipv6-allnodes</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>ff02::2</host_address>
|
||||
<names t="list">
|
||||
<name>ipv6-allrouters</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
<hosts_entry t="map">
|
||||
<host_address>ff02::3</host_address>
|
||||
<names t="list">
|
||||
<name>ipv6-allhosts</name>
|
||||
</names>
|
||||
</hosts_entry>
|
||||
</hosts>
|
||||
</host>
|
||||
<language t="map">
|
||||
<language>en_GB</language>
|
||||
<languages>en_GB</languages>
|
||||
</language>
|
||||
<networking t="map">
|
||||
<dhcp_options t="map">
|
||||
<dhclient_client_id/>
|
||||
<dhclient_hostname_option>AUTO</dhclient_hostname_option>
|
||||
</dhcp_options>
|
||||
<dns t="map">
|
||||
<dhcp_hostname t="boolean">true</dhcp_hostname>
|
||||
<hostname>localhost</hostname>
|
||||
<resolv_conf_policy>auto</resolv_conf_policy>
|
||||
</dns>
|
||||
<interfaces t="list">
|
||||
<interface t="map">
|
||||
<bootproto>dhcp</bootproto>
|
||||
<name>eth0</name>
|
||||
<startmode>auto</startmode>
|
||||
<zone>public</zone>
|
||||
</interface>
|
||||
</interfaces>
|
||||
<ipv6 t="boolean">true</ipv6>
|
||||
<keep_install_network t="boolean">true</keep_install_network>
|
||||
<managed t="boolean">false</managed>
|
||||
<routing t="map">
|
||||
<ipv4_forward t="boolean">false</ipv4_forward>
|
||||
<ipv6_forward t="boolean">false</ipv6_forward>
|
||||
</routing>
|
||||
</networking>
|
||||
<ntp-client t="map">
|
||||
<ntp_policy>auto</ntp_policy>
|
||||
<ntp_servers t="list"/>
|
||||
<ntp_sync>systemd</ntp_sync>
|
||||
</ntp-client>
|
||||
<partitioning t="list">
|
||||
<drive t="map">
|
||||
<device>/dev/vda</device>
|
||||
<disklabel>gpt</disklabel>
|
||||
<enable_snapshots t="boolean">false</enable_snapshots>
|
||||
<partitions t="list">
|
||||
<partition t="map">
|
||||
<create t="boolean">true</create>
|
||||
<filesystem t="symbol">vfat</filesystem>
|
||||
<format t="boolean">true</format>
|
||||
<fstopt>utf8</fstopt>
|
||||
<mount>/boot/efi</mount>
|
||||
<mountby t="symbol">uuid</mountby>
|
||||
<partition_id t="integer">259</partition_id>
|
||||
<partition_nr t="integer">1</partition_nr>
|
||||
<resize t="boolean">false</resize>
|
||||
<size>134217728</size>
|
||||
</partition>
|
||||
<partition t="map">
|
||||
<create t="boolean">true</create>
|
||||
<create_subvolumes t="boolean">true</create_subvolumes>
|
||||
<filesystem t="symbol">btrfs</filesystem>
|
||||
<format t="boolean">true</format>
|
||||
<mount>/</mount>
|
||||
<mountby t="symbol">uuid</mountby>
|
||||
<partition_id t="integer">131</partition_id>
|
||||
<partition_nr t="integer">2</partition_nr>
|
||||
<quotas t="boolean">false</quotas>
|
||||
<resize t="boolean">false</resize>
|
||||
<size>6307167744</size>
|
||||
<subvolumes t="list">
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">false</copy_on_write>
|
||||
<path>var</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>usr/local</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>tmp</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>srv</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>root</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>opt</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>home</path>
|
||||
</subvolume>
|
||||
<subvolume t="map">
|
||||
<copy_on_write t="boolean">true</copy_on_write>
|
||||
<path>boot/grub2/arm64-efi</path>
|
||||
</subvolume>
|
||||
</subvolumes>
|
||||
<subvolumes_prefix>@</subvolumes_prefix>
|
||||
</partition>
|
||||
</partitions>
|
||||
<type t="symbol">CT_DISK</type>
|
||||
<use>all</use>
|
||||
</drive>
|
||||
</partitioning>
|
||||
<proxy t="map">
|
||||
<enabled t="boolean">false</enabled>
|
||||
</proxy>
|
||||
<services-manager t="map">
|
||||
<default_target>multi-user</default_target>
|
||||
<services t="map">
|
||||
<enable t="list">
|
||||
<service>YaST2-Firstboot</service>
|
||||
<service>YaST2-Second-Stage</service>
|
||||
<service>apparmor</service>
|
||||
<service>auditd</service>
|
||||
<service>klog</service>
|
||||
<service>chronyd</service>
|
||||
<service>cron</service>
|
||||
<service>cups</service>
|
||||
<service>firewalld</service>
|
||||
<service>wickedd-auto4</service>
|
||||
<service>wickedd-dhcp4</service>
|
||||
<service>wickedd-dhcp6</service>
|
||||
<service>wickedd-nanny</service>
|
||||
<service>irqbalance</service>
|
||||
<service>issue-generator</service>
|
||||
<service>kbdsettings</service>
|
||||
<service>wicked</service>
|
||||
<service>nscd</service>
|
||||
<service>postfix</service>
|
||||
<service>purge-kernels</service>
|
||||
<service>rsyslog</service>
|
||||
<service>smartd</service>
|
||||
<service>sshd</service>
|
||||
<service>systemd-pstore</service>
|
||||
<service>systemd-remount-fs</service>
|
||||
</enable>
|
||||
</services>
|
||||
</services-manager>
|
||||
<software t="map">
|
||||
<install_recommended t="boolean">true</install_recommended>
|
||||
<instsource/>
|
||||
<packages t="list">
|
||||
<package>wicked</package>
|
||||
<package>shim</package>
|
||||
<package>os-prober</package>
|
||||
<package>openssh</package>
|
||||
<package>openSUSE-release</package>
|
||||
<package>mokutil</package>
|
||||
<package>kexec-tools</package>
|
||||
<package>grub2-arm64-efi</package>
|
||||
<package>glibc</package>
|
||||
<package>firewalld</package>
|
||||
<package>e2fsprogs</package>
|
||||
<package>dosfstools</package>
|
||||
<package>chrony</package>
|
||||
<package>btrfsprogs</package>
|
||||
<package>autoyast2</package>
|
||||
</packages>
|
||||
<patterns t="list">
|
||||
<pattern>apparmor</pattern>
|
||||
<pattern>base</pattern>
|
||||
<pattern>documentation</pattern>
|
||||
<pattern>enhanced_base</pattern>
|
||||
<pattern>minimal_base</pattern>
|
||||
<pattern>sw_management</pattern>
|
||||
<pattern>yast2_basis</pattern>
|
||||
</patterns>
|
||||
<products t="list">
|
||||
<product>Leap</product>
|
||||
</products>
|
||||
</software>
|
||||
<ssh_import t="map">
|
||||
<copy_config t="boolean">false</copy_config>
|
||||
<import t="boolean">false</import>
|
||||
</ssh_import>
|
||||
<user_defaults t="map">
|
||||
<expire/>
|
||||
<group>100</group>
|
||||
<home>/home</home>
|
||||
<inactive>-1</inactive>
|
||||
<shell>/bin/bash</shell>
|
||||
<umask>022</umask>
|
||||
</user_defaults>
|
||||
<users t="list">
|
||||
<user t="map">
|
||||
<authorized_keys t="list"/>
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>user</fullname>
|
||||
<gid>100</gid>
|
||||
<home>/home/user</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max>99999</max>
|
||||
<min>0</min>
|
||||
<warn>7</warn>
|
||||
</password_settings>
|
||||
<shell>/bin/bash</shell>
|
||||
<uid>1000</uid>
|
||||
<user_password>$6$WV8CB/c6j0zhAi5S$4euhbt4alH7WNfaatS9IJgPiiKDJ48d5Ru1zCZCA0N9GiyOPuefN2PAUWlyYeTgqAInpyvPh1frdp4fFVjvEn0</user_password>
|
||||
<username>user</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>User for nscd</fullname>
|
||||
<gid>478</gid>
|
||||
<home>/run/nscd</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/sbin/nologin</shell>
|
||||
<uid>478</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>nscd</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>systemd Network Management</fullname>
|
||||
<gid>480</gid>
|
||||
<home>/</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>480</uid>
|
||||
<user_password>!*</user_password>
|
||||
<username>systemd-network</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Daemon</fullname>
|
||||
<gid>2</gid>
|
||||
<home>/sbin</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>2</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>daemon</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>systemd Time Synchronization</fullname>
|
||||
<gid>479</gid>
|
||||
<home>/</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>479</uid>
|
||||
<user_password>!*</user_password>
|
||||
<username>systemd-timesync</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>user for rpcbind</fullname>
|
||||
<gid>65534</gid>
|
||||
<home>/var/lib/empty</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/sbin/nologin</shell>
|
||||
<uid>475</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>rpc</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>SSH daemon</fullname>
|
||||
<gid>476</gid>
|
||||
<home>/var/lib/sshd</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>476</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>sshd</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Postfix Daemon</fullname>
|
||||
<gid>51</gid>
|
||||
<home>/var/spool/postfix</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>51</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>postfix</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>NFS statd daemon</fullname>
|
||||
<gid>65533</gid>
|
||||
<home>/var/lib/nfs</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/sbin/nologin</shell>
|
||||
<uid>474</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>statd</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>bin</fullname>
|
||||
<gid>1</gid>
|
||||
<home>/bin</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>1</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>bin</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<authorized_keys t="list"/>
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>root</fullname>
|
||||
<gid>0</gid>
|
||||
<home>/root</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/bin/bash</shell>
|
||||
<uid>0</uid>
|
||||
<user_password>$6$zAe5W7gw/kja9aKy$mM.BWtNyjalXrDNig4CUfN3bgfmehUIs8.zvBwWn1XroK104G.rY3lyup3OH8TujieUmgO4J74Df.LktV4A1K1</user_password>
|
||||
<username>root</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>User for D-Bus</fullname>
|
||||
<gid>499</gid>
|
||||
<home>/run/dbus</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/bin/false</shell>
|
||||
<uid>499</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>messagebus</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Manual pages viewer</fullname>
|
||||
<gid>62</gid>
|
||||
<home>/var/lib/empty</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>13</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>man</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Printing daemon</fullname>
|
||||
<gid>497</gid>
|
||||
<home>/var/spool/lpd</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>497</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>lp</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>User for polkitd</fullname>
|
||||
<gid>477</gid>
|
||||
<home>/var/lib/polkit</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>477</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>polkitd</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Chrony Daemon</fullname>
|
||||
<gid>482</gid>
|
||||
<home>/var/lib/chrony</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>496</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>chrony</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>nobody</fullname>
|
||||
<gid>65534</gid>
|
||||
<home>/var/lib/nobody</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/bin/bash</shell>
|
||||
<uid>65534</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>nobody</username>
|
||||
</user>
|
||||
<user t="map">
|
||||
<encrypted t="boolean">true</encrypted>
|
||||
<fullname>Mailer daemon</fullname>
|
||||
<gid>498</gid>
|
||||
<home>/var/spool/clientmqueue</home>
|
||||
<home_btrfs_subvolume t="boolean">false</home_btrfs_subvolume>
|
||||
<password_settings t="map">
|
||||
<expire/>
|
||||
<flag/>
|
||||
<inact/>
|
||||
<max/>
|
||||
<min/>
|
||||
<warn/>
|
||||
</password_settings>
|
||||
<shell>/usr/sbin/nologin</shell>
|
||||
<uid>498</uid>
|
||||
<user_password>!</user_password>
|
||||
<username>mail</username>
|
||||
</user>
|
||||
</users>
|
||||
</profile>
|
||||
@@ -15,6 +15,11 @@ EAT_TARGET_SYS:aarch64 ?= "${@ 'aarch64-none-linux-gnu' if os.path.exists('${EXT
|
||||
EAT_TARGET_SYS = "${TARGET_SYS}"
|
||||
TARGET_PREFIX = "${EAT_TARGET_SYS}-"
|
||||
|
||||
EXTERNAL_TOOLCHAIN_LIBDIR = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/usr/lib', '/lib', d)}"
|
||||
EXTERNAL_TOOLCHAIN_DYN_LINKER_PATH:arm ?= " -Wl,--dynamic-linker=${EXTERNAL_TOOLCHAIN_LIBDIR}/ld-linux-armhf.so.3"
|
||||
EXTERNAL_TOOLCHAIN_DYN_LINKER_PATH:aarch64 ?= " -Wl,--dynamic-linker=${EXTERNAL_TOOLCHAIN_LIBDIR}/ld-linux-aarch64.so.1"
|
||||
TARGET_LDFLAGS:append:class-target = "${EXTERNAL_TOOLCHAIN_DYN_LINKER_PATH}"
|
||||
|
||||
EAT_LIBDIR:arm = "lib"
|
||||
EAT_LIBDIR:aarch64 = "lib64"
|
||||
|
||||
|
||||
@@ -0,0 +1 @@
|
||||
PACKAGECONFIG:remove = "${@bb.utils.contains('TCMODE', 'external-arm', 'libmount-mountfd-support', '' , d)}"
|
||||
+74
-49
@@ -118,54 +118,80 @@ do_install() {
|
||||
else
|
||||
cp ${CP_ARGS} ${EXTERNAL_TOOLCHAIN}/${EAT_TARGET_SYS}/libc/lib/${linker_name} ${D}${base_libdir}/
|
||||
fi
|
||||
ln -sf ../../lib/librt.so.1 ${D}${libdir}/librt.so
|
||||
ln -sf ../../lib/libcrypt.so.1 ${D}${libdir}/libcrypt.so
|
||||
ln -sf ../../lib/libresolv.so.2 ${D}${libdir}/libresolv.so
|
||||
ln -sf ../../lib/libnss_hesiod.so.2 ${D}${libdir}/libnss_hesiod.so
|
||||
ln -sf ../../lib/libutil.so.1 ${D}${libdir}/libutil.so
|
||||
ln -sf ../../lib/libBrokenLocale.so.1 ${D}${libdir}/libBrokenLocale.so
|
||||
ln -sf ../../lib/libpthread.so.0 ${D}${libdir}/libpthread.so
|
||||
ln -sf ../../lib/libthread_db.so.1 ${D}${libdir}/libthread_db.so
|
||||
ln -sf ../../lib/libanl.so.1 ${D}${libdir}/libanl.so
|
||||
ln -sf ../../lib/libdl.so.2 ${D}${libdir}/libdl.so
|
||||
ln -sf ../../lib/libnss_db.so.2 ${D}${libdir}/libnss_db.so
|
||||
ln -sf ../../lib/libnss_dns.so.2 ${D}${libdir}/libnss_dns.so
|
||||
ln -sf ../../lib/libnss_files.so.2 ${D}${libdir}/libnss_files.so
|
||||
ln -sf ../../lib/libnss_compat.so.2 ${D}${libdir}/libnss_compat.so
|
||||
ln -sf ../../lib/libm.so.6 ${D}${libdir}/libm.so
|
||||
ln -sf ../../lib/libc_malloc_debug.so.0 ${D}${libdir}/libc_malloc_debug.so
|
||||
|
||||
# remove potential .so duplicates from base_libdir
|
||||
# for all symlinks created above in libdir
|
||||
rm -f ${D}${base_libdir}/librt.so
|
||||
rm -f ${D}${base_libdir}/libcrypt.so
|
||||
rm -f ${D}${base_libdir}/libresolv.so
|
||||
rm -f ${D}${base_libdir}/libnss_hesiod.so
|
||||
rm -f ${D}${base_libdir}/libutil.so
|
||||
rm -f ${D}${base_libdir}/libBrokenLocale.so
|
||||
rm -f ${D}${base_libdir}/libpthread.so
|
||||
rm -f ${D}${base_libdir}/libthread_db.so
|
||||
rm -f ${D}${base_libdir}/libanl.so
|
||||
rm -f ${D}${base_libdir}/libdl.so
|
||||
rm -f ${D}${base_libdir}/libnss_db.so
|
||||
rm -f ${D}${base_libdir}/libnss_dns.so
|
||||
rm -f ${D}${base_libdir}/libnss_files.so
|
||||
rm -f ${D}${base_libdir}/libnss_compat.so
|
||||
rm -f ${D}${base_libdir}/libm.so
|
||||
|
||||
# Move these completely to ${libdir} and delete duplicates in ${base_libdir}
|
||||
for lib in asan hwasan atomic gfortran gomp itm lsan sanitizer stdc++ tsan ubsan; do
|
||||
if [ -e ${D}${base_libdir}/lib${lib}.spec ] ; then
|
||||
mv ${D}${base_libdir}/lib${lib}.spec ${D}${libdir}
|
||||
if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'false', 'true', d)}; then
|
||||
ln -sf ../../lib/librt.so.1 ${D}${libdir}/librt.so
|
||||
ln -sf ../../lib/libcrypt.so.1 ${D}${libdir}/libcrypt.so
|
||||
ln -sf ../../lib/libresolv.so.2 ${D}${libdir}/libresolv.so
|
||||
ln -sf ../../lib/libnss_hesiod.so.2 ${D}${libdir}/libnss_hesiod.so
|
||||
ln -sf ../../lib/libutil.so.1 ${D}${libdir}/libutil.so
|
||||
ln -sf ../../lib/libBrokenLocale.so.1 ${D}${libdir}/libBrokenLocale.so
|
||||
ln -sf ../../lib/libpthread.so.0 ${D}${libdir}/libpthread.so
|
||||
ln -sf ../../lib/libthread_db.so.1 ${D}${libdir}/libthread_db.so
|
||||
ln -sf ../../lib/libanl.so.1 ${D}${libdir}/libanl.so
|
||||
ln -sf ../../lib/libdl.so.2 ${D}${libdir}/libdl.so
|
||||
ln -sf ../../lib/libnss_db.so.2 ${D}${libdir}/libnss_db.so
|
||||
ln -sf ../../lib/libnss_dns.so.2 ${D}${libdir}/libnss_dns.so
|
||||
ln -sf ../../lib/libnss_files.so.2 ${D}${libdir}/libnss_files.so
|
||||
ln -sf ../../lib/libnss_compat.so.2 ${D}${libdir}/libnss_compat.so
|
||||
ln -sf ../../lib/libm.so.6 ${D}${libdir}/libm.so
|
||||
ln -sf ../../lib/libc_malloc_debug.so.0 ${D}${libdir}/libc_malloc_debug.so
|
||||
if [ -f ${D}${base_libdir}/libmvec.so.1 ]; then
|
||||
ln -sf ../../lib/libmvec.so.1 ${D}${libdir}/libmvec.so
|
||||
fi
|
||||
if [ -e ${D}${base_libdir}/lib${lib}.a ] ; then
|
||||
mv ${D}${base_libdir}/lib${lib}.a ${D}${libdir}
|
||||
fi
|
||||
rm -f ${D}${base_libdir}/lib${lib}*
|
||||
done
|
||||
|
||||
# Clean up duplicate libs that are both in base_libdir and libdir
|
||||
rm -f ${D}${libdir}/libgcc*
|
||||
# remove potential .so duplicates from base_libdir
|
||||
# for all symlinks created above in libdir
|
||||
rm -f ${D}${base_libdir}/librt.so
|
||||
rm -f ${D}${base_libdir}/libcrypt.so
|
||||
rm -f ${D}${base_libdir}/libresolv.so
|
||||
rm -f ${D}${base_libdir}/libnss_hesiod.so
|
||||
rm -f ${D}${base_libdir}/libutil.so
|
||||
rm -f ${D}${base_libdir}/libBrokenLocale.so
|
||||
rm -f ${D}${base_libdir}/libpthread.so
|
||||
rm -f ${D}${base_libdir}/libthread_db.so
|
||||
rm -f ${D}${base_libdir}/libanl.so
|
||||
rm -f ${D}${base_libdir}/libdl.so
|
||||
rm -f ${D}${base_libdir}/libnss_db.so
|
||||
rm -f ${D}${base_libdir}/libnss_dns.so
|
||||
rm -f ${D}${base_libdir}/libnss_files.so
|
||||
rm -f ${D}${base_libdir}/libnss_compat.so
|
||||
rm -f ${D}${base_libdir}/libm.so
|
||||
rm -f ${D}${base_libdir}/libmvec.so
|
||||
|
||||
# Move these completely to ${libdir} and delete duplicates in ${base_libdir}
|
||||
for lib in asan hwasan atomic gfortran gomp itm lsan sanitizer stdc++ tsan ubsan; do
|
||||
if [ -e ${D}${base_libdir}/lib${lib}.spec ] ; then
|
||||
mv ${D}${base_libdir}/lib${lib}.spec ${D}${libdir}
|
||||
fi
|
||||
if [ -e ${D}${base_libdir}/lib${lib}.a ] ; then
|
||||
mv ${D}${base_libdir}/lib${lib}.a ${D}${libdir}
|
||||
fi
|
||||
rm -f ${D}${base_libdir}/lib${lib}*
|
||||
done
|
||||
|
||||
# Clean up duplicate libs that are both in base_libdir and libdir
|
||||
rm -f ${D}${libdir}/libgcc*
|
||||
else
|
||||
ln -sf libcrypt.so.1 ${D}${libdir}/libcrypt.so
|
||||
ln -sf libresolv.so.2 ${D}${libdir}/libresolv.so
|
||||
ln -sf libnss_hesiod.so.2 ${D}${libdir}/libnss_hesiod.so
|
||||
ln -sf libutil.so.1 ${D}${libdir}/libutil.so
|
||||
ln -sf libBrokenLocale.so.1 ${D}${libdir}/libBrokenLocale.so
|
||||
ln -sf libpthread.so.0 ${D}${libdir}/libpthread.so
|
||||
ln -sf libthread_db.so.1 ${D}${libdir}/libthread_db.so
|
||||
ln -sf libanl.so.1 ${D}${libdir}/libanl.so
|
||||
ln -sf libdl.so.2 ${D}${libdir}/libdl.so
|
||||
ln -sf libnss_db.so.2 ${D}${libdir}/libnss_db.so
|
||||
ln -sf libnss_dns.so.2 ${D}${libdir}/libnss_dns.so
|
||||
ln -sf libnss_files.so.2 ${D}${libdir}/libnss_files.so
|
||||
ln -sf libnss_compat.so.2 ${D}${libdir}/libnss_compat.so
|
||||
ln -sf libm.so.6 ${D}${libdir}/libm.so
|
||||
ln -sf libc_malloc_debug.so.0 ${D}${libdir}/libc_malloc_debug.so
|
||||
if [ -f ${D}${libdir}/libmvec.so.1 ]; then
|
||||
ln -sf libmvec.so.1 ${D}${libdir}/libmvec.so
|
||||
fi
|
||||
fi
|
||||
|
||||
# Besides ld-${EAT_VER_LIBC}.so, other libs can have duplicates like lib*-${EAT_VER_LIBC}.so
|
||||
# Only remove them if both are regular files and are identical
|
||||
@@ -205,13 +231,13 @@ do_install() {
|
||||
rm -rf ${D}${includedir}/rpcsvc/rquota.*
|
||||
|
||||
if [ -f ${D}${libdir}/libc.so ];then
|
||||
sed -i -e "s# /${EAT_LIBDIR}/${EAT_TARGET_SYS}# ../../${EAT_LIBDIR}#g" -e "s# /usr/${EAT_LIBDIR}/# /usr/lib/#g" -e "s# /usr/${EAT_LIBDIR}/${EAT_TARGET_SYS}# .#g" -e "s# /${EAT_LIBDIR}/ld-linux# ../../${EAT_LIBDIR}/ld-linux#g" ${D}${libdir}/libc.so
|
||||
sed -i -e "s# /usr/${EAT_LIBDIR}/# /usr/lib/#g" -e "s# /${EAT_LIBDIR}/ld-linux# ../../${base_libdir}/ld-linux#g" ${D}${libdir}/libc.so
|
||||
sed -i -e "s# /${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" ${D}${libdir}/libc.so
|
||||
sed -i -e "s# /lib# ../../lib#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so
|
||||
sed -i -e "s# /lib# ../../${base_libdir}#g" -e "s# /usr/lib# .#g" ${D}${libdir}/libc.so
|
||||
fi
|
||||
|
||||
if [ -f ${D}${base_libdir}/libc.so ];then
|
||||
sed -i -e "s# /${EAT_LIBDIR}/${EAT_TARGET_SYS}# ../../lib#g" -e "s# /usr/${EAT_LIBDIR}/${EAT_TARGET_SYS}# .#g" -e "s# /${EAT_LIBDIR}/# /lib/#g" ${D}${base_libdir}/libc.so
|
||||
sed -i -e "s# /${EAT_LIBDIR}/# /lib/#g" ${D}${base_libdir}/libc.so
|
||||
if [ -f ${D}${base_libdir}/libc.so.6 ]; then
|
||||
sed -i -e "s# /usr/${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" -e "s# /${EAT_LIBDIR}/libc.so.6# /lib/libc.so.6#g" ${D}${base_libdir}/libc.so.6
|
||||
fi
|
||||
@@ -527,7 +553,6 @@ FILES:${PN} += "\
|
||||
${base_libdir}/ld*.so.* \
|
||||
${base_libdir}/ld-*.so \
|
||||
${base_libdir}/libpthread*.so.* \
|
||||
${base_libdir}/libpthread*.so \
|
||||
${base_libdir}/libpthread-*.so \
|
||||
${base_libdir}/libresolv*.so.* \
|
||||
${base_libdir}/libresolv-*.so \
|
||||
|
||||
@@ -134,8 +134,14 @@ class FVPRunner:
|
||||
for console in self._pexpects:
|
||||
import pexpect
|
||||
# Ensure pexpect logs all remaining output to the logfile
|
||||
console.expect(pexpect.EOF, timeout=5.0)
|
||||
console.close()
|
||||
try:
|
||||
console.expect(pexpect.EOF, timeout=30.0)
|
||||
except pexpect.TIMEOUT:
|
||||
pexpect_logfile = ""
|
||||
if console.logfile is not None:
|
||||
pexpect_logfile = f" ({console.logfile})"
|
||||
self._logger.debug(f"Unable to get EOF on pexpect spawn obj{pexpect_logfile}.")
|
||||
console.close(force=True)
|
||||
|
||||
if self._fvp_process and self._fvp_process.returncode and \
|
||||
self._fvp_process.returncode > 0:
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
SUMMARY = "execstack tool"
|
||||
LICENSE = "GPL-2.0-or-later"
|
||||
LIC_FILES_CHKSUM = "file://COPYING;md5=c93c0550bd3173f4504b2cbd8991e50b"
|
||||
|
||||
DEPENDS = "binutils-native elfutils-native"
|
||||
|
||||
SRC_URI = "git://git.yoctoproject.org/prelink-cross;protocol=https;branch=master"
|
||||
SRCREV = "ff2561c02ade96c5d4d56ddd4e27ff064840a176"
|
||||
PV = "1.0+git${SRCPV}"
|
||||
|
||||
S = "${WORKDIR}/git"
|
||||
|
||||
inherit autotools native
|
||||
|
||||
do_compile() {
|
||||
oe_runmake -C ${B}/src execstack
|
||||
}
|
||||
|
||||
do_install() {
|
||||
oe_runmake -C ${B}/src install-binPROGRAMS DESTDIR="${D}"
|
||||
}
|
||||
@@ -14,3 +14,6 @@ UPSTREAM_VERSION_UNKNOWN = "1"
|
||||
MODEL_CODE = "FVP_Base_RevC-2xAEMvA"
|
||||
|
||||
COMPATIBLE_HOST = "(aarch64|x86_64).*-linux"
|
||||
|
||||
require remove-execstack.inc
|
||||
REMOVE_EXECSTACKS:x86-64 = "${FVPDIR}/models/${FVP_ARCH_DIR}*/libarmctmodel.so"
|
||||
|
||||
@@ -0,0 +1,26 @@
|
||||
# Clear the executable stack flag on named shared libraries. This are typically
|
||||
# not needed, and glibc 2.41 will refuse to dlopen() a library that expects
|
||||
# an executable stack.
|
||||
#
|
||||
# The stack permissions can be checked with readelf -lW <.so> | grep GNU_STACK.
|
||||
# RW is read/write, RWE is read/write/execute.
|
||||
|
||||
DEPENDS += "execstack-native"
|
||||
|
||||
REMOVE_EXECSTACKS ?= ""
|
||||
|
||||
do_install:append() {
|
||||
for SO in ${REMOVE_EXECSTACKS}; do
|
||||
NAME=$(basename $SO)
|
||||
SO=${D}$SO
|
||||
|
||||
test -f $SO || bbfatal remove-execstack: cannot find $SO
|
||||
|
||||
if execstack --query $SO | grep -q ^X; then
|
||||
bbnote "Stripping executable stack bit on $NAME"
|
||||
execstack --clear-execstack $SO
|
||||
else
|
||||
bbwarn "Executable stack stripping no longer required for $NAME, remove"
|
||||
fi
|
||||
done
|
||||
}
|
||||
Reference in New Issue
Block a user