flex: Fix segfault of stage1flex when host has glibc 2.26 or newer
PATCH v2 1/1 flex: Fix segfault of stage1flex when host has glibc 2.26 or newer
When the host uses glibc 2.26 or newer, Flex will try to use the newly-introduced reallocarray() function, but as it would not define _GNU_SOURCE a segmentation fault would occur later on due to the compiler assumming that the function is implicitly defined.
This issue manifests itself due to a crash of "stage1flex" during the Flex bootstrap:
./stage1flex -o stage1scan.c ./scan.l
make[2]: *** [Makefile:1725: stage1scan.c] Segmentation fault (core dumped)
This imports the patch from the upstream Git repository, and adds flags in the .mk file to rebuild the Autotools scripts and support files. Due to the latter, the patch to disable the documentation is changed so it modifies the .am file instead.
---
Changes v1 -> v2:
- Modify the patch to disable building the documentation so it changes Makefile.am instead of Makefile.in. This is needed because autoreconf is being used.
--- ...-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch | 32 ++++++++++++++++++++ package/flex/0001-flex-disable-documentation.patch | 23 -------------- package/flex/0002-flex-disable-documentation.patch | 35 ++++++++++++++++++++++ package/flex/flex.mk | 2 ++ 4 files changed, 69 insertions(+), 23 deletions(-) create mode 100644 package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch delete mode 100644 package/flex/0001-flex-disable-documentation.patch create mode 100644 package/flex/0002-flex-disable-documentation.patch
package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file +32 -0
@@ -0,0 +1,32 @@ +From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001 +From: Explorer09 <[email protected]> +Date: Mon, 4 Sep 2017 10:47:33 +0800 +Subject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac. + +This would, e.g. define _GNU_SOURCE in config.h, enabling the +reallocarray() prototype in glibc 2.26+ on Linux systems with that +version of glibc. + +Fixes #241. +--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 55e774b..c879fe1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -25,8 +25,10 @@ + # autoconf requirements and initialization + + AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help at lists.sourceforge.net],[flex]) ++AC_PREREQ([2.60]) + AC_CONFIG_SRCDIR([src/scan.l]) + AC_CONFIG_AUX_DIR([build-aux]) ++AC_USE_SYSTEM_EXTENSIONS + LT_INIT + AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects]) + AC_CONFIG_HEADER([src/config.h]) +-- +2.14.1 +
package/flex/0001-flex-disable-documentation.patch deleted +0 -23
@@ -1,23 +0,0 @@ -flex: disable documentation - -Since we prevent the flex binary to be built, we also need to prevent -the documentation to be built, otherwise it will fail like this: - -Making all in doc -make[2]: Entering directory '/br/output/build/flex-2.6.4/doc' -make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'. -Stop. - -Signed-off-by: Vicente Olivert Riera <[email protected]> - -diff -rup a/Makefile.in b/Makefile.in ---- a/Makefile.in 2017-05-06 15:49:09.000000000 +0100 -+++ b/Makefile.in 2017-05-10 14:35:20.152794902 +0100 -@@ -450,7 +450,6 @@ EXTRA_DIST = \ - - SUBDIRS = \ - src \ -- doc \ - examples \ - po \ - tests \
package/flex/0002-flex-disable-documentation.patch new file +35 -0
@@ -0,0 +1,35 @@ +From a98443c6a72d5821d4e0152311e5c3eb4cdff25c Mon Sep 17 00:00:00 2001 +From: Adrian Perez de Castro <[email protected]> +Date: Wed, 13 Sep 2017 17:26:48 +0300 +Subject: [PATCH] flex: disable documentation + +Since we prevent the flex binary to be built, we also need to prevent +the documentation to be built, otherwise it will fail like this: + +Making all in doc +make[2]: Entering directory '/br/output/build/flex-2.6.4/doc' +make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'. +Stop. + +Based on an patch by Vicente Olivert Riera <[email protected]> + +Signed-off-by: Adrian Perez de Castro <[email protected]> +--- + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 638c549..9db3420 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -43,7 +43,6 @@ EXTRA_DIST = \ + + SUBDIRS = \ + src \ +- doc \ + examples \ + po \ + tests \ +-- +2.14.1 +
package/flex/flex.mk +2 -0
@@ -11,6 +11,8 @@ FLEX_LICENSE = FLEX FLEX_LICENSE_FILES = COPYING FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4 FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 +FLEX_AUTORECONF = YES +FLEX_GETTEXTIZE = YES HOST_FLEX_DEPENDENCIES = host-m4 define FLEX_DISABLE_PROGRAM
Signature · 1 line
2.14.1
PATCH v2 1/1 flex: Fix segfault of stage1flex when host has glibc 2.26 or newer
Hi Adrian,
Quoted 16 lines · Adrian Perez de Castro
When the host uses glibc 2.26 or newer, Flex will try to use the newly-introduced
reallocarray()function, but as it would not define_GNU_SOURCEa segmentation fault would occur later on due to the compiler assumming that the function is implicitly defined.This issue manifests itself due to a crash of "stage1flex" during the Flex bootstrap:
./stage1flex -o
stage1scan.c./scan.l
make[2]: *** [Makefile:1725:stage1scan.c] Segmentation fault (core dumped)This imports the patch from the upstream Git repository, and adds flags in the .mk file to rebuild the Autotools scripts and support files. Due to the latter, the patch to disable the documentation is changed so it modifies the .am file instead.
Quoted 7 lines
Signed-off-by Adrian Perez de Castro <[email protected]>---
Changes v1 -> v2:
- Modify the patch to disable building the documentation so it changes Makefile.am instead of Makefile.in. This is needed because autoreconf is being used.
I would prefer to have two seperate commits:
1) changing the existing patch so autoreconf can be used
2) adding the new patch
Quoted 16 lines
--- ...-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch | 32 ++++++++++++++++++++ package/flex/0001-flex-disable-documentation.patch | 23 -------------- package/flex/0002-flex-disable-documentation.patch | 35 ++++++++++++++++++++++ package/flex/flex.mk | 2 ++ 4 files changed, 69 insertions(+), 23 deletions(-) create mode 100644 package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch delete mode 100644 package/flex/0001-flex-disable-documentation.patch create mode 100644 package/flex/0002-flex-disable-documentation.patchpackage/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file +0
-0
package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch line 10
Quoted 10 lines
package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file +10
-0@@ -0,0 +1,32 @@ +From ffa886a580929f26fd5e5a40c9c5334955c48553 Mon Sep 17 00:00:00 2001 +From: Explorer09 <[email protected]> +Date: Mon, 4 Sep 2017 10:47:33 +0800 +Subject: [PATCH] build: AC_USE_SYSTEM_EXTENSIONS in configure.ac. + +This would, e.g. define _GNU_SOURCE in config.h, enabling the +reallocarray() prototype in glibc 2.26+ on Linux systems with that +version of glibc. + +Fixes #241.
According to [1], please add:
Backported from: 24fd0551333e7eded87b64dd36062da3df2f6380
Quoted 61 lines
package/flex/0001-build-AC_USE_SYSTEM_EXTENSIONS-in-configure.ac.patch new file +22
-0+--- + configure.ac | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/configure.ac b/configure.ac +index 55e774b..c879fe1 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -25,8 +25,10 @@ + # autoconf requirements and initialization + + AC_INIT([the fast lexical analyser generator],[2.6.4],[flex-help at lists.sourceforge.net],[flex]) ++AC_PREREQ([2.60]) + AC_CONFIG_SRCDIR([src/scan.l]) + AC_CONFIG_AUX_DIR([build-aux]) ++AC_USE_SYSTEM_EXTENSIONS + LT_INIT + AM_INIT_AUTOMAKE([1.11.3 -Wno-portability foreign check-news std-options dist-lzip parallel-tests subdir-objects]) + AC_CONFIG_HEADER([src/config.h]) +-- +2.14.1 +package/flex/0001-flex-disable-documentation.patch deleted +0
-23@@ -1,23 +0,0 @@ -flex: disable documentation - -Since we prevent the flex binary to be built, we also need to prevent -the documentation to be built, otherwise it will fail like this: - -Making all in doc -make[2]: Entering directory '/br/output/build/flex-2.6.4/doc' -make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'. -Stop. - -Signed-off-by: Vicente Olivert Riera <[email protected]> - -diff -rup a/Makefile.in b/Makefile.in ---- a/Makefile.in 2017-05-06 15:49:09.000000000 +0100 -+++ b/Makefile.in 2017-05-10 14:35:20.152794902 +0100 -@@ -450,7 +450,6 @@ EXTRA_DIST = \ - - SUBDIRS = \ - src \ -- doc \ - examples \ - po \ - tests \package/flex/0002-flex-disable-documentation.patch new file +4
-0@@ -0,0 +1,35 @@ +From a98443c6a72d5821d4e0152311e5c3eb4cdff25c Mon Sep 17 00:00:00 2001 +From: Adrian Perez de Castro <[email protected]> +Date: Wed, 13 Sep 2017 17:26:48 +0300 +Subject: [PATCH] flex: disable documentation
package/flex/0002-flex-disable-documentation.patch line 14
Quoted 10 lines
package/flex/0002-flex-disable-documentation.patch new file +10
-0+ +Since we prevent the flex binary to be built, we also need to prevent +the documentation to be built, otherwise it will fail like this: + +Making all in doc +make[2]: Entering directory '/br/output/build/flex-2.6.4/doc' +make[2]: *** No rule to make target '../src/flex', needed by 'flex.1'. +Stop. + +Based on an patch by Vicente Olivert Riera <[email protected]>
Please add a URL where you got the patch from.
Quoted 25 lines
package/flex/0002-flex-disable-documentation.patch new file +20
-0+Signed-off-by: Adrian Perez de Castro <[email protected]> +--- + Makefile.am | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/Makefile.am b/Makefile.am +index 638c549..9db3420 100644 +--- a/Makefile.am ++++ b/Makefile.am +@@ -43,7 +43,6 @@ EXTRA_DIST = \ + + SUBDIRS = \ + src \ +- doc \ + examples \ + po \ + tests \ +-- +2.14.1 +package/flex/flex.mk +0
-0
package/flex/flex.mk FLEX_LICENSE = FLEX · line 15
Quoted 5 lines
package/flex/flex.mk +2
-0@@ -11,6 +11,8 @@ FLEX_LICENSE = FLEX FLEX_LICENSE_FILES = COPYING FLEX_DEPENDENCIES = $(TARGET_NLS_DEPENDENCIES) host-m4 FLEX_CONF_ENV = ac_cv_path_M4=/usr/bin/m4 +FLEX_AUTORECONF = YES +FLEX_GETTEXTIZE = YES
As the package also provides a host package, HOST_FLEX_AUTORECONF and HOST_FLEX_GETTEXTIZE should be added.
Additionally, please add a comment why AUTORECONF and GETTEXTIZE are necessary (because of patching configure.ac).
package/flex/flex.mk FLEX_LICENSE = FLEX · line 18
Quoted 3 lines
package/flex/flex.mk +0
-0HOST_FLEX_DEPENDENCIES = host-m4 define FLEX_DISABLE_PROGRAM
[1] https://buildroot.org/downloads/manual/manual.html#_integrating_patches_found_on_the_web
Arnout Vandecappelle
AppliedPATCH v2 1/1 flex: Fix segfault of stage1flex when host has glibc 2.26 or newer
In reply to Adrian Perez de CastroQuoted 11 lines · Adrian Perez de Castro
When the host uses glibc 2.26 or newer, Flex will try to use the newly-introduced
reallocarray()function, but as it would not define_GNU_SOURCEa segmentation fault would occur later on due to the compiler assumming that the function is implicitly defined.This issue manifests itself due to a crash of "stage1flex" during the Flex bootstrap:
./stage1flex -o
stage1scan.c./scan.l
make[2]: *** [Makefile:1725:stage1scan.c] Segmentation fault (core dumped)
Quoted 6 lines
This imports the patch from the upstream Git repository, and adds flags in the .mk file to rebuild the Autotools scripts and support files. Due to the latter, the patch to disable the documentation is changed so it modifies the .am file instead.
Signed-off-by Adrian Perez de Castro <[email protected]>
Applied to master, thanks.
I did make a few changes though:
- Add Adrian's Sob and upstream ref to new patch;
- Keep patch 1 as patch 1;
- Keep Vicente as author of path 1;
- Add reason for autoreconf in a comment.
I didn't follow Joerg's suggestion to separate into two patches, though it was
actually a good suggestion. I was just too lazy :-)
Regards,
Arnout
Signature · 6 lines
Arnout Vandecappelle arnout at mind be Senior Embedded Software Architect +32-16-286500 Essensium/Mind http://www.mind.be G.Geenslaan 9, 3001 Leuven, Belgium BE 872 984 063 RPR Leuven LinkedIn profile: http://www.linkedin.com/in/arnoutvandecappelle GPG fingerprint: 7493 020B C7E3 8618 8DEC 222C 82EB F404 F9AC 0DDF