копайтесь в исходнике, что ниже. писалось это почти 8 лет назад, так что разъяснить что и как я уже и сам не смогу так сразу. помню что имена и указатели на них и что-то там ещё собиралось в памяти по подсекциям. вообще весь код аццкий хак, потому что иных средств получить подобное я не знаю (и тем более чтобы без применения сторонних средств). но в тоже время - всё в пределах документации на gcc.
//////////////////////////////////
// MACRO for adding new html resource
//////////////////////////////////
#ifdef BOOTLOADER
.section .data
#else
.section .rodata
#endif
.global resources
.global resource_count
resource_count:
.subsection 0
.long (def_size2 - def_size1)/16
resources:
.subsection 1
def_size1:
.subsection 2
def_size2:
.macro newresource name mode
.subsection 1
.long \name
.long l\name
.long d\name
.long \mode
.subsection 2
.align 1
\name:
.asciz "\name"
.subsection 3
l\name:
.incbin "../resources/\name"
d\name:
.endm
.macro newresourceh header name mode
.subsection 1
.long \name
.long l\name
.long d\name
.long \mode
.subsection 2
.align 1
\name:
.asciz "\name"
.subsection 3
l\name:
.incbin "../resources/\header"
.incbin "../resources/\name"
d\name:
.endm
.macro newalias name aliasname mode
.subsection 1
.long \name
.long l\aliasname
.long d\aliasname
.long \mode
.subsection 2
.align 0
\name:
.asciz "\name"
.endm
.macro spacealias name mode
.subsection 1
.long space
.long l\name
.long d\name
.long \mode
.subsection 2
.align 0
space:
.asciz " "
.endm
// mode bits description:
// .0 - authorisation needed
// .1 - AJAX request text
//////////////////////////////////
// here we can add a new resource in one string
//////////////////////////////////
#ifndef BOOTLOADER
NEWRESOURCEH "200_ok.header", "ajax.js", 0
NEWRESOURCE "auth.header", 0
NEWRESOURCEH "200_ok.header", "config.html", 1
#ifndef TRUNCATED
NEWRESOURCEH "200_ok.header", "favicon.ico", 0
NEWRESOURCEH "gzip.header", "jquery.js", 0
NEWRESOURCEH "200_ok.header", "sample.html", 1
NEWRESOURCEH "200_ok.header", "power.png", 0
NEWRESOURCEH "200_ok.header", "vol_down.png", 0
NEWRESOURCEH "200_ok.header", "vol_up.png", 0
NEWRESOURCEH "200_ok.header", "dots.gif", 0
NEWRESOURCEH "200_ok.header", "logo.png", 0
NEWRESOURCEH "200_ok.header", "sample.css", 0
NEWRESOURCEH "200_ok.header", "gradient.png", 0
NEWRESOURCEH "200_ok.header", "gradien2.png", 0
NEWRESOURCEH "200_ok.header", "loader.gif", 0
NEWRESOURCEH "200_ok.header", "ip_change.html", 0
NEWRESOURCEH "gzip.header", "jq.smodal.js", 0
NEWRESOURCEH "200_ok.header", "wait.gif", 0
NEWALIAS "AR", "sample.html", 3
SPACEALIAS "sample.html", 1
#else // TRUNCATED
NEWRESOURCEH "200_ok.header", "ex2.html", 0
NEWALIAS "AR", "ex2.html", 3
#endif // TRUNCATED
#else // BOOTLOADER
NEWRESOURCEH "200_ok.header", "logo.png", 0
NEWRESOURCE "auth.header", 0
NEWRESOURCEH "200_ok.header", "update.html", 1
NEWRESOURCEH "200_ok.header", "favicon.ico", 0
NEWRESOURCEH "200_ok.header", "reboot.html", 1
SPACEALIAS "update.html", 1
#endif // BOOTLOADER
//////////////////////////////////
// End of list marking
// code: while (p->get_string != 0) {
.subsection 1
.long 0
//////////////////////////////////
.section .text
.global boot_to_main
.thumb_func
boot_to_main:
ldr r1, [r0]
mov sp, r1
add r0, #4
ldr r1, [r0]
blx r1
.end