compiler: add a sizeof_field() macro

Determining the size of a field is useful when you don't have a struct
variable handy.  Open-coding this is ugly.

This patch adds the sizeof_field() macro, which is similar to
typeof_field().  Existing instances are updated to use the macro.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: John Snow <jsnow@redhat.com>
Message-id: 20180614164431.29305-1-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2018-06-14 17:44:31 +01:00
parent 00928a421d
commit f18793b096
9 changed files with 24 additions and 22 deletions

View file

@ -184,20 +184,20 @@ typedef struct NoteFuncDescStruct {
} NoteFuncDesc;
static const NoteFuncDesc note_core[] = {
{sizeof(((Note *)0)->contents.prstatus), s390x_write_elf64_prstatus},
{sizeof(((Note *)0)->contents.fpregset), s390x_write_elf64_fpregset},
{sizeof_field(Note, contents.prstatus), s390x_write_elf64_prstatus},
{sizeof_field(Note, contents.fpregset), s390x_write_elf64_fpregset},
{ 0, NULL}
};
static const NoteFuncDesc note_linux[] = {
{sizeof(((Note *)0)->contents.prefix), s390x_write_elf64_prefix},
{sizeof(((Note *)0)->contents.ctrs), s390x_write_elf64_ctrs},
{sizeof(((Note *)0)->contents.timer), s390x_write_elf64_timer},
{sizeof(((Note *)0)->contents.todcmp), s390x_write_elf64_todcmp},
{sizeof(((Note *)0)->contents.todpreg), s390x_write_elf64_todpreg},
{sizeof(((Note *)0)->contents.vregslo), s390x_write_elf64_vregslo},
{sizeof(((Note *)0)->contents.vregshi), s390x_write_elf64_vregshi},
{sizeof(((Note *)0)->contents.gscb), s390x_write_elf64_gscb},
{sizeof_field(Note, contents.prefix), s390x_write_elf64_prefix},
{sizeof_field(Note, contents.ctrs), s390x_write_elf64_ctrs},
{sizeof_field(Note, contents.timer), s390x_write_elf64_timer},
{sizeof_field(Note, contents.todcmp), s390x_write_elf64_todcmp},
{sizeof_field(Note, contents.todpreg), s390x_write_elf64_todpreg},
{sizeof_field(Note, contents.vregslo), s390x_write_elf64_vregslo},
{sizeof_field(Note, contents.vregshi), s390x_write_elf64_vregshi},
{sizeof_field(Note, contents.gscb), s390x_write_elf64_gscb},
{ 0, NULL}
};