diff mbox series

[v1,2/4] elf: move elf.h to elf/elf.h and split out types

Message ID 20190910193408.28917-3-alex.bennee@linaro.org
State New
Headers show
Series ELF and (macro) safety | expand

Commit Message

Alex Bennée Sept. 10, 2019, 7:34 p.m. UTC
Most of the users of elf.h just want the standard Elf definitions. The
couple that want more than that want an expansion based on ELF_CLASS
which can be used for size agnostic code. The later is moved into
elf/elf-types.inc.h to make it clearer what it is for. While doing
that I also removed the whitespace damage.

Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

---
 bsd-user/elfload.c               |  2 +-
 contrib/elf2dmp/qemu_elf.h       |  2 +-
 disas.c                          |  2 +-
 dump/dump.c                      |  2 +-
 dump/win_dump.c                  |  2 +-
 hw/alpha/dp264.c                 |  2 +-
 hw/arm/armv7m.c                  |  2 +-
 hw/arm/boot.c                    |  2 +-
 hw/core/loader.c                 |  3 +-
 hw/cris/axis_dev88.c             |  2 +-
 hw/cris/boot.c                   |  2 +-
 hw/hppa/machine.c                |  2 +-
 hw/i386/multiboot.c              |  2 +-
 hw/i386/pc.c                     |  2 +-
 hw/lm32/lm32_boards.c            |  2 +-
 hw/lm32/milkymist.c              |  2 +-
 hw/m68k/an5206.c                 |  2 +-
 hw/m68k/mcf5208.c                |  2 +-
 hw/microblaze/boot.c             |  2 +-
 hw/mips/mips_fulong2e.c          |  2 +-
 hw/mips/mips_malta.c             |  2 +-
 hw/mips/mips_mipssim.c           |  2 +-
 hw/mips/mips_r4k.c               |  2 +-
 hw/moxie/moxiesim.c              |  2 +-
 hw/nios2/boot.c                  |  2 +-
 hw/openrisc/openrisc_sim.c       |  2 +-
 hw/pci-host/prep.c               |  2 +-
 hw/ppc/e500.c                    |  2 +-
 hw/ppc/mac_newworld.c            |  2 +-
 hw/ppc/mac_oldworld.c            |  2 +-
 hw/ppc/ppc440_bamboo.c           |  2 +-
 hw/ppc/prep.c                    |  2 +-
 hw/ppc/sam460ex.c                |  2 +-
 hw/ppc/spapr.c                   |  2 +-
 hw/ppc/spapr_vio.c               |  2 +-
 hw/ppc/virtex_ml507.c            |  2 +-
 hw/riscv/boot.c                  |  2 +-
 hw/s390x/ipl.c                   |  2 +-
 hw/sparc/leon3.c                 |  2 +-
 hw/sparc/sun4m.c                 |  2 +-
 hw/sparc64/sun4u.c               |  2 +-
 hw/tricore/tricore_testboard.c   |  2 +-
 hw/xtensa/sim.c                  |  2 +-
 hw/xtensa/xtfpga.c               |  2 +-
 include/elf/elf-types.inc.h      | 63 ++++++++++++++++++++++++++++++++
 include/{ => elf}/elf.h          | 42 ---------------------
 include/hw/core/generic-loader.h |  2 +-
 linux-user/arm/cpu_loop.c        |  2 +-
 linux-user/elfload.c             |  5 +--
 linux-user/main.c                |  2 +-
 linux-user/mips/cpu_loop.c       |  2 +-
 linux-user/riscv/cpu_loop.c      |  2 +-
 target/arm/arch_dump.c           |  2 +-
 target/i386/arch_dump.c          |  2 +-
 target/ppc/arch_dump.c           |  2 +-
 target/ppc/kvm.c                 |  2 +-
 target/s390x/arch_dump.c         |  2 +-
 tcg/arm/tcg-target.inc.c         |  2 +-
 tcg/ppc/tcg-target.inc.c         |  2 +-
 tcg/s390/tcg-target.inc.c        |  2 +-
 tcg/tcg.c                        |  5 ++-
 util/getauxval.c                 |  2 +-
 62 files changed, 128 insertions(+), 104 deletions(-)
 create mode 100644 include/elf/elf-types.inc.h
 rename include/{ => elf}/elf.h (98%)

-- 
2.20.1

Comments

David Gibson Sept. 11, 2019, 12:08 a.m. UTC | #1
On Tue, Sep 10, 2019 at 08:34:06PM +0100, Alex Bennée wrote:
> Most of the users of elf.h just want the standard Elf definitions. The

> couple that want more than that want an expansion based on ELF_CLASS

> which can be used for size agnostic code. The later is moved into

> elf/elf-types.inc.h to make it clearer what it is for. While doing

> that I also removed the whitespace damage.

> 

> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>


ppc parts
Acked-by: David Gibson <david@gibson.dropbear.id.au>


> ---

>  bsd-user/elfload.c               |  2 +-

>  contrib/elf2dmp/qemu_elf.h       |  2 +-

>  disas.c                          |  2 +-

>  dump/dump.c                      |  2 +-

>  dump/win_dump.c                  |  2 +-

>  hw/alpha/dp264.c                 |  2 +-

>  hw/arm/armv7m.c                  |  2 +-

>  hw/arm/boot.c                    |  2 +-

>  hw/core/loader.c                 |  3 +-

>  hw/cris/axis_dev88.c             |  2 +-

>  hw/cris/boot.c                   |  2 +-

>  hw/hppa/machine.c                |  2 +-

>  hw/i386/multiboot.c              |  2 +-

>  hw/i386/pc.c                     |  2 +-

>  hw/lm32/lm32_boards.c            |  2 +-

>  hw/lm32/milkymist.c              |  2 +-

>  hw/m68k/an5206.c                 |  2 +-

>  hw/m68k/mcf5208.c                |  2 +-

>  hw/microblaze/boot.c             |  2 +-

>  hw/mips/mips_fulong2e.c          |  2 +-

>  hw/mips/mips_malta.c             |  2 +-

>  hw/mips/mips_mipssim.c           |  2 +-

>  hw/mips/mips_r4k.c               |  2 +-

>  hw/moxie/moxiesim.c              |  2 +-

>  hw/nios2/boot.c                  |  2 +-

>  hw/openrisc/openrisc_sim.c       |  2 +-

>  hw/pci-host/prep.c               |  2 +-

>  hw/ppc/e500.c                    |  2 +-

>  hw/ppc/mac_newworld.c            |  2 +-

>  hw/ppc/mac_oldworld.c            |  2 +-

>  hw/ppc/ppc440_bamboo.c           |  2 +-

>  hw/ppc/prep.c                    |  2 +-

>  hw/ppc/sam460ex.c                |  2 +-

>  hw/ppc/spapr.c                   |  2 +-

>  hw/ppc/spapr_vio.c               |  2 +-

>  hw/ppc/virtex_ml507.c            |  2 +-

>  hw/riscv/boot.c                  |  2 +-

>  hw/s390x/ipl.c                   |  2 +-

>  hw/sparc/leon3.c                 |  2 +-

>  hw/sparc/sun4m.c                 |  2 +-

>  hw/sparc64/sun4u.c               |  2 +-

>  hw/tricore/tricore_testboard.c   |  2 +-

>  hw/xtensa/sim.c                  |  2 +-

>  hw/xtensa/xtfpga.c               |  2 +-

>  include/elf/elf-types.inc.h      | 63 ++++++++++++++++++++++++++++++++

>  include/{ => elf}/elf.h          | 42 ---------------------

>  include/hw/core/generic-loader.h |  2 +-

>  linux-user/arm/cpu_loop.c        |  2 +-

>  linux-user/elfload.c             |  5 +--

>  linux-user/main.c                |  2 +-

>  linux-user/mips/cpu_loop.c       |  2 +-

>  linux-user/riscv/cpu_loop.c      |  2 +-

>  target/arm/arch_dump.c           |  2 +-

>  target/i386/arch_dump.c          |  2 +-

>  target/ppc/arch_dump.c           |  2 +-

>  target/ppc/kvm.c                 |  2 +-

>  target/s390x/arch_dump.c         |  2 +-

>  tcg/arm/tcg-target.inc.c         |  2 +-

>  tcg/ppc/tcg-target.inc.c         |  2 +-

>  tcg/s390/tcg-target.inc.c        |  2 +-

>  tcg/tcg.c                        |  5 ++-

>  util/getauxval.c                 |  2 +-

>  62 files changed, 128 insertions(+), 104 deletions(-)

>  create mode 100644 include/elf/elf-types.inc.h

>  rename include/{ => elf}/elf.h (98%)

> 

> diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c

> index 32378af7b2e..321ee98b86b 100644

> --- a/bsd-user/elfload.c

> +++ b/bsd-user/elfload.c

