[OE-core] [PATCH] systemd: backport patch to fix build when gcrypt is enabled

Andrea Galbusera gizero at gmail.com
Wed May 9 15:02:37 UTC 2018


On Wed, May 9, 2018 at 4:46 PM, Mark Asselstine
<mark.asselstine at windriver.com> wrote:
> On Wednesday, May 9, 2018 10:36:17 AM EDT Andrea Galbusera wrote:
>> Hi Mark!
>>
>> Il mer 9 mag 2018, 15:56 Mark Asselstine <mark.asselstine at windriver.com> ha
>>
>> scritto:
>> > On Wednesday, May 9, 2018 8:16:08 AM EDT Andrea Galbusera wrote:
>> > > When gcrypt support is present in PACKAGECONFIG, build fails due to the
>> >
>> > bug
>> >
>> > > reported in [1]. Since this is already solved upstream, this commit
>> > > backports the corresponding patch.
>> > >
>> > > [1] https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=893602
>> > >
>> > > Signed-off-by: Andrea Galbusera <gizero at gmail.com>
>> >
>> > Thanks Andrea, I can confirm this fixes a build failure we were seeing as
>> > well.
>>
>> Thanks for further testing the patch so quickly!
>
> No problem. I had a build going with the same upstream patch in place when I
> saw your email.
>
>>
>> Out of curiosity... Are you also enabling gcrypt support to workaround the
>> implict dependency resolved used to have upon gcrypt in the past?
>
> We have been enabling gcrypt since 2016 when building systemd. We found that
> there was upstream work which meant that gcrypt was necessary and not optional
> (as it appeared). I don't think we ever revisited this since that initial
> discovery.

Exactly same situation here! ;-) I asked in the hope I could hijack
updates on the same old and somewhat confusing topic. I took the time
to revisit my application layer to drop systemd features that now
built by default (namely networkd and resolved) when the gcrypt
not-so-optional issue come to mind...

>
>> It took
>> me a few hours to figure out what was specific in my configuration, since
>> this bug was obviously not exposed in configurations currently built by the
>> autobuilders!
>
> We do nightly builds of meta-overc (https://github.com/OverC/meta-overc) where
> we often catch things the autobuilds miss. You most likely don't care about
> the content of meta-overc but it might be worthwhile to keep an eye on commits
> we do there since we often stage systemd and other fixes there while they are
> pending for other oe/yocto repos.

Good to know! ;-)

