Hi Mark,
On Thu, Mar 5, 2026 at 10:57 AM Mark Wielaard <[email protected]> wrote:
>
> This moves the assert from being checked at runtime to being checked
> at compile time.
>
> * libdwfl/dwfl_segment_report_module.c (dwfl_segment_report_module):
> Replace asserts with eu_static_assert.
> * libdwfl/linux-core-attach.c (core_set_initial_registers):
> Likewise.
> * libdwfl/linux-kernel-modules.c (check_notes): Likewise.
> * libebl/eblopenbackend.c (openbackend): Likewise.
> * libelf/elf_begin.c (file_read_elf): Likewise.
> (write_file): Likewise.
> * libelf/elf_clone.c (elf_clone): Likewise.
> * libelf/elf_getshdrstrndx.c (elf_getshdrstrndx): Likewise.
> * libelf/elf_newscn.c (elf_newscn): Likewise.
> * libelf/gelf_getauxv.c (gelf_getauxv): Likewise.
> * libelf/gelf_getdyn.c (gelf_getdyn): Likewise.
> * libelf/gelf_getlib.c (gelf_getlib): Likewise.
> * libelf/gelf_getsym.c (gelf_getsym): Likewise.
> * libelf/gelf_getsyminfo.c (gelf_getsyminfo): Likewise.
> * libelf/gelf_getsymshndx.c (gelf_getsymshndx): Likewise.
> * libelf/gelf_getverdaux.c (gelf_getverdaux): Likewise.
> * libelf/gelf_getverdef.c (gelf_getverdef): Likewise.
> * libelf/gelf_getvernaux.c (gelf_getvernaux): Likewise.
> * libelf/gelf_getverneed.c (gelf_getverneed): Likewise.
> * libelf/gelf_getversym.c (gelf_getversym): Likewise.
> * libelf/gelf_update_syminfo.c (gelf_update_syminfo): Likewise.
> * libelf/gelf_update_verdaux.c (gelf_update_verdaux): Likewise.
> * libelf/gelf_update_verdef.c (gelf_update_verdef): Likewise.
> * libelf/gelf_update_vernaux.c (gelf_update_vernaux): Likewise.
> * libelf/gelf_update_verneed.c (gelf_update_verneed): Likewise.
> * libelf/gelf_update_versym.c (gelf_update_versym): Likewise.
> * libelf/note_xlate.h (elf_cvt_note): Likewise.
> * libelf/version_xlate.h (elf_cvt_Verdef): Likewise.
> (elf_cvt_Verneed): Likewise.
> * src/arlib.c (arlib_init): Likewise.
> (arlib_add_symref): Likewise.
> * src/strip.c (handle_elf): Likewise.
> * src/unstrip.c (adjust_relocs): Likewise.
>
> Signed-off-by: Mark Wielaard <[email protected]>
Looks good, this compiles for me.
Aaron
> ---
> libdwfl/dwfl_segment_report_module.c | 2 +-
> libdwfl/linux-core-attach.c | 2 +-
> libdwfl/linux-kernel-modules.c | 4 ++--
> libebl/eblopenbackend.c | 12 ++++++------
> libelf/elf_begin.c | 8 ++++----
> libelf/elf_clone.c | 5 ++---
> libelf/elf_getshdrstrndx.c | 17 ++++++++---------
> libelf/elf_newscn.c | 12 ++++++------
> libelf/gelf_getauxv.c | 3 +--
> libelf/gelf_getdyn.c | 3 +--
> libelf/gelf_getlib.c | 5 ++---
> libelf/gelf_getsym.c | 3 +--
> libelf/gelf_getsyminfo.c | 5 ++---
> libelf/gelf_getsymshndx.c | 3 +--
> libelf/gelf_getverdaux.c | 5 ++---
> libelf/gelf_getverdef.c | 5 ++---
> libelf/gelf_getvernaux.c | 9 ++++-----
> libelf/gelf_getverneed.c | 9 ++++-----
> libelf/gelf_getversym.c | 5 ++---
> libelf/gelf_update_syminfo.c | 5 ++---
> libelf/gelf_update_verdaux.c | 5 ++---
> libelf/gelf_update_verdef.c | 5 ++---
> libelf/gelf_update_vernaux.c | 5 ++---
> libelf/gelf_update_verneed.c | 5 ++---
> libelf/gelf_update_versym.c | 5 ++---
> libelf/gnuhash_xlate.h | 1 -
> libelf/note_xlate.h | 2 +-
> libelf/version_xlate.h | 17 ++++++++---------
> src/arlib.c | 6 +++---
> src/strip.c | 20 ++++++++++++--------
> src/unstrip.c | 4 ++--
> 31 files changed, 90 insertions(+), 107 deletions(-)
>
> diff --git a/libdwfl/dwfl_segment_report_module.c
> b/libdwfl/dwfl_segment_report_module.c
> index f2f866c2c70f..8a485c062672 100644
> --- a/libdwfl/dwfl_segment_report_module.c
> +++ b/libdwfl/dwfl_segment_report_module.c
> @@ -537,7 +537,7 @@ dwfl_segment_report_module (Dwfl *dwfl, int ndx, const
> char *name,
> if (filesz > SIZE_MAX / sizeof (Elf32_Nhdr))
> continue;
>
> - assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
> + eu_static_assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
>
> void *notes;
> if (ei_data == MY_ELFDATA
> diff --git a/libdwfl/linux-core-attach.c b/libdwfl/linux-core-attach.c
> index 75e3c2198873..509e92b7c5e0 100644
> --- a/libdwfl/linux-core-attach.c
> +++ b/libdwfl/linux-core-attach.c
> @@ -275,7 +275,7 @@ core_set_initial_registers (Dwfl_Thread *thread, void
> *thread_arg_voidp)
> reg_desc += sizeof val64;
> val64 = (elf_getident (core, NULL)[EI_DATA] == ELFDATA2MSB
> ? be64toh (val64) : le64toh (val64));
> - assert (sizeof (*thread->unwound->regs) == sizeof val64);
> + eu_static_assert (sizeof (*thread->unwound->regs) == sizeof
> val64);
> val = val64;
> break;
> default:
> diff --git a/libdwfl/linux-kernel-modules.c b/libdwfl/linux-kernel-modules.c
> index e9faba26a720..dac64b3405c4 100644
> --- a/libdwfl/linux-kernel-modules.c
> +++ b/libdwfl/linux-kernel-modules.c
> @@ -577,8 +577,8 @@ check_notes (Dwfl_Module *mod, const char *notesfile,
> if (fd < 0)
> return 1;
>
> - assert (sizeof (Elf32_Nhdr) == sizeof (GElf_Nhdr));
> - assert (sizeof (Elf64_Nhdr) == sizeof (GElf_Nhdr));
> + eu_static_assert (sizeof (Elf32_Nhdr) == sizeof (GElf_Nhdr));
> + eu_static_assert (sizeof (Elf64_Nhdr) == sizeof (GElf_Nhdr));
> union
> {
> GElf_Nhdr nhdr;
> diff --git a/libebl/eblopenbackend.c b/libebl/eblopenbackend.c
> index b68dea7a0809..dbe4b94741d5 100644
> --- a/libebl/eblopenbackend.c
> +++ b/libebl/eblopenbackend.c
> @@ -311,12 +311,12 @@ openbackend (Elf *elf, const char *emulation, GElf_Half
> machine)
>
> /* We access some data structures directly. Make sure the 32 and
> 64 bit variants are laid out the same. */
> - assert (offsetof (Elf32_Ehdr, e_machine)
> - == offsetof (Elf64_Ehdr, e_machine));
> - assert (sizeof (((Elf32_Ehdr *) 0)->e_machine)
> - == sizeof (((Elf64_Ehdr *) 0)->e_machine));
> - assert (offsetof (Elf, state.elf32.ehdr)
> - == offsetof (Elf, state.elf64.ehdr));
> + eu_static_assert (offsetof (Elf32_Ehdr, e_machine)
> + == offsetof (Elf64_Ehdr, e_machine));
> + eu_static_assert (sizeof (((Elf32_Ehdr *) 0)->e_machine)
> + == sizeof (((Elf64_Ehdr *) 0)->e_machine));
> + eu_static_assert (offsetof (Elf, state.elf32.ehdr)
> + == offsetof (Elf, state.elf64.ehdr));
>
> /* Prefer taking the information from the ELF file. */
> if (elf == NULL)
> diff --git a/libelf/elf_begin.c b/libelf/elf_begin.c
> index d22f107dd5a0..0c9b95ddc2b1 100644
> --- a/libelf/elf_begin.c
> +++ b/libelf/elf_begin.c
> @@ -327,8 +327,8 @@ file_read_elf (int fildes, void *map_address, unsigned
> char *e_ident,
> return NULL;
>
> assert ((unsigned int) scncnt == scncnt);
> - assert (offsetof (struct Elf, state.elf32.scns)
> - == offsetof (struct Elf, state.elf64.scns));
> + eu_static_assert (offsetof (struct Elf, state.elf32.scns)
> + == offsetof (struct Elf, state.elf64.scns));
> elf->state.elf32.scns.cnt = scncnt;
> elf->state.elf32.scns.max = scnmax;
>
> @@ -1159,8 +1159,8 @@ write_file (int fd, Elf_Cmd cmd)
> result->state.elf.scnincr = NSCNSALLOC;
>
> /* We have allocated room for some sections. */
> - assert (offsetof (struct Elf, state.elf32.scns)
> - == offsetof (struct Elf, state.elf64.scns));
> + eu_static_assert (offsetof (struct Elf, state.elf32.scns)
> + == offsetof (struct Elf, state.elf64.scns));
> result->state.elf.scns_last = &result->state.elf32.scns;
> result->state.elf32.scns.max = NSCNSALLOC;
> }
> diff --git a/libelf/elf_clone.c b/libelf/elf_clone.c
> index e6fe4729e68f..ff96fc2156b8 100644
> --- a/libelf/elf_clone.c
> +++ b/libelf/elf_clone.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <stddef.h>
> #include "libelfP.h"
> #include "common.h"
> @@ -65,8 +64,8 @@ elf_clone (Elf *elf, Elf_Cmd cmd)
> retval->state.elf.scnincr = 10;
>
> /* We have allocated room for some sections. */
> - assert (offsetof (struct Elf, state.elf32.scns)
> - == offsetof (struct Elf, state.elf64.scns));
> + eu_static_assert (offsetof (struct Elf, state.elf32.scns)
> + == offsetof (struct Elf, state.elf64.scns));
> retval->state.elf.scns_last = &retval->state.elf32.scns;
> retval->state.elf32.scns.max = elf->state.elf32.scns.max;
>
> diff --git a/libelf/elf_getshdrstrndx.c b/libelf/elf_getshdrstrndx.c
> index 2391317bffe0..af9c3a1479fd 100644
> --- a/libelf/elf_getshdrstrndx.c
> +++ b/libelf/elf_getshdrstrndx.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <errno.h>
> #include <gelf.h>
> #include <stddef.h>
> @@ -58,14 +57,14 @@ elf_getshdrstrndx (Elf *elf, size_t *dst)
>
> /* We rely here on the fact that the `elf' element is a common prefix
> of `elf32' and `elf64'. */
> - assert (offsetof (struct Elf, state.elf.ehdr)
> - == offsetof (struct Elf, state.elf32.ehdr));
> - assert (sizeof (elf->state.elf.ehdr)
> - == sizeof (elf->state.elf32.ehdr));
> - assert (offsetof (struct Elf, state.elf.ehdr)
> - == offsetof (struct Elf, state.elf64.ehdr));
> - assert (sizeof (elf->state.elf.ehdr)
> - == sizeof (elf->state.elf64.ehdr));
> + eu_static_assert (offsetof (struct Elf, state.elf.ehdr)
> + == offsetof (struct Elf, state.elf32.ehdr));
> + eu_static_assert (sizeof (elf->state.elf.ehdr)
> + == sizeof (elf->state.elf32.ehdr));
> + eu_static_assert (offsetof (struct Elf, state.elf.ehdr)
> + == offsetof (struct Elf, state.elf64.ehdr));
> + eu_static_assert (sizeof (elf->state.elf.ehdr)
> + == sizeof (elf->state.elf64.ehdr));
>
> if (unlikely (elf->state.elf.ehdr == NULL))
> {
> diff --git a/libelf/elf_newscn.c b/libelf/elf_newscn.c
> index ec731f759de4..f7b20ab7cb2d 100644
> --- a/libelf/elf_newscn.c
> +++ b/libelf/elf_newscn.c
> @@ -51,12 +51,12 @@ elf_newscn (Elf *elf)
>
> /* We rely on the prefix of the `elf', `elf32', and `elf64' element
> being the same. */
> - assert (offsetof (Elf, state.elf.scns_last)
> - == offsetof (Elf, state.elf32.scns_last));
> - assert (offsetof (Elf, state.elf.scns_last)
> - == offsetof (Elf, state.elf64.scns_last));
> - assert (offsetof (Elf, state.elf32.scns)
> - == offsetof (Elf, state.elf64.scns));
> + eu_static_assert (offsetof (Elf, state.elf.scns_last)
> + == offsetof (Elf, state.elf32.scns_last));
> + eu_static_assert (offsetof (Elf, state.elf.scns_last)
> + == offsetof (Elf, state.elf64.scns_last));
> + eu_static_assert (offsetof (Elf, state.elf32.scns)
> + == offsetof (Elf, state.elf64.scns));
>
> rwlock_wrlock (elf->lock);
>
> diff --git a/libelf/gelf_getauxv.c b/libelf/gelf_getauxv.c
> index 1591be2a5686..405ec6465c83 100644
> --- a/libelf/gelf_getauxv.c
> +++ b/libelf/gelf_getauxv.c
> @@ -30,7 +30,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -84,7 +83,7 @@ gelf_getauxv (Elf_Data *data, int ndx, GElf_auxv_t *dst)
> else
> {
> /* If this is a 64 bit object it's easy. */
> - assert (sizeof (GElf_auxv_t) == sizeof (Elf64_auxv_t));
> + eu_static_assert (sizeof (GElf_auxv_t) == sizeof (Elf64_auxv_t));
>
> /* The data is already in the correct form. Just make sure the
> index is OK. */
> diff --git a/libelf/gelf_getdyn.c b/libelf/gelf_getdyn.c
> index a0090e147d54..32e75f9a888e 100644
> --- a/libelf/gelf_getdyn.c
> +++ b/libelf/gelf_getdyn.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -86,7 +85,7 @@ gelf_getdyn (Elf_Data *data, int ndx, GElf_Dyn *dst)
> else
> {
> /* If this is a 64 bit object it's easy. */
> - assert (sizeof (GElf_Dyn) == sizeof (Elf64_Dyn));
> + eu_static_assert (sizeof (GElf_Dyn) == sizeof (Elf64_Dyn));
>
> /* The data is already in the correct form. Just make sure the
> index is OK. */
> diff --git a/libelf/gelf_getlib.c b/libelf/gelf_getlib.c
> index a8ac47850c5b..9a6c24165ece 100644
> --- a/libelf/gelf_getlib.c
> +++ b/libelf/gelf_getlib.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -56,8 +55,8 @@ gelf_getlib (Elf_Data *data, int ndx, GElf_Lib *dst)
>
> /* The on disk format of Elf32_Lib and Elf64_Lib is identical. So
> we can simplify things significantly. */
> - assert (sizeof (GElf_Lib) == sizeof (Elf32_Lib));
> - assert (sizeof (GElf_Lib) == sizeof (Elf64_Lib));
> + eu_static_assert (sizeof (GElf_Lib) == sizeof (Elf32_Lib));
> + eu_static_assert (sizeof (GElf_Lib) == sizeof (Elf64_Lib));
>
> /* The data is already in the correct form. Just make sure the
> index is OK. */
> diff --git a/libelf/gelf_getsym.c b/libelf/gelf_getsym.c
> index 01534d2ce8fd..bc1e7b56bdc5 100644
> --- a/libelf/gelf_getsym.c
> +++ b/libelf/gelf_getsym.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -91,7 +90,7 @@ gelf_getsym (Elf_Data *data, int ndx, GElf_Sym *dst)
> else
> {
> /* If this is a 64 bit object it's easy. */
> - assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
> + eu_static_assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
>
> /* The data is already in the correct form. Just make sure the
> index is OK. */
> diff --git a/libelf/gelf_getsyminfo.c b/libelf/gelf_getsyminfo.c
> index 8360ed387ad0..d1ec9e7942c9 100644
> --- a/libelf/gelf_getsyminfo.c
> +++ b/libelf/gelf_getsyminfo.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -53,8 +52,8 @@ gelf_getsyminfo (Elf_Data *data, int ndx, GElf_Syminfo *dst)
> }
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
> - assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
> + eu_static_assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
> + eu_static_assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
>
> rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
>
> diff --git a/libelf/gelf_getsymshndx.c b/libelf/gelf_getsymshndx.c
> index 17c90fc6d082..534502e34f7a 100644
> --- a/libelf/gelf_getsymshndx.c
> +++ b/libelf/gelf_getsymshndx.c
> @@ -32,7 +32,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -110,7 +109,7 @@ gelf_getsymshndx (Elf_Data *symdata, Elf_Data *shndxdata,
> int ndx,
> else
> {
> /* If this is a 64 bit object it's easy. */
> - assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
> + eu_static_assert (sizeof (GElf_Sym) == sizeof (Elf64_Sym));
>
> /* The data is already in the correct form. Just make sure the
> index is OK. */
> diff --git a/libelf/gelf_getverdaux.c b/libelf/gelf_getverdaux.c
> index 739a7657d850..099c6612f5ad 100644
> --- a/libelf/gelf_getverdaux.c
> +++ b/libelf/gelf_getverdaux.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -54,8 +53,8 @@ gelf_getverdaux (Elf_Data *data, int offset, GElf_Verdaux
> *dst)
>
> /* It's easy to handle this type. It has the same size for 32 and
> 64 bit objects. */
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
>
> rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
>
> diff --git a/libelf/gelf_getverdef.c b/libelf/gelf_getverdef.c
> index 651f4fadc1cb..85be7caf4fa3 100644
> --- a/libelf/gelf_getverdef.c
> +++ b/libelf/gelf_getverdef.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -54,8 +53,8 @@ gelf_getverdef (Elf_Data *data, int offset, GElf_Verdef
> *dst)
>
> /* It's easy to handle this type. It has the same size for 32 and
> 64 bit objects. */
> - assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> - assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
>
> rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
>
> diff --git a/libelf/gelf_getvernaux.c b/libelf/gelf_getvernaux.c
> index e47fb0a22753..234543367606 100644
> --- a/libelf/gelf_getvernaux.c
> +++ b/libelf/gelf_getvernaux.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -55,10 +54,10 @@ gelf_getvernaux (Elf_Data *data, int offset, GElf_Vernaux
> *dst)
> /* It's easy to handle this type. It has the same size for 32 and
> 64 bit objects. And fortunately the `ElfXXX_Vernaux' records
> also have the same size. */
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Verneed));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Verneed));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Verneed));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Verneed));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
>
> rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
>
> diff --git a/libelf/gelf_getverneed.c b/libelf/gelf_getverneed.c
> index c1f5d3409fca..ff3743ea3451 100644
> --- a/libelf/gelf_getverneed.c
> +++ b/libelf/gelf_getverneed.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -55,10 +54,10 @@ gelf_getverneed (Elf_Data *data, int offset, GElf_Verneed
> *dst)
> /* It's easy to handle this type. It has the same size for 32 and
> 64 bit objects. And fortunately the `ElfXXX_Vernaux' records
> also have the same size. */
> - assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> - assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
> - assert (sizeof (GElf_Verneed) == sizeof (Elf32_Vernaux));
> - assert (sizeof (GElf_Verneed) == sizeof (Elf64_Vernaux));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf32_Vernaux));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf64_Vernaux));
>
> rwlock_rdlock (((Elf_Data_Scn *) data)->s->elf->lock);
>
> diff --git a/libelf/gelf_getversym.c b/libelf/gelf_getversym.c
> index 68d23c72e9d1..aa2c0a0904e1 100644
> --- a/libelf/gelf_getversym.c
> +++ b/libelf/gelf_getversym.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -61,8 +60,8 @@ gelf_getversym (Elf_Data *data, int ndx, GElf_Versym *dst)
>
> /* It's easy to handle this type. It has the same size for 32 and
> 64 bit objects. */
> - assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
> - assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
> + eu_static_assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
> + eu_static_assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
>
> rwlock_rdlock (scn->elf->lock);
>
> diff --git a/libelf/gelf_update_syminfo.c b/libelf/gelf_update_syminfo.c
> index 6f7f30255a4f..a471e42983a9 100644
> --- a/libelf/gelf_update_syminfo.c
> +++ b/libelf/gelf_update_syminfo.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <stdlib.h>
>
> @@ -56,8 +55,8 @@ gelf_update_syminfo (Elf_Data *data, int ndx, GElf_Syminfo
> *src)
> }
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
> - assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
> + eu_static_assert (sizeof (GElf_Syminfo) == sizeof (Elf32_Syminfo));
> + eu_static_assert (sizeof (GElf_Syminfo) == sizeof (Elf64_Syminfo));
>
> scn = data_scn->s;
> rwlock_wrlock (scn->elf->lock);
> diff --git a/libelf/gelf_update_verdaux.c b/libelf/gelf_update_verdaux.c
> index f3554fdcb6e4..9f4a43fad275 100644
> --- a/libelf/gelf_update_verdaux.c
> +++ b/libelf/gelf_update_verdaux.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -47,8 +46,8 @@ gelf_update_verdaux (Elf_Data *data, int offset,
> GElf_Verdaux *src)
> return 0;
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
>
> /* Check whether we have to resize the data buffer. */
> if (unlikely (offset < 0)
> diff --git a/libelf/gelf_update_verdef.c b/libelf/gelf_update_verdef.c
> index adb5db146a7a..bd224bdba6f4 100644
> --- a/libelf/gelf_update_verdef.c
> +++ b/libelf/gelf_update_verdef.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -47,8 +46,8 @@ gelf_update_verdef (Elf_Data *data, int offset, GElf_Verdef
> *src)
> return 0;
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> - assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
>
> /* Check whether we have to resize the data buffer. */
> if (unlikely (offset < 0)
> diff --git a/libelf/gelf_update_vernaux.c b/libelf/gelf_update_vernaux.c
> index 854afabbca45..f60429a65b88 100644
> --- a/libelf/gelf_update_vernaux.c
> +++ b/libelf/gelf_update_vernaux.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -47,8 +46,8 @@ gelf_update_vernaux (Elf_Data *data, int offset,
> GElf_Vernaux *src)
> return 0;
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
>
> /* Check whether we have to resize the data buffer. */
> if (unlikely (offset < 0)
> diff --git a/libelf/gelf_update_verneed.c b/libelf/gelf_update_verneed.c
> index bf5af5a30568..43338a8f76d8 100644
> --- a/libelf/gelf_update_verneed.c
> +++ b/libelf/gelf_update_verneed.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <string.h>
>
> @@ -47,8 +46,8 @@ gelf_update_verneed (Elf_Data *data, int offset,
> GElf_Verneed *src)
> return 0;
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> - assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
>
> /* Check whether we have to resize the data buffer. */
> if (unlikely (offset < 0)
> diff --git a/libelf/gelf_update_versym.c b/libelf/gelf_update_versym.c
> index 9949dffb03e0..5dc46222e930 100644
> --- a/libelf/gelf_update_versym.c
> +++ b/libelf/gelf_update_versym.c
> @@ -31,7 +31,6 @@
> # include <config.h>
> #endif
>
> -#include <assert.h>
> #include <gelf.h>
> #include <stdlib.h>
>
> @@ -47,8 +46,8 @@ gelf_update_versym (Elf_Data *data, int ndx, GElf_Versym
> *src)
> return 0;
>
> /* The types for 32 and 64 bit are the same. Lucky us. */
> - assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
> - assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
> + eu_static_assert (sizeof (GElf_Versym) == sizeof (Elf32_Versym));
> + eu_static_assert (sizeof (GElf_Versym) == sizeof (Elf64_Versym));
>
> /* Check whether we have to resize the data buffer. */
> if (INVALID_NDX (ndx, GElf_Versym, &data_scn->d))
> diff --git a/libelf/gnuhash_xlate.h b/libelf/gnuhash_xlate.h
> index 3a00ae0ae18b..cf9d4b57b053 100644
> --- a/libelf/gnuhash_xlate.h
> +++ b/libelf/gnuhash_xlate.h
> @@ -28,7 +28,6 @@
> the GNU Lesser General Public License along with this program. If
> not, see <http://www.gnu.org/licenses/>. */
>
> -#include <assert.h>
> #include <gelf.h>
>
> #include "libelfP.h"
> diff --git a/libelf/note_xlate.h b/libelf/note_xlate.h
> index 7e2784b0587f..dc3a35652157 100644
> --- a/libelf/note_xlate.h
> +++ b/libelf/note_xlate.h
> @@ -32,7 +32,7 @@ elf_cvt_note (void *dest, const void *src, size_t len, int
> encode,
> {
> /* Note that the header is always the same size, but the padding
> differs for GNU Property notes. */
> - assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
> + eu_static_assert (sizeof (Elf32_Nhdr) == sizeof (Elf64_Nhdr));
>
> while (len >= sizeof (Elf32_Nhdr))
> {
> diff --git a/libelf/version_xlate.h b/libelf/version_xlate.h
> index 97f3b7303e16..f44cb0cef8c2 100644
> --- a/libelf/version_xlate.h
> +++ b/libelf/version_xlate.h
> @@ -28,7 +28,6 @@
> the GNU Lesser General Public License along with this program. If
> not, see <http://www.gnu.org/licenses/>. */
>
> -#include <assert.h>
> #include <gelf.h>
>
> #include "libelfP.h"
> @@ -48,10 +47,10 @@ elf_cvt_Verdef (void *dest, const void *src, size_t len,
> int encode)
> GElf_Verdef *dsrc;
>
> /* We rely on the types being all the same size. */
> - assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> - assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
> - assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf32_Verdef));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf32_Verdaux));
> + eu_static_assert (sizeof (GElf_Verdef) == sizeof (Elf64_Verdef));
> + eu_static_assert (sizeof (GElf_Verdaux) == sizeof (Elf64_Verdaux));
>
> if (len == 0)
> return;
> @@ -171,10 +170,10 @@ elf_cvt_Verneed (void *dest, const void *src, size_t
> len, int encode)
> GElf_Verneed *nsrc;
>
> /* We rely on the types being all the same size. */
> - assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> - assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
> - assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf32_Verneed));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf32_Vernaux));
> + eu_static_assert (sizeof (GElf_Verneed) == sizeof (Elf64_Verneed));
> + eu_static_assert (sizeof (GElf_Vernaux) == sizeof (Elf64_Vernaux));
>
> if (len == 0)
> return;
> diff --git a/src/arlib.c b/src/arlib.c
> index b8f89ba7df87..80344389da36 100644
> --- a/src/arlib.c
> +++ b/src/arlib.c
> @@ -64,7 +64,7 @@ arlib_init (void)
> (arlib_deterministic_output ? 0
> : (long long int) time (NULL)));
> memcpy (ar_hdr.ar_date, tmpbuf, s);
> - assert ((sizeof (struct ar_hdr) % sizeof (uint32_t)) == 0);
> + eu_static_assert ((sizeof (struct ar_hdr) % sizeof (uint32_t)) == 0);
>
> /* Note the string for the ar_uid and ar_gid cases is longer than
> necessary. This does not matter since we copy only as much as
> @@ -81,7 +81,7 @@ arlib_init (void)
> /* The first word in the offset table specifies the size. Create
> such an entry now. The real value will be filled-in later. For
> all supported platforms the following is true. */
> - assert (sizeof (uint32_t) == sizeof (int));
> + eu_static_assert (sizeof (uint32_t) == sizeof (int));
> obstack_int_grow (&symtab.symsoffob, 0);
>
> /* The long name obstack also gets its archive header. As above,
> @@ -194,7 +194,7 @@ void
> arlib_add_symref (const char *symname, off_t symoff)
> {
> /* For all supported platforms the following is true. */
> - assert (sizeof (uint32_t) == sizeof (int));
> + eu_static_assert (sizeof (uint32_t) == sizeof (int));
> obstack_int_grow (&symtab.symsoffob, (int) le_bswap_32 (symoff));
>
> size_t symname_len = strlen (symname) + 1;
> diff --git a/src/strip.c b/src/strip.c
> index 8d2bb7a959f0..20cc8a22e9ae 100644
> --- a/src/strip.c
> +++ b/src/strip.c
> @@ -2600,10 +2600,12 @@ while computing checksum for debug information"));
>
> if (newehdr->e_ident[EI_CLASS] == ELFCLASS32)
> {
> - assert (offsetof (Elf32_Ehdr, e_shentsize) + sizeof (Elf32_Half)
> - == offsetof (Elf32_Ehdr, e_shnum));
> - assert (offsetof (Elf32_Ehdr, e_shnum) + sizeof (Elf32_Half)
> - == offsetof (Elf32_Ehdr, e_shstrndx));
> + eu_static_assert (offsetof (Elf32_Ehdr, e_shentsize)
> + + sizeof (Elf32_Half)
> + == offsetof (Elf32_Ehdr, e_shnum));
> + eu_static_assert (offsetof (Elf32_Ehdr, e_shnum)
> + + sizeof (Elf32_Half)
> + == offsetof (Elf32_Ehdr, e_shstrndx));
> const Elf32_Off zero_off = 0;
> const Elf32_Half zero[3] = { 0, 0, SHN_UNDEF };
> if (pwrite_retry (fd, &zero_off, sizeof zero_off,
> @@ -2620,10 +2622,12 @@ while computing checksum for debug information"));
> }
> else
> {
> - assert (offsetof (Elf64_Ehdr, e_shentsize) + sizeof (Elf64_Half)
> - == offsetof (Elf64_Ehdr, e_shnum));
> - assert (offsetof (Elf64_Ehdr, e_shnum) + sizeof (Elf64_Half)
> - == offsetof (Elf64_Ehdr, e_shstrndx));
> + eu_static_assert (offsetof (Elf64_Ehdr, e_shentsize)
> + + sizeof (Elf64_Half)
> + == offsetof (Elf64_Ehdr, e_shnum));
> + eu_static_assert (offsetof (Elf64_Ehdr, e_shnum)
> + +sizeof (Elf64_Half)
> + == offsetof (Elf64_Ehdr, e_shstrndx));
> const Elf64_Off zero_off = 0;
> const Elf64_Half zero[3] = { 0, 0, SHN_UNDEF };
> if (pwrite_retry (fd, &zero_off, sizeof zero_off,
> diff --git a/src/unstrip.c b/src/unstrip.c
> index 6c2a98ef96f2..5585b0e25101 100644
> --- a/src/unstrip.c
> +++ b/src/unstrip.c
> @@ -570,8 +570,8 @@ adjust_relocs (Elf_Scn *outscn, Elf_Scn *inscn, const
> GElf_Shdr *shdr,
>
> /* We don't bother using gelf_update_versym because there is
> really no conversion to be done. */
> - assert (sizeof (Elf32_Versym) == sizeof (GElf_Versym));
> - assert (sizeof (Elf64_Versym) == sizeof (GElf_Versym));
> + eu_static_assert (sizeof (Elf32_Versym) == sizeof (GElf_Versym));
> + eu_static_assert (sizeof (Elf64_Versym) == sizeof (GElf_Versym));
> GElf_Versym *versym = xcalloc (nent, sizeof versym[0]);
>
> for (size_t i = 1; i < onent; ++i)
> --
> 2.53.0
>