Hi, This series introduces Position Independent Executables (PIEs) for the ARM architecture. The main goal is to avoid having to write low level code in assembly as this is currently the case for suspend/resume. Multiple platforms will benefit from this infrastructure: at91, rockchip, sunxi, am335x.
Changes in v2: - handle big endian - handle gcov and ftrace by disabling them before compilling the PIE - Get the alignment from the original ELF to ensure the PIE is properly aligned in SRAM. - stop using fncpy - rebased on v4.7-rc1 I've still avoided using the ELF header itself to be more efficient. For example, for atmel, the PIE is 66772 bytes when embedded in an ELF versus 344 bytes standalone. This is working properly because the PIE is self standing and correctly padded. Alexandre Belloni (2): ARM: PIE infrastructure ARM: at91: pm: switch to the PIE infrastructure arch/arm/Kconfig | 2 + arch/arm/Makefile | 1 + arch/arm/mach-at91/Kconfig | 1 + arch/arm/mach-at91/Makefile | 2 +- arch/arm/mach-at91/pm.c | 31 ++-- arch/arm/mach-at91/pm/.gitignore | 2 + arch/arm/mach-at91/pm/Makefile | 3 + arch/arm/mach-at91/pm/atmel_pm.c | 97 +++++++++++ arch/arm/mach-at91/pm_suspend.S | 338 --------------------------------------- arch/arm/pie/Kconfig | 8 + arch/arm/pie/Makefile | 1 + arch/arm/pie/Makefile.pie | 86 ++++++++++ arch/arm/pie/lib/empty.c | 15 ++ arch/arm/pie/pie.c | 97 +++++++++++ arch/arm/pie/pie.lds.S | 40 +++++ include/linux/pie.h | 146 +++++++++++++++++ 16 files changed, 510 insertions(+), 360 deletions(-) create mode 100644 arch/arm/mach-at91/pm/.gitignore create mode 100644 arch/arm/mach-at91/pm/Makefile create mode 100644 arch/arm/mach-at91/pm/atmel_pm.c delete mode 100644 arch/arm/mach-at91/pm_suspend.S create mode 100644 arch/arm/pie/Kconfig create mode 100644 arch/arm/pie/Makefile create mode 100644 arch/arm/pie/Makefile.pie create mode 100644 arch/arm/pie/lib/empty.c create mode 100644 arch/arm/pie/pie.c create mode 100644 arch/arm/pie/pie.lds.S create mode 100644 include/linux/pie.h -- 2.8.1