diff --git a/dtc-parser.y b/dtc-parser.y index 9e7fbcc..d88cbf1 100644 --- a/dtc-parser.y +++ b/dtc-parser.y @@ -92,11 +92,11 @@ memreserves: memreserve memreserves { } ; -memreserve: DT_MEMRESERVE DT_ADDR DT_ADDR ';' { - $$ = build_reserve_entry($2, $3, NULL); +memreserve: label DT_MEMRESERVE DT_ADDR DT_ADDR ';' { + $$ = build_reserve_entry($3, $4, $1); } - | DT_MEMRESERVE DT_ADDR '-' DT_ADDR ';' { - $$ = build_reserve_entry($2, $4 - $2 + 1, NULL); + | label DT_MEMRESERVE DT_ADDR '-' DT_ADDR ';' { + $$ = build_reserve_entry($3, $5 - $3 + 1, $1); } ; diff --git a/flattree.c b/flattree.c index a6b66e7..31609d6 100644 --- a/flattree.c +++ b/flattree.c @@ -497,6 +497,10 @@ void dt_to_asm(FILE *f, struct boot_info *bi, int version, int boot_cpuid_phys) * as it appears .quad isn't available in some assemblers. */ for (re = bi->reservelist; re; re = re->next) { + if (re->label) { + fprintf(f, "\t.globl\t%s\n", re->label); + fprintf(f, "%s:\n", re->label); + } fprintf(f, "\t.long\t0x%08x\n\t.long\t0x%08x\n", (unsigned int)(re->re.address >> 32), (unsigned int)(re->re.address & 0xffffffff));