diff mbox series

package/chicken: move literals into text section for xtensa architecture

Message ID 20240722173136.412283-1-wdouglass@carnegierobotics.com
State Accepted
Headers show
Series package/chicken: move literals into text section for xtensa architecture | expand

Commit Message

Woodrow Douglass July 22, 2024, 5:31 p.m. UTC
This solves a build problem -- by default xtensa-gcc puts literals in a
different section of memory then the program text, and chicken is a very
literal-heavy program, so they don't all fit there. This avoids that problem.

Signed-off-by: Woodrow Douglass <wdouglass@carnegierobotics.com>
---
 .../0001-xtensa-text-section-literals.patch   | 30 +++++++++++++++++++
 package/chicken/chicken.mk                    | 14 +++++++--
 2 files changed, 42 insertions(+), 2 deletions(-)
 create mode 100644 package/chicken/0001-xtensa-text-section-literals.patch

Comments

Thomas Petazzoni Aug. 2, 2024, 5:10 p.m. UTC | #1
Hello Woodrow,

On Mon, 22 Jul 2024 13:31:36 -0400
Woodrow Douglass via buildroot <buildroot@buildroot.org> wrote:

> This solves a build problem -- by default xtensa-gcc puts literals in a
> different section of memory then the program text, and chicken is a very
> literal-heavy program, so they don't all fit there. This avoids that problem.
> 
> Signed-off-by: Woodrow Douglass <wdouglass@carnegierobotics.com>

Thanks, I have applied your patch, with a few fixes.

First, I've added a reference to an autobuilder failure fixed by this
patch, as follows:

"""
    Fixes:
    
      http://autobuild.buildroot.net/results/ce36170d67c4702f34bee025d8a46e5269c4573e/
  
"""

> -# If ARCH is not set, it attempts to autodiscover. But it is anyway not used.
> +#Chicken only uses the "arch" variable for some special-case compile arguments
> +#If it's empty, it tries to detect the arch host
> +#Filter out values that have an effect, or pass "unused" here

We always put a space after the # sign starting a comment.

> +ifeq ($(BR2_NORMALIZED_ARCH),"x86_64")

I've used $(NORMALIZED_ARCH) instead, which already has double quotes
stripped, so instead of "x86_64" we can use just x86_64.

> +CHICKEN_ARCH="x86-64"

Spaces around = sign, no double quotes around x86-64.

> +else ifeq ($(BR2_NORMALIZED_ARCH),"xtensa")
> +CHICKEN_ARCH="xtensa"
> +else
> +CHICKEN_ARCH="unused"
> +endif
> +
>  CHICKEN_MAKE_OPTS = \
> -	ARCH=unused \
> +	ARCH=$(CHICKEN_ARCH) \

and instead, used ARCH="$(CHICKEN_ARCH)" here

Thanks a lot!

Thomas
diff mbox series

Patch

diff --git a/package/chicken/0001-xtensa-text-section-literals.patch b/package/chicken/0001-xtensa-text-section-literals.patch
new file mode 100644
index 0000000000..b93aaf9e21
--- /dev/null
+++ b/package/chicken/0001-xtensa-text-section-literals.patch
@@ -0,0 +1,30 @@ 
+From e8d177f4d4e1c6bc41787ea1621e323ff4ad493e Mon Sep 17 00:00:00 2001
+From: Woodrow Douglass <wdouglass@carnegierobotics.com>
+Date: Mon, 22 Jul 2024 08:50:37 -0400
+Subject: [PATCH] Move literals into text section for xtensa architecture
+
+Upstream: https://bugs.call-cc.org/ticket/1840
+Signed-off-by: Woodrow Douglass <wdouglass@carnegierobotics.com>
+---
+ Makefile.linux | 5 +++++
+ 1 file changed, 5 insertions(+)
+
+diff --git a/Makefile.linux b/Makefile.linux
+index b628cda4..e97c2b94 100644
+--- a/Makefile.linux
++++ b/Makefile.linux
+@@ -52,6 +52,11 @@ USES_SONAME = yes
+ 
+ # architectures
+ 
++ifeq ($(ARCH),xtensa)
++C_COMPILER_OPTIONS += -mtext-section-literals
++LINKER_OPTIONS += -mtext-section-literals
++endif
++
+ ifeq ($(ARCH),x32)
+ C_COMPILER_OPTIONS += -mx32
+ LINKER_OPTIONS += -mx32
+-- 
+2.39.2
+
diff --git a/package/chicken/chicken.mk b/package/chicken/chicken.mk
index 2667f7823d..72d203b9bd 100644
--- a/package/chicken/chicken.mk
+++ b/package/chicken/chicken.mk
@@ -11,9 +11,19 @@  CHICKEN_LICENSE_FILES = LICENSE
 CHICKEN_CPE_ID_VENDOR = call-cc
 CHICKEN_INSTALL_STAGING = YES
 
-# If ARCH is not set, it attempts to autodiscover. But it is anyway not used.
+#Chicken only uses the "arch" variable for some special-case compile arguments
+#If it's empty, it tries to detect the arch host
+#Filter out values that have an effect, or pass "unused" here
+ifeq ($(BR2_NORMALIZED_ARCH),"x86_64")
+CHICKEN_ARCH="x86-64"
+else ifeq ($(BR2_NORMALIZED_ARCH),"xtensa")
+CHICKEN_ARCH="xtensa"
+else
+CHICKEN_ARCH="unused"
+endif
+
 CHICKEN_MAKE_OPTS = \
-	ARCH=unused \
+	ARCH=$(CHICKEN_ARCH) \
 	C_COMPILER="$(TARGET_CC)" \
 	CXX_COMPILER="$(TARGET_CXX)" \
 	PREFIX=/usr \