From: Maria Matejka Date: Wed, 11 Dec 2024 16:51:46 +0000 (+0100) Subject: Fix alignment requirements to include atomic u64. X-Git-Tag: v3.0.0~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=28b0adc15f82996a737fd832ef4a934dbbf29d93;p=thirdparty%2Fbird.git Fix alignment requirements to include atomic u64. Not having this led to bus errors on unaligned atomic u64 access on architectures with 4B pointers. --- diff --git a/lib/mempool.c b/lib/mempool.c index 5940e5712..6de44b6bd 100644 --- a/lib/mempool.c +++ b/lib/mempool.c @@ -29,6 +29,7 @@ struct lp_chunk { struct lp_chunk *next; struct linpool *lp; uintptr_t data_align[0]; + _Atomic u64 data_align_atomic[0]; byte data[0]; }; diff --git a/lib/resource.c b/lib/resource.c index b89f772c1..17af79d75 100644 --- a/lib/resource.c +++ b/lib/resource.c @@ -373,7 +373,10 @@ tmp_flush(void) struct mblock { resource r; unsigned size; - uintptr_t data_align[0]; + union { + uintptr_t bigint; + _Atomic u64 atom; + } _align[0]; byte data[0]; }; diff --git a/lib/slab.c b/lib/slab.c index ab913f0cd..276ea8d09 100644 --- a/lib/slab.c +++ b/lib/slab.c @@ -171,6 +171,8 @@ struct sl_head { struct sl_alignment { /* Magic structure for testing of alignment */ byte data; int x[0]; + _Atomic u64 y[0]; + void *z[0]; }; #define TLIST_PREFIX sl_head