> @@ -509,7 +509,7 @@ static inline void init_thread(struct target_pt_regs *regs, struct image_info *i

>  #define bswaptls(ptr) bswap32s(ptr)

>  #endif

>  

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  struct exec

>  {

> diff --git a/contrib/elf2dmp/qemu_elf.h b/contrib/elf2dmp/qemu_elf.h

> index b2f0d9cbc9b..060d148d7f0 100644

> --- a/contrib/elf2dmp/qemu_elf.h

> +++ b/contrib/elf2dmp/qemu_elf.h

> @@ -7,7 +7,7 @@

>  #ifndef ELF2DMP_QEMU_ELF_H

>  #define ELF2DMP_QEMU_ELF_H

>  

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  typedef struct QEMUCPUSegment {

>      uint32_t selector;

> diff --git a/disas.c b/disas.c

> index 3e2bfa572b1..6f2370cfda7 100644

> --- a/disas.c

> +++ b/disas.c

> @@ -1,7 +1,7 @@

>  /* General "disassemble this chunk" code.  Used for debugging. */

>  #include "qemu/osdep.h"

>  #include "disas/dis-asm.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/qemu-print.h"

>  

>  #include "cpu.h"

> diff --git a/dump/dump.c b/dump/dump.c

> index 6fb6e1245ad..6b084a21a2a 100644

> --- a/dump/dump.c

> +++ b/dump/dump.c

> @@ -14,7 +14,7 @@

>  #include "qemu/osdep.h"

>  #include "qemu-common.h"

>  #include "qemu/cutils.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "cpu.h"

>  #include "exec/hwaddr.h"

>  #include "monitor/monitor.h"

> diff --git a/dump/win_dump.c b/dump/win_dump.c

> index eda2a489742..8232c3cb6b3 100644

> --- a/dump/win_dump.c

> +++ b/dump/win_dump.c

> @@ -11,7 +11,7 @@

>  #include "qemu/osdep.h"

>  #include "qemu-common.h"

>  #include "qemu/cutils.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "cpu.h"

>  #include "exec/hwaddr.h"

>  #include "monitor/monitor.h"

> diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c

> index 51feee85581..87e5c77c69c 100644

> --- a/hw/alpha/dp264.c

> +++ b/hw/alpha/dp264.c

> @@ -9,7 +9,7 @@

>  #include "qemu/osdep.h"

>  #include "qemu-common.h"

>  #include "cpu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/loader.h"

>  #include "alpha_sys.h"

>  #include "qemu/error-report.h"

> diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c

> index 7a3c48f0026..559586fa527 100644

> --- a/hw/arm/armv7m.c

> +++ b/hw/arm/armv7m.c

> @@ -15,7 +15,7 @@

>  #include "hw/arm/boot.h"

>  #include "hw/loader.h"

>  #include "hw/qdev-properties.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/qtest.h"

>  #include "sysemu/reset.h"

>  #include "qemu/error-report.h"

> diff --git a/hw/arm/boot.c b/hw/arm/boot.c

> index bf97ef3e339..7818e5b5518 100644

> --- a/hw/arm/boot.c

> +++ b/hw/arm/boot.c

> @@ -20,7 +20,7 @@

>  #include "hw/boards.h"

>  #include "sysemu/reset.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/device_tree.h"

>  #include "qemu/config-file.h"

>  #include "qemu/option.h"

> diff --git a/hw/core/loader.c b/hw/core/loader.c

> index 32f7cc7c33c..e0c6563e643 100644

> --- a/hw/core/loader.c

> +++ b/hw/core/loader.c

> @@ -59,6 +59,7 @@

>  #include "hw/boards.h"

>  #include "qemu/cutils.h"

>  #include "sysemu/runstate.h"

> +#include "elf/elf.h"

>  

>  #include <zlib.h>

>  

> @@ -295,7 +296,7 @@ static void *load_at(int fd, off_t offset, size_t size)

>  #endif

>  

>  #define ELF_CLASS   ELFCLASS32

> -#include "elf.h"

> +#include "elf/elf-types.inc.h"

>  

>  #define SZ		32

>  #define elf_word        uint32_t

> diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c

> index 940c7dd1226..31dc391a637 100644

> --- a/hw/cris/axis_dev88.c

> +++ b/hw/cris/axis_dev88.c

> @@ -32,7 +32,7 @@

>  #include "hw/boards.h"

>  #include "hw/cris/etraxfs.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "boot.h"

>  #include "exec/address-spaces.h"

>  #include "sysemu/qtest.h"

> diff --git a/hw/cris/boot.c b/hw/cris/boot.c

> index 2d2cc0c7a53..0b8008ca0b2 100644

> --- a/hw/cris/boot.c

> +++ b/hw/cris/boot.c

> @@ -25,7 +25,7 @@

>  #include "qemu/osdep.h"

>  #include "cpu.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "boot.h"

>  #include "qemu/cutils.h"

>  #include "sysemu/reset.h"

> diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c

> index 2736ce835ee..3c121f1a645 100644

> --- a/hw/hppa/machine.c

> +++ b/hw/hppa/machine.c

> @@ -6,7 +6,7 @@

>  #include "qemu/osdep.h"

>  #include "qemu-common.h"

>  #include "cpu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/loader.h"

>  #include "hw/boards.h"

>  #include "qemu/error-report.h"

> diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c

> index 9a59f954972..54a7e5f048e 100644

> --- a/hw/i386/multiboot.c

> +++ b/hw/i386/multiboot.c

> @@ -28,7 +28,7 @@

>  #include "hw/nvram/fw_cfg.h"

>  #include "multiboot.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/sysemu.h"

>  #include "qemu/error-report.h"

>  

> diff --git a/hw/i386/pc.c b/hw/i386/pc.c

> index bad866fe44f..e84710a944a 100644

> --- a/hw/i386/pc.c

> +++ b/hw/i386/pc.c

> @@ -39,7 +39,7 @@

>  #include "hw/timer/hpet.h"

>  #include "hw/firmware/smbios.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "migration/vmstate.h"

>  #include "multiboot.h"

>  #include "hw/timer/mc146818rtc.h"

> diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c

> index 5ae308bfcfb..12c60ad9b74 100644

> --- a/hw/lm32/lm32_boards.c

> +++ b/hw/lm32/lm32_boards.c

> @@ -26,7 +26,7 @@

>  #include "hw/block/flash.h"

>  #include "hw/boards.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "lm32_hwsetup.h"

>  #include "lm32.h"

>  #include "exec/address-spaces.h"

> diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c

> index 460d322de57..9f3a2f2ff5f 100644

> --- a/hw/lm32/milkymist.c

> +++ b/hw/lm32/milkymist.c

> @@ -31,7 +31,7 @@

>  #include "hw/boards.h"

>  #include "hw/loader.h"

>  #include "hw/qdev-properties.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "milkymist-hw.h"

>  #include "hw/display/milkymist_tmu2.h"

>  #include "lm32.h"

> diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c

> index 54ccbe1a822..12664b872bc 100644

> --- a/hw/m68k/an5206.c

> +++ b/hw/m68k/an5206.c

> @@ -12,7 +12,7 @@

>  #include "hw/m68k/mcf.h"

>  #include "hw/boards.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/address-spaces.h"

>  #include "qemu/error-report.h"

>  #include "sysemu/qtest.h"

> diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c

> index 012710d057d..42d79bd2f03 100644

> --- a/hw/m68k/mcf5208.c

> +++ b/hw/m68k/mcf5208.c

> @@ -25,7 +25,7 @@

>  #include "hw/boards.h"

>  #include "hw/loader.h"

>  #include "hw/sysbus.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/address-spaces.h"

>  

>  #define SYS_FREQ 166666666

> diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c

> index bade4d22c00..0c1020cd373 100644

> --- a/hw/microblaze/boot.c

> +++ b/hw/microblaze/boot.c

> @@ -34,7 +34,7 @@

>  #include "sysemu/reset.h"

>  #include "sysemu/sysemu.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/cutils.h"

>  

>  #include "boot.h"

> diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c

> index cf537dd7e63..4ba670cc909 100644

> --- a/hw/mips/mips_fulong2e.c

> +++ b/hw/mips/mips_fulong2e.c

> @@ -37,7 +37,7 @@

>  #include "qemu/log.h"

>  #include "hw/loader.h"

>  #include "hw/ide.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/isa/vt82c686.h"

>  #include "hw/timer/mc146818rtc.h"

>  #include "hw/timer/i8254.h"

> diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c

> index 4d9c64b36ab..1c841298363 100644

> --- a/hw/mips/mips_malta.c

> +++ b/hw/mips/mips_malta.c

> @@ -44,7 +44,7 @@

>  #include "hw/ide.h"

>  #include "hw/irq.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/timer/mc146818rtc.h"

>  #include "hw/timer/i8254.h"

>  #include "exec/address-spaces.h"

> diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c

> index 282bbecb24e..d6acd53b3e3 100644

> --- a/hw/mips/mips_mipssim.c

> +++ b/hw/mips/mips_mipssim.c

> @@ -38,7 +38,7 @@

>  #include "hw/boards.h"

>  #include "hw/mips/bios.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/sysbus.h"

>  #include "exec/address-spaces.h"

>  #include "qemu/error-report.h"

> diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c

> index bc0be265441..7fc2fc51fee 100644

> --- a/hw/mips/mips_r4k.c

> +++ b/hw/mips/mips_r4k.c

> @@ -27,7 +27,7 @@

>  #include "hw/mips/bios.h"

>  #include "hw/ide.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/timer/mc146818rtc.h"

>  #include "hw/input/i8042.h"

>  #include "hw/timer/i8254.h"

> diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c

> index 57af1b48912..bc1cc8b0bf8 100644

> --- a/hw/moxie/moxiesim.c

> +++ b/hw/moxie/moxiesim.c

> @@ -37,7 +37,7 @@

>  #include "hw/loader.h"

>  #include "hw/char/serial.h"

>  #include "exec/address-spaces.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  #define PHYS_MEM_BASE 0x80000000

>  #define FIRMWARE_BASE 0x1000

> diff --git a/hw/nios2/boot.c b/hw/nios2/boot.c

> index d78bc9ed0e2..ec1eb15bcaa 100644

> --- a/hw/nios2/boot.c

> +++ b/hw/nios2/boot.c

> @@ -39,7 +39,7 @@

>  #include "sysemu/reset.h"

>  #include "sysemu/sysemu.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  #include "boot.h"

>  

> diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c

> index 79e70493fc7..f21a2962a90 100644

> --- a/hw/openrisc/openrisc_sim.c

> +++ b/hw/openrisc/openrisc_sim.c

> @@ -24,7 +24,7 @@

>  #include "cpu.h"

>  #include "hw/irq.h"

>  #include "hw/boards.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/char/serial.h"

>  #include "net/net.h"

>  #include "hw/loader.h"

> diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c

> index 85d7ba90374..9568746d8e2 100644

> --- a/hw/pci-host/prep.c

> +++ b/hw/pci-host/prep.c

> @@ -37,7 +37,7 @@

>  #include "hw/loader.h"

>  #include "hw/or-irq.h"

>  #include "exec/address-spaces.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  #define TYPE_RAVEN_PCI_DEVICE "raven"

>  #define TYPE_RAVEN_PCI_HOST_BRIDGE "raven-pcihost"

> diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c

> index 91cd4c26f91..add6277ad6c 100644

> --- a/hw/ppc/e500.c

> +++ b/hw/ppc/e500.c

> @@ -36,7 +36,7 @@

>  #include "hw/ppc/ppc.h"

>  #include "hw/qdev-properties.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/sysbus.h"

>  #include "exec/address-spaces.h"

>  #include "qemu/host-utils.h"

> diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c

> index c5bbcc74335..50babbb7a67 100644

> --- a/hw/ppc/mac_newworld.c

> +++ b/hw/ppc/mac_newworld.c

> @@ -65,7 +65,7 @@

>  #include "hw/ide.h"

>  #include "hw/loader.h"

>  #include "hw/fw-path-provider.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/error-report.h"

>  #include "sysemu/kvm.h"

>  #include "sysemu/reset.h"

> diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c

> index 0fa680b7499..64fe33cd1f3 100644

> --- a/hw/ppc/mac_oldworld.c

> +++ b/hw/ppc/mac_oldworld.c

> @@ -44,7 +44,7 @@

>  #include "hw/ide.h"

>  #include "hw/loader.h"

>  #include "hw/fw-path-provider.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/error-report.h"

>  #include "sysemu/kvm.h"

>  #include "sysemu/reset.h"

> diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c

> index 4d95c0f8a88..15f39b332a8 100644

> --- a/hw/ppc/ppc440_bamboo.c

> +++ b/hw/ppc/ppc440_bamboo.c

> @@ -23,7 +23,7 @@

>  #include "kvm_ppc.h"

>  #include "sysemu/device_tree.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/address-spaces.h"

>  #include "hw/char/serial.h"

>  #include "hw/ppc/ppc.h"

> diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c

> index 4f3c6bf1901..8bd3209dec7 100644

> --- a/hw/ppc/prep.c

> +++ b/hw/ppc/prep.c

> @@ -49,7 +49,7 @@

>  #include "sysemu/reset.h"

>  #include "exec/address-spaces.h"

>  #include "trace.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/units.h"

>  #include "kvm_ppc.h"

>  

> diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c

> index 437e214210b..982b80e5bad 100644

> --- a/hw/ppc/sam460ex.c

> +++ b/hw/ppc/sam460ex.c

> @@ -22,7 +22,7 @@

>  #include "sysemu/device_tree.h"

>  #include "sysemu/block-backend.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/address-spaces.h"

>  #include "exec/memory.h"

>  #include "ppc440.h"

> diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c

> index 222a325056c..57f8041ec81 100644

> --- a/hw/ppc/spapr.c

> +++ b/hw/ppc/spapr.c

> @@ -36,7 +36,7 @@

>  #include "sysemu/runstate.h"

>  #include "qemu/log.h"

>  #include "hw/fw-path-provider.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "net/net.h"

>  #include "sysemu/device_tree.h"

>  #include "sysemu/cpus.h"

> diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c

> index 0803649658f..6d90322db0b 100644

> --- a/hw/ppc/spapr_vio.c

> +++ b/hw/ppc/spapr_vio.c

> @@ -26,7 +26,7 @@

>  #include "hw/irq.h"

>  #include "qemu/log.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/sysbus.h"

>  #include "sysemu/kvm.h"

>  #include "sysemu/device_tree.h"

> diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c

> index 68625522d8a..ede7da4bbc2 100644

> --- a/hw/ppc/virtex_ml507.c

> +++ b/hw/ppc/virtex_ml507.c

> @@ -35,7 +35,7 @@

>  #include "hw/boards.h"

>  #include "sysemu/device_tree.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "qemu/error-report.h"

>  #include "qemu/log.h"

>  #include "qemu/option.h"

> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c

> index 4c63b5cf8a8..9a7b4a5ca87 100644

> --- a/hw/riscv/boot.c

> +++ b/hw/riscv/boot.c

> @@ -25,7 +25,7 @@

>  #include "hw/boards.h"

>  #include "hw/loader.h"

>  #include "hw/riscv/boot.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/qtest.h"

>  

>  #if defined(TARGET_RISCV32)

> diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c

> index ca544d64c5e..cf4e06b633e 100644

> --- a/hw/s390x/ipl.c

> +++ b/hw/s390x/ipl.c

> @@ -19,7 +19,7 @@

>  #include "sysemu/sysemu.h"

>  #include "sysemu/tcg.h"

>  #include "cpu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/loader.h"

>  #include "hw/qdev-properties.h"

>  #include "hw/boards.h"

> diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c

> index c5f1b1ee72e..735a823fd56 100644

> --- a/hw/sparc/leon3.c

> +++ b/hw/sparc/leon3.c

> @@ -37,7 +37,7 @@

>  #include "sysemu/reset.h"

>  #include "hw/boards.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "trace.h"

>  #include "exec/address-spaces.h"

>  

> diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c

> index 6c5a17a0205..d542a6c203c 100644

> --- a/hw/sparc/sun4m.c

> +++ b/hw/sparc/sun4m.c

> @@ -49,7 +49,7 @@

>  #include "hw/empty_slot.h"

>  #include "hw/irq.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "trace.h"

>  

>  /*

> diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c

> index 1ded2a4c9ab..79b15c8aec3 100644

> --- a/hw/sparc64/sun4u.c

> +++ b/hw/sparc64/sun4u.c

> @@ -54,7 +54,7 @@

>  #include "hw/ide/pci.h"

>  #include "hw/loader.h"

>  #include "hw/fw-path-provider.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "trace.h"

>  

>  #define KERNEL_LOAD_ADDR     0x00404000

> diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c

> index aef3289f8c3..84e8d7b429f 100644

> --- a/hw/tricore/tricore_testboard.c

> +++ b/hw/tricore/tricore_testboard.c

> @@ -26,7 +26,7 @@

>  #include "hw/boards.h"

>  #include "hw/loader.h"

>  #include "exec/address-spaces.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/tricore/tricore.h"

>  #include "qemu/error-report.h"

>  

> diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c

> index 981dbb7bbeb..f8d96fc452c 100644

> --- a/hw/xtensa/sim.c

> +++ b/hw/xtensa/sim.c

> @@ -32,7 +32,7 @@

>  #include "sysemu/sysemu.h"

>  #include "hw/boards.h"

>  #include "hw/loader.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/memory.h"

>  #include "exec/address-spaces.h"

>  #include "qemu/error-report.h"

> diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c

> index 8220c7a3794..5e3ed738fa8 100644

> --- a/hw/xtensa/xtfpga.c

> +++ b/hw/xtensa/xtfpga.c

> @@ -33,7 +33,7 @@

>  #include "hw/boards.h"

>  #include "hw/loader.h"

>  #include "hw/qdev-properties.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "exec/memory.h"

>  #include "exec/address-spaces.h"

>  #include "hw/char/serial.h"

> diff --git a/include/elf/elf-types.inc.h b/include/elf/elf-types.inc.h

> new file mode 100644

> index 00000000000..35163adb2b5

> --- /dev/null

> +++ b/include/elf/elf-types.inc.h

> @@ -0,0 +1,63 @@

> +/*

> + * Elf Type Specialisation

> + *

> + * Copyright (c) 2019

> + * Written by Alex Bennée <alex.bennee@linaro.org>

> + *

> + * This code is licensed under the GNU .

> + */

> +

> +#ifndef _ELF_TYPES_INC_H_

> +#define _ELF_TYPES_INC_H_

> +

> +#ifndef ELF_CLASS

> +#error you must define ELF_CLASS before including elf-types.inc.h

> +#else

> +

> +#if ELF_CLASS == ELFCLASS32

> +

> +#define elfhdr      elf32_hdr

> +#define elf_phdr    elf32_phdr

> +#define elf_note    elf32_note

> +#define elf_shdr    elf32_shdr

> +#define elf_sym     elf32_sym

> +#define elf_addr_t  Elf32_Off

> +#define elf_rela    elf32_rela

> +

> +#ifdef ELF_USES_RELOCA

> +# define ELF_RELOC  Elf32_Rela

> +#else

> +# define ELF_RELOC  Elf32_Rel

> +#endif

> +

> +#ifndef ElfW

> +#  define ElfW(x)   Elf32_ ## x

> +#  define ELFW(x)   ELF32_ ## x

> +#endif

> +

> +#else /* ELF_CLASS == ELFCLASS64 */

> +

> +#define elfhdr      elf64_hdr

> +#define elf_phdr    elf64_phdr

> +#define elf_note    elf64_note

> +#define elf_shdr    elf64_shdr

> +#define elf_sym     elf64_sym

> +#define elf_addr_t  Elf64_Off

> +#define elf_rela    elf64_rela

> +

> +#ifdef ELF_USES_RELOCA

> +# define ELF_RELOC  Elf64_Rela

> +#else

> +# define ELF_RELOC  Elf64_Rel

> +#endif

> +

> +#ifndef ElfW

> +#  define ElfW(x)   Elf64_ ## x

> +#  define ELFW(x)   ELF64_ ## x

> +#endif

> +

> +#endif /* ELF_CLASS == ELFCLASS64 */

> +#endif /* ELF_CLASS */

> +#else

> +#error elf-types.inc.h should not be included twice in one compilation unit

> +#endif /* _ELF_TYPES_INC_H_ */

> diff --git a/include/elf.h b/include/elf/elf.h

> similarity index 98%

> rename from include/elf.h

> rename to include/elf/elf.h

> index 3501e0c8d03..2e264c1a7a0 100644

> --- a/include/elf.h

> +++ b/include/elf/elf.h

> @@ -1696,49 +1696,7 @@ struct elf32_fdpic_loadmap {

>  };

>  

>  #ifdef ELF_CLASS

> -#if ELF_CLASS == ELFCLASS32

> -

> -#define elfhdr		elf32_hdr

> -#define elf_phdr	elf32_phdr

> -#define elf_note	elf32_note

> -#define elf_shdr	elf32_shdr

> -#define elf_sym		elf32_sym

> -#define elf_addr_t	Elf32_Off

> -#define elf_rela  elf32_rela

> -

> -#ifdef ELF_USES_RELOCA

> -# define ELF_RELOC      Elf32_Rela

> -#else

> -# define ELF_RELOC      Elf32_Rel

> -#endif

> -

> -#else

> -

> -#define elfhdr		elf64_hdr

> -#define elf_phdr	elf64_phdr

> -#define elf_note	elf64_note

> -#define elf_shdr	elf64_shdr

> -#define elf_sym		elf64_sym

> -#define elf_addr_t	Elf64_Off

> -#define elf_rela  elf64_rela

> -

> -#ifdef ELF_USES_RELOCA

> -# define ELF_RELOC      Elf64_Rela

> -#else

> -# define ELF_RELOC      Elf64_Rel

> -#endif

> -

> -#endif /* ELF_CLASS */

>  

> -#ifndef ElfW

> -# if ELF_CLASS == ELFCLASS32

> -#  define ElfW(x)  Elf32_ ## x

> -#  define ELFW(x)  ELF32_ ## x

> -# else

> -#  define ElfW(x)  Elf64_ ## x

> -#  define ELFW(x)  ELF64_ ## x

> -# endif

> -#endif

>  

>  #endif /* ELF_CLASS */

>  

> diff --git a/include/hw/core/generic-loader.h b/include/hw/core/generic-loader.h

> index 9ffce1c5a30..ca97affd8e1 100644

> --- a/include/hw/core/generic-loader.h

> +++ b/include/hw/core/generic-loader.h

> @@ -18,7 +18,7 @@

>  #ifndef GENERIC_LOADER_H

>  #define GENERIC_LOADER_H

>  

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "hw/qdev-core.h"

>  

>  typedef struct GenericLoaderState {

> diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c

> index 8d65de5b9f4..970fff8b1bc 100644

> --- a/linux-user/arm/cpu_loop.c

> +++ b/linux-user/arm/cpu_loop.c

> @@ -20,7 +20,7 @@

>  #include "qemu/osdep.h"

>  #include "qemu-common.h"

>  #include "qemu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "cpu_loop-common.h"

>  

>  #define get_user_code_u32(x, gaddr, env)                \

> diff --git a/linux-user/elfload.c b/linux-user/elfload.c

> index 3365e192eb3..59a0d21c6f1 100644

> --- a/linux-user/elfload.c

> +++ b/linux-user/elfload.c

> @@ -7,6 +7,7 @@

>  

>  #include "qemu.h"

>  #include "disas/disas.h"

> +#include "elf/elf.h"

>  #include "qemu/path.h"

>  #include "qemu/queue.h"

>  #include "qemu/guest-random.h"

> @@ -1317,8 +1318,6 @@ static inline void init_thread(struct target_pt_regs *regs,

>  #define ELF_DATA	ELFDATA2MSB

>  #define ELF_ARCH	EM_S390

>  

> -#include "elf.h"

> -

>  #define ELF_HWCAP get_elf_hwcap()

>  

>  #define GET_FEATURE(_feat, _hwcap) \

> @@ -1512,7 +1511,7 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs,

>  #define bswaptls(ptr) bswap32s(ptr)

>  #endif

>  

> -#include "elf.h"

> +#include "elf/elf-types.inc.h"

>  

>  struct exec

>  {

> diff --git a/linux-user/main.c b/linux-user/main.c

> index 47917bbb20f..c796a15700d 100644

> --- a/linux-user/main.c

> +++ b/linux-user/main.c

> @@ -40,7 +40,7 @@

>  #include "qemu/timer.h"

>  #include "qemu/envlist.h"

>  #include "qemu/guest-random.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "trace/control.h"

>  #include "target_elf.h"

>  #include "cpu_loop-common.h"

> diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c

> index 39915b3fde2..0d3f0738b58 100644

> --- a/linux-user/mips/cpu_loop.c

> +++ b/linux-user/mips/cpu_loop.c

> @@ -21,7 +21,7 @@

>  #include "qemu-common.h"

>  #include "qemu.h"

>  #include "cpu_loop-common.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "internal.h"

>  

>  # ifdef TARGET_ABI_MIPSO32

> diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c

> index 12aa3c0f16e..f9f5beef431 100644

> --- a/linux-user/riscv/cpu_loop.c

> +++ b/linux-user/riscv/cpu_loop.c

> @@ -22,7 +22,7 @@

>  #include "qemu/error-report.h"

>  #include "qemu.h"

>  #include "cpu_loop-common.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  void cpu_loop(CPURISCVState *env)

>  {

> diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c

> index 26a2c098687..c05a2845883 100644

> --- a/target/arm/arch_dump.c

> +++ b/target/arm/arch_dump.c

> @@ -20,7 +20,7 @@

>  

>  #include "qemu/osdep.h"

>  #include "cpu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/dump.h"

>  

>  /* struct user_pt_regs from arch/arm64/include/uapi/asm/ptrace.h */

> diff --git a/target/i386/arch_dump.c b/target/i386/arch_dump.c

> index 004141fc042..9eb1e2a8bcf 100644

> --- a/target/i386/arch_dump.c

> +++ b/target/i386/arch_dump.c

> @@ -14,7 +14,7 @@

>  #include "qemu/osdep.h"

>  #include "cpu.h"

>  #include "sysemu/dump.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/memory_mapping.h"

>  

>  #define ELF_NOTE_SIZE(hdr_size, name_size, desc_size)   \

> diff --git a/target/ppc/arch_dump.c b/target/ppc/arch_dump.c

> index 9ab04b2c38f..0e102be1ed5 100644

> --- a/target/ppc/arch_dump.c

> +++ b/target/ppc/arch_dump.c

> @@ -14,7 +14,7 @@

>  

>  #include "qemu/osdep.h"

>  #include "cpu.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/dump.h"

>  #include "sysemu/kvm.h"

>  #include "exec/helper-proto.h"

> diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c

> index 8c5b1f25cc9..c2e5f72ab0d 100644

> --- a/target/ppc/kvm.c

> +++ b/target/ppc/kvm.c

> @@ -48,7 +48,7 @@

>  #include "qemu/cutils.h"

>  #include "qemu/main-loop.h"

>  #include "qemu/mmap-alloc.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/kvm_int.h"

>  

>  #define PROC_DEVTREE_CPU      "/proc/device-tree/cpus/"

> diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c

> index 50fa0ae4b67..5fe9519d26c 100644

> --- a/target/s390x/arch_dump.c

> +++ b/target/s390x/arch_dump.c

> @@ -14,7 +14,7 @@

>  #include "qemu/osdep.h"

>  #include "cpu.h"

>  #include "internal.h"

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "sysemu/dump.h"

>  

>  

> diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c

> index 94d80d79d1f..e04f726e4a6 100644

> --- a/tcg/arm/tcg-target.inc.c

> +++ b/tcg/arm/tcg-target.inc.c

> @@ -22,7 +22,7 @@

>   * THE SOFTWARE.

>   */

>  

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "tcg-pool.inc.c"

>  

>  int arm_arch = __ARM_ARCH;

> diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c

> index 815edac077f..4886f8c0d39 100644

> --- a/tcg/ppc/tcg-target.inc.c

> +++ b/tcg/ppc/tcg-target.inc.c

> @@ -22,7 +22,7 @@

>   * THE SOFTWARE.

>   */

>  

> -#include "elf.h"

> +#include "elf/elf.h"

>  #include "tcg-pool.inc.c"

>  

>  #if defined _CALL_DARWIN || defined __APPLE__

> diff --git a/tcg/s390/tcg-target.inc.c b/tcg/s390/tcg-target.inc.c

> index 8aaa4cebe8d..82a81d2d94d 100644

> --- a/tcg/s390/tcg-target.inc.c

> +++ b/tcg/s390/tcg-target.inc.c

> @@ -30,7 +30,7 @@

>  #endif

>  

>  #include "tcg-pool.inc.c"

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  /* ??? The translation blocks produced by TCG are generally small enough to

>     be entirely reachable with a 16-bit displacement.  Leaving the option for

> diff --git a/tcg/tcg.c b/tcg/tcg.c

> index 16b2d0e0ece..b8e2c7956b7 100644

> --- a/tcg/tcg.c

> +++ b/tcg/tcg.c

> @@ -50,6 +50,8 @@

>  

>  #include "tcg-op.h"

>  

> +#include "elf/elf.h"

> +

>  #if UINTPTR_MAX == UINT32_MAX

>  # define ELF_CLASS  ELFCLASS32

>  #else

> @@ -61,7 +63,8 @@

>  # define ELF_DATA   ELFDATA2LSB

>  #endif

>  

> -#include "elf.h"

> +#include "elf/elf-types.inc.h"

> +

>  #include "exec/log.h"

>  #include "sysemu/sysemu.h"

>  

> diff --git a/util/getauxval.c b/util/getauxval.c

> index 36afdfb9e62..ee216c81c0b 100644

> --- a/util/getauxval.c

> +++ b/util/getauxval.c

> @@ -36,7 +36,7 @@ unsigned long qemu_getauxval(unsigned long key)

>      return getauxval(key);

>  }

>  #elif defined(__linux__)

> -#include "elf.h"

> +#include "elf/elf.h"

>  

>  /* Our elf.h doesn't contain Elf32_auxv_t and Elf64_auxv_t, which is ok because

>     that just makes it easier to define it properly for the host here.  */


-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson
BALATON Zoltan Sept. 11, 2019, 8:29 a.m. UTC | #2
On Tue, 10 Sep 2019, Alex Bennée wrote:
> diff --git a/include/elf/elf-types.inc.h b/include/elf/elf-types.inc.h

> new file mode 100644

> index 00000000000..35163adb2b5

> --- /dev/null

> +++ b/include/elf/elf-types.inc.h

> @@ -0,0 +1,63 @@

> +/*

> + * Elf Type Specialisation

> + *

> + * Copyright (c) 2019

> + * Written by Alex Bennée <alex.bennee@linaro.org>

> + *

> + * This code is licensed under the GNU .


You're missing end of licence sentence here. Also original file did not 
have copyright and licence header so you may want to fix that too or leave 
it out here as well for consistency,

> + */

> +

> +#ifndef _ELF_TYPES_INC_H_

> +#define _ELF_TYPES_INC_H_

> +

> +#ifndef ELF_CLASS

> +#error you must define ELF_CLASS before including elf-types.inc.h

> +#else

> +

> +#if ELF_CLASS == ELFCLASS32

> +

> +#define elfhdr      elf32_hdr

> +#define elf_phdr    elf32_phdr

> +#define elf_note    elf32_note

> +#define elf_shdr    elf32_shdr

> +#define elf_sym     elf32_sym

> +#define elf_addr_t  Elf32_Off

> +#define elf_rela    elf32_rela

> +

> +#ifdef ELF_USES_RELOCA

> +# define ELF_RELOC  Elf32_Rela

> +#else

> +# define ELF_RELOC  Elf32_Rel

> +#endif

> +

> +#ifndef ElfW

> +#  define ElfW(x)   Elf32_ ## x

> +#  define ELFW(x)   ELF32_ ## x

> +#endif

> +

> +#else /* ELF_CLASS == ELFCLASS64 */

> +

> +#define elfhdr      elf64_hdr

> +#define elf_phdr    elf64_phdr

> +#define elf_note    elf64_note

> +#define elf_shdr    elf64_shdr

> +#define elf_sym     elf64_sym

> +#define elf_addr_t  Elf64_Off

> +#define elf_rela    elf64_rela

> +

> +#ifdef ELF_USES_RELOCA

> +# define ELF_RELOC  Elf64_Rela

> +#else

> +# define ELF_RELOC  Elf64_Rel

> +#endif

> +

> +#ifndef ElfW

> +#  define ElfW(x)   Elf64_ ## x

> +#  define ELFW(x)   ELF64_ ## x

> +#endif

> +

> +#endif /* ELF_CLASS == ELFCLASS64 */

> +#endif /* ELF_CLASS */

> +#else

> +#error elf-types.inc.h should not be included twice in one compilation unit

> +#endif /* _ELF_TYPES_INC_H_ */

> diff --git a/include/elf.h b/include/elf/elf.h

> similarity index 98%

> rename from include/elf.h

> rename to include/elf/elf.h

> index 3501e0c8d03..2e264c1a7a0 100644

> --- a/include/elf.h

> +++ b/include/elf/elf.h

> @@ -1696,49 +1696,7 @@ struct elf32_fdpic_loadmap {

> };

>

> #ifdef ELF_CLASS

> -#if ELF_CLASS == ELFCLASS32

> -

> -#define elfhdr		elf32_hdr

> -#define elf_phdr	elf32_phdr

> -#define elf_note	elf32_note

> -#define elf_shdr	elf32_shdr

> -#define elf_sym		elf32_sym

> -#define elf_addr_t	Elf32_Off

> -#define elf_rela  elf32_rela

> -

> -#ifdef ELF_USES_RELOCA

> -# define ELF_RELOC      Elf32_Rela

> -#else

> -# define ELF_RELOC      Elf32_Rel

> -#endif

> -

> -#else

> -

> -#define elfhdr		elf64_hdr

> -#define elf_phdr	elf64_phdr

> -#define elf_note	elf64_note

> -#define elf_shdr	elf64_shdr

> -#define elf_sym		elf64_sym

> -#define elf_addr_t	Elf64_Off

> -#define elf_rela  elf64_rela

> -

> -#ifdef ELF_USES_RELOCA

> -# define ELF_RELOC      Elf64_Rela

> -#else

> -# define ELF_RELOC      Elf64_Rel

> -#endif

> -

> -#endif /* ELF_CLASS */

>

> -#ifndef ElfW

> -# if ELF_CLASS == ELFCLASS32

> -#  define ElfW(x)  Elf32_ ## x

> -#  define ELFW(x)  ELF32_ ## x

> -# else

> -#  define ElfW(x)  Elf64_ ## x

> -#  define ELFW(x)  ELF64_ ## x

> -# endif

> -#endif

>

> #endif /* ELF_CLASS */


Is there anything remaining in this #ifdef ELF_CLASS after this patch? If 
not why do you keep it?

Regards,
BALATON Zoltan
Alex Bennée Sept. 11, 2019, 9:19 a.m. UTC | #3
BALATON Zoltan <balaton@eik.bme.hu> writes:

> On Tue, 10 Sep 2019, Alex Bennée wrote:

>> diff --git a/include/elf/elf-types.inc.h b/include/elf/elf-types.inc.h

>> new file mode 100644

>> index 00000000000..35163adb2b5

>> --- /dev/null

>> +++ b/include/elf/elf-types.inc.h

>> @@ -0,0 +1,63 @@

>> +/*

>> + * Elf Type Specialisation

>> + *

>> + * Copyright (c) 2019

>> + * Written by Alex Bennée <alex.bennee@linaro.org>

>> + *

>> + * This code is licensed under the GNU .

>

> You're missing end of licence sentence here. Also original file did

> not have copyright and licence header so you may want to fix that too

> or leave it out here as well for consistency,


The fault of my header macro - I'll try and fix it up when it's
expanding on the QEMU tree.

I'm going to assume that is should be the whole project license (GPL
v2). Most of the original file dates from 2003 and is Frabrice's commit
with the occasional commit mentioning be copied from Linux.

>

>> + */

>> +

>> +#ifndef _ELF_TYPES_INC_H_

>> +#define _ELF_TYPES_INC_H_

>> +

>> +#ifndef ELF_CLASS

>> +#error you must define ELF_CLASS before including elf-types.inc.h

>> +#else

>> +

>> +#if ELF_CLASS == ELFCLASS32

>> +

>> +#define elfhdr      elf32_hdr

>> +#define elf_phdr    elf32_phdr

>> +#define elf_note    elf32_note

>> +#define elf_shdr    elf32_shdr

>> +#define elf_sym     elf32_sym

>> +#define elf_addr_t  Elf32_Off

>> +#define elf_rela    elf32_rela

>> +

>> +#ifdef ELF_USES_RELOCA

>> +# define ELF_RELOC  Elf32_Rela

>> +#else

>> +# define ELF_RELOC  Elf32_Rel

>> +#endif

>> +

>> +#ifndef ElfW

>> +#  define ElfW(x)   Elf32_ ## x

>> +#  define ELFW(x)   ELF32_ ## x

>> +#endif

>> +

>> +#else /* ELF_CLASS == ELFCLASS64 */

>> +

>> +#define elfhdr      elf64_hdr

>> +#define elf_phdr    elf64_phdr

>> +#define elf_note    elf64_note

>> +#define elf_shdr    elf64_shdr

>> +#define elf_sym     elf64_sym

>> +#define elf_addr_t  Elf64_Off

>> +#define elf_rela    elf64_rela

>> +

>> +#ifdef ELF_USES_RELOCA

>> +# define ELF_RELOC  Elf64_Rela

>> +#else

>> +# define ELF_RELOC  Elf64_Rel

>> +#endif

>> +

>> +#ifndef ElfW

>> +#  define ElfW(x)   Elf64_ ## x

>> +#  define ELFW(x)   ELF64_ ## x

>> +#endif

>> +

>> +#endif /* ELF_CLASS == ELFCLASS64 */

>> +#endif /* ELF_CLASS */

>> +#else

>> +#error elf-types.inc.h should not be included twice in one compilation unit

>> +#endif /* _ELF_TYPES_INC_H_ */

>> diff --git a/include/elf.h b/include/elf/elf.h

>> similarity index 98%

>> rename from include/elf.h

>> rename to include/elf/elf.h

>> index 3501e0c8d03..2e264c1a7a0 100644

>> --- a/include/elf.h

>> +++ b/include/elf/elf.h

>> @@ -1696,49 +1696,7 @@ struct elf32_fdpic_loadmap {

>> };

>>

>> #ifdef ELF_CLASS

>> -#if ELF_CLASS == ELFCLASS32

>> -

>> -#define elfhdr		elf32_hdr

>> -#define elf_phdr	elf32_phdr

>> -#define elf_note	elf32_note

>> -#define elf_shdr	elf32_shdr

>> -#define elf_sym		elf32_sym

>> -#define elf_addr_t	Elf32_Off

>> -#define elf_rela  elf32_rela

>> -

>> -#ifdef ELF_USES_RELOCA

>> -# define ELF_RELOC      Elf32_Rela

>> -#else

>> -# define ELF_RELOC      Elf32_Rel

>> -#endif

>> -

>> -#else

>> -

>> -#define elfhdr		elf64_hdr

>> -#define elf_phdr	elf64_phdr

>> -#define elf_note	elf64_note

>> -#define elf_shdr	elf64_shdr

>> -#define elf_sym		elf64_sym

>> -#define elf_addr_t	Elf64_Off

>> -#define elf_rela  elf64_rela

>> -

>> -#ifdef ELF_USES_RELOCA

>> -# define ELF_RELOC      Elf64_Rela

>> -#else

>> -# define ELF_RELOC      Elf64_Rel

>> -#endif

>> -

>> -#endif /* ELF_CLASS */

>>

>> -#ifndef ElfW

>> -# if ELF_CLASS == ELFCLASS32

>> -#  define ElfW(x)  Elf32_ ## x

>> -#  define ELFW(x)  ELF32_ ## x

>> -# else

>> -#  define ElfW(x)  Elf64_ ## x

>> -#  define ELFW(x)  ELF64_ ## x

>> -# endif

>> -#endif

>>

>> #endif /* ELF_CLASS */

>

> Is there anything remaining in this #ifdef ELF_CLASS after this patch?

> If not why do you keep it?

>

> Regards,

> BALATON Zoltan



--
Alex Bennée
Richard Henderson Sept. 14, 2019, 6:15 p.m. UTC | #4
On 9/10/19 3:34 PM, Alex Bennée wrote:
> Most of the users of elf.h just want the standard Elf definitions. The

> couple that want more than that want an expansion based on ELF_CLASS

> which can be used for size agnostic code. The later is moved into

> elf/elf-types.inc.h to make it clearer what it is for. While doing

> that I also removed the whitespace damage.

> 

> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

> ---


This patch is hard to follow because it moves and splits at the same time.

With this patch split into two,
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>



r~
Laurent Vivier Oct. 21, 2019, 1:53 p.m. UTC | #5
Le 10/09/2019 à 21:34, Alex Bennée a écrit :
> Most of the users of elf.h just want the standard Elf definitions. The

> couple that want more than that want an expansion based on ELF_CLASS

> which can be used for size agnostic code. The later is moved into

> elf/elf-types.inc.h to make it clearer what it is for. While doing

> that I also removed the whitespace damage.

> 

> Signed-off-by: Alex Bennée <alex.bennee@linaro.org>

> ---

>  bsd-user/elfload.c               |  2 +-

>  contrib/elf2dmp/qemu_elf.h       |  2 +-

>  disas.c                          |  2 +-

>  dump/dump.c                      |  2 +-

>  dump/win_dump.c                  |  2 +-

>  hw/alpha/dp264.c                 |  2 +-

>  hw/arm/armv7m.c                  |  2 +-

>  hw/arm/boot.c                    |  2 +-

>  hw/core/loader.c                 |  3 +-

>  hw/cris/axis_dev88.c             |  2 +-

>  hw/cris/boot.c                   |  2 +-

>  hw/hppa/machine.c                |  2 +-

>  hw/i386/multiboot.c              |  2 +-

>  hw/i386/pc.c                     |  2 +-

>  hw/lm32/lm32_boards.c            |  2 +-

>  hw/lm32/milkymist.c              |  2 +-

>  hw/m68k/an5206.c                 |  2 +-

>  hw/m68k/mcf5208.c                |  2 +-

>  hw/microblaze/boot.c             |  2 +-

>  hw/mips/mips_fulong2e.c          |  2 +-

>  hw/mips/mips_malta.c             |  2 +-

>  hw/mips/mips_mipssim.c           |  2 +-

>  hw/mips/mips_r4k.c               |  2 +-

>  hw/moxie/moxiesim.c              |  2 +-

>  hw/nios2/boot.c                  |  2 +-

>  hw/openrisc/openrisc_sim.c       |  2 +-

>  hw/pci-host/prep.c               |  2 +-

>  hw/ppc/e500.c                    |  2 +-

>  hw/ppc/mac_newworld.c            |  2 +-

>  hw/ppc/mac_oldworld.c            |  2 +-

>  hw/ppc/ppc440_bamboo.c           |  2 +-

>  hw/ppc/prep.c                    |  2 +-

>  hw/ppc/sam460ex.c                |  2 +-

>  hw/ppc/spapr.c                   |  2 +-

>  hw/ppc/spapr_vio.c               |  2 +-

>  hw/ppc/virtex_ml507.c            |  2 +-

>  hw/riscv/boot.c                  |  2 +-

>  hw/s390x/ipl.c                   |  2 +-

>  hw/sparc/leon3.c                 |  2 +-

>  hw/sparc/sun4m.c                 |  2 +-

>  hw/sparc64/sun4u.c               |  2 +-

>  hw/tricore/tricore_testboard.c   |  2 +-

>  hw/xtensa/sim.c                  |  2 +-

>  hw/xtensa/xtfpga.c               |  2 +-

>  include/elf/elf-types.inc.h      | 63 ++++++++++++++++++++++++++++++++

>  include/{ => elf}/elf.h          | 42 ---------------------

>  include/hw/core/generic-loader.h |  2 +-

>  linux-user/arm/cpu_loop.c        |  2 +-

>  linux-user/elfload.c             |  5 +--

>  linux-user/main.c                |  2 +-

>  linux-user/mips/cpu_loop.c       |  2 +-

>  linux-user/riscv/cpu_loop.c      |  2 +-

>  target/arm/arch_dump.c           |  2 +-

>  target/i386/arch_dump.c          |  2 +-

>  target/ppc/arch_dump.c           |  2 +-

>  target/ppc/kvm.c                 |  2 +-

>  target/s390x/arch_dump.c         |  2 +-

>  tcg/arm/tcg-target.inc.c         |  2 +-

>  tcg/ppc/tcg-target.inc.c         |  2 +-

>  tcg/s390/tcg-target.inc.c        |  2 +-

>  tcg/tcg.c                        |  5 ++-

>  util/getauxval.c                 |  2 +-

>  62 files changed, 128 insertions(+), 104 deletions(-)

>  create mode 100644 include/elf/elf-types.inc.h


The patch looks good, but why did you call the file "elf-types.inc.h"
and not "elf-types.h"?

Reviewed-by: Laurent Vivier <laurent@vivier.eu>


Thanks,
LAurent
Peter Maydell Oct. 21, 2019, 2:04 p.m. UTC | #6
On Mon, 21 Oct 2019 at 14:54, Laurent Vivier <laurent@vivier.eu> wrote:
>

> Le 10/09/2019 à 21:34, Alex Bennée a écrit :

> > Most of the users of elf.h just want the standard Elf definitions. The

> > couple that want more than that want an expansion based on ELF_CLASS

> > which can be used for size agnostic code. The later is moved into

> > elf/elf-types.inc.h to make it clearer what it is for. While doing

> > that I also removed the whitespace damage.

> >


> The patch looks good, but why did you call the file "elf-types.inc.h"

> and not "elf-types.h"?


This is our usual convention for files (well, that or .inc.c)
which get included multiple times with different preprocessor
defines to specify how they behave, i.e. which aren't standard
"simple header with multiple-inclusion protection guards".

thanks
-- PMM
diff mbox series

Patch

diff --git a/bsd-user/elfload.c b/bsd-user/elfload.c
index 32378af7b2e..321ee98b86b 100644
--- a/bsd-user/elfload.c
+++ b/bsd-user/elfload.c
@@ -509,7 +509,7 @@  static inline void init_thread(struct target_pt_regs *regs, struct image_info *i
 #define bswaptls(ptr) bswap32s(ptr)
 #endif
 
-#include "elf.h"
+#include "elf/elf.h"
 
 struct exec
 {
diff --git a/contrib/elf2dmp/qemu_elf.h b/contrib/elf2dmp/qemu_elf.h
index b2f0d9cbc9b..060d148d7f0 100644
--- a/contrib/elf2dmp/qemu_elf.h
+++ b/contrib/elf2dmp/qemu_elf.h
@@ -7,7 +7,7 @@ 
 #ifndef ELF2DMP_QEMU_ELF_H
 #define ELF2DMP_QEMU_ELF_H
 
-#include "elf.h"
+#include "elf/elf.h"
 
 typedef struct QEMUCPUSegment {
     uint32_t selector;
diff --git a/disas.c b/disas.c
index 3e2bfa572b1..6f2370cfda7 100644
--- a/disas.c
+++ b/disas.c
@@ -1,7 +1,7 @@ 
 /* General "disassemble this chunk" code.  Used for debugging. */
 #include "qemu/osdep.h"
 #include "disas/dis-asm.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/qemu-print.h"
 
 #include "cpu.h"
diff --git a/dump/dump.c b/dump/dump.c
index 6fb6e1245ad..6b084a21a2a 100644
--- a/dump/dump.c
+++ b/dump/dump.c
@@ -14,7 +14,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "qemu/cutils.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "cpu.h"
 #include "exec/hwaddr.h"
 #include "monitor/monitor.h"
diff --git a/dump/win_dump.c b/dump/win_dump.c
index eda2a489742..8232c3cb6b3 100644
--- a/dump/win_dump.c
+++ b/dump/win_dump.c
@@ -11,7 +11,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "qemu/cutils.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "cpu.h"
 #include "exec/hwaddr.h"
 #include "monitor/monitor.h"
diff --git a/hw/alpha/dp264.c b/hw/alpha/dp264.c
index 51feee85581..87e5c77c69c 100644
--- a/hw/alpha/dp264.c
+++ b/hw/alpha/dp264.c
@@ -9,7 +9,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "cpu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/loader.h"
 #include "alpha_sys.h"
 #include "qemu/error-report.h"
diff --git a/hw/arm/armv7m.c b/hw/arm/armv7m.c
index 7a3c48f0026..559586fa527 100644
--- a/hw/arm/armv7m.c
+++ b/hw/arm/armv7m.c
@@ -15,7 +15,7 @@ 
 #include "hw/arm/boot.h"
 #include "hw/loader.h"
 #include "hw/qdev-properties.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/qtest.h"
 #include "sysemu/reset.h"
 #include "qemu/error-report.h"
diff --git a/hw/arm/boot.c b/hw/arm/boot.c
index bf97ef3e339..7818e5b5518 100644
--- a/hw/arm/boot.c
+++ b/hw/arm/boot.c
@@ -20,7 +20,7 @@ 
 #include "hw/boards.h"
 #include "sysemu/reset.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/device_tree.h"
 #include "qemu/config-file.h"
 #include "qemu/option.h"
diff --git a/hw/core/loader.c b/hw/core/loader.c
index 32f7cc7c33c..e0c6563e643 100644
--- a/hw/core/loader.c
+++ b/hw/core/loader.c
@@ -59,6 +59,7 @@ 
 #include "hw/boards.h"
 #include "qemu/cutils.h"
 #include "sysemu/runstate.h"
+#include "elf/elf.h"
 
 #include <zlib.h>
 
@@ -295,7 +296,7 @@  static void *load_at(int fd, off_t offset, size_t size)
 #endif
 
 #define ELF_CLASS   ELFCLASS32
-#include "elf.h"
+#include "elf/elf-types.inc.h"
 
 #define SZ		32
 #define elf_word        uint32_t
diff --git a/hw/cris/axis_dev88.c b/hw/cris/axis_dev88.c
index 940c7dd1226..31dc391a637 100644
--- a/hw/cris/axis_dev88.c
+++ b/hw/cris/axis_dev88.c
@@ -32,7 +32,7 @@ 
 #include "hw/boards.h"
 #include "hw/cris/etraxfs.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "boot.h"
 #include "exec/address-spaces.h"
 #include "sysemu/qtest.h"
diff --git a/hw/cris/boot.c b/hw/cris/boot.c
index 2d2cc0c7a53..0b8008ca0b2 100644
--- a/hw/cris/boot.c
+++ b/hw/cris/boot.c
@@ -25,7 +25,7 @@ 
 #include "qemu/osdep.h"
 #include "cpu.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "boot.h"
 #include "qemu/cutils.h"
 #include "sysemu/reset.h"
diff --git a/hw/hppa/machine.c b/hw/hppa/machine.c
index 2736ce835ee..3c121f1a645 100644
--- a/hw/hppa/machine.c
+++ b/hw/hppa/machine.c
@@ -6,7 +6,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "cpu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/loader.h"
 #include "hw/boards.h"
 #include "qemu/error-report.h"
diff --git a/hw/i386/multiboot.c b/hw/i386/multiboot.c
index 9a59f954972..54a7e5f048e 100644
--- a/hw/i386/multiboot.c
+++ b/hw/i386/multiboot.c
@@ -28,7 +28,7 @@ 
 #include "hw/nvram/fw_cfg.h"
 #include "multiboot.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/sysemu.h"
 #include "qemu/error-report.h"
 
diff --git a/hw/i386/pc.c b/hw/i386/pc.c
index bad866fe44f..e84710a944a 100644
--- a/hw/i386/pc.c
+++ b/hw/i386/pc.c
@@ -39,7 +39,7 @@ 
 #include "hw/timer/hpet.h"
 #include "hw/firmware/smbios.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "migration/vmstate.h"
 #include "multiboot.h"
 #include "hw/timer/mc146818rtc.h"
diff --git a/hw/lm32/lm32_boards.c b/hw/lm32/lm32_boards.c
index 5ae308bfcfb..12c60ad9b74 100644
--- a/hw/lm32/lm32_boards.c
+++ b/hw/lm32/lm32_boards.c
@@ -26,7 +26,7 @@ 
 #include "hw/block/flash.h"
 #include "hw/boards.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "lm32_hwsetup.h"
 #include "lm32.h"
 #include "exec/address-spaces.h"
diff --git a/hw/lm32/milkymist.c b/hw/lm32/milkymist.c
index 460d322de57..9f3a2f2ff5f 100644
--- a/hw/lm32/milkymist.c
+++ b/hw/lm32/milkymist.c
@@ -31,7 +31,7 @@ 
 #include "hw/boards.h"
 #include "hw/loader.h"
 #include "hw/qdev-properties.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "milkymist-hw.h"
 #include "hw/display/milkymist_tmu2.h"
 #include "lm32.h"
diff --git a/hw/m68k/an5206.c b/hw/m68k/an5206.c
index 54ccbe1a822..12664b872bc 100644
--- a/hw/m68k/an5206.c
+++ b/hw/m68k/an5206.c
@@ -12,7 +12,7 @@ 
 #include "hw/m68k/mcf.h"
 #include "hw/boards.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/address-spaces.h"
 #include "qemu/error-report.h"
 #include "sysemu/qtest.h"
diff --git a/hw/m68k/mcf5208.c b/hw/m68k/mcf5208.c
index 012710d057d..42d79bd2f03 100644
--- a/hw/m68k/mcf5208.c
+++ b/hw/m68k/mcf5208.c
@@ -25,7 +25,7 @@ 
 #include "hw/boards.h"
 #include "hw/loader.h"
 #include "hw/sysbus.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/address-spaces.h"
 
 #define SYS_FREQ 166666666
diff --git a/hw/microblaze/boot.c b/hw/microblaze/boot.c
index bade4d22c00..0c1020cd373 100644
--- a/hw/microblaze/boot.c
+++ b/hw/microblaze/boot.c
@@ -34,7 +34,7 @@ 
 #include "sysemu/reset.h"
 #include "sysemu/sysemu.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/cutils.h"
 
 #include "boot.h"
diff --git a/hw/mips/mips_fulong2e.c b/hw/mips/mips_fulong2e.c
index cf537dd7e63..4ba670cc909 100644
--- a/hw/mips/mips_fulong2e.c
+++ b/hw/mips/mips_fulong2e.c
@@ -37,7 +37,7 @@ 
 #include "qemu/log.h"
 #include "hw/loader.h"
 #include "hw/ide.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/isa/vt82c686.h"
 #include "hw/timer/mc146818rtc.h"
 #include "hw/timer/i8254.h"
diff --git a/hw/mips/mips_malta.c b/hw/mips/mips_malta.c
index 4d9c64b36ab..1c841298363 100644
--- a/hw/mips/mips_malta.c
+++ b/hw/mips/mips_malta.c
@@ -44,7 +44,7 @@ 
 #include "hw/ide.h"
 #include "hw/irq.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/timer/mc146818rtc.h"
 #include "hw/timer/i8254.h"
 #include "exec/address-spaces.h"
diff --git a/hw/mips/mips_mipssim.c b/hw/mips/mips_mipssim.c
index 282bbecb24e..d6acd53b3e3 100644
--- a/hw/mips/mips_mipssim.c
+++ b/hw/mips/mips_mipssim.c
@@ -38,7 +38,7 @@ 
 #include "hw/boards.h"
 #include "hw/mips/bios.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/sysbus.h"
 #include "exec/address-spaces.h"
 #include "qemu/error-report.h"
diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c
index bc0be265441..7fc2fc51fee 100644
--- a/hw/mips/mips_r4k.c
+++ b/hw/mips/mips_r4k.c
@@ -27,7 +27,7 @@ 
 #include "hw/mips/bios.h"
 #include "hw/ide.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/timer/mc146818rtc.h"
 #include "hw/input/i8042.h"
 #include "hw/timer/i8254.h"
diff --git a/hw/moxie/moxiesim.c b/hw/moxie/moxiesim.c
index 57af1b48912..bc1cc8b0bf8 100644
--- a/hw/moxie/moxiesim.c
+++ b/hw/moxie/moxiesim.c
@@ -37,7 +37,7 @@ 
 #include "hw/loader.h"
 #include "hw/char/serial.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
+#include "elf/elf.h"
 
 #define PHYS_MEM_BASE 0x80000000
 #define FIRMWARE_BASE 0x1000
diff --git a/hw/nios2/boot.c b/hw/nios2/boot.c
index d78bc9ed0e2..ec1eb15bcaa 100644
--- a/hw/nios2/boot.c
+++ b/hw/nios2/boot.c
@@ -39,7 +39,7 @@ 
 #include "sysemu/reset.h"
 #include "sysemu/sysemu.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 
 #include "boot.h"
 
diff --git a/hw/openrisc/openrisc_sim.c b/hw/openrisc/openrisc_sim.c
index 79e70493fc7..f21a2962a90 100644
--- a/hw/openrisc/openrisc_sim.c
+++ b/hw/openrisc/openrisc_sim.c
@@ -24,7 +24,7 @@ 
 #include "cpu.h"
 #include "hw/irq.h"
 #include "hw/boards.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/char/serial.h"
 #include "net/net.h"
 #include "hw/loader.h"
diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c
index 85d7ba90374..9568746d8e2 100644
--- a/hw/pci-host/prep.c
+++ b/hw/pci-host/prep.c
@@ -37,7 +37,7 @@ 
 #include "hw/loader.h"
 #include "hw/or-irq.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
+#include "elf/elf.h"
 
 #define TYPE_RAVEN_PCI_DEVICE "raven"
 #define TYPE_RAVEN_PCI_HOST_BRIDGE "raven-pcihost"
diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 91cd4c26f91..add6277ad6c 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -36,7 +36,7 @@ 
 #include "hw/ppc/ppc.h"
 #include "hw/qdev-properties.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/sysbus.h"
 #include "exec/address-spaces.h"
 #include "qemu/host-utils.h"
diff --git a/hw/ppc/mac_newworld.c b/hw/ppc/mac_newworld.c
index c5bbcc74335..50babbb7a67 100644
--- a/hw/ppc/mac_newworld.c
+++ b/hw/ppc/mac_newworld.c
@@ -65,7 +65,7 @@ 
 #include "hw/ide.h"
 #include "hw/loader.h"
 #include "hw/fw-path-provider.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/error-report.h"
 #include "sysemu/kvm.h"
 #include "sysemu/reset.h"
diff --git a/hw/ppc/mac_oldworld.c b/hw/ppc/mac_oldworld.c
index 0fa680b7499..64fe33cd1f3 100644
--- a/hw/ppc/mac_oldworld.c
+++ b/hw/ppc/mac_oldworld.c
@@ -44,7 +44,7 @@ 
 #include "hw/ide.h"
 #include "hw/loader.h"
 #include "hw/fw-path-provider.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/error-report.h"
 #include "sysemu/kvm.h"
 #include "sysemu/reset.h"
diff --git a/hw/ppc/ppc440_bamboo.c b/hw/ppc/ppc440_bamboo.c
index 4d95c0f8a88..15f39b332a8 100644
--- a/hw/ppc/ppc440_bamboo.c
+++ b/hw/ppc/ppc440_bamboo.c
@@ -23,7 +23,7 @@ 
 #include "kvm_ppc.h"
 #include "sysemu/device_tree.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/address-spaces.h"
 #include "hw/char/serial.h"
 #include "hw/ppc/ppc.h"
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index 4f3c6bf1901..8bd3209dec7 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -49,7 +49,7 @@ 
 #include "sysemu/reset.h"
 #include "exec/address-spaces.h"
 #include "trace.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/units.h"
 #include "kvm_ppc.h"
 
diff --git a/hw/ppc/sam460ex.c b/hw/ppc/sam460ex.c
index 437e214210b..982b80e5bad 100644
--- a/hw/ppc/sam460ex.c
+++ b/hw/ppc/sam460ex.c
@@ -22,7 +22,7 @@ 
 #include "sysemu/device_tree.h"
 #include "sysemu/block-backend.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/address-spaces.h"
 #include "exec/memory.h"
 #include "ppc440.h"
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 222a325056c..57f8041ec81 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -36,7 +36,7 @@ 
 #include "sysemu/runstate.h"
 #include "qemu/log.h"
 #include "hw/fw-path-provider.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "net/net.h"
 #include "sysemu/device_tree.h"
 #include "sysemu/cpus.h"
diff --git a/hw/ppc/spapr_vio.c b/hw/ppc/spapr_vio.c
index 0803649658f..6d90322db0b 100644
--- a/hw/ppc/spapr_vio.c
+++ b/hw/ppc/spapr_vio.c
@@ -26,7 +26,7 @@ 
 #include "hw/irq.h"
 #include "qemu/log.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/sysbus.h"
 #include "sysemu/kvm.h"
 #include "sysemu/device_tree.h"
diff --git a/hw/ppc/virtex_ml507.c b/hw/ppc/virtex_ml507.c
index 68625522d8a..ede7da4bbc2 100644
--- a/hw/ppc/virtex_ml507.c
+++ b/hw/ppc/virtex_ml507.c
@@ -35,7 +35,7 @@ 
 #include "hw/boards.h"
 #include "sysemu/device_tree.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "qemu/error-report.h"
 #include "qemu/log.h"
 #include "qemu/option.h"
diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index 4c63b5cf8a8..9a7b4a5ca87 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -25,7 +25,7 @@ 
 #include "hw/boards.h"
 #include "hw/loader.h"
 #include "hw/riscv/boot.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/qtest.h"
 
 #if defined(TARGET_RISCV32)
diff --git a/hw/s390x/ipl.c b/hw/s390x/ipl.c
index ca544d64c5e..cf4e06b633e 100644
--- a/hw/s390x/ipl.c
+++ b/hw/s390x/ipl.c
@@ -19,7 +19,7 @@ 
 #include "sysemu/sysemu.h"
 #include "sysemu/tcg.h"
 #include "cpu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/loader.h"
 #include "hw/qdev-properties.h"
 #include "hw/boards.h"
diff --git a/hw/sparc/leon3.c b/hw/sparc/leon3.c
index c5f1b1ee72e..735a823fd56 100644
--- a/hw/sparc/leon3.c
+++ b/hw/sparc/leon3.c
@@ -37,7 +37,7 @@ 
 #include "sysemu/reset.h"
 #include "hw/boards.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "trace.h"
 #include "exec/address-spaces.h"
 
diff --git a/hw/sparc/sun4m.c b/hw/sparc/sun4m.c
index 6c5a17a0205..d542a6c203c 100644
--- a/hw/sparc/sun4m.c
+++ b/hw/sparc/sun4m.c
@@ -49,7 +49,7 @@ 
 #include "hw/empty_slot.h"
 #include "hw/irq.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "trace.h"
 
 /*
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index 1ded2a4c9ab..79b15c8aec3 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -54,7 +54,7 @@ 
 #include "hw/ide/pci.h"
 #include "hw/loader.h"
 #include "hw/fw-path-provider.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "trace.h"
 
 #define KERNEL_LOAD_ADDR     0x00404000
diff --git a/hw/tricore/tricore_testboard.c b/hw/tricore/tricore_testboard.c
index aef3289f8c3..84e8d7b429f 100644
--- a/hw/tricore/tricore_testboard.c
+++ b/hw/tricore/tricore_testboard.c
@@ -26,7 +26,7 @@ 
 #include "hw/boards.h"
 #include "hw/loader.h"
 #include "exec/address-spaces.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/tricore/tricore.h"
 #include "qemu/error-report.h"
 
diff --git a/hw/xtensa/sim.c b/hw/xtensa/sim.c
index 981dbb7bbeb..f8d96fc452c 100644
--- a/hw/xtensa/sim.c
+++ b/hw/xtensa/sim.c
@@ -32,7 +32,7 @@ 
 #include "sysemu/sysemu.h"
 #include "hw/boards.h"
 #include "hw/loader.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/memory.h"
 #include "exec/address-spaces.h"
 #include "qemu/error-report.h"
diff --git a/hw/xtensa/xtfpga.c b/hw/xtensa/xtfpga.c
index 8220c7a3794..5e3ed738fa8 100644
--- a/hw/xtensa/xtfpga.c
+++ b/hw/xtensa/xtfpga.c
@@ -33,7 +33,7 @@ 
 #include "hw/boards.h"
 #include "hw/loader.h"
 #include "hw/qdev-properties.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "exec/memory.h"
 #include "exec/address-spaces.h"
 #include "hw/char/serial.h"
diff --git a/include/elf/elf-types.inc.h b/include/elf/elf-types.inc.h
new file mode 100644
index 00000000000..35163adb2b5
--- /dev/null
+++ b/include/elf/elf-types.inc.h
@@ -0,0 +1,63 @@ 
+/*
+ * Elf Type Specialisation
+ *
+ * Copyright (c) 2019
+ * Written by Alex Bennée <alex.bennee@linaro.org>
+ *
+ * This code is licensed under the GNU .
+ */
+
+#ifndef _ELF_TYPES_INC_H_
+#define _ELF_TYPES_INC_H_
+
+#ifndef ELF_CLASS
+#error you must define ELF_CLASS before including elf-types.inc.h
+#else
+
+#if ELF_CLASS == ELFCLASS32
+
+#define elfhdr      elf32_hdr
+#define elf_phdr    elf32_phdr
+#define elf_note    elf32_note
+#define elf_shdr    elf32_shdr
+#define elf_sym     elf32_sym
+#define elf_addr_t  Elf32_Off
+#define elf_rela    elf32_rela
+
+#ifdef ELF_USES_RELOCA
+# define ELF_RELOC  Elf32_Rela
+#else
+# define ELF_RELOC  Elf32_Rel
+#endif
+
+#ifndef ElfW
+#  define ElfW(x)   Elf32_ ## x
+#  define ELFW(x)   ELF32_ ## x
+#endif
+
+#else /* ELF_CLASS == ELFCLASS64 */
+
+#define elfhdr      elf64_hdr
+#define elf_phdr    elf64_phdr
+#define elf_note    elf64_note
+#define elf_shdr    elf64_shdr
+#define elf_sym     elf64_sym
+#define elf_addr_t  Elf64_Off
+#define elf_rela    elf64_rela
+
+#ifdef ELF_USES_RELOCA
+# define ELF_RELOC  Elf64_Rela
+#else
+# define ELF_RELOC  Elf64_Rel
+#endif
+
+#ifndef ElfW
+#  define ElfW(x)   Elf64_ ## x
+#  define ELFW(x)   ELF64_ ## x
+#endif
+
+#endif /* ELF_CLASS == ELFCLASS64 */
+#endif /* ELF_CLASS */
+#else
+#error elf-types.inc.h should not be included twice in one compilation unit
+#endif /* _ELF_TYPES_INC_H_ */
diff --git a/include/elf.h b/include/elf/elf.h
similarity index 98%
rename from include/elf.h
rename to include/elf/elf.h
index 3501e0c8d03..2e264c1a7a0 100644
--- a/include/elf.h
+++ b/include/elf/elf.h
@@ -1696,49 +1696,7 @@  struct elf32_fdpic_loadmap {
 };
 
 #ifdef ELF_CLASS
-#if ELF_CLASS == ELFCLASS32
-
-#define elfhdr		elf32_hdr
-#define elf_phdr	elf32_phdr
-#define elf_note	elf32_note
-#define elf_shdr	elf32_shdr
-#define elf_sym		elf32_sym
-#define elf_addr_t	Elf32_Off
-#define elf_rela  elf32_rela
-
-#ifdef ELF_USES_RELOCA
-# define ELF_RELOC      Elf32_Rela
-#else
-# define ELF_RELOC      Elf32_Rel
-#endif
-
-#else
-
-#define elfhdr		elf64_hdr
-#define elf_phdr	elf64_phdr
-#define elf_note	elf64_note
-#define elf_shdr	elf64_shdr
-#define elf_sym		elf64_sym
-#define elf_addr_t	Elf64_Off
-#define elf_rela  elf64_rela
-
-#ifdef ELF_USES_RELOCA
-# define ELF_RELOC      Elf64_Rela
-#else
-# define ELF_RELOC      Elf64_Rel
-#endif
-
-#endif /* ELF_CLASS */
 
-#ifndef ElfW
-# if ELF_CLASS == ELFCLASS32
-#  define ElfW(x)  Elf32_ ## x
-#  define ELFW(x)  ELF32_ ## x
-# else
-#  define ElfW(x)  Elf64_ ## x
-#  define ELFW(x)  ELF64_ ## x
-# endif
-#endif
 
 #endif /* ELF_CLASS */
 
diff --git a/include/hw/core/generic-loader.h b/include/hw/core/generic-loader.h
index 9ffce1c5a30..ca97affd8e1 100644
--- a/include/hw/core/generic-loader.h
+++ b/include/hw/core/generic-loader.h
@@ -18,7 +18,7 @@ 
 #ifndef GENERIC_LOADER_H
 #define GENERIC_LOADER_H
 
-#include "elf.h"
+#include "elf/elf.h"
 #include "hw/qdev-core.h"
 
 typedef struct GenericLoaderState {
diff --git a/linux-user/arm/cpu_loop.c b/linux-user/arm/cpu_loop.c
index 8d65de5b9f4..970fff8b1bc 100644
--- a/linux-user/arm/cpu_loop.c
+++ b/linux-user/arm/cpu_loop.c
@@ -20,7 +20,7 @@ 
 #include "qemu/osdep.h"
 #include "qemu-common.h"
 #include "qemu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "cpu_loop-common.h"
 
 #define get_user_code_u32(x, gaddr, env)                \
diff --git a/linux-user/elfload.c b/linux-user/elfload.c
index 3365e192eb3..59a0d21c6f1 100644
--- a/linux-user/elfload.c
+++ b/linux-user/elfload.c
@@ -7,6 +7,7 @@ 
 
 #include "qemu.h"
 #include "disas/disas.h"
+#include "elf/elf.h"
 #include "qemu/path.h"
 #include "qemu/queue.h"
 #include "qemu/guest-random.h"
@@ -1317,8 +1318,6 @@  static inline void init_thread(struct target_pt_regs *regs,
 #define ELF_DATA	ELFDATA2MSB
 #define ELF_ARCH	EM_S390
 
-#include "elf.h"
-
 #define ELF_HWCAP get_elf_hwcap()
 
 #define GET_FEATURE(_feat, _hwcap) \
@@ -1512,7 +1511,7 @@  static void elf_core_copy_regs(target_elf_gregset_t *regs,
 #define bswaptls(ptr) bswap32s(ptr)
 #endif
 
-#include "elf.h"
+#include "elf/elf-types.inc.h"
 
 struct exec
 {
diff --git a/linux-user/main.c b/linux-user/main.c
index 47917bbb20f..c796a15700d 100644
--- a/linux-user/main.c
+++ b/linux-user/main.c
@@ -40,7 +40,7 @@ 
 #include "qemu/timer.h"
 #include "qemu/envlist.h"
 #include "qemu/guest-random.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "trace/control.h"
 #include "target_elf.h"
 #include "cpu_loop-common.h"
diff --git a/linux-user/mips/cpu_loop.c b/linux-user/mips/cpu_loop.c
index 39915b3fde2..0d3f0738b58 100644
--- a/linux-user/mips/cpu_loop.c
+++ b/linux-user/mips/cpu_loop.c
@@ -21,7 +21,7 @@ 
 #include "qemu-common.h"
 #include "qemu.h"
 #include "cpu_loop-common.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "internal.h"
 
 # ifdef TARGET_ABI_MIPSO32
diff --git a/linux-user/riscv/cpu_loop.c b/linux-user/riscv/cpu_loop.c
index 12aa3c0f16e..f9f5beef431 100644
--- a/linux-user/riscv/cpu_loop.c
+++ b/linux-user/riscv/cpu_loop.c
@@ -22,7 +22,7 @@ 
 #include "qemu/error-report.h"
 #include "qemu.h"
 #include "cpu_loop-common.h"
-#include "elf.h"
+#include "elf/elf.h"
 
 void cpu_loop(CPURISCVState *env)
 {
diff --git a/target/arm/arch_dump.c b/target/arm/arch_dump.c
index 26a2c098687..c05a2845883 100644
--- a/target/arm/arch_dump.c
+++ b/target/arm/arch_dump.c
@@ -20,7 +20,7 @@ 
 
 #include "qemu/osdep.h"
 #include "cpu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/dump.h"
 
 /* struct user_pt_regs from arch/arm64/include/uapi/asm/ptrace.h */
diff --git a/target/i386/arch_dump.c b/target/i386/arch_dump.c
index 004141fc042..9eb1e2a8bcf 100644
--- a/target/i386/arch_dump.c
+++ b/target/i386/arch_dump.c
@@ -14,7 +14,7 @@ 
 #include "qemu/osdep.h"
 #include "cpu.h"
 #include "sysemu/dump.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/memory_mapping.h"
 
 #define ELF_NOTE_SIZE(hdr_size, name_size, desc_size)   \
diff --git a/target/ppc/arch_dump.c b/target/ppc/arch_dump.c
index 9ab04b2c38f..0e102be1ed5 100644
--- a/target/ppc/arch_dump.c
+++ b/target/ppc/arch_dump.c
@@ -14,7 +14,7 @@ 
 
 #include "qemu/osdep.h"
 #include "cpu.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/dump.h"
 #include "sysemu/kvm.h"
 #include "exec/helper-proto.h"
diff --git a/target/ppc/kvm.c b/target/ppc/kvm.c
index 8c5b1f25cc9..c2e5f72ab0d 100644
--- a/target/ppc/kvm.c
+++ b/target/ppc/kvm.c
@@ -48,7 +48,7 @@ 
 #include "qemu/cutils.h"
 #include "qemu/main-loop.h"
 #include "qemu/mmap-alloc.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/kvm_int.h"
 
 #define PROC_DEVTREE_CPU      "/proc/device-tree/cpus/"
diff --git a/target/s390x/arch_dump.c b/target/s390x/arch_dump.c
index 50fa0ae4b67..5fe9519d26c 100644
--- a/target/s390x/arch_dump.c
+++ b/target/s390x/arch_dump.c
@@ -14,7 +14,7 @@ 
 #include "qemu/osdep.h"
 #include "cpu.h"
 #include "internal.h"
-#include "elf.h"
+#include "elf/elf.h"
 #include "sysemu/dump.h"
 
 
diff --git a/tcg/arm/tcg-target.inc.c b/tcg/arm/tcg-target.inc.c
index 94d80d79d1f..e04f726e4a6 100644
--- a/tcg/arm/tcg-target.inc.c
+++ b/tcg/arm/tcg-target.inc.c
@@ -22,7 +22,7 @@ 
  * THE SOFTWARE.
  */
 
-#include "elf.h"
+#include "elf/elf.h"
 #include "tcg-pool.inc.c"
 
 int arm_arch = __ARM_ARCH;
diff --git a/tcg/ppc/tcg-target.inc.c b/tcg/ppc/tcg-target.inc.c
index 815edac077f..4886f8c0d39 100644
--- a/tcg/ppc/tcg-target.inc.c
+++ b/tcg/ppc/tcg-target.inc.c
@@ -22,7 +22,7 @@ 
  * THE SOFTWARE.
  */
 
-#include "elf.h"
+#include "elf/elf.h"
 #include "tcg-pool.inc.c"
 
 #if defined _CALL_DARWIN || defined __APPLE__
diff --git a/tcg/s390/tcg-target.inc.c b/tcg/s390/tcg-target.inc.c
index 8aaa4cebe8d..82a81d2d94d 100644
--- a/tcg/s390/tcg-target.inc.c
+++ b/tcg/s390/tcg-target.inc.c
@@ -30,7 +30,7 @@ 
 #endif
 
 #include "tcg-pool.inc.c"
-#include "elf.h"
+#include "elf/elf.h"
 
 /* ??? The translation blocks produced by TCG are generally small enough to
    be entirely reachable with a 16-bit displacement.  Leaving the option for
diff --git a/tcg/tcg.c b/tcg/tcg.c
index 16b2d0e0ece..b8e2c7956b7 100644
--- a/tcg/tcg.c
+++ b/tcg/tcg.c
@@ -50,6 +50,8 @@ 
 
 #include "tcg-op.h"
 
+#include "elf/elf.h"
+
 #if UINTPTR_MAX == UINT32_MAX
 # define ELF_CLASS  ELFCLASS32
 #else
@@ -61,7 +63,8 @@ 
 # define ELF_DATA   ELFDATA2LSB
 #endif
 
-#include "elf.h"
+#include "elf/elf-types.inc.h"
+
 #include "exec/log.h"
 #include "sysemu/sysemu.h"
 
diff --git a/util/getauxval.c b/util/getauxval.c
index 36afdfb9e62..ee216c81c0b 100644
--- a/util/getauxval.c
+++ b/util/getauxval.c
@@ -36,7 +36,7 @@  unsigned long qemu_getauxval(unsigned long key)
     return getauxval(key);
 }
 #elif defined(__linux__)
-#include "elf.h"
+#include "elf/elf.h"
 
 /* Our elf.h doesn't contain Elf32_auxv_t and Elf64_auxv_t, which is ok because
    that just makes it easier to define it properly for the host here.  */