diff options
Diffstat (limited to 'tests/format/elf/overlapping_areas.asm')
-rw-r--r-- | tests/format/elf/overlapping_areas.asm | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/tests/format/elf/overlapping_areas.asm b/tests/format/elf/overlapping_areas.asm new file mode 100644 index 0000000..debcca1 --- /dev/null +++ b/tests/format/elf/overlapping_areas.asm @@ -0,0 +1,115 @@ + +.macro bump addr + .word \addr + 0x200000 +.endm + +.macro label_offset lbl + .word \lbl - str_table +.endm + + +elf_header: + + .byte 0x7F, 'E', 'L', 'F' @ e_ident + .byte 1 @ EI_CLASS => ELFCLASS32 + .byte 1 @ EI_DATA => ELFDATA2LSB + .byte 1 @ EI_VERSION => EV_CURRENT + .byte 0 @ EI_OSABI => ELFOSABI_SYSV + .byte 0 @ EI_ABIVERSION + + .word 0 + .short 0 + .byte 0 + + .short 2 @ e_type => ET_EXEC + .short 40 @ e_machine => EM_ARM + .word 1 @ e_version => EV_CURRENT + bump main @ e_entry + + .word program_headers @ e_phoff + .word section_headers @ e_shoff + + .word 0x80 @ e_flags => EF_ARM_NEW_ABI + + .short 52 @ e_ehsize + .short 32 @ e_phentsize + .short 2 @ e_phnum + .short 40 @ e_shentsize + .short 2 @ e_shnum + .short 1 @ e_shstrndx + + +program_headers: + + .word 1 @ p_type => PT_LOAD + .word O @ p_offset + .word 0x200000 @ p_vaddr + .word 0x200000 @ p_paddr + .word bss_start @ p_filesz + .word bss_start @ p_memsz + .word 0x5 @ p_flags => PF_X | PF_R + .word 0x1000 @ p_align + + .word 1 @ p_type => PT_LOAD + .word bss_start @ p_offset + .word 0x300000 @ p_vaddr + .word 0x300000 @ p_paddr + .word bss_end - bss_start @ p_filesz + .word bss_end - bss_start @ p_memsz + .word 0x6 @ p_flags => PF_W | PF_R + .word 0x1 @ p_align + + +section_headers: + + label_offset text_lbl @ sh_name + .word 1 @ sh_type => SHT_PROGBITS + .word 0x6 @ sh_flags => SHF_ALLOC | SHF_EXECINSTR + bump main @ sh_addr + .word main @ sh_offset + .word main_return - main @ sh_size + .word 0 @ sh_link + .word 0 @ sh_info + .word 4 @ sh_addralign + .word 0 @ sh_entsize + + label_offset strtab_lbl @ sh_name + .word 3 @ sh_type => SHT_STRTAB + .word 0x0 @ sh_flags + .word 0x0 @ sh_addr + .word str_table @ sh_offset + .word str_table_end - str_table @ sh_size + .word 0 @ sh_link + .word 0 @ sh_info + .word 1 @ sh_addralign + .word 0 @ sh_entsize + + +main: + mov r7, #1 @ __NR_exit + mov r0, #42 @ $? + svc 0 + +main_return: + + +bss_start: + + .word 0x0 + .word 0x0 + .word 0x0 + .word 0x0 + +str_table: + + .byte 0, 0 +text_lbl: + .byte '.', 't', 'e', 'x', 't', 0 +strtab_lbl: + .byte '.', 's', 't', 'r', 't', 'a', 'b', 0 +blabla: + .byte 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A' +bss_end: + .byte 'B', 'B', 'B', 'B', 'B', 'B', 'B', 'B', 0 + +str_table_end: |