d024d369b8
ARC processors are known for its configurability and one of those configurable things is MMU page size which might be set to any power of two from 4 KiB to 16 MiB, though in the Linux kernel we only support 4, 8 and 16 KiB due to practical considerations. And the most used setting is 8 KiB thus GNU LD assumes maximum page size is 8 KiB by default and while this works for smaller pages (it's OK to align segments by larger value it will be still peoperly aligned) this breaks execution of user-space apps on HW with larger pages because Elf sections might very well span across allocated pages and thus make executable broken. Simplest example: ------------------------------------>8----------------------------------- $ arc-linux-gcc test.c $ arc-linux-readelf --segments a.out Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align ... LOAD 0x000000 0x00010000 0x00010000 0x003e8 0x003e8 R E 0x2000 <-- See LOAD 0x001f24 0x00013f24 0x00013f24 0x000f0 0x0010c RW 0x2000 ------------------------------------>8----------------------------------- Fortunately we may override default page size settings with "max-page-size" linker option this way: ------------------------------------>8----------------------------------- $ arc-linux-gcc test.c -Wl,-z,max-page-size=16384 $ arc-linux-readelf --segments a.out Elf file type is EXEC (Executable file) Entry point 0x102c4 There are 8 program headers, starting at offset 52 Program Headers: Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align ... LOAD 0x000000 0x00010000 0x00010000 0x003e8 0x003e8 R E 0x4000 <-- See LOAD 0x001f24 0x00015f24 0x00015f24 0x000f0 0x0010c RW 0x4000 ------------------------------------>8----------------------------------- Which we implement with that change. Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com> [yann.morin.1998@free.fr: fix comment: s/8196/8192/] Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr> |
||
---|---|---|
.. | ||
arch.mk | ||
arch.mk.arc | ||
arch.mk.csky | ||
arch.mk.riscv | ||
arch.mk.xtensa | ||
Config.in | ||
Config.in.arc | ||
Config.in.arm | ||
Config.in.csky | ||
Config.in.m68k | ||
Config.in.microblaze | ||
Config.in.mips | ||
Config.in.nds32 | ||
Config.in.nios2 | ||
Config.in.or1k | ||
Config.in.powerpc | ||
Config.in.riscv | ||
Config.in.sh | ||
Config.in.sparc | ||
Config.in.x86 | ||
Config.in.xtensa |