>
>>
>> As a side note, I know there is a newer released version of systemd (238),
>> but upgrading such a complex recipe was not an option for me in the short.
>> I'm CC-ing the recipe's maintainer here, in case there's already an effort
>> to upgrade to 238...
>
> Makes sense, it's the "smart thing to do". Since meta-overc does lots of work
> around containers we can be sensitive to systemd uprev's but are usually quick
> to address any issues the uprev might cause.
>
> Mark
>
>>
>> > Mark
>> >
>> > > ---
>> > >
>> > >  ...rename-noreturn-into-_noreturn_-8456.patch | 203 ++++++++++++++++++
>> > >  meta/recipes-core/systemd/systemd_237.bb      |   1 +
>> > >  2 files changed, 204 insertions(+)
>> > >  create mode 100644
>> > >
>> > > meta/recipes-core/systemd/systemd/0033-basic-macros-
>> >
>> > rename-noreturn-into-_n
>> >
>> > > oreturn_-8456.patch
>> > >
>> > > diff --git
>> > > a/meta/recipes-core/systemd/systemd/0033-basic-macros-
>> >
>> > rename-noreturn-into-
>> >
>> > > _noreturn_-8456.patch
>> > > b/meta/recipes-core/systemd/systemd/0033-basic-macros-
>> >
>> > rename-noreturn-into-
>> >
>> > > _noreturn_-8456.patch new file mode 100644
>> > > index 0000000000..59647b22f8
>> > > --- /dev/null
>> > > +++
>> > > b/meta/recipes-core/systemd/systemd/0033-basic-macros-
>> >
>> > rename-noreturn-into-
>> >
>> > > _noreturn_-8456.patch @@ -0,0 +1,203 @@
>> > > +From 848e863acc51ecfb0f3955c498874588201d9130 Mon Sep 17 00:00:00 2001
>> > > +From: Franck Bui <fbui at suse.com>
>> > > +Date: Thu, 15 Mar 2018 06:23:46 +0100
>> > > +Subject: [PATCH] basic/macros: rename noreturn into _noreturn_ (#8456)
>> > > +MIME-Version: 1.0
>> > > +Content-Type: text/plain; charset=UTF-8
>> > > +Content-Transfer-Encoding: 8bit
>> > > +
>> > > +"noreturn" is reserved and can be used in other header files we
>> > > include:
>> > > +
>> > > +  [   16s] In file included from /usr/include/gcrypt.h:30:0,
>> > > +  [   16s]                  from ../src/journal/journal-file.h:26,
>> > > +  [   16s]                  from ../src/journal/journal-vacuum.c:31:
>> > > +  [   16s] /usr/include/gpg-error.h:1544:46: error: expected ‘,’ or ‘;’
>> > > before ‘)’ token +  [   16s]  void gpgrt_log_bug (const char *fmt, ...)
>> > >
>> > > GPGRT_ATTR_NR_PRINTF(1,2); +
>> > > +Here we include grcrypt.h (which in turns include gpg-error.h) *after*
>> >
>> > we
>> >
>> > > +"noreturn" was defined in macro.h.
>> > > +---
>> > > + src/basic/log.c                         |  4 ++--
>> > > + src/basic/log.h                         |  4 ++--
>> > > + src/basic/macro.h                       | 19 +++++++++----------
>> > > + src/basic/process-util.c                |  2 +-
>> > > + src/basic/process-util.h                |  2 +-
>> > > + src/core/main.c                         |  4 ++--
>> > > + src/journal/test-journal-interleaving.c |  2 +-
>> > > + src/shared/pager.c                      |  2 +-
>> > > + src/udev/collect/collect.c              |  2 +-
>> > > + 9 files changed, 20 insertions(+), 21 deletions(-)
>> > > +
>> > > +Upstream-Status: Backport [https://github.com/systemd/systemd/pull/8456
>> >
>> > ]
>> >
>> > > +
>> > > +diff --git a/src/basic/log.c b/src/basic/log.c
>> > > +index 7a7f2cbec..16a2431c5 100644
>> > > +--- a/src/basic/log.c
>> > > ++++ b/src/basic/log.c
>> > > +@@ -814,7 +814,7 @@ static void log_assert(
>> > > +         log_dispatch_internal(level, 0, file, line, func, NULL, NULL,
>> > > NULL, NULL, buffer); + }
>> > > +
>> > > +-noreturn void log_assert_failed_realm(
>> > > ++_noreturn_ void log_assert_failed_realm(
>> > > +                 LogRealm realm,
>> > > +                 const char *text,
>> > > +                 const char *file,
>> > > +@@ -826,7 +826,7 @@ noreturn void log_assert_failed_realm(
>> > > +         abort();
>> > > + }
>> > > +
>> > > +-noreturn void log_assert_failed_unreachable_realm(
>> > > ++_noreturn_ void log_assert_failed_unreachable_realm(
>> > > +                 LogRealm realm,
>> > > +                 const char *text,
>> > > +                 const char *file,
>> > > +diff --git a/src/basic/log.h b/src/basic/log.h
>> > > +index efcf0f1bf..314be128a 100644
>> > > +--- a/src/basic/log.h
>> > > ++++ b/src/basic/log.h
>> > > +@@ -186,7 +186,7 @@ int log_dump_internal(
>> > > +                 char *buffer);
>> > > +
>> > > + /* Logging for various assertions */
>> > > +-noreturn void log_assert_failed_realm(
>> > > ++_noreturn_ void log_assert_failed_realm(
>> > > +                 LogRealm realm,
>> > > +                 const char *text,
>> > > +                 const char *file,
>> > > +@@ -195,7 +195,7 @@ noreturn void log_assert_failed_realm(
>> > > + #define log_assert_failed(text, ...) \
>> > > +         log_assert_failed_realm(LOG_REALM, (text), __VA_ARGS__)
>> > > +
>> > > +-noreturn void log_assert_failed_unreachable_realm(
>> > > ++_noreturn_ void log_assert_failed_unreachable_realm(
>> > > +                 LogRealm realm,
>> > > +                 const char *text,
>> > > +                 const char *file,
>> > > +diff --git a/src/basic/macro.h b/src/basic/macro.h
>> > > +index 95be63a20..8911edfc4 100644
>> > > +--- a/src/basic/macro.h
>> > > ++++ b/src/basic/macro.h
>> > > +@@ -53,6 +53,15 @@
>> > > + #else
>> > > + #define _fallthrough_
>> > > + #endif
>> > > ++/* Define C11 noreturn without <stdnoreturn.h> and even on older gcc
>> > > ++ * compiler versions */
>> > > ++#ifndef _noreturn_
>> > > ++#if __STDC_VERSION__ >= 201112L
>> > > ++#define _noreturn_ _Noreturn
>> > > ++#else
>> > > ++#define _noreturn_ __attribute__((noreturn))
>> > > ++#endif
>> > > ++#endif
>> > > +
>> > > + /* Temporarily disable some warnings */
>> > > + #define DISABLE_WARNING_DECLARATION_AFTER_STATEMENT
>> > >
>> >    \
>> > >
>> > > +@@ -414,16 +423,6 @@ static inline unsigned long ALIGN_POWER2(unsigned
>> >
>> > long
>> >
>> > > u) { + #endif
>> > > + #endif
>> > > +
>> > > +-/* Define C11 noreturn without <stdnoreturn.h> and even on older gcc
>> > > +- * compiler versions */
>> > > +-#ifndef noreturn
>> > > +-#if __STDC_VERSION__ >= 201112L
>> > > +-#define noreturn _Noreturn
>> > > +-#else
>> > > +-#define noreturn __attribute__((noreturn))
>> > > +-#endif
>> > > +-#endif
>> > > +-
>> > > + #define DEFINE_TRIVIAL_CLEANUP_FUNC(type, func)                 \
>> > > +         static inline void func##p(type *p) {                   \
>> > > +                 if (*p)                                         \
>> > > +diff --git a/src/basic/process-util.c b/src/basic/process-util.c
>> > > +index aa9846db5..e6120af5b 100644
>> > > +--- a/src/basic/process-util.c
>> > > ++++ b/src/basic/process-util.c
>> > > +@@ -987,7 +987,7 @@ bool is_main_thread(void) {
>> > > +         return cached > 0;
>> > > + }
>> > > +
>> > > +-noreturn void freeze(void) {
>> > > ++_noreturn_ void freeze(void) {
>> > > +
>> > > +         log_close();
>> > > +
>> > > +diff --git a/src/basic/process-util.h b/src/basic/process-util.h
>> > > +index 93029e36e..5170adec7 100644
>> > > +--- a/src/basic/process-util.h
>> > > ++++ b/src/basic/process-util.h
>> > > +@@ -91,7 +91,7 @@ int pid_from_same_root_fs(pid_t pid);
>> > > +
>> > > + bool is_main_thread(void);
>> > > +
>> > > +-noreturn void freeze(void);
>> > > ++_noreturn_ void freeze(void);
>> > > +
>> > > + bool oom_score_adjust_is_valid(int oa);
>> > > +
>> > > +diff --git a/src/core/main.c b/src/core/main.c
>> > > +index 076846a41..4b2d14923 100644
>> > > +--- a/src/core/main.c
>> > > ++++ b/src/core/main.c
>> > > +@@ -141,7 +141,7 @@ static uint64_t arg_default_tasks_max = UINT64_MAX;
>> > > + static sd_id128_t arg_machine_id = {};
>> > > + static EmergencyAction arg_cad_burst_action =
>> > > EMERGENCY_ACTION_REBOOT_FORCE; +
>> > > +-noreturn static void freeze_or_reboot(void) {
>> > > ++_noreturn_ static void freeze_or_reboot(void) {
>> > > +
>> > > +         if (arg_crash_reboot) {
>> > > +                 log_notice("Rebooting in 10s...");
>> > > +@@ -156,7 +156,7 @@ noreturn static void freeze_or_reboot(void) {
>> > > +         freeze();
>> > > + }
>> > > +
>> > > +-noreturn static void crash(int sig) {
>> > > ++_noreturn_ static void crash(int sig) {
>> > > +         struct sigaction sa;
>> > > +         pid_t pid;
>> > > +
>> > > +diff --git a/src/journal/test-journal-interleaving.c
>> > > b/src/journal/test-journal-interleaving.c +index 5a88b2774..d87bdbdd3
>> > > 100644
>> > > +--- a/src/journal/test-journal-interleaving.c
>> > > ++++ b/src/journal/test-journal-interleaving.c
>> > > +@@ -37,7 +37,7 @@
>> > > +
>> > > + static bool arg_keep = false;
>> > > +
>> > > +-noreturn static void log_assert_errno(const char *text, int error,
>> >
>> > const
>> >
>> > > char *file, int line, const char *func) { ++_noreturn_ static void
>> > > log_assert_errno(const char *text, int error, const char *file, int
>> > > line,
>> > > const char *func) { +         log_internal(LOG_CRIT, error, file, line,
>> > > func,
>> > > +                      "'%s' failed at %s:%u (%s): %m", text, file,
>> > > line,
>> > > func); +         abort();
>> > > +diff --git a/src/shared/pager.c b/src/shared/pager.c
>> > > +index 75db3c985..681af9c40 100644
>> > > +--- a/src/shared/pager.c
>> > > ++++ b/src/shared/pager.c
>> > > +@@ -47,7 +47,7 @@ static int stored_stderr = -1;
>> > > + static bool stdout_redirected = false;
>> > > + static bool stderr_redirected = false;
>> > > +
>> > > +-noreturn static void pager_fallback(void) {
>> > > ++_noreturn_ static void pager_fallback(void) {
>> > > +         int r;
>> > > +
>> > > +         r = copy_bytes(STDIN_FILENO, STDOUT_FILENO, (uint64_t) -1, 0);
>> > > +diff --git a/src/udev/collect/collect.c b/src/udev/collect/collect.c
>> > > +index 2821640e9..c8fa47b3d 100644
>> > > +--- a/src/udev/collect/collect.c
>> > > ++++ b/src/udev/collect/collect.c
>> > > +@@ -58,7 +58,7 @@ static inline struct _mate *node_to_mate(struct
>> > > udev_list_node *node) +         return container_of(node, struct _mate,
>> > > node);
>> > > + }
>> > > +
>> > > +-noreturn static void sig_alrm(int signo)
>> > > ++_noreturn_ static void sig_alrm(int signo)
>> > > + {
>> > > +         exit(4);
>> > > + }
>> > > +--
>> > > +2.17.0
>> > > +
>> > > diff --git a/meta/recipes-core/systemd/systemd_237.bb
>> > > b/meta/recipes-core/systemd/systemd_237.bb index 1d04796f39..6f59e6064e
>> > > 100644
>> > > --- a/meta/recipes-core/systemd/systemd_237.bb
>> > > +++ b/meta/recipes-core/systemd/systemd_237.bb
>> > > @@ -50,6 +50,7 @@ SRC_URI += "file://touchscreen.rules \
>> > >
>> > > file://0030-fix-missing-of-__register_atfork-for-non-glibc-build.patch \
>> > > file://0031-fix-missing-ULONG_LONG_MAX-definition-in-case-of-mus.patch \
>> > > file://0032-memfd.patch \
>> > > +
>> > > file://0033-basic-macros-rename-noreturn-into-_noreturn_-8456.patch \ "
>> > >
>> > >  SRC_URI_append_qemuall = "
>> > >
>> > > file://0001-core-device.c-Change-the-default-device-timeout-to-2.patch"
>
>
>
>



More information about the Openembedded-core mailing list