diff options
Diffstat (limited to 'poky/meta/recipes-core')
60 files changed, 4100 insertions, 183 deletions
diff --git a/poky/meta/recipes-core/busybox/busybox-inittab_1.32.0.bb b/poky/meta/recipes-core/busybox/busybox-inittab_1.33.0.bb index 3804f4f7b..0021e4551 100644 --- a/poky/meta/recipes-core/busybox/busybox-inittab_1.32.0.bb +++ b/poky/meta/recipes-core/busybox/busybox-inittab_1.33.0.bb @@ -44,6 +44,9 @@ EOF fi } +do_install_append_qemuppc64 () { + echo "9:12345:respawn:${base_sbindir}/getty 38400 hvc0" >> ${D}${sysconfdir}/inittab +} pkg_postinst_${PN} () { # run this on host and on target diff --git a/poky/meta/recipes-core/busybox/busybox/defconfig b/poky/meta/recipes-core/busybox/busybox/defconfig index 4334a9d73..701d48d62 100644 --- a/poky/meta/recipes-core/busybox/busybox/defconfig +++ b/poky/meta/recipes-core/busybox/busybox/defconfig @@ -1,7 +1,7 @@ # # Automatically generated make config: don't edit -# Busybox version: 1.30.1 -# Sun Feb 17 18:12:27 2019 +# Busybox version: 1.33.0 +# Wed Mar 10 13:29:25 2021 # CONFIG_HAVE_DOT_CONFIG=y @@ -34,8 +34,8 @@ CONFIG_FEATURE_SUID_CONFIG_QUIET=y CONFIG_BUSYBOX_EXEC_PATH="/proc/self/exe" # CONFIG_SELINUX is not set # CONFIG_FEATURE_CLEAN_UP is not set +CONFIG_FEATURE_SYSLOG_INFO=y CONFIG_FEATURE_SYSLOG=y -CONFIG_PLATFORM_LINUX=y # # Build Options @@ -54,6 +54,7 @@ CONFIG_EXTRA_LDFLAGS="" CONFIG_EXTRA_LDLIBS="" # CONFIG_USE_PORTABLE_CODE is not set CONFIG_STACK_OPTIMIZATION_386=y +CONFIG_STATIC_LIBGCC=y # # Installation Options ("make install" behavior) @@ -75,6 +76,7 @@ CONFIG_PREFIX="./_install" # CONFIG_DEBUG_SANITIZE is not set # CONFIG_UNIT_TEST is not set # CONFIG_WERROR is not set +# CONFIG_WARN_SIMPLE_MSG is not set CONFIG_NO_DEBUG_LIB=y # CONFIG_DMALLOC is not set # CONFIG_EFENCE is not set @@ -108,13 +110,13 @@ CONFIG_FEATURE_EDITING_FANCY_PROMPT=y # CONFIG_FEATURE_EDITING_WINCH is not set # CONFIG_FEATURE_EDITING_ASK_TERMINAL is not set # CONFIG_LOCALE_SUPPORT is not set -# CONFIG_UNICODE_SUPPORT is not set +CONFIG_UNICODE_SUPPORT=y # CONFIG_UNICODE_USING_LOCALE is not set -# CONFIG_FEATURE_CHECK_UNICODE_IN_ENV is not set -CONFIG_SUBST_WCHAR=0 -CONFIG_LAST_SUPPORTED_WCHAR=0 -# CONFIG_UNICODE_COMBINING_WCHARS is not set -# CONFIG_UNICODE_WIDE_WCHARS is not set +CONFIG_FEATURE_CHECK_UNICODE_IN_ENV=y +CONFIG_SUBST_WCHAR=63 +CONFIG_LAST_SUPPORTED_WCHAR=767 +CONFIG_UNICODE_COMBINING_WCHARS=y +CONFIG_UNICODE_WIDE_WCHARS=y # CONFIG_UNICODE_BIDI_SUPPORT is not set # CONFIG_UNICODE_NEUTRAL_TABLE is not set # CONFIG_UNICODE_PRESERVE_BROKEN is not set @@ -155,6 +157,7 @@ CONFIG_LZCAT=y CONFIG_XZCAT=y # CONFIG_XZ is not set CONFIG_BZIP2=y +CONFIG_BZIP2_SMALL=8 CONFIG_FEATURE_BZIP2_DECOMPRESS=y CONFIG_CPIO=y # CONFIG_FEATURE_CPIO_O is not set @@ -235,7 +238,6 @@ CONFIG_EXPR_MATH_SUPPORT_64=y # CONFIG_FACTOR is not set CONFIG_FALSE=y # CONFIG_FOLD is not set -# CONFIG_FSYNC is not set CONFIG_HEAD=y # CONFIG_FEATURE_FANCY_HEAD is not set # CONFIG_HOSTID is not set @@ -257,8 +259,8 @@ CONFIG_FEATURE_LS_USERNAME=y CONFIG_FEATURE_LS_COLOR=y # CONFIG_FEATURE_LS_COLOR_IS_DEFAULT is not set CONFIG_MD5SUM=y -# CONFIG_SHA1SUM is not set -# CONFIG_SHA256SUM is not set +CONFIG_SHA1SUM=y +CONFIG_SHA256SUM=y # CONFIG_SHA512SUM is not set # CONFIG_SHA3SUM is not set @@ -302,6 +304,7 @@ CONFIG_STTY=y # CONFIG_SUM is not set CONFIG_SYNC=y # CONFIG_FEATURE_SYNC_FANCY is not set +# CONFIG_FSYNC is not set # CONFIG_TAC is not set CONFIG_TAIL=y CONFIG_FEATURE_FANCY_TAIL=y @@ -328,14 +331,15 @@ CONFIG_UNIQ=y CONFIG_UNLINK=y CONFIG_USLEEP=y # CONFIG_UUDECODE is not set +CONFIG_BASE32=y # CONFIG_BASE64 is not set # CONFIG_UUENCODE is not set CONFIG_WC=y # CONFIG_FEATURE_WC_LARGE is not set -CONFIG_WHOAMI=y CONFIG_WHO=y # CONFIG_W is not set CONFIG_USERS=y +CONFIG_WHOAMI=y CONFIG_YES=y # @@ -375,8 +379,8 @@ CONFIG_DEFAULT_SETFONT_DIR="" CONFIG_LOADKMAP=y CONFIG_OPENVT=y CONFIG_RESET=y -# CONFIG_RESIZE is not set -# CONFIG_FEATURE_RESIZE_PRINT is not set +CONFIG_RESIZE=y +CONFIG_FEATURE_RESIZE_PRINT=y CONFIG_SETCONSOLE=y # CONFIG_FEATURE_SETCONSOLE_LONG_OPTIONS is not set # CONFIG_SETKEYCODES is not set @@ -460,6 +464,7 @@ CONFIG_FEATURE_FIND_SIZE=y CONFIG_FEATURE_FIND_PRUNE=y CONFIG_FEATURE_FIND_QUIT=y # CONFIG_FEATURE_FIND_DELETE is not set +CONFIG_FEATURE_FIND_EMPTY=y CONFIG_FEATURE_FIND_PATH=y CONFIG_FEATURE_FIND_REGEX=y # CONFIG_FEATURE_FIND_CONTEXT is not set @@ -488,32 +493,32 @@ CONFIG_FEATURE_XARGS_SUPPORT_REPL_STR=y CONFIG_REBOOT=y # CONFIG_FEATURE_WAIT_FOR_INIT is not set # CONFIG_FEATURE_CALL_TELINIT is not set -# CONFIG_TELINIT_PATH is not set +CONFIG_TELINIT_PATH="" # CONFIG_INIT is not set # CONFIG_LINUXRC is not set # CONFIG_FEATURE_USE_INITTAB is not set # CONFIG_FEATURE_KILL_REMOVED is not set -# CONFIG_FEATURE_KILL_DELAY is not set +CONFIG_FEATURE_KILL_DELAY=0 # CONFIG_FEATURE_INIT_SCTTY is not set # CONFIG_FEATURE_INIT_SYSLOG is not set # CONFIG_FEATURE_INIT_QUIET is not set # CONFIG_FEATURE_INIT_COREDUMPS is not set -# CONFIG_INIT_TERMINAL_TYPE is not set +CONFIG_INIT_TERMINAL_TYPE="" # CONFIG_FEATURE_INIT_MODIFY_CMDLINE is not set # # Login/Password Management Utilities # -# CONFIG_FEATURE_SHADOWPASSWDS is not set +CONFIG_FEATURE_SHADOWPASSWDS=y # CONFIG_USE_BB_PWD_GRP is not set # CONFIG_USE_BB_SHADOW is not set CONFIG_USE_BB_CRYPT=y # CONFIG_USE_BB_CRYPT_SHA is not set -# CONFIG_ADDGROUP is not set -# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set # CONFIG_ADD_SHELL is not set # CONFIG_REMOVE_SHELL is not set -# CONFIG_ADDUSER is not set +CONFIG_ADDGROUP=y +# CONFIG_FEATURE_ADDUSER_TO_GROUP is not set +CONFIG_ADDUSER=y # CONFIG_FEATURE_CHECK_NAMES is not set CONFIG_LAST_ID=60000 CONFIG_FIRST_SYSTEM_ID=100 @@ -522,23 +527,23 @@ CONFIG_LAST_SYSTEM_ID=999 CONFIG_FEATURE_DEFAULT_PASSWD_ALGO="" # CONFIG_CRYPTPW is not set # CONFIG_MKPASSWD is not set -# CONFIG_DELUSER is not set -# CONFIG_DELGROUP is not set +CONFIG_DELUSER=y +CONFIG_DELGROUP=y # CONFIG_FEATURE_DEL_USER_FROM_GROUP is not set -# CONFIG_GETTY is not set -# CONFIG_LOGIN is not set +CONFIG_GETTY=y +CONFIG_LOGIN=y # CONFIG_LOGIN_SESSION_AS_CHILD is not set # CONFIG_LOGIN_SCRIPTS is not set # CONFIG_FEATURE_NOLOGIN is not set # CONFIG_FEATURE_SECURETTY is not set -# CONFIG_PASSWD is not set +CONFIG_PASSWD=y # CONFIG_FEATURE_PASSWD_WEAK_CHECK is not set -# CONFIG_SU is not set +CONFIG_SU=y # CONFIG_FEATURE_SU_SYSLOG is not set # CONFIG_FEATURE_SU_CHECKS_SHELLS is not set # CONFIG_FEATURE_SU_BLANK_PW_NEEDS_SECURE_TTY is not set -# CONFIG_SULOGIN is not set -# CONFIG_VLOCK is not set +CONFIG_SULOGIN=y +CONFIG_VLOCK=y # # Linux Ext2 FS Progs @@ -585,8 +590,8 @@ CONFIG_DEFAULT_DEPMOD_FILE="modules.dep" # CONFIG_ACPID is not set # CONFIG_FEATURE_ACPID_COMPAT is not set # CONFIG_BLKDISCARD is not set -# CONFIG_BLKID is not set -# CONFIG_FEATURE_BLKID_TYPE is not set +CONFIG_BLKID=y +CONFIG_FEATURE_BLKID_TYPE=y # CONFIG_BLOCKDEV is not set # CONFIG_CAL is not set # CONFIG_CHRT is not set @@ -616,10 +621,9 @@ CONFIG_FLOCK=y # CONFIG_FSCK_MINIX is not set # CONFIG_FSFREEZE is not set CONFIG_FSTRIM=y -# CONFIG_GETOPT is not set -# CONFIG_FEATURE_GETOPT_LONG is not set +CONFIG_GETOPT=y +CONFIG_FEATURE_GETOPT_LONG=y CONFIG_HEXDUMP=y -# CONFIG_FEATURE_HEXDUMP_REVERSE is not set # CONFIG_HD is not set # CONFIG_XXD is not set CONFIG_HWCLOCK=y @@ -638,6 +642,7 @@ CONFIG_LOSETUP=y # CONFIG_FEATURE_MDEV_RENAME_REGEXP is not set # CONFIG_FEATURE_MDEV_EXEC is not set # CONFIG_FEATURE_MDEV_LOAD_FIRMWARE is not set +# CONFIG_FEATURE_MDEV_DAEMON is not set CONFIG_MESG=y # CONFIG_FEATURE_MESG_ENABLE_ONLY_GROUP is not set # CONFIG_MKE2FS is not set @@ -654,7 +659,7 @@ CONFIG_MOUNT=y # CONFIG_FEATURE_MOUNT_FAKE is not set # CONFIG_FEATURE_MOUNT_VERBOSE is not set # CONFIG_FEATURE_MOUNT_HELPERS is not set -# CONFIG_FEATURE_MOUNT_LABEL is not set +CONFIG_FEATURE_MOUNT_LABEL=y # CONFIG_FEATURE_MOUNT_NFS is not set # CONFIG_FEATURE_MOUNT_CIFS is not set CONFIG_FEATURE_MOUNT_FLAGS=y @@ -669,7 +674,7 @@ CONFIG_RDATE=y # CONFIG_RDEV is not set # CONFIG_READPROFILE is not set CONFIG_RENICE=y -# CONFIG_REV is not set +CONFIG_REV=y # CONFIG_RTCWAKE is not set # CONFIG_SCRIPT is not set # CONFIG_SCRIPTREPLAY is not set @@ -689,6 +694,7 @@ CONFIG_SWAPOFF=y CONFIG_SWITCH_ROOT=y # CONFIG_TASKSET is not set # CONFIG_FEATURE_TASKSET_FANCY is not set +# CONFIG_FEATURE_TASKSET_CPULIST is not set # CONFIG_UEVENT is not set CONFIG_UMOUNT=y CONFIG_FEATURE_UMOUNT_ALL=y @@ -701,18 +707,19 @@ CONFIG_FEATURE_UMOUNT_ALL=y CONFIG_FEATURE_MOUNT_LOOP=y CONFIG_FEATURE_MOUNT_LOOP_CREATE=y # CONFIG_FEATURE_MTAB_SUPPORT is not set -# CONFIG_VOLUMEID is not set +CONFIG_VOLUMEID=y # # Filesystem/Volume identification # # CONFIG_FEATURE_VOLUMEID_BCACHE is not set -# CONFIG_FEATURE_VOLUMEID_BTRFS is not set +CONFIG_FEATURE_VOLUMEID_BTRFS=y # CONFIG_FEATURE_VOLUMEID_CRAMFS is not set +CONFIG_FEATURE_VOLUMEID_EROFS=y # CONFIG_FEATURE_VOLUMEID_EXFAT is not set -# CONFIG_FEATURE_VOLUMEID_EXT is not set -# CONFIG_FEATURE_VOLUMEID_F2FS is not set -# CONFIG_FEATURE_VOLUMEID_FAT is not set +CONFIG_FEATURE_VOLUMEID_EXT=y +CONFIG_FEATURE_VOLUMEID_F2FS=y +CONFIG_FEATURE_VOLUMEID_FAT=y # CONFIG_FEATURE_VOLUMEID_HFS is not set # CONFIG_FEATURE_VOLUMEID_ISO9660 is not set # CONFIG_FEATURE_VOLUMEID_JFS is not set @@ -726,7 +733,7 @@ CONFIG_FEATURE_MOUNT_LOOP_CREATE=y # CONFIG_FEATURE_VOLUMEID_OCFS2 is not set # CONFIG_FEATURE_VOLUMEID_REISERFS is not set # CONFIG_FEATURE_VOLUMEID_ROMFS is not set -# CONFIG_FEATURE_VOLUMEID_SQUASHFS is not set +CONFIG_FEATURE_VOLUMEID_SQUASHFS=y # CONFIG_FEATURE_VOLUMEID_SYSV is not set # CONFIG_FEATURE_VOLUMEID_UBIFS is not set # CONFIG_FEATURE_VOLUMEID_UDF is not set @@ -769,10 +776,10 @@ CONFIG_FEATURE_CROND_DIR="" # CONFIG_FEATURE_DEVFS is not set # CONFIG_DEVMEM is not set # CONFIG_FBSPLASH is not set -# CONFIG_FLASHCP is not set # CONFIG_FLASH_ERASEALL is not set # CONFIG_FLASH_LOCK is not set # CONFIG_FLASH_UNLOCK is not set +# CONFIG_FLASHCP is not set # CONFIG_HDPARM is not set # CONFIG_FEATURE_HDPARM_GET_IDENTITY is not set # CONFIG_FEATURE_HDPARM_HDIO_SCAN_HWIF is not set @@ -806,6 +813,7 @@ CONFIG_FEATURE_LESS_FLAGS=y # CONFIG_FEATURE_MAKEDEVS_TABLE is not set # CONFIG_MAN is not set CONFIG_MICROCOM=y +# CONFIG_MIM is not set # CONFIG_MT is not set # CONFIG_NANDWRITE is not set # CONFIG_NANDDUMP is not set @@ -819,14 +827,15 @@ CONFIG_RFKILL=y # CONFIG_SETSERIAL is not set CONFIG_STRINGS=y CONFIG_TIME=y +CONFIG_TS=y # CONFIG_TTYSIZE is not set -# CONFIG_UBIRENAME is not set # CONFIG_UBIATTACH is not set # CONFIG_UBIDETACH is not set # CONFIG_UBIMKVOL is not set # CONFIG_UBIRMVOL is not set # CONFIG_UBIRSVOL is not set # CONFIG_UBIUPDATEVOL is not set +# CONFIG_UBIRENAME is not set # CONFIG_VOLNAME is not set # CONFIG_WATCHDOG is not set @@ -866,6 +875,10 @@ CONFIG_DNSDOMAINNAME=y # CONFIG_FEATURE_HTTPD_ERROR_PAGES is not set # CONFIG_FEATURE_HTTPD_PROXY is not set # CONFIG_FEATURE_HTTPD_GZIP is not set +# CONFIG_FEATURE_HTTPD_ETAG is not set +# CONFIG_FEATURE_HTTPD_LAST_MODIFIED is not set +# CONFIG_FEATURE_HTTPD_DATE is not set +# CONFIG_FEATURE_HTTPD_ACL_IP is not set CONFIG_IFCONFIG=y CONFIG_FEATURE_IFCONFIG_STATUS=y # CONFIG_FEATURE_IFCONFIG_SLIP is not set @@ -946,6 +959,7 @@ CONFIG_FEATURE_TELNET_WIDTH=y # CONFIG_FEATURE_TELNETD_INETD_WAIT is not set CONFIG_TFTP=y # CONFIG_FEATURE_TFTP_PROGRESS_BAR is not set +CONFIG_FEATURE_TFTP_HPA_COMPAT=y # CONFIG_TFTPD is not set CONFIG_FEATURE_TFTP_GET=y CONFIG_FEATURE_TFTP_PUT=y @@ -990,6 +1004,7 @@ CONFIG_UDHCPC_DEFAULT_SCRIPT="/usr/share/udhcpc/default.script" # CONFIG_FEATURE_UDHCP_PORT is not set CONFIG_UDHCP_DEBUG=0 CONFIG_UDHCPC_SLACK_FOR_BUGGY_SERVERS=80 +CONFIG_FEATURE_UDHCP_RFC3397=y # CONFIG_FEATURE_UDHCP_8021Q is not set CONFIG_IFUPDOWN_UDHCPC_CMD_OPTIONS="-R -b" @@ -1023,7 +1038,7 @@ CONFIG_KILLALL=y # CONFIG_LSOF is not set # CONFIG_MPSTAT is not set # CONFIG_NMETER is not set -# CONFIG_PGREP is not set +CONFIG_PGREP=y # CONFIG_PKILL is not set CONFIG_PIDOF=y # CONFIG_FEATURE_PIDOF_SINGLE is not set @@ -1093,6 +1108,7 @@ CONFIG_SH_IS_ASH=y # CONFIG_BASH_IS_ASH is not set # CONFIG_BASH_IS_HUSH is not set CONFIG_BASH_IS_NONE=y +CONFIG_SHELL_ASH=y CONFIG_ASH=y CONFIG_ASH_OPTIMIZE_FOR_SIZE=y CONFIG_ASH_INTERNAL_GLOB=y @@ -1113,6 +1129,7 @@ CONFIG_ASH_GETOPTS=y CONFIG_ASH_CMDCMD=y # CONFIG_CTTYHACK is not set # CONFIG_HUSH is not set +# CONFIG_SHELL_HUSH is not set # CONFIG_HUSH_BASH_COMPAT is not set # CONFIG_HUSH_BRACE_EXPANSION is not set # CONFIG_HUSH_LINENO_VAR is not set @@ -1154,6 +1171,7 @@ CONFIG_ASH_CMDCMD=y # CONFIG_FEATURE_SH_MATH=y # CONFIG_FEATURE_SH_MATH_64 is not set +CONFIG_FEATURE_SH_MATH_BASE=y CONFIG_FEATURE_SH_EXTRA_QUIET=y # CONFIG_FEATURE_SH_STANDALONE is not set # CONFIG_FEATURE_SH_NOFORK is not set @@ -1171,14 +1189,15 @@ CONFIG_KLOGD=y # CONFIG_FEATURE_KLOGD_KLOGCTL=y CONFIG_LOGGER=y -# CONFIG_LOGREAD is not set -# CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING is not set -# CONFIG_SYSLOGD is not set -# CONFIG_FEATURE_ROTATE_LOGFILE is not set -# CONFIG_FEATURE_REMOTE_LOG is not set -# CONFIG_FEATURE_SYSLOGD_DUP is not set -# CONFIG_FEATURE_SYSLOGD_CFG is not set -CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=0 -# CONFIG_FEATURE_IPC_SYSLOG is not set -CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=0 -# CONFIG_FEATURE_KMSG_SYSLOG is not set +CONFIG_LOGREAD=y +CONFIG_FEATURE_LOGREAD_REDUCED_LOCKING=y +CONFIG_SYSLOGD=y +CONFIG_FEATURE_ROTATE_LOGFILE=y +CONFIG_FEATURE_REMOTE_LOG=y +CONFIG_FEATURE_SYSLOGD_DUP=y +CONFIG_FEATURE_SYSLOGD_CFG=y +# CONFIG_FEATURE_SYSLOGD_PRECISE_TIMESTAMPS is not set +CONFIG_FEATURE_SYSLOGD_READ_BUFFER_SIZE=256 +CONFIG_FEATURE_IPC_SYSLOG=y +CONFIG_FEATURE_IPC_SYSLOG_BUFFER_SIZE=64 +CONFIG_FEATURE_KMSG_SYSLOG=y diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gobject-Drop-use-of-volatile-from-get_type-macros.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gobject-Drop-use-of-volatile-from-get_type-macros.patch new file mode 100644 index 000000000..485218652 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0001-gobject-Drop-use-of-volatile-from-get_type-macros.patch @@ -0,0 +1,403 @@ +From fab561f8d05794329184cd81f9ab9d9d77dcc22a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:12:22 +0000 +Subject: [PATCH 01/29] gobject: Drop use of volatile from get_type() macros +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +http://isvolatileusefulwiththreads.in/c/ + +It’s possible that the variables here are only marked as volatile +because they’re arguments to `g_once_*()`. Those arguments will be +modified in a subsequent commit. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + docs/reference/gobject/glib-mkenums.xml | 8 ++--- + docs/reference/gobject/tut_gtype.xml | 2 +- + gio/gioenumtypes.c.template | 8 ++--- + gio/tests/gsettings.c | 4 +-- + gobject/gbinding.c | 8 ++--- + gobject/gboxed.c | 8 ++--- + gobject/glib-enumtypes.c.template | 8 ++--- + gobject/gsourceclosure.c | 2 +- + gobject/gtype.h | 48 ++++++++++++------------- + gobject/tests/signals.c | 16 ++++----- + 10 files changed, 56 insertions(+), 56 deletions(-) + +diff --git a/docs/reference/gobject/glib-mkenums.xml b/docs/reference/gobject/glib-mkenums.xml +index 2200328ed..ce250a3ff 100644 +--- a/docs/reference/gobject/glib-mkenums.xml ++++ b/docs/reference/gobject/glib-mkenums.xml +@@ -480,9 +480,9 @@ A C source template file will typically look like this: + GType + @enum_name@_get_type (void) + { +- static volatile gsize g_@type@_type_id__volatile; ++ static gsize static_g_@type@_type_id; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_@type@_type_id)) + { + static const G@Type@Value values[] = { + /*** END value-header ***/ +@@ -498,9 +498,9 @@ GType + GType g_@type@_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); + +- g_once_init_leave (&g_@type@_type_id__volatile, g_@type@_type_id); ++ g_once_init_leave (&static_g_@type@_type_id, g_@type@_type_id); + } +- return g_@type@_type_id__volatile; ++ return static_g_@type@_type_id; + } + + /*** END value-tail ***/ +diff --git a/docs/reference/gobject/tut_gtype.xml b/docs/reference/gobject/tut_gtype.xml +index 25e37dc48..ee042889d 100644 +--- a/docs/reference/gobject/tut_gtype.xml ++++ b/docs/reference/gobject/tut_gtype.xml +@@ -852,7 +852,7 @@ viewer_editable_default_init (ViewerEditableInterface *iface) + GType + viewer_editable_get_type (void) + { +- static volatile gsize type_id = 0; ++ static gsize type_id = 0; + if (g_once_init_enter (&type_id)) { + const GTypeInfo info = { + sizeof (ViewerEditableInterface), +diff --git a/gio/gioenumtypes.c.template b/gio/gioenumtypes.c.template +index e9adc4a38..948a01201 100644 +--- a/gio/gioenumtypes.c.template ++++ b/gio/gioenumtypes.c.template +@@ -13,9 +13,9 @@ + GType + @enum_name@_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + static const G@Type@Value values[] = { + /*** END value-header ***/ +@@ -29,10 +29,10 @@ GType + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + /*** END value-tail ***/ +diff --git a/gio/tests/gsettings.c b/gio/tests/gsettings.c +index 2f81ae6c3..179d0fd2f 100644 +--- a/gio/tests/gsettings.c ++++ b/gio/tests/gsettings.c +@@ -1060,7 +1060,7 @@ test_object_set_property (GObject *object, + static GType + test_enum_get_type (void) + { +- static volatile gsize define_type_id = 0; ++ static gsize define_type_id = 0; + + if (g_once_init_enter (&define_type_id)) + { +@@ -1082,7 +1082,7 @@ test_enum_get_type (void) + static GType + test_flags_get_type (void) + { +- static volatile gsize define_type_id = 0; ++ static gsize define_type_id = 0; + + if (g_once_init_enter (&define_type_id)) + { +diff --git a/gobject/gbinding.c b/gobject/gbinding.c +index 78a883075..662d76b3c 100644 +--- a/gobject/gbinding.c ++++ b/gobject/gbinding.c +@@ -120,9 +120,9 @@ + GType + g_binding_flags_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + static const GFlagsValue values[] = { + { G_BINDING_DEFAULT, "G_BINDING_DEFAULT", "default" }, +@@ -133,10 +133,10 @@ g_binding_flags_get_type (void) + }; + GType g_define_type_id = + g_flags_register_static (g_intern_static_string ("GBindingFlags"), values); +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + #define G_BINDING_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), G_TYPE_BINDING, GBindingClass)) +diff --git a/gobject/gboxed.c b/gobject/gboxed.c +index 30ba4e775..194251383 100644 +--- a/gobject/gboxed.c ++++ b/gobject/gboxed.c +@@ -180,19 +180,19 @@ G_DEFINE_BOXED_TYPE (GOptionGroup, g_option_group, g_option_group_ref, g_option_ + GType + g_strv_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + GType g_define_type_id = + g_boxed_type_register_static (g_intern_static_string ("GStrv"), + (GBoxedCopyFunc) g_strdupv, + (GBoxedFreeFunc) g_strfreev); + +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + GType +diff --git a/gobject/glib-enumtypes.c.template b/gobject/glib-enumtypes.c.template +index b7d36728f..1800ca8af 100644 +--- a/gobject/glib-enumtypes.c.template ++++ b/gobject/glib-enumtypes.c.template +@@ -13,9 +13,9 @@ + GType + @enum_name@_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + static const G@Type@Value values[] = { + /*** END value-header ***/ +@@ -29,10 +29,10 @@ GType + }; + GType g_define_type_id = + g_@type@_register_static (g_intern_static_string ("@EnumName@"), values); +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + /*** END value-tail ***/ +diff --git a/gobject/gsourceclosure.c b/gobject/gsourceclosure.c +index 0d0d2e87c..d1b1ee4b3 100644 +--- a/gobject/gsourceclosure.c ++++ b/gobject/gsourceclosure.c +@@ -32,7 +32,7 @@ G_DEFINE_BOXED_TYPE (GIOChannel, g_io_channel, g_io_channel_ref, g_io_channel_un + GType + g_io_condition_get_type (void) + { +- static volatile GType etype = 0; ++ static GType etype = 0; + + if (g_once_init_enter (&etype)) + { +diff --git a/gobject/gtype.h b/gobject/gtype.h +index 9de46ac60..666fadb0c 100644 +--- a/gobject/gtype.h ++++ b/gobject/gtype.h +@@ -1727,8 +1727,8 @@ guint g_type_get_type_registration_serial (void); + * GType + * gtk_gadget_get_type (void) + * { +- * static volatile gsize g_define_type_id__volatile = 0; +- * if (g_once_init_enter (&g_define_type_id__volatile)) ++ * static gsize static_g_define_type_id = 0; ++ * if (g_once_init_enter (&static_g_define_type_id)) + * { + * GType g_define_type_id = + * g_type_register_static_simple (GTK_TYPE_WIDGET, +@@ -1748,9 +1748,9 @@ guint g_type_get_type_registration_serial (void); + * }; + * g_type_add_interface_static (g_define_type_id, TYPE_GIZMO, &g_implement_interface_info); + * } +- * g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ * g_once_init_leave (&static_g_define_type_id, g_define_type_id); + * } +- * return g_define_type_id__volatile; ++ * return static_g_define_type_id; + * } + * ]| + * The only pieces which have to be manually provided are the definitions of +@@ -1995,17 +1995,17 @@ type_name##_get_instance_private (TypeName *self) \ + GType \ + type_name##_get_type (void) \ + { \ +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + /* Prelude goes here */ + + /* Added for _G_DEFINE_TYPE_EXTENDED_WITH_PRELUDE */ + #define _G_DEFINE_TYPE_EXTENDED_BEGIN_REGISTER(TypeName, type_name, TYPE_PARENT, flags) \ +- if (g_once_init_enter (&g_define_type_id__volatile)) \ ++ if (g_once_init_enter (&static_g_define_type_id)) \ + { \ + GType g_define_type_id = type_name##_get_type_once (); \ +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); \ + } \ +- return g_define_type_id__volatile; \ ++ return static_g_define_type_id; \ + } /* closes type_name##_get_type() */ \ + \ + G_GNUC_NO_INLINE \ +@@ -2041,8 +2041,8 @@ static void type_name##_default_init (TypeName##Interface *klass); \ + GType \ + type_name##_get_type (void) \ + { \ +- static volatile gsize g_define_type_id__volatile = 0; \ +- if (g_once_init_enter (&g_define_type_id__volatile)) \ ++ static gsize static_g_define_type_id = 0; \ ++ if (g_once_init_enter (&static_g_define_type_id)) \ + { \ + GType g_define_type_id = \ + g_type_register_static_simple (G_TYPE_INTERFACE, \ +@@ -2058,9 +2058,9 @@ type_name##_get_type (void) \ + #define _G_DEFINE_INTERFACE_EXTENDED_END() \ + /* following custom code */ \ + } \ +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); \ + } \ +- return g_define_type_id__volatile; \ ++ return static_g_define_type_id; \ + } /* closes type_name##_get_type() */ + + /** +@@ -2115,13 +2115,13 @@ static GType type_name##_get_type_once (void); \ + GType \ + type_name##_get_type (void) \ + { \ +- static volatile gsize g_define_type_id__volatile = 0; \ +- if (g_once_init_enter (&g_define_type_id__volatile)) \ ++ static gsize static_g_define_type_id = 0; \ ++ if (g_once_init_enter (&static_g_define_type_id)) \ + { \ + GType g_define_type_id = type_name##_get_type_once (); \ +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); \ + } \ +- return g_define_type_id__volatile; \ ++ return static_g_define_type_id; \ + } \ + \ + G_GNUC_NO_INLINE \ +@@ -2152,13 +2152,13 @@ static GType type_name##_get_type_once (void); \ + GType \ + type_name##_get_type (void) \ + { \ +- static volatile gsize g_define_type_id__volatile = 0; \ +- if (g_once_init_enter (&g_define_type_id__volatile)) \ ++ static gsize static_g_define_type_id = 0; \ ++ if (g_once_init_enter (&static_g_define_type_id)) \ + { \ + GType g_define_type_id = type_name##_get_type_once (); \ +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); \ + } \ +- return g_define_type_id__volatile; \ ++ return static_g_define_type_id; \ + } \ + \ + G_GNUC_NO_INLINE \ +@@ -2205,13 +2205,13 @@ static GType type_name##_get_type_once (void); \ + GType \ + type_name##_get_type (void) \ + { \ +- static volatile gsize g_define_type_id__volatile = 0; \ +- if (g_once_init_enter (&g_define_type_id__volatile)) \ ++ static gsize static_g_define_type_id = 0; \ ++ if (g_once_init_enter (&static_g_define_type_id)) \ + { \ + GType g_define_type_id = type_name##_get_type_once (); \ +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); \ ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); \ + } \ +- return g_define_type_id__volatile; \ ++ return static_g_define_type_id; \ + } \ + \ + G_GNUC_NO_INLINE \ +diff --git a/gobject/tests/signals.c b/gobject/tests/signals.c +index 120f90b5c..ac0ce5102 100644 +--- a/gobject/tests/signals.c ++++ b/gobject/tests/signals.c +@@ -66,9 +66,9 @@ custom_marshal_VOID__INVOCATIONHINT (GClosure *closure, + static GType + test_enum_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + static const GEnumValue values[] = { + { TEST_ENUM_NEGATIVE, "TEST_ENUM_NEGATIVE", "negative" }, +@@ -79,18 +79,18 @@ test_enum_get_type (void) + }; + GType g_define_type_id = + g_enum_register_static (g_intern_static_string ("TestEnum"), values); +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + static GType + test_unsigned_enum_get_type (void) + { +- static volatile gsize g_define_type_id__volatile = 0; ++ static gsize static_g_define_type_id = 0; + +- if (g_once_init_enter (&g_define_type_id__volatile)) ++ if (g_once_init_enter (&static_g_define_type_id)) + { + static const GEnumValue values[] = { + { TEST_UNSIGNED_ENUM_FOO, "TEST_UNSIGNED_ENUM_FOO", "foo" }, +@@ -99,10 +99,10 @@ test_unsigned_enum_get_type (void) + }; + GType g_define_type_id = + g_enum_register_static (g_intern_static_string ("TestUnsignedEnum"), values); +- g_once_init_leave (&g_define_type_id__volatile, g_define_type_id); ++ g_once_init_leave (&static_g_define_type_id, g_define_type_id); + } + +- return g_define_type_id__volatile; ++ return static_g_define_type_id; + } + + typedef enum { +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0002-tests-Fix-non-atomic-access-to-a-shared-variable.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0002-tests-Fix-non-atomic-access-to-a-shared-variable.patch new file mode 100644 index 000000000..fada7cc38 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0002-tests-Fix-non-atomic-access-to-a-shared-variable.patch @@ -0,0 +1,44 @@ +From a6ce0e742a5c75c53a7c702ebb1af1084065160a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:14:29 +0000 +Subject: [PATCH 02/29] tests: Fix non-atomic access to a shared variable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And drop the `volatile` qualifier from the variable, as that doesn’t +help with thread safety. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/tests/642026.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/glib/tests/642026.c b/glib/tests/642026.c +index ef54f14bb..26ab2ed06 100644 +--- a/glib/tests/642026.c ++++ b/glib/tests/642026.c +@@ -25,7 +25,7 @@ static GMutex *mutex; + static GCond *cond; + static guint i; + +-static volatile gint freed = 0; ++static gint freed = 0; /* (atomic) */ + + static void + notify (gpointer p) +@@ -63,7 +63,7 @@ testcase (void) + GThread *t1; + + g_static_private_init (&sp); +- freed = 0; ++ g_atomic_int_set (&freed, 0); + + t1 = g_thread_create (thread_func, NULL, TRUE, NULL); + g_assert (t1 != NULL); +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0003-tests-Fix-non-atomic-access-to-a-shared-variable.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0003-tests-Fix-non-atomic-access-to-a-shared-variable.patch new file mode 100644 index 000000000..8bc71a698 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0003-tests-Fix-non-atomic-access-to-a-shared-variable.patch @@ -0,0 +1,90 @@ +From ea746c79faf554d980c21b0e4381753e003d2dc6 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:17:23 +0000 +Subject: [PATCH 03/29] tests: Fix non-atomic access to a shared variable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And drop the `volatile` qualifier from the variable, as that doesn’t +help with thread safety. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/tests/mainloop.c | 20 ++++++++++---------- + 1 file changed, 10 insertions(+), 10 deletions(-) + +diff --git a/glib/tests/mainloop.c b/glib/tests/mainloop.c +index 16763a0ea..563a951de 100644 +--- a/glib/tests/mainloop.c ++++ b/glib/tests/mainloop.c +@@ -918,7 +918,7 @@ test_mainloop_overflow (void) + g_main_context_unref (ctx); + } + +-static volatile gint ready_time_dispatched; ++static gint ready_time_dispatched; /* (atomic) */ + + static gboolean + ready_time_dispatch (GSource *source, +@@ -964,7 +964,7 @@ test_ready_time (void) + /* A source with no ready time set should not fire */ + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_false (ready_time_dispatched); ++ g_assert_false (g_atomic_int_get (&ready_time_dispatched)); + + /* The ready time should not have been changed */ + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); +@@ -978,37 +978,37 @@ test_ready_time (void) + */ + g_source_set_ready_time (source, g_get_monotonic_time () + G_TIME_SPAN_DAY); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_false (ready_time_dispatched); ++ g_assert_false (g_atomic_int_get (&ready_time_dispatched)); + /* Make sure it didn't get reset */ + g_assert_cmpint (g_source_get_ready_time (source), !=, -1); + + /* Ready time of -1 -> don't fire */ + g_source_set_ready_time (source, -1); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_false (ready_time_dispatched); ++ g_assert_false (g_atomic_int_get (&ready_time_dispatched)); + /* Not reset, but should still be -1 from above */ + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); + + /* A ready time of the current time should fire immediately */ + g_source_set_ready_time (source, g_get_monotonic_time ()); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_true (ready_time_dispatched); +- ready_time_dispatched = FALSE; ++ g_assert_true (g_atomic_int_get (&ready_time_dispatched)); ++ g_atomic_int_set (&ready_time_dispatched, FALSE); + /* Should have gotten reset by the handler function */ + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); + + /* As well as one in the recent past... */ + g_source_set_ready_time (source, g_get_monotonic_time () - G_TIME_SPAN_SECOND); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_true (ready_time_dispatched); +- ready_time_dispatched = FALSE; ++ g_assert_true (g_atomic_int_get (&ready_time_dispatched)); ++ g_atomic_int_set (&ready_time_dispatched, FALSE); + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); + + /* Zero is the 'official' way to get a source to fire immediately */ + g_source_set_ready_time (source, 0); + while (g_main_context_iteration (NULL, FALSE)); +- g_assert_true (ready_time_dispatched); +- ready_time_dispatched = FALSE; ++ g_assert_true (g_atomic_int_get (&ready_time_dispatched)); ++ g_atomic_int_set (&ready_time_dispatched, FALSE); + g_assert_cmpint (g_source_get_ready_time (source), ==, -1); + + /* Now do some tests of cross-thread wakeups. +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0004-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0004-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch new file mode 100644 index 000000000..4b7b6f463 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0004-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch @@ -0,0 +1,93 @@ +From 3dda662bebb81666d009635df1055ba5c1e17b52 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:16:17 +0000 +Subject: [PATCH 04/29] tests: Drop unnecessary volatile qualifiers from tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/tests/atomic.c | 4 ++-- + glib/tests/cond.c | 2 +- + glib/tests/gwakeuptest.c | 2 +- + glib/tests/hash.c | 2 +- + glib/tests/slice.c | 2 +- + 5 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/glib/tests/atomic.c b/glib/tests/atomic.c +index 6b6cc7f3e..7d2459f3a 100644 +--- a/glib/tests/atomic.c ++++ b/glib/tests/atomic.c +@@ -248,8 +248,8 @@ G_GNUC_END_IGNORE_DEPRECATIONS + #define THREADS 10 + #define ROUNDS 10000 + +-volatile gint bucket[THREADS]; +-volatile gint atomic; ++gint bucket[THREADS]; /* never contested by threads, not accessed atomically */ ++gint atomic; /* (atomic) */ + + static gpointer + thread_func (gpointer data) +diff --git a/glib/tests/cond.c b/glib/tests/cond.c +index 0f0b3d249..ed338cce3 100644 +--- a/glib/tests/cond.c ++++ b/glib/tests/cond.c +@@ -29,7 +29,7 @@ + + static GCond cond; + static GMutex mutex; +-static volatile gint next; ++static gint next; /* locked by @mutex */ + + static void + push_value (gint value) +diff --git a/glib/tests/gwakeuptest.c b/glib/tests/gwakeuptest.c +index 461a7d3de..b37fb43fc 100644 +--- a/glib/tests/gwakeuptest.c ++++ b/glib/tests/gwakeuptest.c +@@ -92,7 +92,7 @@ struct context + static struct context contexts[NUM_THREADS]; + static GThread *threads[NUM_THREADS]; + static GWakeup *last_token_wakeup; +-static volatile gint tokens_alive; ++static gint tokens_alive; /* (atomic) */ + + static void + context_init (struct context *ctx) +diff --git a/glib/tests/hash.c b/glib/tests/hash.c +index 4623d18d1..f4ff55ce1 100644 +--- a/glib/tests/hash.c ++++ b/glib/tests/hash.c +@@ -1362,7 +1362,7 @@ struct _GHashTable + + GHashFunc hash_func; + GEqualFunc key_equal_func; +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + + #ifndef G_DISABLE_ASSERT + int version; +diff --git a/glib/tests/slice.c b/glib/tests/slice.c +index f37826f3a..a566280db 100644 +--- a/glib/tests/slice.c ++++ b/glib/tests/slice.c +@@ -107,7 +107,7 @@ thread_allocate (gpointer data) + gint b; + gint size; + gpointer p; +- volatile gpointer *loc; ++ gpointer *loc; /* (atomic) */ + + for (i = 0; i < 10000; i++) + { +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0005-tests-Fix-non-atomic-access-to-some-shared-variables.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0005-tests-Fix-non-atomic-access-to-some-shared-variables.patch new file mode 100644 index 000000000..3aecf4582 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0005-tests-Fix-non-atomic-access-to-some-shared-variables.patch @@ -0,0 +1,702 @@ +From 7f905ff1faf0acbe0d2ce69937e031fcacce9294 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:21:00 +0000 +Subject: [PATCH 05/29] tests: Fix non-atomic access to some shared variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And drop the `volatile` qualifier from the variables, as that doesn’t +help with thread safety. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/tests/gdbus-connection-flush.c | 6 +- + gio/tests/gdbus-connection.c | 40 ++++---- + gio/tests/gdbus-overflow.c | 20 ++-- + gio/tests/socket-service.c | 6 +- + gio/tests/task.c | 150 ++++++++++++++--------------- + 5 files changed, 111 insertions(+), 111 deletions(-) + +--- a/gio/tests/gdbus-connection-flush.c ++++ b/gio/tests/gdbus-connection-flush.c +@@ -43,9 +43,9 @@ G_LOCK_DEFINE_STATIC (write); + typedef struct { + GFilterOutputStream parent; + +- volatile gint started; +- volatile gint finished; +- volatile gint flushed; ++ gint started; /* (atomic) */ ++ gint finished; /* (atomic) */ ++ gint flushed; /* (atomic) */ + + GOutputStream *real_output; + } MyOutputStream; +--- a/gio/tests/gdbus-connection.c ++++ b/gio/tests/gdbus-connection.c +@@ -61,9 +61,9 @@ _log (const gchar *format, ...) + static gboolean + test_connection_quit_mainloop (gpointer user_data) + { +- volatile gboolean *quit_mainloop_fired = user_data; ++ gboolean *quit_mainloop_fired = user_data; /* (atomic) */ + _log ("quit_mainloop_fired"); +- *quit_mainloop_fired = TRUE; ++ g_atomic_int_set (quit_mainloop_fired, TRUE); + g_main_loop_quit (loop); + return TRUE; + } +@@ -113,8 +113,8 @@ on_name_owner_changed (GDBusConnection * + static void + a_gdestroynotify_that_sets_a_gboolean_to_true_and_quits_loop (gpointer user_data) + { +- volatile gboolean *val = user_data; +- *val = TRUE; ++ gboolean *val = user_data; /* (atomic) */ ++ g_atomic_int_set (val, TRUE); + _log ("destroynotify fired for %p", val); + g_main_loop_quit (loop); + } +@@ -143,10 +143,10 @@ test_connection_life_cycle (void) + GDBusConnection *c; + GDBusConnection *c2; + GError *error; +- volatile gboolean on_signal_registration_freed_called; +- volatile gboolean on_filter_freed_called; +- volatile gboolean on_register_object_freed_called; +- volatile gboolean quit_mainloop_fired; ++ gboolean on_signal_registration_freed_called; /* (atomic) */ ++ gboolean on_filter_freed_called; /* (atomic) */ ++ gboolean on_register_object_freed_called; /* (atomic) */ ++ gboolean quit_mainloop_fired; /* (atomic) */ + guint quit_mainloop_id; + guint registration_id; + +@@ -208,7 +208,7 @@ test_connection_life_cycle (void) + g_assert_no_error (error); + g_assert_nonnull (c2); + /* signal registration */ +- on_signal_registration_freed_called = FALSE; ++ g_atomic_int_set (&on_signal_registration_freed_called, FALSE); + g_dbus_connection_signal_subscribe (c2, + "org.freedesktop.DBus", /* bus name */ + "org.freedesktop.DBus", /* interface */ +@@ -220,13 +220,13 @@ test_connection_life_cycle (void) + (gpointer) &on_signal_registration_freed_called, + a_gdestroynotify_that_sets_a_gboolean_to_true_and_quits_loop); + /* filter func */ +- on_filter_freed_called = FALSE; ++ g_atomic_int_set (&on_filter_freed_called, FALSE); + g_dbus_connection_add_filter (c2, + some_filter_func, + (gpointer) &on_filter_freed_called, + a_gdestroynotify_that_sets_a_gboolean_to_true_and_quits_loop); + /* object registration */ +- on_register_object_freed_called = FALSE; ++ g_atomic_int_set (&on_register_object_freed_called, FALSE); + error = NULL; + registration_id = g_dbus_connection_register_object (c2, + "/foo", +@@ -239,7 +239,7 @@ test_connection_life_cycle (void) + g_assert_cmpuint (registration_id, >, 0); + /* ok, finalize the connection and check that all the GDestroyNotify functions are invoked as expected */ + g_object_unref (c2); +- quit_mainloop_fired = FALSE; ++ g_atomic_int_set (&quit_mainloop_fired, FALSE); + quit_mainloop_id = g_timeout_add (30000, test_connection_quit_mainloop, (gpointer) &quit_mainloop_fired); + _log ("destroynotifies for\n" + " register_object %p\n" +@@ -250,21 +250,21 @@ test_connection_life_cycle (void) + &on_signal_registration_freed_called); + while (TRUE) + { +- if (on_signal_registration_freed_called && +- on_filter_freed_called && +- on_register_object_freed_called) ++ if (g_atomic_int_get (&on_signal_registration_freed_called) && ++ g_atomic_int_get (&on_filter_freed_called) && ++ g_atomic_int_get (&on_register_object_freed_called)) + break; +- if (quit_mainloop_fired) ++ if (g_atomic_int_get (&quit_mainloop_fired)) + break; + _log ("entering loop"); + g_main_loop_run (loop); + _log ("exiting loop"); + } + g_source_remove (quit_mainloop_id); +- g_assert_true (on_signal_registration_freed_called); +- g_assert_true (on_filter_freed_called); +- g_assert_true (on_register_object_freed_called); +- g_assert_false (quit_mainloop_fired); ++ g_assert_true (g_atomic_int_get (&on_signal_registration_freed_called)); ++ g_assert_true (g_atomic_int_get (&on_filter_freed_called)); ++ g_assert_true (g_atomic_int_get (&on_register_object_freed_called)); ++ g_assert_false (g_atomic_int_get (&quit_mainloop_fired)); + + /* + * Check for correct behavior when the bus goes away +--- a/gio/tests/gdbus-overflow.c ++++ b/gio/tests/gdbus-overflow.c +@@ -86,8 +86,8 @@ overflow_filter_func (GDBusConnection *c + gboolean incoming, + gpointer user_data) + { +- volatile gint *counter = user_data; +- *counter += 1; ++ gint *counter = user_data; /* (atomic) */ ++ g_atomic_int_inc (counter); + return message; + } + +@@ -108,8 +108,8 @@ test_overflow (void) + GDBusConnection *producer, *consumer; + GError *error; + GTimer *timer; +- volatile gint n_messages_received; +- volatile gint n_messages_sent; ++ gint n_messages_received; /* (atomic) */ ++ gint n_messages_sent; /* (atomic) */ + + g_assert_cmpint (socketpair (AF_UNIX, SOCK_STREAM, 0, sv), ==, 0); + +@@ -129,7 +129,7 @@ test_overflow (void) + g_dbus_connection_set_exit_on_close (producer, TRUE); + g_assert_no_error (error); + g_object_unref (socket_connection); +- n_messages_sent = 0; ++ g_atomic_int_set (&n_messages_sent, 0); + g_dbus_connection_add_filter (producer, overflow_filter_func, (gpointer) &n_messages_sent, NULL); + + /* send enough data that we get an EAGAIN */ +@@ -155,7 +155,7 @@ test_overflow (void) + */ + g_timeout_add (500, overflow_on_500ms_later_func, NULL); + g_main_loop_run (loop); +- g_assert_cmpint (n_messages_sent, <, OVERFLOW_NUM_SIGNALS); ++ g_assert_cmpint (g_atomic_int_get (&n_messages_sent), <, OVERFLOW_NUM_SIGNALS); + + /* now suck it all out as a client, and add it up */ + socket = g_socket_new_from_fd (sv[1], &error); +@@ -171,18 +171,18 @@ test_overflow (void) + &error); + g_assert_no_error (error); + g_object_unref (socket_connection); +- n_messages_received = 0; ++ g_atomic_int_set (&n_messages_received, 0); + g_dbus_connection_add_filter (consumer, overflow_filter_func, (gpointer) &n_messages_received, NULL); + g_dbus_connection_start_message_processing (consumer); + + timer = g_timer_new (); + g_timer_start (timer); + +- while (n_messages_received < OVERFLOW_NUM_SIGNALS && g_timer_elapsed (timer, NULL) < OVERFLOW_TIMEOUT_SEC) ++ while (g_atomic_int_get (&n_messages_received) < OVERFLOW_NUM_SIGNALS && g_timer_elapsed (timer, NULL) < OVERFLOW_TIMEOUT_SEC) + g_main_context_iteration (NULL, FALSE); + +- g_assert_cmpint (n_messages_sent, ==, OVERFLOW_NUM_SIGNALS); +- g_assert_cmpint (n_messages_received, ==, OVERFLOW_NUM_SIGNALS); ++ g_assert_cmpint (g_atomic_int_get (&n_messages_sent), ==, OVERFLOW_NUM_SIGNALS); ++ g_assert_cmpint (g_atomic_int_get (&n_messages_received), ==, OVERFLOW_NUM_SIGNALS); + + g_timer_destroy (timer); + g_object_unref (consumer); +--- a/gio/tests/socket-service.c ++++ b/gio/tests/socket-service.c +@@ -99,7 +99,7 @@ test_start_stop (void) + + GMutex mutex_712570; + GCond cond_712570; +-volatile gboolean finalized; ++gboolean finalized; /* (atomic) */ + + GType test_threaded_socket_service_get_type (void); + typedef GThreadedSocketService TestThreadedSocketService; +@@ -120,7 +120,7 @@ test_threaded_socket_service_finalize (G + /* Signal the main thread that finalization completed successfully + * rather than hanging. + */ +- finalized = TRUE; ++ g_atomic_int_set (&finalized, TRUE); + g_cond_signal (&cond_712570); + g_mutex_unlock (&mutex_712570); + } +@@ -235,7 +235,7 @@ test_threaded_712570 (void) + */ + g_object_unref (service); + +- while (!finalized) ++ while (!g_atomic_int_get (&finalized)) + g_cond_wait (&cond_712570, &mutex_712570); + g_mutex_unlock (&mutex_712570); + } +--- a/gio/tests/task.c ++++ b/gio/tests/task.c +@@ -957,7 +957,7 @@ task_weak_notify (gpointer user_data, + gboolean *weak_notify_ran = user_data; + + g_mutex_lock (&run_in_thread_mutex); +- *weak_notify_ran = TRUE; ++ g_atomic_int_set (weak_notify_ran, TRUE); + g_cond_signal (&run_in_thread_cond); + g_mutex_unlock (&run_in_thread_mutex); + } +@@ -1007,7 +1007,7 @@ run_in_thread_thread (GTask *task + g_assert (g_thread_self () != main_thread); + + g_mutex_lock (&run_in_thread_mutex); +- *thread_ran = TRUE; ++ g_atomic_int_set (thread_ran, TRUE); + g_cond_signal (&run_in_thread_cond); + g_mutex_unlock (&run_in_thread_mutex); + +@@ -1018,8 +1018,8 @@ static void + test_run_in_thread (void) + { + GTask *task; +- volatile gboolean thread_ran = FALSE; +- volatile gboolean weak_notify_ran = FALSE; ++ gboolean thread_ran = FALSE; /* (atomic) */ ++ gboolean weak_notify_ran = FALSE; /* (atomic) */ + gboolean notification_emitted = FALSE; + gboolean done = FALSE; + +@@ -1033,12 +1033,12 @@ test_run_in_thread (void) + g_task_run_in_thread (task, run_in_thread_thread); + + g_mutex_lock (&run_in_thread_mutex); +- while (!thread_ran) ++ while (!g_atomic_int_get (&thread_ran)) + g_cond_wait (&run_in_thread_cond, &run_in_thread_mutex); + g_mutex_unlock (&run_in_thread_mutex); + + g_assert (done == FALSE); +- g_assert (weak_notify_ran == FALSE); ++ g_assert_false (g_atomic_int_get (&weak_notify_ran)); + + g_main_loop_run (loop); + +@@ -1050,7 +1050,7 @@ test_run_in_thread (void) + g_object_unref (task); + + g_mutex_lock (&run_in_thread_mutex); +- while (!weak_notify_ran) ++ while (!g_atomic_int_get (&weak_notify_ran)) + g_cond_wait (&run_in_thread_cond, &run_in_thread_mutex); + g_mutex_unlock (&run_in_thread_mutex); + } +@@ -1081,7 +1081,7 @@ run_in_thread_sync_thread (GTask + + g_assert (g_thread_self () != main_thread); + +- *thread_ran = TRUE; ++ g_atomic_int_set (thread_ran, TRUE); + g_task_return_int (task, magic); + } + +@@ -1102,7 +1102,7 @@ test_run_in_thread_sync (void) + g_task_set_task_data (task, &thread_ran, NULL); + g_task_run_in_thread_sync (task, run_in_thread_sync_thread); + +- g_assert (thread_ran == TRUE); ++ g_assert_true (g_atomic_int_get (&thread_ran)); + g_assert (task != NULL); + g_assert (!g_task_had_error (task)); + g_assert_true (g_task_get_completed (task)); +@@ -1487,8 +1487,8 @@ test_return_on_cancel (void) + { + GTask *task; + GCancellable *cancellable; +- volatile ThreadState thread_state; +- volatile gboolean weak_notify_ran = FALSE; ++ ThreadState thread_state; /* (atomic) */ ++ gboolean weak_notify_ran = FALSE; /* (atomic) */ + gboolean callback_ran; + gboolean notification_emitted = FALSE; + +@@ -1498,7 +1498,7 @@ test_return_on_cancel (void) + * early. + */ + callback_ran = FALSE; +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, return_on_cancel_callback, &callback_ran); + g_signal_connect (task, "notify::completed", + (GCallback) completed_cb, ¬ification_emitted); +@@ -1509,18 +1509,18 @@ test_return_on_cancel (void) + g_task_run_in_thread (task, return_on_cancel_thread); + g_object_unref (task); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + g_assert (callback_ran == FALSE); + + g_cancellable_cancel (cancellable); + g_mutex_unlock (&roc_finish_mutex); + g_main_loop_run (loop); + +- g_assert (thread_state == THREAD_COMPLETED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_COMPLETED); + g_assert (callback_ran == TRUE); + g_assert_true (notification_emitted); + +@@ -1529,7 +1529,7 @@ test_return_on_cancel (void) + /* If return-on-cancel is TRUE, it does return early */ + callback_ran = FALSE; + notification_emitted = FALSE; +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, return_on_cancel_callback, &callback_ran); + g_object_weak_ref (G_OBJECT (task), task_weak_notify, (gpointer)&weak_notify_ran); + g_signal_connect (task, "notify::completed", +@@ -1542,27 +1542,27 @@ test_return_on_cancel (void) + g_task_run_in_thread (task, return_on_cancel_thread); + g_object_unref (task); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + g_assert (callback_ran == FALSE); + + g_cancellable_cancel (cancellable); + g_main_loop_run (loop); +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + g_assert (callback_ran == TRUE); + +- g_assert (weak_notify_ran == FALSE); ++ g_assert_false (g_atomic_int_get (&weak_notify_ran)); + +- while (thread_state == THREAD_RUNNING) ++ while (g_atomic_int_get (&thread_state) == THREAD_RUNNING) + g_cond_wait (&roc_finish_cond, &roc_finish_mutex); + g_mutex_unlock (&roc_finish_mutex); + +- g_assert (thread_state == THREAD_CANCELLED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_CANCELLED); + g_mutex_lock (&run_in_thread_mutex); +- while (!weak_notify_ran) ++ while (!g_atomic_int_get (&weak_notify_ran)) + g_cond_wait (&run_in_thread_cond, &run_in_thread_mutex); + g_mutex_unlock (&run_in_thread_mutex); + +@@ -1574,7 +1574,7 @@ test_return_on_cancel (void) + */ + callback_ran = FALSE; + notification_emitted = FALSE; +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, return_on_cancel_callback, &callback_ran); + g_signal_connect (task, "notify::completed", + (GCallback) completed_cb, ¬ification_emitted); +@@ -1591,17 +1591,17 @@ test_return_on_cancel (void) + g_main_loop_run (loop); + g_assert (callback_ran == TRUE); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + +- while (thread_state == THREAD_RUNNING) ++ while (g_atomic_int_get (&thread_state) == THREAD_RUNNING) + g_cond_wait (&roc_finish_cond, &roc_finish_mutex); + g_mutex_unlock (&roc_finish_mutex); + +- g_assert (thread_state == THREAD_CANCELLED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_CANCELLED); + g_assert_true (notification_emitted); + + g_object_unref (cancellable); +@@ -1621,7 +1621,7 @@ test_return_on_cancel_sync (void) + { + GTask *task; + GCancellable *cancellable; +- volatile ThreadState thread_state; ++ ThreadState thread_state; /* (atomic) */ + GThread *runner_thread; + gssize ret; + GError *error = NULL; +@@ -1630,7 +1630,7 @@ test_return_on_cancel_sync (void) + + /* If return-on-cancel is FALSE, the task does not return early. + */ +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, run_in_thread_sync_callback, NULL); + + g_task_set_task_data (task, (gpointer)&thread_state, NULL); +@@ -1639,16 +1639,16 @@ test_return_on_cancel_sync (void) + runner_thread = g_thread_new ("return-on-cancel-sync runner thread", + cancel_sync_runner_thread, task); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + + g_cancellable_cancel (cancellable); + g_mutex_unlock (&roc_finish_mutex); + g_thread_join (runner_thread); +- g_assert (thread_state == THREAD_COMPLETED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_COMPLETED); + + ret = g_task_propagate_int (task, &error); + g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); +@@ -1660,7 +1660,7 @@ test_return_on_cancel_sync (void) + g_cancellable_reset (cancellable); + + /* If return-on-cancel is TRUE, it does return early */ +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, run_in_thread_sync_callback, NULL); + g_task_set_return_on_cancel (task, TRUE); + +@@ -1670,15 +1670,15 @@ test_return_on_cancel_sync (void) + runner_thread = g_thread_new ("return-on-cancel-sync runner thread", + cancel_sync_runner_thread, task); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + + g_cancellable_cancel (cancellable); + g_thread_join (runner_thread); +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + + ret = g_task_propagate_int (task, &error); + g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); +@@ -1687,18 +1687,18 @@ test_return_on_cancel_sync (void) + + g_object_unref (task); + +- while (thread_state == THREAD_RUNNING) ++ while (g_atomic_int_get (&thread_state) == THREAD_RUNNING) + g_cond_wait (&roc_finish_cond, &roc_finish_mutex); + g_mutex_unlock (&roc_finish_mutex); + +- g_assert (thread_state == THREAD_CANCELLED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_CANCELLED); + + g_cancellable_reset (cancellable); + + /* If the task is already cancelled before it starts, it returns + * immediately, but the thread func still runs. + */ +- thread_state = THREAD_STARTING; ++ g_atomic_int_set (&thread_state, THREAD_STARTING); + task = g_task_new (NULL, cancellable, run_in_thread_sync_callback, NULL); + g_task_set_return_on_cancel (task, TRUE); + +@@ -1711,7 +1711,7 @@ test_return_on_cancel_sync (void) + cancel_sync_runner_thread, task); + + g_thread_join (runner_thread); +- g_assert (thread_state == THREAD_STARTING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_STARTING); + + ret = g_task_propagate_int (task, &error); + g_assert_error (error, G_IO_ERROR, G_IO_ERROR_CANCELLED); +@@ -1720,17 +1720,17 @@ test_return_on_cancel_sync (void) + + g_object_unref (task); + +- while (thread_state == THREAD_STARTING) ++ while (g_atomic_int_get (&thread_state) == THREAD_STARTING) + g_cond_wait (&roc_init_cond, &roc_init_mutex); + g_mutex_unlock (&roc_init_mutex); + +- g_assert (thread_state == THREAD_RUNNING); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_RUNNING); + +- while (thread_state == THREAD_RUNNING) ++ while (g_atomic_int_get (&thread_state) == THREAD_RUNNING) + g_cond_wait (&roc_finish_cond, &roc_finish_mutex); + g_mutex_unlock (&roc_finish_mutex); + +- g_assert (thread_state == THREAD_CANCELLED); ++ g_assert_cmpint (g_atomic_int_get (&thread_state), ==, THREAD_CANCELLED); + + g_object_unref (cancellable); + } +@@ -1776,7 +1776,7 @@ return_on_cancel_atomic_thread (GTask + gpointer task_data, + GCancellable *cancellable) + { +- gint *state = task_data; ++ gint *state = task_data; /* (atomic) */ + + g_assert (source_object == g_task_get_source_object (task)); + g_assert (task_data == g_task_get_task_data (task)); +@@ -1784,34 +1784,34 @@ return_on_cancel_atomic_thread (GTask + g_assert_false (g_task_get_completed (task)); + + g_assert (g_thread_self () != main_thread); +- g_assert_cmpint (*state, ==, 0); ++ g_assert_cmpint (g_atomic_int_get (state), ==, 0); + + g_mutex_lock (&roca_mutex_1); +- *state = 1; ++ g_atomic_int_set (state, 1); + g_cond_signal (&roca_cond_1); + g_mutex_unlock (&roca_mutex_1); + + g_mutex_lock (&roca_mutex_2); + if (g_task_set_return_on_cancel (task, FALSE)) +- *state = 2; ++ g_atomic_int_set (state, 2); + else +- *state = 3; ++ g_atomic_int_set (state, 3); + g_cond_signal (&roca_cond_2); + g_mutex_unlock (&roca_mutex_2); + + g_mutex_lock (&roca_mutex_1); + if (g_task_set_return_on_cancel (task, TRUE)) +- *state = 4; ++ g_atomic_int_set (state, 4); + else +- *state = 5; ++ g_atomic_int_set (state, 5); + g_cond_signal (&roca_cond_1); + g_mutex_unlock (&roca_mutex_1); + + g_mutex_lock (&roca_mutex_2); + if (g_task_set_return_on_cancel (task, TRUE)) +- *state = 6; ++ g_atomic_int_set (state, 6); + else +- *state = 7; ++ g_atomic_int_set (state, 7); + g_cond_signal (&roca_cond_2); + g_mutex_unlock (&roca_mutex_2); + +@@ -1823,7 +1823,7 @@ test_return_on_cancel_atomic (void) + { + GTask *task; + GCancellable *cancellable; +- volatile gint state; ++ gint state; /* (atomic) */ + gboolean notification_emitted = FALSE; + gboolean callback_ran; + +@@ -1832,7 +1832,7 @@ test_return_on_cancel_atomic (void) + g_mutex_lock (&roca_mutex_2); + + /* If we don't cancel it, each set_return_on_cancel() call will succeed */ +- state = 0; ++ g_atomic_int_set (&state, 0); + callback_ran = FALSE; + task = g_task_new (NULL, cancellable, return_on_cancel_atomic_callback, &callback_ran); + g_task_set_return_on_cancel (task, TRUE); +@@ -1843,23 +1843,23 @@ test_return_on_cancel_atomic (void) + g_task_run_in_thread (task, return_on_cancel_atomic_thread); + g_object_unref (task); + +- g_assert_cmpint (state, ==, 0); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 0); + +- while (state == 0) ++ while (g_atomic_int_get (&state) == 0) + g_cond_wait (&roca_cond_1, &roca_mutex_1); +- g_assert (state == 1); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 1); + +- while (state == 1) ++ while (g_atomic_int_get (&state) == 1) + g_cond_wait (&roca_cond_2, &roca_mutex_2); +- g_assert (state == 2); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 2); + +- while (state == 2) ++ while (g_atomic_int_get (&state) == 2) + g_cond_wait (&roca_cond_1, &roca_mutex_1); +- g_assert (state == 4); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 4); + +- while (state == 4) ++ while (g_atomic_int_get (&state) == 4) + g_cond_wait (&roca_cond_2, &roca_mutex_2); +- g_assert (state == 6); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 6); + + /* callback assumes there'll be a cancelled error */ + g_cancellable_cancel (cancellable); +@@ -1876,7 +1876,7 @@ test_return_on_cancel_atomic (void) + * task won't complete right away, and further + * g_task_set_return_on_cancel() calls will return FALSE. + */ +- state = 0; ++ g_atomic_int_set (&state, 0); + callback_ran = FALSE; + notification_emitted = FALSE; + task = g_task_new (NULL, cancellable, return_on_cancel_atomic_callback, &callback_ran); +@@ -1887,16 +1887,16 @@ test_return_on_cancel_atomic (void) + g_task_set_task_data (task, (gpointer)&state, NULL); + g_task_run_in_thread (task, return_on_cancel_atomic_thread); + +- g_assert_cmpint (state, ==, 0); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 0); + +- while (state == 0) ++ while (g_atomic_int_get (&state) == 0) + g_cond_wait (&roca_cond_1, &roca_mutex_1); +- g_assert (state == 1); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 1); + g_assert (g_task_get_return_on_cancel (task)); + +- while (state == 1) ++ while (g_atomic_int_get (&state) == 1) + g_cond_wait (&roca_cond_2, &roca_mutex_2); +- g_assert (state == 2); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 2); + g_assert (!g_task_get_return_on_cancel (task)); + + g_cancellable_cancel (cancellable); +@@ -1904,18 +1904,18 @@ test_return_on_cancel_atomic (void) + g_main_loop_run (loop); + g_assert (callback_ran == FALSE); + +- while (state == 2) ++ while (g_atomic_int_get (&state) == 2) + g_cond_wait (&roca_cond_1, &roca_mutex_1); +- g_assert (state == 5); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 5); + g_assert (!g_task_get_return_on_cancel (task)); + + g_main_loop_run (loop); + g_assert (callback_ran == TRUE); + g_assert_true (notification_emitted); + +- while (state == 5) ++ while (g_atomic_int_get (&state) == 5) + g_cond_wait (&roca_cond_2, &roca_mutex_2); +- g_assert (state == 7); ++ g_assert_cmpint (g_atomic_int_get (&state), ==, 7); + + g_object_unref (cancellable); + g_mutex_unlock (&roca_mutex_1); diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0006-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0006-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch new file mode 100644 index 000000000..7f22b4d46 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0006-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch @@ -0,0 +1,35 @@ +From f4607def1695efb50eb49e0586eed0f5557935f2 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:20:37 +0000 +Subject: [PATCH 06/29] tests: Drop unnecessary volatile qualifiers from tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/tests/g-file-info.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gio/tests/g-file-info.c b/gio/tests/g-file-info.c +index 809b0ec79..1a02b5e0e 100644 +--- a/gio/tests/g-file-info.c ++++ b/gio/tests/g-file-info.c +@@ -221,7 +221,7 @@ test_internal_enhanced_stdio (void) + guint64 size_p0, alsize_p0, size_ps, alsize_ps; + const gchar *id_p0; + const gchar *id_p1; +- volatile guint64 time_p0; ++ guint64 time_p0; + gchar *tmp_dir; + wchar_t *programdata_dir_w; + wchar_t *users_dir_w; +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0007-gdbusconnection-Drop-unnecessary-volatile-qualifiers.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0007-gdbusconnection-Drop-unnecessary-volatile-qualifiers.patch new file mode 100644 index 000000000..78753f821 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0007-gdbusconnection-Drop-unnecessary-volatile-qualifiers.patch @@ -0,0 +1,111 @@ +From 33612404397f87f0cd45da90d3aa9ab60df895ee Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:24:28 +0000 +Subject: [PATCH 07/29] gdbusconnection: Drop unnecessary volatile qualifiers + from variables + +This should introduce no API changes; there are public functions +exported by `GDBusConnection` which still have some (incorrectly) +`volatile` arguments, but dropping those qualifiers would be an API +break. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/gdbusconnection.c | 22 +++++++++++----------- + 1 file changed, 11 insertions(+), 11 deletions(-) + +diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c +index ed8cf6219..91c365e80 100644 +--- a/gio/gdbusconnection.c ++++ b/gio/gdbusconnection.c +@@ -393,7 +393,7 @@ struct _GDBusConnection + * FLAG_CLOSED is the closed property. It may be read at any time, but + * may only be written while holding @lock. + */ +- volatile gint atomic_flags; ++ gint atomic_flags; /* (atomic) */ + + /* If the connection could not be established during initable_init(), + * this GError will be set. +@@ -1596,7 +1596,7 @@ static gboolean + g_dbus_connection_send_message_unlocked (GDBusConnection *connection, + GDBusMessage *message, + GDBusSendMessageFlags flags, +- volatile guint32 *out_serial, ++ guint32 *out_serial, + GError **error) + { + guchar *blob; +@@ -1741,7 +1741,7 @@ g_dbus_connection_send_message (GDBusConnection *connection, + g_return_val_if_fail (error == NULL || *error == NULL, FALSE); + + CONNECTION_LOCK (connection); +- ret = g_dbus_connection_send_message_unlocked (connection, message, flags, out_serial, error); ++ ret = g_dbus_connection_send_message_unlocked (connection, message, flags, (guint32 *) out_serial, error); + CONNECTION_UNLOCK (connection); + return ret; + } +@@ -1901,7 +1901,7 @@ g_dbus_connection_send_message_with_reply_unlocked (GDBusConnection *connect + GDBusMessage *message, + GDBusSendMessageFlags flags, + gint timeout_msec, +- volatile guint32 *out_serial, ++ guint32 *out_serial, + GCancellable *cancellable, + GAsyncReadyCallback callback, + gpointer user_data) +@@ -1909,7 +1909,7 @@ g_dbus_connection_send_message_with_reply_unlocked (GDBusConnection *connect + GTask *task; + SendMessageData *data; + GError *error = NULL; +- volatile guint32 serial; ++ guint32 serial; + + if (out_serial == NULL) + out_serial = &serial; +@@ -2022,7 +2022,7 @@ g_dbus_connection_send_message_with_reply (GDBusConnection *connection, + message, + flags, + timeout_msec, +- out_serial, ++ (guint32 *) out_serial, + cancellable, + callback, + user_data); +@@ -3082,7 +3082,7 @@ g_dbus_connection_get_peer_credentials (GDBusConnection *connection) + + /* ---------------------------------------------------------------------------------------------------- */ + +-static volatile guint _global_filter_id = 1; ++static guint _global_filter_id = 1; /* (atomic) */ + + /** + * g_dbus_connection_add_filter: +@@ -3327,9 +3327,9 @@ args_to_rule (const gchar *sender, + return g_string_free (rule, FALSE); + } + +-static volatile guint _global_subscriber_id = 1; +-static volatile guint _global_registration_id = 1; +-static volatile guint _global_subtree_registration_id = 1; ++static guint _global_subscriber_id = 1; /* (atomic) */ ++static guint _global_registration_id = 1; /* (atomic) */ ++static guint _global_subtree_registration_id = 1; /* (atomic) */ + + /* ---------------------------------------------------------------------------------------------------- */ + +@@ -5992,7 +5992,7 @@ g_dbus_connection_call_sync_internal (GDBusConnection *connection, + message, + send_flags, + timeout_msec, +- NULL, /* volatile guint32 *out_serial */ ++ NULL, /* guint32 *out_serial */ + cancellable, + &local_error); + +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0008-gdbuserror-Drop-unnecessary-volatile-qualifiers-from.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0008-gdbuserror-Drop-unnecessary-volatile-qualifiers-from.patch new file mode 100644 index 000000000..e947a264c --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0008-gdbuserror-Drop-unnecessary-volatile-qualifiers-from.patch @@ -0,0 +1,95 @@ +From 7c7623c4a31fb0f2a7176c43acc728093818b58c Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:26:19 +0000 +Subject: [PATCH 08/29] gdbuserror: Drop unnecessary volatile qualifiers from + variables + +This should introduce no API changes. The +`g_dbus_error_register_error_domain()` function still (incorrectly) has +a `volatile` argument, but dropping that qualifier would be an API +break. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/gdbuserror.c | 28 +++++++++++++++++----------- + 1 file changed, 17 insertions(+), 11 deletions(-) + +diff --git a/gio/gdbuserror.c b/gio/gdbuserror.c +index 682677354..b03a33f27 100644 +--- a/gio/gdbuserror.c ++++ b/gio/gdbuserror.c +@@ -84,12 +84,12 @@ + * GQuark + * foo_bar_error_quark (void) + * { +- * static volatile gsize quark_volatile = 0; ++ * static gsize quark = 0; + * g_dbus_error_register_error_domain ("foo-bar-error-quark", +- * &quark_volatile, ++ * &quark, + * foo_bar_error_entries, + * G_N_ELEMENTS (foo_bar_error_entries)); +- * return (GQuark) quark_volatile; ++ * return (GQuark) quark; + * } + * ]| + * With this setup, a D-Bus peer can transparently pass e.g. %FOO_BAR_ERROR_ANOTHER_ERROR and +@@ -160,12 +160,12 @@ GQuark + g_dbus_error_quark (void) + { + G_STATIC_ASSERT (G_N_ELEMENTS (g_dbus_error_entries) - 1 == G_DBUS_ERROR_PROPERTY_READ_ONLY); +- static volatile gsize quark_volatile = 0; ++ static gsize quark = 0; + g_dbus_error_register_error_domain ("g-dbus-error-quark", +- &quark_volatile, ++ &quark, + g_dbus_error_entries, + G_N_ELEMENTS (g_dbus_error_entries)); +- return (GQuark) quark_volatile; ++ return (GQuark) quark; + } + + /** +@@ -185,25 +185,31 @@ g_dbus_error_register_error_domain (const gchar *error_domain_quark_na + const GDBusErrorEntry *entries, + guint num_entries) + { ++ gsize *quark; ++ + g_return_if_fail (error_domain_quark_name != NULL); + g_return_if_fail (quark_volatile != NULL); + g_return_if_fail (entries != NULL); + g_return_if_fail (num_entries > 0); + +- if (g_once_init_enter (quark_volatile)) ++ /* Drop the volatile qualifier, which should never have been on the argument ++ * in the first place. */ ++ quark = (gsize *) quark_volatile; ++ ++ if (g_once_init_enter (quark)) + { + guint n; +- GQuark quark; ++ GQuark new_quark; + +- quark = g_quark_from_static_string (error_domain_quark_name); ++ new_quark = g_quark_from_static_string (error_domain_quark_name); + + for (n = 0; n < num_entries; n++) + { +- g_warn_if_fail (g_dbus_error_register_error (quark, ++ g_warn_if_fail (g_dbus_error_register_error (new_quark, + entries[n].error_code, + entries[n].dbus_error_name)); + } +- g_once_init_leave (quark_volatile, quark); ++ g_once_init_leave (quark, new_quark); + } + } + +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0009-gio-Drop-unnecessary-volatile-qualifiers-from-intern.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0009-gio-Drop-unnecessary-volatile-qualifiers-from-intern.patch new file mode 100644 index 000000000..7897d43bb --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0009-gio-Drop-unnecessary-volatile-qualifiers-from-intern.patch @@ -0,0 +1,207 @@ +From 74250cd9c9dfd3ad428e445c095ceac88ba18691 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:28:23 +0000 +Subject: [PATCH 09/29] gio: Drop unnecessary volatile qualifiers from internal + variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/gdbusinterfaceskeleton.c | 2 +- + gio/gdbusintrospection.h | 14 +++++++------- + gio/gdbusnameowning.c | 4 ++-- + gio/gdbusnamewatching.c | 4 ++-- + gio/gdbusprivate.c | 10 +++++----- + gio/gnetworking.c | 2 +- + 6 files changed, 18 insertions(+), 18 deletions(-) + +diff --git a/gio/gdbusinterfaceskeleton.c b/gio/gdbusinterfaceskeleton.c +index 243b4a0a4..76398df36 100644 +--- a/gio/gdbusinterfaceskeleton.c ++++ b/gio/gdbusinterfaceskeleton.c +@@ -458,7 +458,7 @@ dbus_interface_interface_init (GDBusInterfaceIface *iface) + + typedef struct + { +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + GDBusInterfaceSkeleton *interface; + GDBusInterfaceMethodCallFunc method_call_func; + GDBusMethodInvocation *invocation; +diff --git a/gio/gdbusintrospection.h b/gio/gdbusintrospection.h +index 14b171055..f2e291787 100644 +--- a/gio/gdbusintrospection.h ++++ b/gio/gdbusintrospection.h +@@ -43,7 +43,7 @@ G_BEGIN_DECLS + struct _GDBusAnnotationInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *key; + gchar *value; + GDBusAnnotationInfo **annotations; +@@ -63,7 +63,7 @@ struct _GDBusAnnotationInfo + struct _GDBusArgInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *name; + gchar *signature; + GDBusAnnotationInfo **annotations; +@@ -84,7 +84,7 @@ struct _GDBusArgInfo + struct _GDBusMethodInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *name; + GDBusArgInfo **in_args; + GDBusArgInfo **out_args; +@@ -105,7 +105,7 @@ struct _GDBusMethodInfo + struct _GDBusSignalInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *name; + GDBusArgInfo **args; + GDBusAnnotationInfo **annotations; +@@ -126,7 +126,7 @@ struct _GDBusSignalInfo + struct _GDBusPropertyInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *name; + gchar *signature; + GDBusPropertyInfoFlags flags; +@@ -149,7 +149,7 @@ struct _GDBusPropertyInfo + struct _GDBusInterfaceInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *name; + GDBusMethodInfo **methods; + GDBusSignalInfo **signals; +@@ -172,7 +172,7 @@ struct _GDBusInterfaceInfo + struct _GDBusNodeInfo + { + /*< public >*/ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + gchar *path; + GDBusInterfaceInfo **interfaces; + GDBusNodeInfo **nodes; +diff --git a/gio/gdbusnameowning.c b/gio/gdbusnameowning.c +index d20e6ffed..1130d6789 100644 +--- a/gio/gdbusnameowning.c ++++ b/gio/gdbusnameowning.c +@@ -55,7 +55,7 @@ typedef enum + + typedef struct + { +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + guint id; + GBusNameOwnerFlags flags; + gchar *name; +@@ -73,7 +73,7 @@ typedef struct + guint name_acquired_subscription_id; + guint name_lost_subscription_id; + +- volatile gboolean cancelled; /* must hold lock when reading or modifying */ ++ gboolean cancelled; /* must hold lock when reading or modifying */ + + gboolean needs_release; + } Client; +diff --git a/gio/gdbusnamewatching.c b/gio/gdbusnamewatching.c +index bc2a9119e..8d24700c5 100644 +--- a/gio/gdbusnamewatching.c ++++ b/gio/gdbusnamewatching.c +@@ -56,7 +56,7 @@ typedef enum + + typedef struct + { +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + guint id; + gchar *name; + GBusNameWatcherFlags flags; +@@ -78,7 +78,7 @@ typedef struct + } Client; + + /* Must be accessed atomically. */ +-static volatile guint next_global_id = 1; ++static guint next_global_id = 1; /* (atomic) */ + + /* Must be accessed with @lock held. */ + static GHashTable *map_id_to_client = NULL; +diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c +index 2551e4791..99b37f3eb 100644 +--- a/gio/gdbusprivate.c ++++ b/gio/gdbusprivate.c +@@ -265,7 +265,7 @@ ensure_required_types (void) + + typedef struct + { +- volatile gint refcount; ++ gint refcount; /* (atomic) */ + GThread *thread; + GMainContext *context; + GMainLoop *loop; +@@ -341,12 +341,12 @@ typedef enum { + + struct GDBusWorker + { +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + + SharedThreadData *shared_thread_data; + + /* really a boolean, but GLib 2.28 lacks atomic boolean ops */ +- volatile gint stopped; ++ gint stopped; /* (atomic) */ + + /* TODO: frozen (e.g. G_DBUS_CONNECTION_FLAGS_DELAY_MESSAGE_PROCESSING) currently + * only affects messages received from the other peer (since GDBusServer is the +@@ -1941,11 +1941,11 @@ _g_dbus_debug_print_unlock (void) + void + _g_dbus_initialize (void) + { +- static volatile gsize initialized = 0; ++ static gsize initialized = 0; + + if (g_once_init_enter (&initialized)) + { +- volatile GQuark g_dbus_error_domain; ++ GQuark g_dbus_error_domain; + const gchar *debug; + + g_dbus_error_domain = G_DBUS_ERROR; +diff --git a/gio/gnetworking.c b/gio/gnetworking.c +index 05507fe70..7bc6d73c4 100644 +--- a/gio/gnetworking.c ++++ b/gio/gnetworking.c +@@ -61,7 +61,7 @@ void + g_networking_init (void) + { + #ifdef G_OS_WIN32 +- static volatile gsize inited = 0; ++ static gsize inited = 0; + + if (g_once_init_enter (&inited)) + { +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0010-kqueue-Fix-unlocked-access-to-shared-variable.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0010-kqueue-Fix-unlocked-access-to-shared-variable.patch new file mode 100644 index 000000000..e52b70942 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0010-kqueue-Fix-unlocked-access-to-shared-variable.patch @@ -0,0 +1,51 @@ +From e4e88688a0722237effc56cc21438d0c8e82de88 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:29:26 +0000 +Subject: [PATCH 10/29] kqueue: Fix unlocked access to shared variable +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And drop the `volatile` qualifier because it doesn’t help. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/kqueue/kqueue-missing.c | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/gio/kqueue/kqueue-missing.c b/gio/kqueue/kqueue-missing.c +index 37af82e5b..d1ffdf4bd 100644 +--- a/gio/kqueue/kqueue-missing.c ++++ b/gio/kqueue/kqueue-missing.c +@@ -34,7 +34,7 @@ static gboolean km_debug_enabled = FALSE; + static GSList *missing_subs_list = NULL; + G_LOCK_DEFINE_STATIC (missing_lock); + +-static volatile gboolean scan_missing_running = FALSE; ++static gboolean scan_missing_running = FALSE; /* must be accessed under @missing_lock */ + + + static gboolean +@@ -62,7 +62,6 @@ _km_add_missing (kqueue_sub *sub) + + KM_W ("adding %s to missing list\n", sub->filename); + missing_subs_list = g_slist_prepend (missing_subs_list, sub); +- G_UNLOCK (missing_lock); + + if (!scan_missing_running) + { +@@ -73,6 +72,8 @@ _km_add_missing (kqueue_sub *sub) + g_source_attach (source, GLIB_PRIVATE_CALL (g_get_worker_context) ()); + g_source_unref (source); + } ++ ++ G_UNLOCK (missing_lock); + } + + /** +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0011-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0011-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch new file mode 100644 index 000000000..ea3fd9f6e --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0011-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch @@ -0,0 +1,126 @@ +From 7cdb68713c1863a27ad82d801756ec74097e8e87 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:30:36 +0000 +Subject: [PATCH 11/29] tests: Drop unnecessary volatile qualifiers from tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + tests/gobject/performance-threaded.c | 2 +- + tests/gobject/performance.c | 4 ++-- + tests/onceinit.c | 16 ++++++++-------- + 3 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/tests/gobject/performance-threaded.c b/tests/gobject/performance-threaded.c +index 30ea5bd80..c98541d66 100644 +--- a/tests/gobject/performance-threaded.c ++++ b/tests/gobject/performance-threaded.c +@@ -52,7 +52,7 @@ static GType liststore_interfaces[6]; + static gpointer + register_types (void) + { +- static volatile gsize inited = 0; ++ static gsize inited = 0; + if (g_once_init_enter (&inited)) + { + liststore_interfaces[0] = simple_register_class ("GtkBuildable", G_TYPE_INTERFACE, 0); +diff --git a/tests/gobject/performance.c b/tests/gobject/performance.c +index 236ffaed0..163be58b4 100644 +--- a/tests/gobject/performance.c ++++ b/tests/gobject/performance.c +@@ -575,8 +575,8 @@ test_type_check_run (PerformanceTest *test, + gpointer _data) + { + struct TypeCheckTest *data = _data; +- volatile GObject *object = data->object; +- volatile GType type, types[5]; ++ GObject *object = data->object; ++ GType type, types[5]; + int i, j; + + types[0] = test_iface1_get_type (); +diff --git a/tests/onceinit.c b/tests/onceinit.c +index 89ba6a136..9788efcbd 100644 +--- a/tests/onceinit.c ++++ b/tests/onceinit.c +@@ -25,13 +25,13 @@ + + static GMutex tmutex; + static GCond tcond; +-static volatile int thread_call_count = 0; ++static int thread_call_count = 0; /* (atomic) */ + static char dummy_value = 'x'; + + static void + assert_singleton_execution1 (void) + { +- static volatile int seen_execution = 0; ++ static int seen_execution = 0; /* (atomic) */ + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); + if (old_seen_execution != 0) + g_error ("%s: function executed more than once", G_STRFUNC); +@@ -40,7 +40,7 @@ assert_singleton_execution1 (void) + static void + assert_singleton_execution2 (void) + { +- static volatile int seen_execution = 0; ++ static int seen_execution = 0; /* (atomic) */ + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); + if (old_seen_execution != 0) + g_error ("%s: function executed more than once", G_STRFUNC); +@@ -49,7 +49,7 @@ assert_singleton_execution2 (void) + static void + assert_singleton_execution3 (void) + { +- static volatile int seen_execution = 0; ++ static int seen_execution = 0; /* (atomic) */ + int old_seen_execution = g_atomic_int_add (&seen_execution, 1); + if (old_seen_execution != 0) + g_error ("%s: function executed more than once", G_STRFUNC); +@@ -58,7 +58,7 @@ assert_singleton_execution3 (void) + static void + initializer1 (void) + { +- static volatile gsize initialized = 0; ++ static gsize initialized = 0; + if (g_once_init_enter (&initialized)) + { + gsize initval = 42; +@@ -70,7 +70,7 @@ initializer1 (void) + static gpointer + initializer2 (void) + { +- static volatile gsize initialized = 0; ++ static gsize initialized = 0; + if (g_once_init_enter (&initialized)) + { + void *pointer_value = &dummy_value; +@@ -83,7 +83,7 @@ initializer2 (void) + static void + initializer3 (void) + { +- static volatile gsize initialized = 0; ++ static gsize initialized = 0; + if (g_once_init_enter (&initialized)) + { + gsize initval = 42; +@@ -163,7 +163,7 @@ main (int argc, + static void \ + test_initializer_##N (void) \ + { \ +- static volatile gsize initialized = 0; \ ++ static gsize initialized = 0; \ + if (g_once_init_enter (&initialized)) \ + { \ + g_free (g_strdup_printf ("cpuhog%5d", 1)); \ +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0012-tests-Fix-non-atomic-access-to-some-shared-variables.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0012-tests-Fix-non-atomic-access-to-some-shared-variables.patch new file mode 100644 index 000000000..be7fcba8c --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0012-tests-Fix-non-atomic-access-to-some-shared-variables.patch @@ -0,0 +1,103 @@ +From 1a7f0002a052725fb646e136fadd5dad66222d7f Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:31:01 +0000 +Subject: [PATCH 12/29] tests: Fix non-atomic access to some shared variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +And drop the `volatile` qualifier from the variables, as that doesn’t +help with thread safety. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + tests/refcount/objects.c | 8 ++++---- + tests/refcount/properties3.c | 8 ++++---- + 2 files changed, 8 insertions(+), 8 deletions(-) + +diff --git a/tests/refcount/objects.c b/tests/refcount/objects.c +index 963766d00..0c471a42b 100644 +--- a/tests/refcount/objects.c ++++ b/tests/refcount/objects.c +@@ -26,7 +26,7 @@ struct _GTestClass + }; + + static GType my_test_get_type (void); +-static volatile gboolean stopping; ++static gint stopping; /* (atomic) */ + + static void my_test_class_init (GTestClass * klass); + static void my_test_init (GTest * test); +@@ -101,7 +101,7 @@ run_thread (GTest * test) + { + gint i = 1; + +- while (!stopping) { ++ while (!g_atomic_int_get (&stopping)) { + my_test_do_refcount (test); + if ((i++ % 10000) == 0) { + g_print ("."); +@@ -128,7 +128,7 @@ main (int argc, char **argv) + + test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *)); + +- stopping = FALSE; ++ g_atomic_int_set (&stopping, 0); + + for (i = 0; i < n_threads; i++) { + GThread *thread; +@@ -141,7 +141,7 @@ main (int argc, char **argv) + } + g_usleep (5000000); + +- stopping = TRUE; ++ g_atomic_int_set (&stopping, 1); + + g_print ("\nstopping\n"); + +diff --git a/tests/refcount/properties3.c b/tests/refcount/properties3.c +index bc8820661..31f26a46e 100644 +--- a/tests/refcount/properties3.c ++++ b/tests/refcount/properties3.c +@@ -34,7 +34,7 @@ struct _GTestClass + static GType my_test_get_type (void); + G_DEFINE_TYPE (GTest, my_test, G_TYPE_OBJECT) + +-static volatile gboolean stopping; ++static gint stopping; /* (atomic) */ + + static void my_test_get_property (GObject *object, + guint prop_id, +@@ -140,7 +140,7 @@ run_thread (GTest * test) + { + gint i = 1; + +- while (!stopping) { ++ while (!g_atomic_int_get (&stopping)) { + my_test_do_property (test); + if ((i++ % 10000) == 0) + { +@@ -170,7 +170,7 @@ main (int argc, char **argv) + + test_threads = g_array_new (FALSE, FALSE, sizeof (GThread *)); + +- stopping = FALSE; ++ g_atomic_int_set (&stopping, 0); + + for (i = 0; i < n_threads; i++) { + GThread *thread; +@@ -180,7 +180,7 @@ main (int argc, char **argv) + } + g_usleep (30000000); + +- stopping = TRUE; ++ g_atomic_int_set (&stopping, 1); + g_print ("\nstopping\n"); + + /* join all threads */ +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0013-gatomic-Drop-unnecessary-volatile-qualifiers-from-in.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0013-gatomic-Drop-unnecessary-volatile-qualifiers-from-in.patch new file mode 100644 index 000000000..efc6817bd --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0013-gatomic-Drop-unnecessary-volatile-qualifiers-from-in.patch @@ -0,0 +1,180 @@ +From 3c648457c284b4ba313b8591008d2e18ae4335eb Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:36:37 +0000 +Subject: [PATCH 13/29] gatomic: Drop unnecessary volatile qualifiers from + internal variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It’s not necessary and provides no thread safety guarantees. + +The `volatile` qualifiers on the function arguments have to be kept, as +they are (unfortunately) part of the API. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gatomic.c | 34 +++++++++++++++++----------------- + 1 file changed, 17 insertions(+), 17 deletions(-) + +diff --git a/glib/gatomic.c b/glib/gatomic.c +index 8b8c6453d..67f5ba6b4 100644 +--- a/glib/gatomic.c ++++ b/glib/gatomic.c +@@ -316,7 +316,7 @@ guint + gpointer + (g_atomic_pointer_get) (const volatile void *atomic) + { +- return g_atomic_pointer_get ((const volatile gpointer *) atomic); ++ return g_atomic_pointer_get ((gpointer *) atomic); + } + + /** +@@ -335,7 +335,7 @@ void + (g_atomic_pointer_set) (volatile void *atomic, + gpointer newval) + { +- g_atomic_pointer_set ((volatile gpointer *) atomic, newval); ++ g_atomic_pointer_set ((gpointer *) atomic, newval); + } + + /** +@@ -363,7 +363,7 @@ gboolean + gpointer oldval, + gpointer newval) + { +- return g_atomic_pointer_compare_and_exchange ((volatile gpointer *) atomic, ++ return g_atomic_pointer_compare_and_exchange ((gpointer *) atomic, + oldval, newval); + } + +@@ -387,7 +387,7 @@ gssize + (g_atomic_pointer_add) (volatile void *atomic, + gssize val) + { +- return g_atomic_pointer_add ((volatile gpointer *) atomic, val); ++ return g_atomic_pointer_add ((gpointer *) atomic, val); + } + + /** +@@ -411,7 +411,7 @@ gsize + (g_atomic_pointer_and) (volatile void *atomic, + gsize val) + { +- return g_atomic_pointer_and ((volatile gpointer *) atomic, val); ++ return g_atomic_pointer_and ((gpointer *) atomic, val); + } + + /** +@@ -435,7 +435,7 @@ gsize + (g_atomic_pointer_or) (volatile void *atomic, + gsize val) + { +- return g_atomic_pointer_or ((volatile gpointer *) atomic, val); ++ return g_atomic_pointer_or ((gpointer *) atomic, val); + } + + /** +@@ -459,7 +459,7 @@ gsize + (g_atomic_pointer_xor) (volatile void *atomic, + gsize val) + { +- return g_atomic_pointer_xor ((volatile gpointer *) atomic, val); ++ return g_atomic_pointer_xor ((gpointer *) atomic, val); + } + + #elif defined (G_PLATFORM_WIN32) +@@ -591,7 +591,7 @@ guint + gpointer + (g_atomic_pointer_get) (const volatile void *atomic) + { +- const volatile gpointer *ptr = atomic; ++ const gpointer *ptr = atomic; + + MemoryBarrier (); + return *ptr; +@@ -601,7 +601,7 @@ void + (g_atomic_pointer_set) (volatile void *atomic, + gpointer newval) + { +- volatile gpointer *ptr = atomic; ++ gpointer *ptr = atomic; + + *ptr = newval; + MemoryBarrier (); +@@ -797,7 +797,7 @@ guint + gpointer + (g_atomic_pointer_get) (const volatile void *atomic) + { +- const volatile gpointer *ptr = atomic; ++ const gpointer *ptr = atomic; + gpointer value; + + pthread_mutex_lock (&g_atomic_lock); +@@ -811,7 +811,7 @@ void + (g_atomic_pointer_set) (volatile void *atomic, + gpointer newval) + { +- volatile gpointer *ptr = atomic; ++ gpointer *ptr = atomic; + + pthread_mutex_lock (&g_atomic_lock); + *ptr = newval; +@@ -823,7 +823,7 @@ gboolean + gpointer oldval, + gpointer newval) + { +- volatile gpointer *ptr = atomic; ++ gpointer *ptr = atomic; + gboolean success; + + pthread_mutex_lock (&g_atomic_lock); +@@ -840,7 +840,7 @@ gssize + (g_atomic_pointer_add) (volatile void *atomic, + gssize val) + { +- volatile gssize *ptr = atomic; ++ gssize *ptr = atomic; + gssize oldval; + + pthread_mutex_lock (&g_atomic_lock); +@@ -855,7 +855,7 @@ gsize + (g_atomic_pointer_and) (volatile void *atomic, + gsize val) + { +- volatile gsize *ptr = atomic; ++ gsize *ptr = atomic; + gsize oldval; + + pthread_mutex_lock (&g_atomic_lock); +@@ -870,7 +870,7 @@ gsize + (g_atomic_pointer_or) (volatile void *atomic, + gsize val) + { +- volatile gsize *ptr = atomic; ++ gsize *ptr = atomic; + gsize oldval; + + pthread_mutex_lock (&g_atomic_lock); +@@ -885,7 +885,7 @@ gsize + (g_atomic_pointer_xor) (volatile void *atomic, + gsize val) + { +- volatile gsize *ptr = atomic; ++ gsize *ptr = atomic; + gsize oldval; + + pthread_mutex_lock (&g_atomic_lock); +@@ -915,5 +915,5 @@ gint + g_atomic_int_exchange_and_add (volatile gint *atomic, + gint val) + { +- return (g_atomic_int_add) (atomic, val); ++ return (g_atomic_int_add) ((gint *) atomic, val); + } +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0014-gatomic-Drop-unnecessary-volatile-qualifiers-from-ma.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0014-gatomic-Drop-unnecessary-volatile-qualifiers-from-ma.patch new file mode 100644 index 000000000..bcc06e05c --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0014-gatomic-Drop-unnecessary-volatile-qualifiers-from-ma.patch @@ -0,0 +1,56 @@ +From 9474655eb21d64519b293e780bb686976cbdb790 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:38:36 +0000 +Subject: [PATCH 14/29] gatomic: Drop unnecessary volatile qualifiers from + macro variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It’s not necessary and provides no thread safety guarantees. + +The `volatile` qualifiers on the function arguments have to be kept, as +they are (unfortunately) part of the API. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gatomic.h | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/glib/gatomic.h b/glib/gatomic.h +index bb1435c70..e6eccfada 100644 +--- a/glib/gatomic.h ++++ b/glib/gatomic.h +@@ -211,7 +211,7 @@ G_END_DECLS + })) + #define g_atomic_pointer_and(atomic, val) \ + (G_GNUC_EXTENSION ({ \ +- volatile gsize *gapa_atomic = (volatile gsize *) (atomic); \ ++ gsize *gapa_atomic = (gsize *) (atomic); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \ + (void) (0 ? (gpointer) *(atomic) : NULL); \ +@@ -220,7 +220,7 @@ G_END_DECLS + })) + #define g_atomic_pointer_or(atomic, val) \ + (G_GNUC_EXTENSION ({ \ +- volatile gsize *gapo_atomic = (volatile gsize *) (atomic); \ ++ gsize *gapo_atomic = (gsize *) (atomic); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \ + (void) (0 ? (gpointer) *(atomic) : NULL); \ +@@ -229,7 +229,7 @@ G_END_DECLS + })) + #define g_atomic_pointer_xor(atomic, val) \ + (G_GNUC_EXTENSION ({ \ +- volatile gsize *gapx_atomic = (volatile gsize *) (atomic); \ ++ gsize *gapx_atomic = (gsize *) (atomic); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gpointer)); \ + G_STATIC_ASSERT (sizeof *(atomic) == sizeof (gsize)); \ + (void) (0 ? (gpointer) *(atomic) : NULL); \ +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0015-glib-Drop-unnecessary-volatile-qualifiers-from-inter.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0015-glib-Drop-unnecessary-volatile-qualifiers-from-inter.patch new file mode 100644 index 000000000..9468548e3 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0015-glib-Drop-unnecessary-volatile-qualifiers-from-inter.patch @@ -0,0 +1,169 @@ +From 1314ff93fc4d3379483c33da6a7deff27f71ed95 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:40:56 +0000 +Subject: [PATCH 15/29] glib: Drop unnecessary volatile qualifiers from + internal variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gdatetime.c | 2 +- + glib/gkeyfile.c | 2 +- + glib/gmain.c | 8 ++++---- + glib/gmarkup.c | 2 +- + glib/gregex.c | 6 +++--- + glib/gthread.c | 6 +++--- + 6 files changed, 13 insertions(+), 13 deletions(-) + +diff --git a/glib/gdatetime.c b/glib/gdatetime.c +index 1755257be..453077f6d 100644 +--- a/glib/gdatetime.c ++++ b/glib/gdatetime.c +@@ -126,7 +126,7 @@ struct _GDateTime + /* 1 is 0001-01-01 in Proleptic Gregorian */ + gint32 days; + +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + }; + + /* Time conversion {{{1 */ +diff --git a/glib/gkeyfile.c b/glib/gkeyfile.c +index 9d0215331..bbe638b74 100644 +--- a/glib/gkeyfile.c ++++ b/glib/gkeyfile.c +@@ -512,7 +512,7 @@ struct _GKeyFile + + gchar **locales; + +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + }; + + typedef struct _GKeyFileKeyValuePair GKeyFileKeyValuePair; +diff --git a/glib/gmain.c b/glib/gmain.c +index 772b8ecfc..9c5f0ef1e 100644 +--- a/glib/gmain.c ++++ b/glib/gmain.c +@@ -272,7 +272,7 @@ struct _GMainContext + guint owner_count; + GSList *waiters; + +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + + GHashTable *sources; /* guint -> GSource */ + +@@ -303,7 +303,7 @@ struct _GMainContext + + struct _GSourceCallback + { +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + GSourceFunc func; + gpointer data; + GDestroyNotify notify; +@@ -313,7 +313,7 @@ struct _GMainLoop + { + GMainContext *context; + gboolean is_running; /* (atomic) */ +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + }; + + struct _GTimeoutSource +@@ -4749,7 +4749,7 @@ g_main_context_get_poll_func (GMainContext *context) + * + * |[<!-- language="C" --> + * #define NUM_TASKS 10 +- * static volatile gint tasks_remaining = NUM_TASKS; ++ * static gint tasks_remaining = NUM_TASKS; // (atomic) + * ... + * + * while (g_atomic_int_get (&tasks_remaining) != 0) +diff --git a/glib/gmarkup.c b/glib/gmarkup.c +index ba4dfd2e4..b8327fb6d 100644 +--- a/glib/gmarkup.c ++++ b/glib/gmarkup.c +@@ -119,7 +119,7 @@ struct _GMarkupParseContext + { + const GMarkupParser *parser; + +- volatile gint ref_count; ++ gint ref_count; /* (atomic) */ + + GMarkupParseFlags flags; + +diff --git a/glib/gregex.c b/glib/gregex.c +index 52416bbb9..5e6ddfb46 100644 +--- a/glib/gregex.c ++++ b/glib/gregex.c +@@ -203,7 +203,7 @@ G_STATIC_ASSERT (G_REGEX_RAW == PCRE_UTF8); + + struct _GMatchInfo + { +- volatile gint ref_count; /* the ref count */ ++ gint ref_count; /* the ref count (atomic) */ + GRegex *regex; /* the regex */ + GRegexMatchFlags match_opts; /* options used at match time on the regex */ + gint matches; /* number of matching sub patterns */ +@@ -218,7 +218,7 @@ struct _GMatchInfo + + struct _GRegex + { +- volatile gint ref_count; /* the ref count for the immutable part */ ++ gint ref_count; /* the ref count for the immutable part (atomic) */ + gchar *pattern; /* the pattern */ + pcre *pcre_re; /* compiled form of the pattern */ + GRegexCompileFlags compile_opts; /* options used at compile time on the pattern */ +@@ -1300,7 +1300,7 @@ g_regex_new (const gchar *pattern, + pcre *re; + const gchar *errmsg; + gboolean optimize = FALSE; +- static volatile gsize initialised = 0; ++ static gsize initialised = 0; + + g_return_val_if_fail (pattern != NULL, NULL); + g_return_val_if_fail (error == NULL || *error == NULL, NULL); +diff --git a/glib/gthread.c b/glib/gthread.c +index 53f3a0848..612a9739f 100644 +--- a/glib/gthread.c ++++ b/glib/gthread.c +@@ -513,7 +513,7 @@ static GMutex g_once_mutex; + static GCond g_once_cond; + static GSList *g_once_init_list = NULL; + +-static volatile guint g_thread_n_created_counter = 0; ++static guint g_thread_n_created_counter = 0; /* (atomic) */ + + static void g_thread_cleanup (gpointer data); + static GPrivate g_thread_specific_private = G_PRIVATE_INIT (g_thread_cleanup); +@@ -694,7 +694,7 @@ g_once_impl (GOnce *once, + gboolean + (g_once_init_enter) (volatile void *location) + { +- volatile gsize *value_location = location; ++ gsize *value_location = (gsize *) location; + gboolean need_init = FALSE; + g_mutex_lock (&g_once_mutex); + if (g_atomic_pointer_get (value_location) == 0) +@@ -731,7 +731,7 @@ void + (g_once_init_leave) (volatile void *location, + gsize result) + { +- volatile gsize *value_location = location; ++ gsize *value_location = (gsize *) location; + + g_return_if_fail (g_atomic_pointer_get (value_location) == 0); + g_return_if_fail (result != 0); +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0016-gobject-Drop-unnecessary-volatile-qualifiers-from-in.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0016-gobject-Drop-unnecessary-volatile-qualifiers-from-in.patch new file mode 100644 index 000000000..8111b3b51 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0016-gobject-Drop-unnecessary-volatile-qualifiers-from-in.patch @@ -0,0 +1,126 @@ +From 08d04d0428cc26935a2d42083f1710432465c98a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 18:42:43 +0000 +Subject: [PATCH 16/29] gobject: Drop unnecessary volatile qualifiers from + internal variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/gclosure.c | 2 +- + gobject/gclosure.h | 20 ++++++++++---------- + gobject/gobject.c | 4 ++-- + gobject/gtype.c | 10 +++++----- + 4 files changed, 18 insertions(+), 18 deletions(-) + +diff --git a/gobject/gclosure.c b/gobject/gclosure.c +index 1d1f2f48a..6d41e6d8a 100644 +--- a/gobject/gclosure.c ++++ b/gobject/gclosure.c +@@ -98,7 +98,7 @@ + + typedef union { + GClosure closure; +- volatile gint vint; ++ gint vint; + } ClosureInt; + + #define CHANGE_FIELD(_closure, _field, _OP, _value, _must_set, _SET_OLD, _SET_NEW) \ +diff --git a/gobject/gclosure.h b/gobject/gclosure.h +index a0f91f538..884e403a8 100644 +--- a/gobject/gclosure.h ++++ b/gobject/gclosure.h +@@ -175,20 +175,20 @@ struct _GClosureNotifyData + struct _GClosure + { + /*< private >*/ +- volatile guint ref_count : 15; ++ guint ref_count : 15; /* (atomic) */ + /* meta_marshal is not used anymore but must be zero for historical reasons + as it was exposed in the G_CLOSURE_N_NOTIFIERS macro */ +- volatile guint meta_marshal_nouse : 1; +- volatile guint n_guards : 1; +- volatile guint n_fnotifiers : 2; /* finalization notifiers */ +- volatile guint n_inotifiers : 8; /* invalidation notifiers */ +- volatile guint in_inotify : 1; +- volatile guint floating : 1; ++ guint meta_marshal_nouse : 1; /* (atomic) */ ++ guint n_guards : 1; /* (atomic) */ ++ guint n_fnotifiers : 2; /* finalization notifiers (atomic) */ ++ guint n_inotifiers : 8; /* invalidation notifiers (atomic) */ ++ guint in_inotify : 1; /* (atomic) */ ++ guint floating : 1; /* (atomic) */ + /*< protected >*/ +- volatile guint derivative_flag : 1; ++ guint derivative_flag : 1; /* (atomic) */ + /*< public >*/ +- volatile guint in_marshal : 1; +- volatile guint is_invalid : 1; ++ guint in_marshal : 1; /* (atomic) */ ++ guint is_invalid : 1; /* (atomic) */ + + /*< private >*/ void (*marshal) (GClosure *closure, + GValue /*out*/ *return_value, +diff --git a/gobject/gobject.c b/gobject/gobject.c +index 6e9c44a1e..a3a32be9f 100644 +--- a/gobject/gobject.c ++++ b/gobject/gobject.c +@@ -174,9 +174,9 @@ typedef struct + GTypeInstance g_type_instance; + + /*< private >*/ +- volatile guint ref_count; ++ guint ref_count; /* (atomic) */ + #ifdef HAVE_OPTIONAL_FLAGS +- volatile guint optional_flags; ++ guint optional_flags; /* (atomic) */ + #endif + GData *qdata; + } GObjectReal; +diff --git a/gobject/gtype.c b/gobject/gtype.c +index 51dad7690..be5989a3e 100644 +--- a/gobject/gtype.c ++++ b/gobject/gtype.c +@@ -221,9 +221,9 @@ typedef enum + /* --- structures --- */ + struct _TypeNode + { +- guint volatile ref_count; ++ guint ref_count; /* (atomic) */ + #ifdef G_ENABLE_DEBUG +- guint volatile instance_count; ++ guint instance_count; /* (atomic) */ + #endif + GTypePlugin *plugin; + guint n_children; /* writable with lock */ +@@ -233,7 +233,7 @@ struct _TypeNode + guint is_instantiatable : 1; + guint mutatable_check_cache : 1; /* combines some common path checks */ + GType *children; /* writable with lock */ +- TypeData * volatile data; ++ TypeData *data; + GQuark qname; + GData *global_gdata; + union { +@@ -569,8 +569,8 @@ type_node_new_W (TypeNode *pnode, + } + + static inline IFaceEntry* +-lookup_iface_entry_I (volatile IFaceEntries *entries, +- TypeNode *iface_node) ++lookup_iface_entry_I (IFaceEntries *entries, ++ TypeNode *iface_node) + { + guint8 *offsets; + guint offset_index; +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0017-gmessages-Drop-unnecessary-volatile-qualifiers-from-.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0017-gmessages-Drop-unnecessary-volatile-qualifiers-from-.patch new file mode 100644 index 000000000..02816a887 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0017-gmessages-Drop-unnecessary-volatile-qualifiers-from-.patch @@ -0,0 +1,44 @@ +From eee7e3c6688f2f1ee9beed5d6d209973c1df387e Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:14:25 +0000 +Subject: [PATCH 17/29] gmessages: Drop unnecessary volatile qualifiers from + macro variables +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +It’s not necessary and provides no thread safety guarantees. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gmessages.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/glib/gmessages.h b/glib/gmessages.h +index 6a28443b4..2e3650baf 100644 +--- a/glib/gmessages.h ++++ b/glib/gmessages.h +@@ -478,7 +478,7 @@ g_debug (const gchar *format, + #if defined(G_HAVE_ISO_VARARGS) && !G_ANALYZER_ANALYZING + #define g_warning_once(...) \ + G_STMT_START { \ +- static volatile int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; \ ++ static int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; /* (atomic) */ \ + if (g_atomic_int_compare_and_exchange (&G_PASTE (_GWarningOnceBoolean, __LINE__), \ + 0, 1)) \ + g_warning (__VA_ARGS__); \ +@@ -487,7 +487,7 @@ g_debug (const gchar *format, + #elif defined(G_HAVE_GNUC_VARARGS) && !G_ANALYZER_ANALYZING + #define g_warning_once(format...) \ + G_STMT_START { \ +- static volatile int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; \ ++ static int G_PASTE (_GWarningOnceBoolean, __LINE__) = 0; /* (atomic) */ \ + if (g_atomic_int_compare_and_exchange (&G_PASTE (_GWarningOnceBoolean, __LINE__), \ + 0, 1)) \ + g_warning (format); \ +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0018-gtypes-Drop-volatile-qualifier-from-gatomicrefcount.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0018-gtypes-Drop-volatile-qualifier-from-gatomicrefcount.patch new file mode 100644 index 000000000..50cb3c470 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0018-gtypes-Drop-volatile-qualifier-from-gatomicrefcount.patch @@ -0,0 +1,35 @@ +From 8a87069ff42a0631dce153701cb2ec5e343a958c Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:16:30 +0000 +Subject: [PATCH 18/29] gtypes: Drop volatile qualifier from gatomicrefcount + +This is technically an API break, but since the type is meant to be +opaque (third party code is not meant to treat it like an integer) it +should not cause problems. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gtypes.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/glib/gtypes.h b/glib/gtypes.h +index 23c5a1295..2c4825582 100644 +--- a/glib/gtypes.h ++++ b/glib/gtypes.h +@@ -550,8 +550,8 @@ struct _GTimeVal + glong tv_usec; + } GLIB_DEPRECATED_TYPE_IN_2_62_FOR(GDateTime); + +-typedef gint grefcount; +-typedef volatile gint gatomicrefcount; ++typedef gint grefcount; ++typedef gint gatomicrefcount; /* should be accessed only using atomics */ + + G_END_DECLS + +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0019-gatomicarray-Drop-volatile-qualifier-from-GAtomicArr.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0019-gatomicarray-Drop-volatile-qualifier-from-GAtomicArr.patch new file mode 100644 index 000000000..be3211664 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0019-gatomicarray-Drop-volatile-qualifier-from-GAtomicArr.patch @@ -0,0 +1,44 @@ +From 46bae4f18dfec8fedda82648091752d270b2dff8 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:19:20 +0000 +Subject: [PATCH 19/29] gatomicarray: Drop volatile qualifier from GAtomicArray + API + +This is an API break, but it should not affect third party code since +that code should not be interacting with the `data` member in a way that +invokes its `volatile` qualifier (such as copying to an intermediate +variable). + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/gatomicarray.h | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gobject/gatomicarray.h b/gobject/gatomicarray.h +index 9550fa396..89043c5e4 100644 +--- a/gobject/gatomicarray.h ++++ b/gobject/gatomicarray.h +@@ -29,7 +29,7 @@ G_BEGIN_DECLS + + typedef struct _GAtomicArray GAtomicArray; + struct _GAtomicArray { +- volatile gpointer data; /* elements - atomic */ ++ gpointer data; /* elements - atomic */ + }; + + void _g_atomic_array_init (GAtomicArray *array); +@@ -42,7 +42,7 @@ void _g_atomic_array_update (GAtomicArray *array, + #define G_ATOMIC_ARRAY_GET_LOCKED(_array, _type) ((_type *)((_array)->data)) + + #define G_ATOMIC_ARRAY_DO_TRANSACTION(_array, _type, _C_) G_STMT_START { \ +- volatile gpointer *_datap = &(_array)->data; \ ++ gpointer *_datap = &(_array)->data; \ + _type *transaction_data, *__check; \ + \ + __check = g_atomic_pointer_get (_datap); \ +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0020-gobject-Drop-volatile-qualifier-from-GObject.ref_cou.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0020-gobject-Drop-volatile-qualifier-from-GObject.ref_cou.patch new file mode 100644 index 000000000..ae024a9af --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0020-gobject-Drop-volatile-qualifier-from-GObject.ref_cou.patch @@ -0,0 +1,33 @@ +From 334f6953364680ddc6c0d3da13fda1d92bf5379d Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:21:07 +0000 +Subject: [PATCH 20/29] gobject: Drop volatile qualifier from GObject.ref_count + +This is an API break, but no third party code should be touching +`GObject.ref_count`, let alone in a way which would be changed by the +removal of the `volatile` qualifier. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/gobject.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gobject/gobject.h b/gobject/gobject.h +index 7f55e1976..a84c183f8 100644 +--- a/gobject/gobject.h ++++ b/gobject/gobject.h +@@ -247,7 +247,7 @@ struct _GObject + GTypeInstance g_type_instance; + + /*< private >*/ +- volatile guint ref_count; ++ guint ref_count; /* (atomic) */ + GData *qdata; + }; + /** +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0021-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0021-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch new file mode 100644 index 000000000..b8ed99ce1 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0021-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch @@ -0,0 +1,51 @@ +From 8a112c3c6e5fe6838ee29eec7caa62ba32d9bc40 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:22:49 +0000 +Subject: [PATCH 21/29] tests: Drop unnecessary volatile qualifiers from tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +These variables were already (correctly) accessed atomically. The +`volatile` qualifier doesn’t help with that. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/tests/qdata.c | 2 +- + gobject/tests/threadtests.c | 4 ++-- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/gobject/tests/qdata.c b/gobject/tests/qdata.c +index 528bdc68e..7d46efb15 100644 +--- a/gobject/tests/qdata.c ++++ b/gobject/tests/qdata.c +@@ -17,7 +17,7 @@ gboolean fail; + #define ROUNDS 10000 + + GObject *object; +-volatile gint bucket[THREADS]; ++gint bucket[THREADS]; /* accessed from multiple threads, but should never be contested due to the sequence of thread operations */ + + static gpointer + thread_func (gpointer data) +diff --git a/gobject/tests/threadtests.c b/gobject/tests/threadtests.c +index e341a9d67..b6f9e17fa 100644 +--- a/gobject/tests/threadtests.c ++++ b/gobject/tests/threadtests.c +@@ -27,8 +27,8 @@ + #include <glib.h> + #include <glib-object.h> + +-static volatile int mtsafe_call_counter = 0; /* multi thread safe call counter */ +-static int unsafe_call_counter = 0; /* single-threaded call counter */ ++static int mtsafe_call_counter = 0; /* multi thread safe call counter, must be accessed atomically */ ++static int unsafe_call_counter = 0; /* single-threaded call counter */ + static GCond sync_cond; + static GMutex sync_mutex; + +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0022-build-Drop-unnecessary-volatile-qualifiers-from-conf.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0022-build-Drop-unnecessary-volatile-qualifiers-from-conf.patch new file mode 100644 index 000000000..5da509d17 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0022-build-Drop-unnecessary-volatile-qualifiers-from-conf.patch @@ -0,0 +1,38 @@ +From daf90bfa99fc02a253d538c65fbaa12f2e6c1c45 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Wed, 11 Nov 2020 19:23:18 +0000 +Subject: [PATCH 22/29] build: Drop unnecessary volatile qualifiers from + configure tests + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + meson.build | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/meson.build b/meson.build +index e0b308a25..ad7f887fb 100644 +--- a/meson.build ++++ b/meson.build +@@ -1773,7 +1773,7 @@ endforeach + # that then to silently fall back on emulated atomic ops just because + # the user had the wrong build environment. + atomictest = '''int main() { +- volatile int atomic = 2; ++ int atomic = 2; + __sync_bool_compare_and_swap (&atomic, 2, 3); + return 0; + } +@@ -1883,6 +1883,7 @@ endif + + # FIXME: we should make it print the result and always return 0, so that + # the output in meson shows up as green ++# volatile is needed here to avoid optimisations in the test + stack_grows_check_prog = ''' + volatile int *a = 0, *b = 0; + void f (int i) { +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0023-gdbusprivate-Avoid-a-warning-about-a-statement-with-.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0023-gdbusprivate-Avoid-a-warning-about-a-statement-with-.patch new file mode 100644 index 000000000..012f9ca87 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0023-gdbusprivate-Avoid-a-warning-about-a-statement-with-.patch @@ -0,0 +1,33 @@ +From 0604f5858259c32744e6fc912ed4feb308651a3a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 14:47:23 +0000 +Subject: [PATCH 23/29] gdbusprivate: Avoid a warning about a statement with no + effect + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/gdbusprivate.c | 5 ++--- + 1 file changed, 2 insertions(+), 3 deletions(-) + +diff --git a/gio/gdbusprivate.c b/gio/gdbusprivate.c +index 99b37f3eb..4e42c1a4d 100644 +--- a/gio/gdbusprivate.c ++++ b/gio/gdbusprivate.c +@@ -1945,11 +1945,10 @@ _g_dbus_initialize (void) + + if (g_once_init_enter (&initialized)) + { +- GQuark g_dbus_error_domain; + const gchar *debug; + +- g_dbus_error_domain = G_DBUS_ERROR; +- (g_dbus_error_domain); /* To avoid -Wunused-but-set-variable */ ++ /* Ensure the domain is registered. */ ++ g_dbus_error_quark (); + + debug = g_getenv ("G_DBUS_DEBUG"); + if (debug != NULL) +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0024-tests-Add-comment-to-volatile-atomic-tests.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0024-tests-Add-comment-to-volatile-atomic-tests.patch new file mode 100644 index 000000000..7350803c6 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0024-tests-Add-comment-to-volatile-atomic-tests.patch @@ -0,0 +1,49 @@ +From 2d03f99ae4de394cac0690717d96c2d884ccdae2 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 14:47:47 +0000 +Subject: [PATCH 24/29] tests: Add comment to volatile atomic tests +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +`volatile` should not be used to indicate atomic variables, and we +shouldn’t encourage its use. Keep the tests, since they check that we +don’t emit warnings when built against incorrect old code which uses +`volatile`. But add a comment to stop copy/paste use of `volatile` +in the future. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/tests/atomic.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/glib/tests/atomic.c b/glib/tests/atomic.c +index 7d2459f3a..14e6e454e 100644 +--- a/glib/tests/atomic.c ++++ b/glib/tests/atomic.c +@@ -94,6 +94,9 @@ test_types (void) + res = g_atomic_pointer_compare_and_exchange (&vp_str, NULL, str); + g_assert_true (res); + ++ /* Note that atomic variables should almost certainly not be marked as ++ * `volatile` — see http://isvolatileusefulwiththreads.in/c/. This test exists ++ * to make sure that we don’t warn when built against older third party code. */ + g_atomic_pointer_set (&vp_str_vol, NULL); + res = g_atomic_pointer_compare_and_exchange (&vp_str_vol, NULL, str); + g_assert_true (res); +@@ -210,6 +213,9 @@ G_GNUC_END_IGNORE_DEPRECATIONS + res = g_atomic_pointer_compare_and_exchange (&vp_str, NULL, (char *) str); + g_assert_true (res); + ++ /* Note that atomic variables should almost certainly not be marked as ++ * `volatile` — see http://isvolatileusefulwiththreads.in/c/. This test exists ++ * to make sure that we don’t warn when built against older third party code. */ + g_atomic_pointer_set (&vp_str_vol, NULL); + res = g_atomic_pointer_compare_and_exchange (&vp_str_vol, NULL, (char *) str); + g_assert_true (res); +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0025-gthread-Use-g_atomic-primitives-correctly-in-destruc.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0025-gthread-Use-g_atomic-primitives-correctly-in-destruc.patch new file mode 100644 index 000000000..c15a3b8a5 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0025-gthread-Use-g_atomic-primitives-correctly-in-destruc.patch @@ -0,0 +1,77 @@ +From 6bd0a4b29753570a2c20b61b5ad2c0068567b7b6 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 16:44:29 +0000 +Subject: [PATCH 25/29] gthread: Use g_atomic() primitives correctly in + destructor list +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +In the Windows destructor list, consistently access +`g_private_destructors` using atomic primitives. + +`g_atomic_pointer_compare_and_exchange()` should be equivalent to +`InterlockedCompareExchangePointer()`, but is a bit more understandable +in a general GLib context, and pairs with `g_atomic_pointer_get()`. (I +can’t find a Windows API equivalent for that.) + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + glib/gthread-win32.c | 13 +++++++------ + 1 file changed, 7 insertions(+), 6 deletions(-) + +diff --git a/glib/gthread-win32.c b/glib/gthread-win32.c +index 0c37dc6c1..20aca6fa1 100644 +--- a/glib/gthread-win32.c ++++ b/glib/gthread-win32.c +@@ -301,7 +301,7 @@ struct _GPrivateDestructor + GPrivateDestructor *next; + }; + +-static GPrivateDestructor * volatile g_private_destructors; ++static GPrivateDestructor *g_private_destructors; /* (atomic) prepend-only */ + static CRITICAL_SECTION g_private_lock; + + static DWORD +@@ -329,7 +329,7 @@ g_private_get_impl (GPrivate *key) + g_thread_abort (errno, "malloc"); + destructor->index = impl; + destructor->notify = key->notify; +- destructor->next = g_private_destructors; ++ destructor->next = g_atomic_pointer_get (&g_private_destructors); + + /* We need to do an atomic store due to the unlocked + * access to the destructor list from the thread exit +@@ -337,13 +337,14 @@ g_private_get_impl (GPrivate *key) + * + * It can double as a sanity check... + */ +- if (InterlockedCompareExchangePointer (&g_private_destructors, destructor, +- destructor->next) != destructor->next) ++ if (!g_atomic_pointer_compare_and_exchange (&g_private_destructors, ++ destructor->next, ++ destructor)) + g_thread_abort (0, "g_private_get_impl(1)"); + } + + /* Ditto, due to the unlocked access on the fast path */ +- if (InterlockedCompareExchangePointer (&key->p, impl, NULL) != NULL) ++ if (!g_atomic_pointer_compare_and_exchange (&key->p, NULL, impl)) + g_thread_abort (0, "g_private_get_impl(2)"); + } + LeaveCriticalSection (&g_private_lock); +@@ -635,7 +636,7 @@ g_thread_win32_thread_detach (void) + */ + dtors_called = FALSE; + +- for (dtor = g_private_destructors; dtor; dtor = dtor->next) ++ for (dtor = g_atomic_pointer_get (&g_private_destructors); dtor; dtor = dtor->next) + { + gpointer value; + +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0026-gtype-Fix-some-typos-in-comments.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0026-gtype-Fix-some-typos-in-comments.patch new file mode 100644 index 000000000..7090a12a8 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0026-gtype-Fix-some-typos-in-comments.patch @@ -0,0 +1,47 @@ +From 041dd8b70bd14b041d6a495492eb7a5fc7568bb7 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 16:47:54 +0000 +Subject: [PATCH 26/29] gtype: Fix some typos in comments + +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> +--- + gobject/gtype.c | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/gobject/gtype.c b/gobject/gtype.c +index be5989a3e..ae1af8a05 100644 +--- a/gobject/gtype.c ++++ b/gobject/gtype.c +@@ -2290,7 +2290,7 @@ type_class_init_Wm (TypeNode *node, + * inherited interfaces are already init_state == INITIALIZED, because + * they either got setup in the above base_init loop, or during + * class_init from within type_add_interface_Wm() for this or +- * an anchestor type. ++ * an ancestor type. + */ + i = 0; + while ((entries = CLASSED_NODE_IFACES_ENTRIES_LOCKED (node)) != NULL) +@@ -3462,7 +3462,7 @@ g_type_depth (GType type) + * be used to determine the types and order in which the leaf type is + * descended from the root type. + * +- * Returns: immediate child of @root_type and anchestor of @leaf_type ++ * Returns: immediate child of @root_type and ancestor of @leaf_type + */ + GType + g_type_next_base (GType type, +@@ -3549,8 +3549,8 @@ type_node_conforms_to_U (TypeNode *node, + + /** + * g_type_is_a: +- * @type: type to check anchestry for +- * @is_a_type: possible anchestor of @type or interface that @type ++ * @type: type to check ancestry for ++ * @is_a_type: possible ancestor of @type or interface that @type + * could conform to + * + * If @is_a_type is a derivable type, check whether @type is a +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch new file mode 100644 index 000000000..9c4e45ff4 --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch @@ -0,0 +1,76 @@ +From 47da8ec5d9a284e07f77c7d59fc8eacf3ebf188a Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 16:57:22 +0000 +Subject: [PATCH 27/29] gtype: Add some missing atomic accesses to init_state +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Half of the references to `init_state` in `gtype.c` already correctly +accessed it atomically, but a couple didn’t. Drop the `volatile` +qualifier from its declaration, as that’s not necessary for atomic +access. + +Note that this is the `init_state` in `TypeData`, *not* the `init_state` +in `IFaceEntry`. + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Helps: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gobject/gtype.c | 10 +++++----- + 1 file changed, 5 insertions(+), 5 deletions(-) + +diff --git a/gobject/gtype.c b/gobject/gtype.c +index ae1af8a05..909faf138 100644 +--- a/gobject/gtype.c ++++ b/gobject/gtype.c +@@ -322,7 +322,7 @@ struct _ClassData + CommonData common; + guint16 class_size; + guint16 class_private_size; +- int volatile init_state; /* atomic - g_type_class_ref reads it unlocked */ ++ int init_state; /* (atomic) - g_type_class_ref reads it unlocked */ + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; +@@ -336,7 +336,7 @@ struct _InstanceData + CommonData common; + guint16 class_size; + guint16 class_private_size; +- int volatile init_state; /* atomic - g_type_class_ref reads it unlocked */ ++ int init_state; /* (atomic) - g_type_class_ref reads it unlocked */ + GBaseInitFunc class_init_base; + GBaseFinalizeFunc class_finalize_base; + GClassInitFunc class_init; +@@ -1415,7 +1415,7 @@ type_node_add_iface_entry_W (TypeNode *node, + + if (parent_entry) + { +- if (node->data && node->data->class.init_state >= BASE_IFACE_INIT) ++ if (node->data && g_atomic_int_get (&node->data->class.init_state) >= BASE_IFACE_INIT) + { + entries->entry[i].init_state = INITIALIZED; + entries->entry[i].vtable = parent_entry->vtable; +@@ -1481,7 +1481,7 @@ type_add_interface_Wm (TypeNode *node, + */ + if (node->data) + { +- InitState class_state = node->data->class.init_state; ++ InitState class_state = g_atomic_int_get (&node->data->class.init_state); + + if (class_state >= BASE_IFACE_INIT) + type_iface_vtable_base_init_Wm (iface, node); +@@ -2175,7 +2175,7 @@ type_class_init_Wm (TypeNode *node, + g_assert (node->is_classed && node->data && + node->data->class.class_size && + !node->data->class.class && +- node->data->class.init_state == UNINITIALIZED); ++ g_atomic_int_get (&node->data->class.init_state) == UNINITIALIZED); + if (node->data->class.class_private_size) + class = g_malloc0 (ALIGN_STRUCT (node->data->class.class_size) + node->data->class.class_private_size); + else +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0028-gresource-Fix-a-pointer-mismatch-with-an-atomic-load.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0028-gresource-Fix-a-pointer-mismatch-with-an-atomic-load.patch new file mode 100644 index 000000000..e03fac19f --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0028-gresource-Fix-a-pointer-mismatch-with-an-atomic-load.patch @@ -0,0 +1,29 @@ +From 7d417f8406b8fa32a25659120738d22be6a1b482 Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Mon, 16 Nov 2020 17:17:21 +0000 +Subject: [PATCH 28/29] gresource: Fix a pointer mismatch with an atomic load + +This squashes a warning when compiling with Clang. + +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> +--- + gio/gresource.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gio/gresource.c b/gio/gresource.c +index 79a49d33d..b495d12ac 100644 +--- a/gio/gresource.c ++++ b/gio/gresource.c +@@ -1398,7 +1398,7 @@ register_lazy_static_resources (void) + void + g_static_resource_init (GStaticResource *static_resource) + { +- gpointer next; ++ GStaticResource *next; + + do + { +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0/0029-docs-Document-not-to-use-volatile-qualifiers.patch b/poky/meta/recipes-core/glib-2.0/glib-2.0/0029-docs-Document-not-to-use-volatile-qualifiers.patch new file mode 100644 index 000000000..3311ad65d --- /dev/null +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0/0029-docs-Document-not-to-use-volatile-qualifiers.patch @@ -0,0 +1,258 @@ +From 83e48d8ac1fee98059e2305d8909dca26190bddc Mon Sep 17 00:00:00 2001 +From: Philip Withnall <pwithnall@endlessos.org> +Date: Tue, 17 Nov 2020 10:15:15 +0000 +Subject: [PATCH 29/29] docs: Document not to use `volatile` qualifiers + +Signed-off-by: Philip Withnall <pwithnall@endlessos.org> + +Fixes: #600 +Upstream-Status: Backport [https://gitlab.gnome.org/GNOME/glib/-/merge_requests/1719] +--- + gio/gdbusconnection.c | 12 ++++++++--- + gio/gdbuserror.c | 3 +++ + glib/gatomic.c | 48 +++++++++++++++++++++++++++++++++++++++++++ + glib/gthread.c | 6 ++++++ + 4 files changed, 66 insertions(+), 3 deletions(-) + +diff --git a/gio/gdbusconnection.c b/gio/gdbusconnection.c +index 91c365e80..65939a4d2 100644 +--- a/gio/gdbusconnection.c ++++ b/gio/gdbusconnection.c +@@ -1708,7 +1708,9 @@ g_dbus_connection_send_message_unlocked (GDBusConnection *connection, + * will be assigned by @connection and set on @message via + * g_dbus_message_set_serial(). If @out_serial is not %NULL, then the + * serial number used will be written to this location prior to +- * submitting the message to the underlying transport. ++ * submitting the message to the underlying transport. While it has a `volatile` ++ * qualifier, this is a historical artifact and the argument passed to it should ++ * not be `volatile`. + * + * If @connection is closed then the operation will fail with + * %G_IO_ERROR_CLOSED. If @message is not well-formed, +@@ -1979,7 +1981,9 @@ g_dbus_connection_send_message_with_reply_unlocked (GDBusConnection *connect + * will be assigned by @connection and set on @message via + * g_dbus_message_set_serial(). If @out_serial is not %NULL, then the + * serial number used will be written to this location prior to +- * submitting the message to the underlying transport. ++ * submitting the message to the underlying transport. While it has a `volatile` ++ * qualifier, this is a historical artifact and the argument passed to it should ++ * not be `volatile`. + * + * If @connection is closed then the operation will fail with + * %G_IO_ERROR_CLOSED. If @cancellable is canceled, the operation will +@@ -2105,7 +2109,9 @@ send_message_with_reply_sync_cb (GDBusConnection *connection, + * will be assigned by @connection and set on @message via + * g_dbus_message_set_serial(). If @out_serial is not %NULL, then the + * serial number used will be written to this location prior to +- * submitting the message to the underlying transport. ++ * submitting the message to the underlying transport. While it has a `volatile` ++ * qualifier, this is a historical artifact and the argument passed to it should ++ * not be `volatile`. + * + * If @connection is closed then the operation will fail with + * %G_IO_ERROR_CLOSED. If @cancellable is canceled, the operation will +diff --git a/gio/gdbuserror.c b/gio/gdbuserror.c +index b03a33f27..4ad97bb6e 100644 +--- a/gio/gdbuserror.c ++++ b/gio/gdbuserror.c +@@ -177,6 +177,9 @@ g_dbus_error_quark (void) + * + * Helper function for associating a #GError error domain with D-Bus error names. + * ++ * While @quark_volatile has a `volatile` qualifier, this is a historical ++ * artifact and the argument passed to it should not be `volatile`. ++ * + * Since: 2.26 + */ + void +diff --git a/glib/gatomic.c b/glib/gatomic.c +index 67f5ba6b4..0bc67aa35 100644 +--- a/glib/gatomic.c ++++ b/glib/gatomic.c +@@ -105,6 +105,9 @@ + * This call acts as a full compiler and hardware + * memory barrier (before the get). + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of the integer + * + * Since: 2.4 +@@ -125,6 +128,9 @@ gint + * This call acts as a full compiler and hardware + * memory barrier (after the set). + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Since: 2.4 + */ + void +@@ -144,6 +150,9 @@ void + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Since: 2.4 + **/ + void +@@ -163,6 +172,9 @@ void + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: %TRUE if the resultant value is zero + * + * Since: 2.4 +@@ -189,6 +201,9 @@ gboolean + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: %TRUE if the exchange took place + * + * Since: 2.4 +@@ -216,6 +231,9 @@ gboolean + * Before version 2.30, this function did not return a value + * (but g_atomic_int_exchange_and_add() did, and had the same meaning). + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the add, signed + * + * Since: 2.4 +@@ -240,6 +258,9 @@ gint + * Think of this operation as an atomic version of + * `{ tmp = *atomic; *atomic &= val; return tmp; }`. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +@@ -264,6 +285,9 @@ guint + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +@@ -288,6 +312,9 @@ guint + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +@@ -309,6 +336,9 @@ guint + * This call acts as a full compiler and hardware + * memory barrier (before the get). + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of the pointer + * + * Since: 2.4 +@@ -329,6 +359,9 @@ gpointer + * This call acts as a full compiler and hardware + * memory barrier (after the set). + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Since: 2.4 + **/ + void +@@ -354,6 +387,9 @@ void + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: %TRUE if the exchange took place + * + * Since: 2.4 +@@ -379,6 +415,9 @@ gboolean + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the add, signed + * + * Since: 2.30 +@@ -403,6 +442,9 @@ gssize + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +@@ -427,6 +469,9 @@ gsize + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +@@ -451,6 +496,9 @@ gsize + * + * This call acts as a full compiler and hardware memory barrier. + * ++ * While @atomic has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: the value of @atomic before the operation, unsigned + * + * Since: 2.30 +diff --git a/glib/gthread.c b/glib/gthread.c +index 612a9739f..29216d7fd 100644 +--- a/glib/gthread.c ++++ b/glib/gthread.c +@@ -686,6 +686,9 @@ g_once_impl (GOnce *once, + * // use initialization_value here + * ]| + * ++ * While @location has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Returns: %TRUE if the initialization section should be entered, + * %FALSE and blocks otherwise + * +@@ -725,6 +728,9 @@ gboolean + * releases concurrent threads blocking in g_once_init_enter() on this + * initialization variable. + * ++ * While @location has a `volatile` qualifier, this is a historical artifact and ++ * the pointer passed to it should not be `volatile`. ++ * + * Since: 2.14 + */ + void +-- +2.30.1 + diff --git a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.66.7.bb b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.66.7.bb index 882a89da7..3909b76dd 100644 --- a/poky/meta/recipes-core/glib-2.0/glib-2.0_2.66.7.bb +++ b/poky/meta/recipes-core/glib-2.0/glib-2.0_2.66.7.bb @@ -19,7 +19,37 @@ SRC_URI = "${GNOME_MIRROR}/glib/${SHRT_VER}/glib-${PV}.tar.xz \ file://0001-gio-tests-codegen.py-bump-timeout-to-100-seconds.patch \ file://0001-tests-codegen.py-removing-unecessary-print-statement.patch \ " - +SRC_URI += "\ + file://0001-gobject-Drop-use-of-volatile-from-get_type-macros.patch \ + file://0002-tests-Fix-non-atomic-access-to-a-shared-variable.patch \ + file://0003-tests-Fix-non-atomic-access-to-a-shared-variable.patch \ + file://0004-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch \ + file://0005-tests-Fix-non-atomic-access-to-some-shared-variables.patch \ + file://0006-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch \ + file://0007-gdbusconnection-Drop-unnecessary-volatile-qualifiers.patch \ + file://0008-gdbuserror-Drop-unnecessary-volatile-qualifiers-from.patch \ + file://0009-gio-Drop-unnecessary-volatile-qualifiers-from-intern.patch \ + file://0010-kqueue-Fix-unlocked-access-to-shared-variable.patch \ + file://0011-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch \ + file://0012-tests-Fix-non-atomic-access-to-some-shared-variables.patch \ + file://0013-gatomic-Drop-unnecessary-volatile-qualifiers-from-in.patch \ + file://0014-gatomic-Drop-unnecessary-volatile-qualifiers-from-ma.patch \ + file://0015-glib-Drop-unnecessary-volatile-qualifiers-from-inter.patch \ + file://0016-gobject-Drop-unnecessary-volatile-qualifiers-from-in.patch \ + file://0017-gmessages-Drop-unnecessary-volatile-qualifiers-from-.patch \ + file://0018-gtypes-Drop-volatile-qualifier-from-gatomicrefcount.patch \ + file://0019-gatomicarray-Drop-volatile-qualifier-from-GAtomicArr.patch \ + file://0020-gobject-Drop-volatile-qualifier-from-GObject.ref_cou.patch \ + file://0021-tests-Drop-unnecessary-volatile-qualifiers-from-test.patch \ + file://0022-build-Drop-unnecessary-volatile-qualifiers-from-conf.patch \ + file://0023-gdbusprivate-Avoid-a-warning-about-a-statement-with-.patch \ + file://0024-tests-Add-comment-to-volatile-atomic-tests.patch \ + file://0025-gthread-Use-g_atomic-primitives-correctly-in-destruc.patch \ + file://0026-gtype-Fix-some-typos-in-comments.patch \ + file://0027-gtype-Add-some-missing-atomic-accesses-to-init_state.patch \ + file://0028-gresource-Fix-a-pointer-mismatch-with-an-atomic-load.patch \ + file://0029-docs-Document-not-to-use-volatile-qualifiers.patch \ +" SRC_URI_append_class-native = " file://relocate-modules.patch" SRC_URI[sha256sum] = "09f158769f6f26b31074e15b1ac80ec39b13b53102dfae66cfe826fb2cc65502" @@ -31,7 +61,7 @@ def find_meson_cross_files(d): if bb.data.inherits_class('native', d): return "" - thisdir = d.getVar("THISDIR") + thisdir = os.path.normpath(d.getVar("THISDIR")) import collections sitedata = siteinfo_data(d) # filename -> found @@ -41,7 +71,8 @@ def find_meson_cross_files(d): filename = os.path.normpath(os.path.join(path, "meson.cross.d", element)) sanitized_path = filename.replace(thisdir, "${THISDIR}") if sanitized_path == filename: - bb.error("Cannot add '%s' to --cross-file, because it's not relative to THISDIR '%s' and sstate signature would contain this full path" % (filename, thisdir)) + if os.path.exists(filename): + bb.error("Cannot add '%s' to --cross-file, because it's not relative to THISDIR '%s' and sstate signature would contain this full path" % (filename, thisdir)) continue files[filename.replace(thisdir, "${THISDIR}")] = os.path.exists(filename) diff --git a/poky/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch b/poky/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch new file mode 100644 index 000000000..39fde5b78 --- /dev/null +++ b/poky/meta/recipes-core/glibc/glibc/0001-nptl-Remove-private-futex-optimization-BZ-27304.patch @@ -0,0 +1,49 @@ +From c4ad832276f4dadfa40904109b26a521468f66bc Mon Sep 17 00:00:00 2001 +From: Florian Weimer <fweimer@redhat.com> +Date: Thu, 4 Feb 2021 15:00:20 +0100 +Subject: [PATCH] nptl: Remove private futex optimization [BZ #27304] + +It is effectively used, unexcept for pthread_cond_destroy, where we do +not want it; see bug 27304. The internal locks do not support a +process-shared mode. + +This fixes commit dc6cfdc934db9997c33728082d63552b9eee4563 ("nptl: +Move pthread_cond_destroy implementation into libc"). + +Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org> + +Upstream-Status: Backport [https://sourceware.org/bugzilla/show_bug.cgi?id=27304] +Signed-off-by: Yanfei Xu <yanfei.xu@windriver.com> +--- + sysdeps/nptl/lowlevellock-futex.h | 14 +------------- + 1 file changed, 1 insertion(+), 13 deletions(-) + +diff --git a/sysdeps/nptl/lowlevellock-futex.h b/sysdeps/nptl/lowlevellock-futex.h +index ecb729da6b..ca96397a4a 100644 +--- a/sysdeps/nptl/lowlevellock-futex.h ++++ b/sysdeps/nptl/lowlevellock-futex.h +@@ -50,20 +50,8 @@ + #define LLL_SHARED FUTEX_PRIVATE_FLAG + + #ifndef __ASSEMBLER__ +- +-# if IS_IN (libc) || IS_IN (rtld) +-/* In libc.so or ld.so all futexes are private. */ +-# define __lll_private_flag(fl, private) \ +- ({ \ +- /* Prevent warnings in callers of this macro. */ \ +- int __lll_private_flag_priv __attribute__ ((unused)); \ +- __lll_private_flag_priv = (private); \ +- ((fl) | FUTEX_PRIVATE_FLAG); \ +- }) +-# else +-# define __lll_private_flag(fl, private) \ ++# define __lll_private_flag(fl, private) \ + (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) +-# endif + + # define lll_futex_syscall(nargs, futexp, op, ...) \ + ({ \ +-- +2.27.0 + diff --git a/poky/meta/recipes-core/glibc/glibc/0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch b/poky/meta/recipes-core/glibc/glibc/0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch new file mode 100644 index 000000000..3a004e227 --- /dev/null +++ b/poky/meta/recipes-core/glibc/glibc/0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch @@ -0,0 +1,185 @@ +From 750b00a1ddae220403fd892a6fd4e0791ffd154a Mon Sep 17 00:00:00 2001 +From: "H.J. Lu" <hjl.tools@gmail.com> +Date: Fri, 18 Sep 2020 07:55:14 -0700 +Subject: [PATCH] x86: Handle _SC_LEVEL1_ICACHE_LINESIZE [BZ #27444] + + x86: Move x86 processor cache info to cpu_features + +missed _SC_LEVEL1_ICACHE_LINESIZE. + +1. Add level1_icache_linesize to struct cpu_features. +2. Initialize level1_icache_linesize by calling handle_intel, +handle_zhaoxin and handle_amd with _SC_LEVEL1_ICACHE_LINESIZE. +3. Return level1_icache_linesize for _SC_LEVEL1_ICACHE_LINESIZE. + +Upstream-Status: Backport [https://sourceware.org/bugzilla/show_bug.cgi?id=27444] +Signed-off-by: Andrei Gherzan <andrei.gherzan@huawei.com> +--- + sysdeps/x86/Makefile | 8 +++ + sysdeps/x86/cacheinfo.c | 3 + + sysdeps/x86/dl-cacheinfo.h | 6 ++ + sysdeps/x86/include/cpu-features.h | 2 + + .../x86/tst-sysconf-cache-linesize-static.c | 1 + + sysdeps/x86/tst-sysconf-cache-linesize.c | 57 +++++++++++++++++++ + 6 files changed, 77 insertions(+) + create mode 100644 sysdeps/x86/tst-sysconf-cache-linesize-static.c + create mode 100644 sysdeps/x86/tst-sysconf-cache-linesize.c + +diff --git a/sysdeps/x86/Makefile b/sysdeps/x86/Makefile +index dd82674342..d231263051 100644 +--- a/sysdeps/x86/Makefile ++++ b/sysdeps/x86/Makefile +@@ -208,3 +208,11 @@ $(objpfx)check-cet.out: $(..)sysdeps/x86/check-cet.awk \ + generated += check-cet.out + endif + endif ++ ++ifeq ($(subdir),posix) ++tests += \ ++ tst-sysconf-cache-linesize \ ++ tst-sysconf-cache-linesize-static ++tests-static += \ ++ tst-sysconf-cache-linesize-static ++endif +diff --git a/sysdeps/x86/cacheinfo.c b/sysdeps/x86/cacheinfo.c +index 7b8df45e3b..5ea4723ca6 100644 +--- a/sysdeps/x86/cacheinfo.c ++++ b/sysdeps/x86/cacheinfo.c +@@ -32,6 +32,9 @@ __cache_sysconf (int name) + case _SC_LEVEL1_ICACHE_SIZE: + return cpu_features->level1_icache_size; + ++ case _SC_LEVEL1_ICACHE_LINESIZE: ++ return cpu_features->level1_icache_linesize; ++ + case _SC_LEVEL1_DCACHE_SIZE: + return cpu_features->level1_dcache_size; + +diff --git a/sysdeps/x86/dl-cacheinfo.h b/sysdeps/x86/dl-cacheinfo.h +index a31fa0783a..7cd00b92f1 100644 +--- a/sysdeps/x86/dl-cacheinfo.h ++++ b/sysdeps/x86/dl-cacheinfo.h +@@ -707,6 +707,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features) + long int core; + unsigned int threads = 0; + unsigned long int level1_icache_size = -1; ++ unsigned long int level1_icache_linesize = -1; + unsigned long int level1_dcache_size = -1; + unsigned long int level1_dcache_assoc = -1; + unsigned long int level1_dcache_linesize = -1; +@@ -726,6 +727,8 @@ dl_init_cacheinfo (struct cpu_features *cpu_features) + + level1_icache_size + = handle_intel (_SC_LEVEL1_ICACHE_SIZE, cpu_features); ++ level1_icache_linesize ++ = handle_intel (_SC_LEVEL1_ICACHE_LINESIZE, cpu_features); + level1_dcache_size = data; + level1_dcache_assoc + = handle_intel (_SC_LEVEL1_DCACHE_ASSOC, cpu_features); +@@ -753,6 +756,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features) + shared = handle_zhaoxin (_SC_LEVEL3_CACHE_SIZE); + + level1_icache_size = handle_zhaoxin (_SC_LEVEL1_ICACHE_SIZE); ++ level1_icache_linesize = handle_zhaoxin (_SC_LEVEL1_ICACHE_LINESIZE); + level1_dcache_size = data; + level1_dcache_assoc = handle_zhaoxin (_SC_LEVEL1_DCACHE_ASSOC); + level1_dcache_linesize = handle_zhaoxin (_SC_LEVEL1_DCACHE_LINESIZE); +@@ -772,6 +776,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features) + shared = handle_amd (_SC_LEVEL3_CACHE_SIZE); + + level1_icache_size = handle_amd (_SC_LEVEL1_ICACHE_SIZE); ++ level1_icache_linesize = handle_amd (_SC_LEVEL1_ICACHE_LINESIZE); + level1_dcache_size = data; + level1_dcache_assoc = handle_amd (_SC_LEVEL1_DCACHE_ASSOC); + level1_dcache_linesize = handle_amd (_SC_LEVEL1_DCACHE_LINESIZE); +@@ -833,6 +838,7 @@ dl_init_cacheinfo (struct cpu_features *cpu_features) + } + + cpu_features->level1_icache_size = level1_icache_size; ++ cpu_features->level1_icache_linesize = level1_icache_linesize; + cpu_features->level1_dcache_size = level1_dcache_size; + cpu_features->level1_dcache_assoc = level1_dcache_assoc; + cpu_features->level1_dcache_linesize = level1_dcache_linesize; +diff --git a/sysdeps/x86/include/cpu-features.h b/sysdeps/x86/include/cpu-features.h +index 624736b40e..39a3f4f311 100644 +--- a/sysdeps/x86/include/cpu-features.h ++++ b/sysdeps/x86/include/cpu-features.h +@@ -874,6 +874,8 @@ struct cpu_features + unsigned long int rep_stosb_threshold; + /* _SC_LEVEL1_ICACHE_SIZE. */ + unsigned long int level1_icache_size; ++ /* _SC_LEVEL1_ICACHE_LINESIZE. */ ++ unsigned long int level1_icache_linesize; + /* _SC_LEVEL1_DCACHE_SIZE. */ + unsigned long int level1_dcache_size; + /* _SC_LEVEL1_DCACHE_ASSOC. */ +diff --git a/sysdeps/x86/tst-sysconf-cache-linesize-static.c b/sysdeps/x86/tst-sysconf-cache-linesize-static.c +new file mode 100644 +index 0000000000..152ae68821 +--- /dev/null ++++ b/sysdeps/x86/tst-sysconf-cache-linesize-static.c +@@ -0,0 +1 @@ ++#include "tst-sysconf-cache-linesize.c" +diff --git a/sysdeps/x86/tst-sysconf-cache-linesize.c b/sysdeps/x86/tst-sysconf-cache-linesize.c +new file mode 100644 +index 0000000000..642dbde5d2 +--- /dev/null ++++ b/sysdeps/x86/tst-sysconf-cache-linesize.c +@@ -0,0 +1,57 @@ ++/* Test system cache line sizes. ++ Copyright (C) 2021 Free Software Foundation, Inc. ++ This file is part of the GNU C Library. ++ ++ The GNU C Library is free software; you can redistribute it and/or ++ modify it under the terms of the GNU Lesser General Public ++ License as published by the Free Software Foundation; either ++ version 2.1 of the License, or (at your option) any later version. ++ ++ The GNU C Library is distributed in the hope that it will be useful, ++ but WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public ++ License along with the GNU C Library; if not, see ++ <https://www.gnu.org/licenses/>. */ ++ ++#include <stdio.h> ++#include <stdlib.h> ++#include <unistd.h> ++#include <array_length.h> ++ ++static struct ++{ ++ const char *name; ++ int _SC_val; ++} sc_options[] = ++ { ++#define N(name) { "_SC_"#name, _SC_##name } ++ N (LEVEL1_ICACHE_LINESIZE), ++ N (LEVEL1_DCACHE_LINESIZE), ++ N (LEVEL2_CACHE_LINESIZE) ++ }; ++ ++static int ++do_test (void) ++{ ++ int result = EXIT_SUCCESS; ++ ++ for (int i = 0; i < array_length (sc_options); ++i) ++ { ++ long int scret = sysconf (sc_options[i]._SC_val); ++ if (scret < 0) ++ { ++ printf ("sysconf (%s) returned < 0 (%ld)\n", ++ sc_options[i].name, scret); ++ result = EXIT_FAILURE; ++ } ++ else ++ printf ("sysconf (%s): %ld\n", sc_options[i].name, scret); ++ } ++ ++ return result; ++} ++ ++#include <support/test-driver.c> diff --git a/poky/meta/recipes-core/glibc/glibc/CVE-2021-27645.patch b/poky/meta/recipes-core/glibc/glibc/CVE-2021-27645.patch new file mode 100644 index 000000000..26c5c0d2a --- /dev/null +++ b/poky/meta/recipes-core/glibc/glibc/CVE-2021-27645.patch @@ -0,0 +1,51 @@ +From dca565886b5e8bd7966e15f0ca42ee5cff686673 Mon Sep 17 00:00:00 2001 +From: DJ Delorie <dj@redhat.com> +Date: Thu, 25 Feb 2021 16:08:21 -0500 +Subject: [PATCH] nscd: Fix double free in netgroupcache [BZ #27462] + +In commit 745664bd798ec8fd50438605948eea594179fba1 a use-after-free +was fixed, but this led to an occasional double-free. This patch +tracks the "live" allocation better. + +Tested manually by a third party. + +Related: RHBZ 1927877 + +Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org> +Reviewed-by: Carlos O'Donell <carlos@redhat.com> + +Upstream-Status: Backport [https://sourceware.org/git/?p=glibc.git;a=commit;h=dca565886b5e8bd7966e15f0ca42ee5cff686673] + +CVE: CVE-2021-27645 + +Reviewed-by: Carlos O'Donell <carlos@redhat.com> +Signed-off-by: Khairul Rohaizzat Jamaluddin <khairul.rohaizzat.jamaluddin@intel.com> +--- + nscd/netgroupcache.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/nscd/netgroupcache.c b/nscd/netgroupcache.c +index dba6ceec1b..ad2daddafd 100644 +--- a/nscd/netgroupcache.c ++++ b/nscd/netgroupcache.c +@@ -248,7 +248,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, + : NULL); + ndomain = (ndomain ? newbuf + ndomaindiff + : NULL); +- buffer = newbuf; ++ *tofreep = buffer = newbuf; + } + + nhost = memcpy (buffer + bufused, +@@ -319,7 +319,7 @@ addgetnetgrentX (struct database_dyn *db, int fd, request_header *req, + else if (status == NSS_STATUS_TRYAGAIN && e == ERANGE) + { + buflen *= 2; +- buffer = xrealloc (buffer, buflen); ++ *tofreep = buffer = xrealloc (buffer, buflen); + } + else if (status == NSS_STATUS_RETURN + || status == NSS_STATUS_NOTFOUND +-- +2.27.0 + diff --git a/poky/meta/recipes-core/glibc/glibc_2.33.bb b/poky/meta/recipes-core/glibc/glibc_2.33.bb index c47826a51..5e0baa53e 100644 --- a/poky/meta/recipes-core/glibc/glibc_2.33.bb +++ b/poky/meta/recipes-core/glibc/glibc_2.33.bb @@ -45,6 +45,9 @@ SRC_URI = "${GLIBC_GIT_URI};branch=${SRCBRANCH};name=glibc \ file://0030-powerpc-Do-not-ask-compiler-for-finding-arch.patch \ file://0031-x86-Require-full-ISA-support-for-x86-64-level-marker.patch \ file://0032-string-Work-around-GCC-PR-98512-in-rawmemchr.patch \ + file://0033-x86-Handle-_SC_LEVEL1_ICACHE_LINESIZE-BZ-27444.patch \ + file://CVE-2021-27645.patch \ + file://0001-nptl-Remove-private-futex-optimization-BZ-27304.patch \ " S = "${WORKDIR}/git" B = "${WORKDIR}/build-${TARGET_SYS}" diff --git a/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb b/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb index 705ff63cf..925235db6 100644 --- a/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb +++ b/poky/meta/recipes-core/images/build-appliance-image_15.0.0.bb @@ -22,9 +22,9 @@ APPEND += "rootfstype=ext4 quiet" DEPENDS = "zip-native python3-pip-native" IMAGE_FSTYPES = "wic.vmdk wic.vhd wic.vhdx" -inherit core-image module-base setuptools3 +inherit core-image setuptools3 -SRCREV ?= "e56305dd709ae2af2da7a7599984b3ad18c4970f" +SRCREV ?= "c6483187f96c6d21b7129ad78de3ff976fbe5970" SRC_URI = "git://git.yoctoproject.org/poky \ file://Yocto_Build_Appliance.vmx \ file://Yocto_Build_Appliance.vmxf \ @@ -61,12 +61,6 @@ fakeroot do_populate_poky_src () { # Place the README_VirtualBox_Toaster file in builders home folder. cp ${WORKDIR}/README_VirtualBox_Toaster.txt ${IMAGE_ROOTFS}/home/builder/ - # Create a symlink, needed for out-of-tree kernel modules build - if [ ! -e ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build ]; then - rm -f ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build - lnr ${IMAGE_ROOTFS}${KERNEL_SRC_PATH} ${IMAGE_ROOTFS}/lib/modules/${KERNEL_VERSION}/build - fi - echo "INHERIT += \"rm_work\"" >> ${IMAGE_ROOTFS}/home/builder/poky/build/conf/auto.conf echo "export LC_ALL=en_US.utf8" >> ${IMAGE_ROOTFS}/home/builder/.bashrc diff --git a/poky/meta/recipes-core/initrdscripts/initramfs-framework/rootfs b/poky/meta/recipes-core/initrdscripts/initramfs-framework/rootfs index ee24e82af..10b958317 100644 --- a/poky/meta/recipes-core/initrdscripts/initramfs-framework/rootfs +++ b/poky/meta/recipes-core/initrdscripts/initramfs-framework/rootfs @@ -24,24 +24,13 @@ rootfs_run() { if [ "`echo ${bootparam_root} | cut -c1-5`" = "UUID=" ]; then root_uuid=`echo $bootparam_root | cut -c6-` bootparam_root="/dev/disk/by-uuid/$root_uuid" - fi - - if [ "`echo ${bootparam_root} | cut -c1-9`" = "PARTUUID=" ]; then + elif [ "`echo ${bootparam_root} | cut -c1-9`" = "PARTUUID=" ]; then root_partuuid=`echo $bootparam_root | cut -c10-` bootparam_root="/dev/disk/by-partuuid/$root_partuuid" - fi - - if [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then - root_partlabel=`echo $bootparam_root | cut -c11-` - bootparam_root="/dev/disk/by-partlabel/$root_partlabel" - fi - - if [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then + elif [ "`echo ${bootparam_root} | cut -c1-10`" = "PARTLABEL=" ]; then root_partlabel=`echo $bootparam_root | cut -c11-` bootparam_root="/dev/disk/by-partlabel/$root_partlabel" - fi - - if [ "`echo ${bootparam_root} | cut -c1-6`" = "LABEL=" ]; then + elif [ "`echo ${bootparam_root} | cut -c1-6`" = "LABEL=" ]; then root_label=`echo $bootparam_root | cut -c7-` bootparam_root="/dev/disk/by-label/$root_label" fi diff --git a/poky/meta/recipes-core/libxcrypt/files/0001-configure.ac-do-not-use-compute-symver-floor.patch b/poky/meta/recipes-core/libxcrypt/files/0001-configure.ac-do-not-use-compute-symver-floor.patch new file mode 100644 index 000000000..4e6b42710 --- /dev/null +++ b/poky/meta/recipes-core/libxcrypt/files/0001-configure.ac-do-not-use-compute-symver-floor.patch @@ -0,0 +1,32 @@ +From b28bb856ccebe8fded51d11362bf5920699eed59 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin <alex.kanavin@gmail.com> +Date: Thu, 18 Mar 2021 10:52:13 +0000 +Subject: [PATCH] configure.ac: do not use compute-symver-floor + +This script (newly introduced in 4.4.18) sporadically fails, without +failing configure(), which has been reported at +https://github.com/besser82/libxcrypt/issues/123 + +Upstream-Status: Inappropriate +Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com> +--- + configure.ac | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 45b91b4..f3ba945 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -426,11 +426,7 @@ if test x$enable_shared != xyes; then enable_obsolete_api=0; fi + # need to be binary backward compatible with. + if test $enable_obsolete_api = 1; then + AC_MSG_CHECKING([minimum symbol version to use for compatibility symbols]) +- SYMVER_FLOOR=$( +- $PERL ${srcdir}/build-aux/compute-symver-floor \ +- ${srcdir}/lib/libcrypt.minver $host_os $host_cpu \ +- 2>&AS_MESSAGE_LOG_FD +- ) ++ SYMVER_FLOOR=GLIBC_2.0 + AC_MSG_RESULT([$SYMVER_FLOOR]) + case "$SYMVER_FLOOR" in + ERROR) diff --git a/poky/meta/recipes-core/libxcrypt/libxcrypt.inc b/poky/meta/recipes-core/libxcrypt/libxcrypt.inc index e9f968b55..b5ca863d5 100644 --- a/poky/meta/recipes-core/libxcrypt/libxcrypt.inc +++ b/poky/meta/recipes-core/libxcrypt/libxcrypt.inc @@ -9,7 +9,9 @@ LIC_FILES_CHKSUM = "file://LICENSING;md5=bd5d9777dfe7076c4f2928f12fed226a \ inherit autotools pkgconfig -SRC_URI = "git://github.com/besser82/libxcrypt.git;branch=${SRCBRANCH}" +SRC_URI = "git://github.com/besser82/libxcrypt.git;branch=${SRCBRANCH} \ + file://0001-configure.ac-do-not-use-compute-symver-floor.patch \ + " SRCREV = "94d84f92ca123d851586016c4678eb1f21c19029" SRCBRANCH ?= "develop" diff --git a/poky/meta/recipes-core/meta/cve-update-db-native.bb b/poky/meta/recipes-core/meta/cve-update-db-native.bb index cf62e1e32..25ec6bac7 100644 --- a/poky/meta/recipes-core/meta/cve-update-db-native.bb +++ b/poky/meta/recipes-core/meta/cve-update-db-native.bb @@ -12,6 +12,8 @@ deltask do_compile deltask do_install deltask do_populate_sysroot +NVDCVE_URL ?= "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-" + python () { if not bb.data.inherits_class("cve-check", d): raise bb.parse.SkipRecipe("Skip recipe when cve-check class is not loaded.") @@ -28,7 +30,6 @@ python do_fetch() { bb.utils.export_proxies(d) - BASE_URL = "https://nvd.nist.gov/feeds/json/cve/1.1/nvdcve-1.1-" YEAR_START = 2002 db_file = d.getVar("CVE_CHECK_DB_FILE") @@ -64,7 +65,7 @@ python do_fetch() { for i, year in enumerate(range(YEAR_START, date.today().year + 1)): bb.debug(2, "Updating %d" % year) ph.update((float(i + 1) / total_years) * 100) - year_url = BASE_URL + str(year) + year_url = (d.getVar('NVDCVE_URL')) + str(year) meta_url = year_url + ".meta" json_url = year_url + ".json.gz" @@ -143,9 +144,14 @@ def parse_node_and_insert(c, node, cveId): product = cpe23[4] version = cpe23[5] + if cpe23[6] == '*' or cpe23[6] == '-': + version_suffix = "" + else: + version_suffix = "_" + cpe23[6] + if version != '*' and version != '-': # Version is defined, this is a '=' match - yield [cveId, vendor, product, version, '=', '', ''] + yield [cveId, vendor, product, version + version_suffix, '=', '', ''] elif version == '-': # no version information is available yield [cveId, vendor, product, version, '', '', ''] diff --git a/poky/meta/recipes-core/meta/uninative-tarball.bb b/poky/meta/recipes-core/meta/uninative-tarball.bb index c4a6c96b4..bbdaebad9 100644 --- a/poky/meta/recipes-core/meta/uninative-tarball.bb +++ b/poky/meta/recipes-core/meta/uninative-tarball.bb @@ -8,6 +8,7 @@ TOOLCHAIN_TARGET_TASK = "" # utf-16, cp1252 - binutils-windres TOOLCHAIN_HOST_TASK = "\ nativesdk-glibc \ + nativesdk-glibc-dbg \ nativesdk-glibc-gconv-ibm850 \ nativesdk-glibc-gconv-iso8859-1 \ nativesdk-glibc-gconv-utf-16 \ diff --git a/poky/meta/recipes-core/musl/libucontext_git.bb b/poky/meta/recipes-core/musl/libucontext_git.bb index 734ad9c95..11affebb4 100644 --- a/poky/meta/recipes-core/musl/libucontext_git.bb +++ b/poky/meta/recipes-core/musl/libucontext_git.bb @@ -40,8 +40,8 @@ def map_kernel_arch(a, d): elif re.match('aarch64_be_ilp32$', a): return 'aarch64' elif re.match('mips(isa|)(32|)(r6|)(el|)$', a): return 'mips' elif re.match('mips(isa|)64(r6|)(el|)$', a): return 'mips64' + elif re.match('p(pc64|owerpc64)(le)', a): return 'ppc64' elif re.match('p(pc|owerpc)', a): return 'ppc' - elif re.match('p(pc64|owerpc64)', a): return 'ppc64' elif re.match('riscv64$', a): return 'riscv64' elif re.match('riscv32$', a): return 'riscv32' else: diff --git a/poky/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch b/poky/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch deleted file mode 100644 index df1d15901..000000000 --- a/poky/meta/recipes-core/ovmf/ovmf/0003-ovmf-enable-long-path-file.patch +++ /dev/null @@ -1,28 +0,0 @@ -From e19481e5a64f8915ac118899b10c40d12c0f9daa Mon Sep 17 00:00:00 2001 -From: Dengke Du <dengke.du@windriver.com> -Date: Mon, 11 Sep 2017 02:21:55 -0400 -Subject: [PATCH 3/4] ovmf: enable long path file - -Upstream-Status: Pending -Signed-off-by: Dengke Du <dengke.du@windriver.com> - ---- - BaseTools/Source/C/Common/CommonLib.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/BaseTools/Source/C/Common/CommonLib.h b/BaseTools/Source/C/Common/CommonLib.h -index e1cce985f7..d67d03c70c 100644 ---- a/BaseTools/Source/C/Common/CommonLib.h -+++ b/BaseTools/Source/C/Common/CommonLib.h -@@ -14,7 +14,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent - #include <assert.h>
- #define PRINTED_GUID_BUFFER_SIZE 37 // including null-termination
-
--#define MAX_LONG_FILE_PATH 500
-+#define MAX_LONG_FILE_PATH 1023
-
- #define MAX_UINT64 ((UINT64)0xFFFFFFFFFFFFFFFFULL)
- #define MAX_UINT32 ((UINT32)0xFFFFFFFF)
--- -2.28.0 - diff --git a/poky/meta/recipes-core/ovmf/ovmf/zero.patch b/poky/meta/recipes-core/ovmf/ovmf/zero.patch new file mode 100644 index 000000000..af7a9d31f --- /dev/null +++ b/poky/meta/recipes-core/ovmf/ovmf/zero.patch @@ -0,0 +1,84 @@ +Pass --zero to GenFw in release builds so that the sections that link back to +the intermediate binaries (containing build paths) are removed. + +Upstream-Status: Pending (discussion at https://bugzilla.tianocore.org/show_bug.cgi?id=3256) +Signed-off-by: Ross Burton <ross.burton@arm.com> + +From 6303b065802c9427c718fda129360189b79316e7 Mon Sep 17 00:00:00 2001 +From: Ross Burton <ross.burton@arm.com> +Date: Tue, 16 Mar 2021 16:49:49 +0000 +Subject: [PATCH] Strip build paths + +--- + OvmfPkg/AmdSev/AmdSevX64.dsc | 1 + + OvmfPkg/Bhyve/BhyveX64.dsc | 1 + + OvmfPkg/OvmfPkgIa32.dsc | 2 ++ + OvmfPkg/OvmfPkgIa32X64.dsc | 1 + + OvmfPkg/OvmfPkgX64.dsc | 1 + + OvmfPkg/OvmfXen.dsc | 1 + + 6 files changed, 7 insertions(+) + +diff --git a/OvmfPkg/Bhyve/BhyveX64.dsc b/OvmfPkg/Bhyve/BhyveX64.dsc +index 4a1cdf5aca..132f55cf69 100644 +--- a/OvmfPkg/Bhyve/BhyveX64.dsc ++++ b/OvmfPkg/Bhyve/BhyveX64.dsc +@@ -76,6 +76,7 @@
+ GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ !endif
++ RELEASE_*_*_GENFW_FLAGS = --zero
+
+ #
+ # Disable deprecated APIs.
+diff --git a/OvmfPkg/OvmfPkgIa32.dsc b/OvmfPkg/OvmfPkgIa32.dsc +index 1eaf3e99c6..ce20f09df8 100644 +--- a/OvmfPkg/OvmfPkgIa32.dsc ++++ b/OvmfPkg/OvmfPkgIa32.dsc +@@ -90,6 +90,8 @@
+
+ !include NetworkPkg/NetworkBuildOptions.dsc.inc
+
++ RELEASE_*_*_GENFW_FLAGS = --zero
++
+ [BuildOptions.common.EDKII.DXE_RUNTIME_DRIVER]
+ GCC:*_*_*_DLINK_FLAGS = -z common-page-size=0x1000
+ XCODE:*_*_*_DLINK_FLAGS = -seg1addr 0x1000 -segalign 0x1000
+diff --git a/OvmfPkg/OvmfPkgIa32X64.dsc b/OvmfPkg/OvmfPkgIa32X64.dsc +index 4a5a430147..97cc438250 100644 +--- a/OvmfPkg/OvmfPkgIa32X64.dsc ++++ b/OvmfPkg/OvmfPkgIa32X64.dsc +@@ -84,6 +84,7 @@
+ GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ !endif
++ RELEASE_*_*_GENFW_FLAGS = --zero
+
+ #
+ # Disable deprecated APIs.
+diff --git a/OvmfPkg/OvmfPkgX64.dsc b/OvmfPkg/OvmfPkgX64.dsc +index d4d601b444..f544fb04bf 100644 +--- a/OvmfPkg/OvmfPkgX64.dsc ++++ b/OvmfPkg/OvmfPkgX64.dsc +@@ -84,6 +84,7 @@
+ GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ !endif
++ RELEASE_*_*_GENFW_FLAGS = --zero
+
+ #
+ # Disable deprecated APIs.
+diff --git a/OvmfPkg/OvmfXen.dsc b/OvmfPkg/OvmfXen.dsc +index 507029404f..fcaa35acf1 100644 +--- a/OvmfPkg/OvmfXen.dsc ++++ b/OvmfPkg/OvmfXen.dsc +@@ -74,6 +74,7 @@
+ GCC:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ INTEL:*_*_X64_GENFW_FLAGS = --keepexceptiontable
+ !endif
++ RELEASE_*_*_GENFW_FLAGS = --zero
+
+ #
+ # Disable deprecated APIs.
+-- +2.25.1 + diff --git a/poky/meta/recipes-core/ovmf/ovmf_git.bb b/poky/meta/recipes-core/ovmf/ovmf_git.bb index d785ff670..896b3b632 100644 --- a/poky/meta/recipes-core/ovmf/ovmf_git.bb +++ b/poky/meta/recipes-core/ovmf/ovmf_git.bb @@ -15,12 +15,12 @@ PACKAGECONFIG[secureboot] = ",,," SRC_URI = "gitsm://github.com/tianocore/edk2.git;branch=master;protocol=https \ file://0001-ovmf-update-path-to-native-BaseTools.patch \ file://0002-BaseTools-makefile-adjust-to-build-in-under-bitbake.patch \ - file://0003-ovmf-enable-long-path-file.patch \ file://0004-ovmf-Update-to-latest.patch \ + file://zero.patch \ " -PV = "edk2-stable202011" -SRCREV = "872f953262d68a11da7bc2fb3ded16df234b8700" +PV = "edk2-stable202102" +SRCREV = "ef91b07388e1c0a50c604e5350eeda98428ccea6" UPSTREAM_CHECK_GITTAGREGEX = "(?P<pver>edk2-stable.*)" inherit deploy diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-base.bb b/poky/meta/recipes-core/packagegroups/packagegroup-base.bb index c882e1526..6d4d7e6f7 100644 --- a/poky/meta/recipes-core/packagegroups/packagegroup-base.bb +++ b/poky/meta/recipes-core/packagegroups/packagegroup-base.bb @@ -8,7 +8,6 @@ PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup -PROVIDES = "${PACKAGES}" PACKAGES = ' \ packagegroup-base \ packagegroup-base-extended \ diff --git a/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb b/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb index b345e314a..20fe6fc09 100644 --- a/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb +++ b/poky/meta/recipes-core/packagegroups/packagegroup-core-nfs.bb @@ -7,7 +7,6 @@ PR = "r2" inherit packagegroup -PROVIDES = "${PACKAGES}" PACKAGES = "${PN}-server ${PN}-client" SUMMARY_${PN}-client = "NFS client" diff --git a/poky/meta/recipes-core/systemd/systemd-boot_247.3.bb b/poky/meta/recipes-core/systemd/systemd-boot_247.4.bb index 249e620f4..249e620f4 100644 --- a/poky/meta/recipes-core/systemd/systemd-boot_247.3.bb +++ b/poky/meta/recipes-core/systemd/systemd-boot_247.4.bb diff --git a/poky/meta/recipes-core/systemd/systemd-conf/wired.network b/poky/meta/recipes-core/systemd/systemd-conf/wired.network index 09367edb1..e7b69970d 100644 --- a/poky/meta/recipes-core/systemd/systemd-conf/wired.network +++ b/poky/meta/recipes-core/systemd/systemd-conf/wired.network @@ -1,6 +1,7 @@ [Match] Type=ether KernelCommandLine=!nfsroot +KernelCommandLine=!ip [Network] DHCP=yes diff --git a/poky/meta/recipes-core/systemd/systemd-conf_247.3.bb b/poky/meta/recipes-core/systemd/systemd-conf_247.3.bb index 944b56ff8..ea35e83f4 100644 --- a/poky/meta/recipes-core/systemd/systemd-conf_247.3.bb +++ b/poky/meta/recipes-core/systemd/systemd-conf_247.3.bb @@ -29,9 +29,6 @@ do_install() { # Based on change from YP bug 8141, OE commit 5196d7bacaef1076c361adaa2867be31759c1b52 do_install_append_qemuall() { install -D -m0644 ${WORKDIR}/system.conf-qemuall ${D}${systemd_unitdir}/system.conf.d/01-${PN}.conf - - # Do not install wired.network for qemu bsps - rm -rf ${D}${systemd_unitdir}/network } PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/poky/meta/recipes-core/systemd/systemd.inc b/poky/meta/recipes-core/systemd/systemd.inc index ccff8c8b9..098bca98f 100644 --- a/poky/meta/recipes-core/systemd/systemd.inc +++ b/poky/meta/recipes-core/systemd/systemd.inc @@ -14,7 +14,7 @@ LICENSE = "GPLv2 & LGPLv2.1" LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c" -SRCREV = "551dd873b0bdfb9e7e47431b2933c8b910228f0c" +SRCREV = "069525e84a67375e27429cb490e8d28af78e673a" SRCBRANCH = "v247-stable" SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=git;branch=${SRCBRANCH}" diff --git a/poky/meta/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch b/poky/meta/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch index e49e06672..752824688 100644 --- a/poky/meta/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch +++ b/poky/meta/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch @@ -12,10 +12,12 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> src/core/systemd.pc.in | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) +diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in +index b5cc8f9..21dbf30 100644 --- a/src/core/systemd.pc.in +++ b/src/core/systemd.pc.in @@ -65,16 +65,16 @@ systemdshutdowndir=${systemd_shutdown_dir} - tmpfiles_dir=/usr/lib/tmpfiles.d + tmpfiles_dir=${prefix}/lib/tmpfiles.d tmpfilesdir=${tmpfiles_dir} -sysusers_dir=${rootprefix}/lib/sysusers.d @@ -34,4 +36,7 @@ Signed-off-by: Khem Raj <raj.khem@gmail.com> +modules_load_dir=${prefix}/lib/modules-load.d modulesloaddir=${modules_load_dir} - catalog_dir=/usr/lib/systemd/catalog + catalog_dir=${prefix}/lib/systemd/catalog +-- +2.25.1 + diff --git a/poky/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch b/poky/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch index b689cf129..a978558b4 100644 --- a/poky/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch +++ b/poky/meta/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch @@ -41,20 +41,22 @@ Signed-off-by: Luca Boccassi <luca.boccassi@microsoft.com> src/network/netdev/netdev-gperf.gperf | 1 + src/network/netdev/netdev.c | 1 + src/network/networkd-brvlan.c | 1 + - src/network/networkd-dhcp-common.c | 1 + + src/network/networkd-dhcp-common.c | 4 +++- + src/network/networkd-dhcp-server.c | 4 ++-- src/network/networkd-dhcp4.c | 2 +- src/network/networkd-dhcp6.c | 2 +- src/network/networkd-link.c | 2 +- src/network/networkd-network.c | 1 + + src/network/networkd-route.c | 5 ++++- src/network/test-network-tables.c | 1 + src/shared/ethtool-util.c | 1 + src/shared/ethtool-util.h | 1 + src/udev/net/link-config.c | 1 + src/udev/udev-builtin-net_setup_link.c | 1 + - 19 files changed, 18 insertions(+), 4 deletions(-) + 21 files changed, 26 insertions(+), 8 deletions(-) diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c -index 30ac526fc9..126077e13c 100644 +index 66f87c4b95..de1264ae46 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -5,7 +5,6 @@ @@ -158,7 +160,7 @@ index e53c73c30c..9bf0771b84 100644 #include <stdbool.h> diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c -index c338c775a7..ab35d65c53 100644 +index 9f58121350..554d006cb8 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -1,7 +1,8 @@ @@ -171,7 +173,7 @@ index c338c775a7..ab35d65c53 100644 #include "dhcp-internal.h" #include "dhcp6-internal.h" -@@ -10,6 +10,7 @@ +@@ -10,6 +11,7 @@ #include "networkd-dhcp-common.h" #include "networkd-link.h" #include "networkd-manager.h" @@ -195,7 +197,7 @@ index cf279c640d..bae541029b 100644 #include "sd-dhcp-server.h" diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c -index 02d33841b6..a30d8dd82c 100644 +index f3c1e5f609..e4ef6eca63 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1,9 +1,9 @@ @@ -210,7 +212,7 @@ index 02d33841b6..a30d8dd82c 100644 #include "escape.h" #include "alloc-util.h" diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c -index d4d4182ee5..635d08f7d5 100644 +index 5c077c1ec8..fa98042aa5 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -3,9 +3,9 @@ @@ -225,7 +227,7 @@ index d4d4182ee5..635d08f7d5 100644 #include "sd-dhcp6-client.h" diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c -index ced18de425..07b43770de 100644 +index 3bfe636691..e0c68c8ad3 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1,8 +1,8 @@ @@ -250,7 +252,7 @@ index 3254641461..f0ada419fd 100644 #include <netinet/in.h> #include <linux/netdevice.h> diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c -index 10f30c1a7e..579885726c 100644 +index 0ed89584ef..e7e157c201 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c @@ -1,7 +1,10 @@ @@ -311,16 +313,16 @@ index d12fd0e299..636806dc23 100644 #include <netinet/ether.h> #include <unistd.h> diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c -index cb12b943fe..5a28c8b563 100644 +index 87e1fb133e..13876029d0 100644 --- a/src/udev/udev-builtin-net_setup_link.c +++ b/src/udev/udev-builtin-net_setup_link.c @@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ +#include <netinet/if_ether.h> - #include "device-util.h" #include "alloc-util.h" - #include "link-config.h" + #include "device-util.h" + #include "errno-util.h" -- -2.27.0 +2.25.1 diff --git a/poky/meta/recipes-core/systemd/systemd_247.3.bb b/poky/meta/recipes-core/systemd/systemd_247.4.bb index c0073ad7b..cd67e65ab 100644 --- a/poky/meta/recipes-core/systemd/systemd_247.3.bb +++ b/poky/meta/recipes-core/systemd/systemd_247.4.bb @@ -484,10 +484,15 @@ FILES_${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.c ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \ " +# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox. RRECOMMENDS_${PN}-container += "\ - ${PN}-journal-upload \ - ${PN}-journal-remote \ ${PN}-journal-gatewayd \ + ${PN}-journal-remote \ + ${PN}-journal-upload \ + kernel-module-dm-mod \ + kernel-module-loop \ + kernel-module-tun \ + tar \ " FILES_${PN}-extra-utils = "\ diff --git a/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb b/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb index d95d1a63f..0af116f35 100644 --- a/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb +++ b/poky/meta/recipes-core/sysvinit/sysvinit-inittab_2.88dsf.bb @@ -53,6 +53,10 @@ EOF fi } +do_install_append_qemuppc64 () { + echo "9:12345:respawn:${base_sbindir}/getty 38400 hvc0" >> ${D}${sysconfdir}/inittab +} + pkg_postinst_${PN} () { # run this on host and on target if [ "${SERIAL_CONSOLES_CHECK}" = "" ]; then diff --git a/poky/meta/recipes-core/util-linux/util-linux-libuuid_2.36.2.bb b/poky/meta/recipes-core/util-linux/util-linux-libuuid_2.36.2.bb new file mode 100644 index 000000000..9612c491c --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux-libuuid_2.36.2.bb @@ -0,0 +1,16 @@ +# To allow util-linux to optionally build-depend on cryptsetup, libuuid is +# split out of the main recipe, as it's needed by cryptsetup + +require util-linux.inc + +inherit autotools gettext pkgconfig + +S = "${WORKDIR}/util-linux-${PV}" +EXTRA_OECONF += "--disable-all-programs --enable-libuuid" +LICENSE = "BSD-3-Clause" + +do_install_append() { + rm -rf ${D}${datadir} ${D}${bindir} ${D}${base_bindir} ${D}${sbindir} ${D}${base_sbindir} ${D}${exec_prefix}/sbin +} + +BBCLASSEXTEND = "native nativesdk" diff --git a/poky/meta/recipes-core/util-linux/util-linux.inc b/poky/meta/recipes-core/util-linux/util-linux.inc new file mode 100644 index 000000000..cbf6102ee --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux.inc @@ -0,0 +1,41 @@ +SUMMARY = "A suite of basic system administration utilities" +HOMEPAGE = "https://en.wikipedia.org/wiki/Util-linux" +DESCRIPTION = "Util-linux includes a suite of basic system administration utilities \ +commonly found on most Linux systems. Some of the more important utilities include \ +disk partitioning, kernel message management, filesystem creation, and system login." + +SECTION = "base" + +LICENSE = "GPLv2+ & LGPLv2.1+ & BSD-3-Clause & BSD-4-Clause" +LICENSE_${PN}-libblkid = "LGPLv2.1+" +LICENSE_${PN}-libfdisk = "LGPLv2.1+" +LICENSE_${PN}-libmount = "LGPLv2.1+" +LICENSE_${PN}-libsmartcols = "LGPLv2.1+" + +LIC_FILES_CHKSUM = "file://README.licensing;md5=0fd5c050c6187d2bf0a4492b7f4e33da \ + file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://Documentation/licenses/COPYING.GPL-2.0-or-later;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://Documentation/licenses/COPYING.LGPL-2.1-or-later;md5=4fbd65380cdd255951079008b364516c \ + file://Documentation/licenses/COPYING.BSD-3-Clause;md5=58dcd8452651fc8b07d1f65ce07ca8af \ + file://Documentation/licenses/COPYING.BSD-4-Clause-UC;md5=263860f8968d8bafa5392cab74285262 \ + file://libuuid/COPYING;md5=6d2cafc999feb2c2de84d4d24b23290c \ + file://libmount/COPYING;md5=7c7e39fb7d70ffe5d693a643e29987c2 \ + file://libblkid/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ + file://libfdisk/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ + file://libsmartcols/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ +" + +FILESEXTRAPATHS_prepend := "${THISDIR}/util-linux:" +MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" +BPN = "util-linux" +SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${MAJOR_VERSION}/${BP}.tar.xz \ + file://configure-sbindir.patch \ + file://runuser.pamd \ + file://runuser-l.pamd \ + file://ptest.patch \ + file://run-ptest \ + file://display_testname_for_subtest.patch \ + file://avoid_parallel_tests.patch \ + file://Automake-use-EXTRA_LTLIBRARIES-instead-of-noinst_LTL.patch \ + " +SRC_URI[sha256sum] = "f7516ba9d8689343594356f0e5e1a5f0da34adfbc89023437735872bb5024c5f" diff --git a/poky/meta/recipes-core/util-linux/util-linux/Automake-use-EXTRA_LTLIBRARIES-instead-of-noinst_LTL.patch b/poky/meta/recipes-core/util-linux/util-linux/Automake-use-EXTRA_LTLIBRARIES-instead-of-noinst_LTL.patch new file mode 100644 index 000000000..272518914 --- /dev/null +++ b/poky/meta/recipes-core/util-linux/util-linux/Automake-use-EXTRA_LTLIBRARIES-instead-of-noinst_LTL.patch @@ -0,0 +1,49 @@ +Author: Luca Boccassi <luca.boccassi@microsoft.com> +Description: Automake: use EXTRA_LTLIBRARIES instead of noinst_LTLIBRARIES + noinst_LTLIBRARIES causes the libraries to be always built + unconditionally. EXTRA_LTLIBRARIES causes them to be built + only if other build target needs them. + In other words, avoid building libcommon.a and libtcolors.a + unless they are needed by another library/executable and + save some build time. +Upstream-Status: backport, commit:c65953d72bbc7412f32e566d9fa6e780d84f0696 +--- a/Makefile.am ++++ b/Makefile.am +@@ -39,7 +39,7 @@ bashcompletiondir = @bashcompletiondir@ + + dist_noinst_HEADERS = + noinst_PROGRAMS = +-noinst_LTLIBRARIES = ++EXTRA_LTLIBRARIES = + usrbin_exec_PROGRAMS = + usrsbin_exec_PROGRAMS = + dist_man_MANS = +@@ -169,7 +169,7 @@ else + edit_cmd += -e 's|@vendordir[@]||g' + endif + +-CLEANFILES += $(PATHFILES) ++CLEANFILES += $(PATHFILES) $(EXTRA_LTLIBRARIES) + EXTRA_DIST += $(PATHFILES:=.in) + + $(PATHFILES): Makefile +--- a/lib/Makemodule.am ++++ b/lib/Makemodule.am +@@ -9,7 +9,7 @@ + # Note that you need "make install-strip" (or proper rpm / Debian build) + # to generate binaries with only relevant stuff. + # +-noinst_LTLIBRARIES += libcommon.la ++EXTRA_LTLIBRARIES += libcommon.la + libcommon_la_CFLAGS = $(AM_CFLAGS) + libcommon_la_SOURCES = \ + lib/blkdev.c \ +@@ -59,7 +59,7 @@ libcommon_la_SOURCES += lib/sysfs.c + endif + endif + +-noinst_LTLIBRARIES += libtcolors.la ++EXTRA_LTLIBRARIES += libtcolors.la + libtcolors_la_CFLAGS = $(AM_CFLAGS) + libtcolors_la_SOURCES = lib/colors.c lib/color-names.c include/colors.h include/color-names.h + libtcolors_la_LIBADD = diff --git a/poky/meta/recipes-core/util-linux/util-linux_2.36.2.bb b/poky/meta/recipes-core/util-linux/util-linux_2.36.2.bb index 19950a272..c79cf782d 100644 --- a/poky/meta/recipes-core/util-linux/util-linux_2.36.2.bb +++ b/poky/meta/recipes-core/util-linux/util-linux_2.36.2.bb @@ -1,46 +1,8 @@ -SUMMARY = "A suite of basic system administration utilities" -HOMEPAGE = "https://en.wikipedia.org/wiki/Util-linux" -DESCRIPTION = "Util-linux includes a suite of basic system administration utilities \ -commonly found on most Linux systems. Some of the more important utilities include \ -disk partitioning, kernel message management, filesystem creation, and system login." - -SECTION = "base" - -LICENSE = "GPLv2+ & LGPLv2.1+ & BSD-3-Clause & BSD-4-Clause" -LICENSE_${PN}-libblkid = "LGPLv2.1+" -LICENSE_${PN}-libfdisk = "LGPLv2.1+" -LICENSE_${PN}-libmount = "LGPLv2.1+" -LICENSE_${PN}-libsmartcols = "LGPLv2.1+" -LICENSE_${PN}-libuuid = "BSD-3-Clause" - -LIC_FILES_CHKSUM = "file://README.licensing;md5=0fd5c050c6187d2bf0a4492b7f4e33da \ - file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ - file://Documentation/licenses/COPYING.GPL-2.0-or-later;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ - file://Documentation/licenses/COPYING.LGPL-2.1-or-later;md5=4fbd65380cdd255951079008b364516c \ - file://Documentation/licenses/COPYING.BSD-3-Clause;md5=58dcd8452651fc8b07d1f65ce07ca8af \ - file://Documentation/licenses/COPYING.BSD-4-Clause-UC;md5=263860f8968d8bafa5392cab74285262 \ - file://libuuid/COPYING;md5=6d2cafc999feb2c2de84d4d24b23290c \ - file://libmount/COPYING;md5=7c7e39fb7d70ffe5d693a643e29987c2 \ - file://libblkid/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ - file://libfdisk/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ - file://libsmartcols/COPYING;md5=693bcbbe16d3a4a4b37bc906bc01cc04 \ -" +require util-linux.inc #gtk-doc is not enabled as it requires xmlto which requires util-linux inherit autotools gettext manpages pkgconfig systemd update-alternatives python3-dir bash-completion ptest -DEPENDS = "libcap-ng ncurses virtual/crypt zlib" - -MAJOR_VERSION = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" -SRC_URI = "${KERNELORG_MIRROR}/linux/utils/${BPN}/v${MAJOR_VERSION}/${BP}.tar.xz \ - file://configure-sbindir.patch \ - file://runuser.pamd \ - file://runuser-l.pamd \ - file://ptest.patch \ - file://run-ptest \ - file://display_testname_for_subtest.patch \ - file://avoid_parallel_tests.patch \ - " -SRC_URI[sha256sum] = "f7516ba9d8689343594356f0e5e1a5f0da34adfbc89023437735872bb5024c5f" +DEPENDS = "libcap-ng ncurses virtual/crypt zlib util-linux-libuuid" PACKAGES =+ "${PN}-swaponoff" PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'pylibmount', '${PN}-pylibmount', '', d)}" @@ -87,8 +49,9 @@ python util_linux_binpackages () { # we must execute before update-alternatives PACKAGE_PREPROCESS_FUNCS PACKAGE_PREPROCESS_FUNCS =+ "util_linux_binpackages " +# skip libuuid as it will be packaged by the util-linux-libuuid recipe python util_linux_libpackages() { - do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(.*)\.so\..*$', + do_split_packages(d, root=d.getVar('UTIL_LINUX_LIBDIR'), file_regex=r'^lib(?!uuid)(.*)\.so\..*$', output_pattern='${PN}-lib%s', description='${PN} lib%s', extra_depends='', prepend=True, allow_links=True) @@ -141,6 +104,7 @@ PACKAGECONFIG[pylibmount] = "--with-python=3 --enable-pylibmount,--without-pytho PACKAGECONFIG[readline] = "--with-readline,--without-readline,readline" # PCRE support in hardlink PACKAGECONFIG[pcre2] = ",,libpcre2" +PACKAGECONFIG[cryptsetup] = "--with-cryptsetup,--without-cryptsetup,cryptsetup" EXTRA_OEMAKE = "ARCH=${TARGET_ARCH} CPU= CPUOPT= 'OPT=${CFLAGS}'" @@ -165,7 +129,10 @@ RRECOMMENDS_${PN}_class-nativesdk = "" RDEPENDS_${PN}_class-native = "" RDEPENDS_${PN}_class-nativesdk = "" -RPROVIDES_${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev ${PN}-libuuid-dev" +RDEPENDS_${PN} += " util-linux-libuuid" +RDEPENDS_${PN}-dev += " util-linux-libuuid-dev" + +RPROVIDES_${PN}-dev = "${PN}-libblkid-dev ${PN}-libmount-dev" RDEPENDS_${PN}-bash-completion += "${PN}-lsblk" RDEPENDS_${PN}-ptest += "bash bc btrfs-tools coreutils e2fsprogs grep iproute2 kmod mdadm procps sed socat which xz" @@ -234,6 +201,12 @@ do_install_append_class-native () { rm -f ${D}${base_bindir}/kill } +# dm-verity support introduces a circular build dependency, so util-linux-libuuid is split out for target builds +# Need to build libuuid for uuidgen, but then delete it and let the other recipe ship it +do_install_append () { + rm -rf ${D}${includedir}/uuid ${D}${libdir}/pkgconfig/uuid.pc ${D}${libdir}/libuuid* ${D}${base_libdir}/libuuid* +} + ALTERNATIVE_PRIORITY = "80" ALTERNATIVE_LINK_NAME[blkid] = "${base_sbindir}/blkid" |