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 | ||
board | ||
boot | ||
configs | ||
docs | ||
fs | ||
linux | ||
package | ||
support | ||
system | ||
toolchain | ||
utils | ||
.defconfig | ||
.flake8 | ||
.gitignore | ||
.gitlab-ci.yml | ||
.gitlab-ci.yml.in | ||
CHANGES | ||
Config.in | ||
Config.in.legacy | ||
COPYING | ||
DEVELOPERS | ||
Makefile | ||
Makefile.legacy | ||
README |
Buildroot is a simple, efficient and easy-to-use tool to generate embedded Linux systems through cross-compilation. The documentation can be found in docs/manual. You can generate a text document with 'make manual-text' and read output/docs/manual/manual.text. Online documentation can be found at http://buildroot.org/docs.html To build and use the buildroot stuff, do the following: 1) run 'make menuconfig' 2) select the target architecture and the packages you wish to compile 3) run 'make' 4) wait while it compiles 5) find the kernel, bootloader, root filesystem, etc. in output/images You do not need to be root to build or run buildroot. Have fun! Buildroot comes with a basic configuration for a number of boards. Run 'make list-defconfigs' to view the list of provided configurations. Please feed suggestions, bug reports, insults, and bribes back to the buildroot mailing list: buildroot@buildroot.org You can also find us on #buildroot on Freenode IRC. If you would like to contribute patches, please read https://buildroot.org/manual.html#submitting-patches