summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRob Browning <rlb@defaultvalue.org>2024-11-28 13:01:01 -0600
committerRob Browning <rlb@defaultvalue.org>2024-11-29 12:24:57 -0600
commit76afb429ee7a8a4c9eddb20bf29a2246192f8a28 (patch)
tree93016a6342e3be66dbcf2322f9269d6a51d019cd
parentc78abcb765fcc85b335ab781bdaea13deddbaf1a (diff)
downloadguile-76afb429ee7a8a4c9eddb20bf29a2246192f8a28.tar.gz
Eight byte align statically allocated stringbufs
Previously they were unaligned, unlike their parent strings, and so could end up with the wrong pointer tag. Observed on i686-linux-gnu, where they ended up tagged as immediates (SCM_IMP()), causing failures in TYP7 related checks. * libguile/strings.h (SCM_IMMUTABLE_STRINGBUF): align resulting buffer via SCM_ALIGNED(8).
-rw-r--r--NEWS3
-rw-r--r--libguile/strings.h2
2 files changed, 4 insertions, 1 deletions
diff --git a/NEWS b/NEWS
index e910addb1..c86426cde 100644
--- a/NEWS
+++ b/NEWS
@@ -49,6 +49,9 @@ arguments. The new syntax is documented in the Guile Reference manual.
(<https://bugs.gnu.org/72547>)
** Fix compilation with GCC 14 and musl on 32-bit systems
(<https://bugs.gnu.org/73835>)
+** Immutable stringbufs are now 8-byte aligned on all systems
+ Previously they could end up with an alignment that violated the type
+ tag for their type (e.g. ending up tagged as immediates SCM_IMP()).
Changes in 3.0.10 (since 3.0.9)
diff --git a/libguile/strings.h b/libguile/strings.h
index f28ef3246..d417514f8 100644
--- a/libguile/strings.h
+++ b/libguile/strings.h
@@ -184,7 +184,7 @@ SCM_API SCM scm_makfromstrs (int argc, char **argv);
#ifdef SCM_SUPPORT_STATIC_ALLOCATION
#define SCM_IMMUTABLE_STRINGBUF(c_name, contents) \
- static SCM_UNUSED const \
+ static SCM_UNUSED SCM_ALIGNED(8) const \
struct \
{ \
scm_t_bits word_0; \