From 18c7f0ad07fdf735784c0125e5e05095c01c31eb Mon Sep 17 00:00:00 2001 From: Joel Severin Date: Sun, 12 May 2024 17:27:43 +0200 Subject: [PATCH] Use .section format compatible with LLVM as when targeting Wasm LLVM as does apparently need sizes and no "a" flag for sections when assembling Wasm files. This seems to differ from other targets. --- scripts/kallsyms.c | 38 +++++++++++++++++++++++++++----------- usr/initramfs_data.S | 7 +++++-- 2 files changed, 32 insertions(+), 13 deletions(-) diff --git a/scripts/kallsyms.c b/scripts/kallsyms.c index 13af6d0ff..f090766f5 100644 --- a/scripts/kallsyms.c +++ b/scripts/kallsyms.c @@ -287,13 +287,18 @@ static void read_map(const char *in) fclose(fp); } -static void output_label(const char *label) +static void output_label_begin(const char *label) { printf(".globl %s\n", label); printf("\tALGN\n"); printf("%s:\n", label); } +static void output_label_end(const char *label) +{ + printf(".size\t%s,.-%s\n", label, label); +} + /* Provide proper symbols relocatability by their '_text' relativeness. */ static void output_address(unsigned long long addr) { @@ -395,10 +400,11 @@ static void write_src(void) printf("#define ALGN .balign 4\n"); printf("#endif\n"); - printf("\t.section .rodata, \"a\"\n"); + printf("\t.section .rodata, \"\", @\n"); - output_label("kallsyms_num_syms"); + output_label_begin("kallsyms_num_syms"); printf("\t.long\t%u\n", table_cnt); + output_label_end("kallsyms_num_syms"); printf("\n"); /* table of offset markers, that give the offset in the compressed stream @@ -410,7 +416,7 @@ static void write_src(void) exit(EXIT_FAILURE); } - output_label("kallsyms_names"); + output_label_begin("kallsyms_names"); off = 0; for (i = 0; i < table_cnt; i++) { if ((i & 0xFF) == 0) @@ -447,6 +453,7 @@ static void write_src(void) printf(", 0x%02x", table[i]->sym[k]); printf("\n"); } + output_label_end("kallsyms_names"); printf("\n"); /* @@ -458,14 +465,15 @@ static void write_src(void) strcpy((char *)table[i]->sym, buf); } - output_label("kallsyms_markers"); + output_label_begin("kallsyms_markers"); for (i = 0; i < ((table_cnt + 255) >> 8); i++) printf("\t.long\t%u\n", markers[i]); + output_label_end("kallsyms_markers"); printf("\n"); free(markers); - output_label("kallsyms_token_table"); + output_label_begin("kallsyms_token_table"); off = 0; for (i = 0; i < 256; i++) { best_idx[i] = off; @@ -473,17 +481,19 @@ static void write_src(void) printf("\t.asciz\t\"%s\"\n", buf); off += strlen(buf) + 1; } + output_label_end("kallsyms_token_table"); printf("\n"); - output_label("kallsyms_token_index"); + output_label_begin("kallsyms_token_index"); for (i = 0; i < 256; i++) printf("\t.short\t%d\n", best_idx[i]); + output_label_end("kallsyms_token_index"); printf("\n"); if (!base_relative) - output_label("kallsyms_addresses"); + output_label_begin("kallsyms_addresses"); else - output_label("kallsyms_offsets"); + output_label_begin("kallsyms_offsets"); for (i = 0; i < table_cnt; i++) { if (base_relative) { @@ -521,11 +531,16 @@ static void write_src(void) printf("\tPTR\t%#llx\n", table[i]->addr); } } + if (!base_relative) + output_label_end("kallsyms_addresses"); + else + output_label_end("kallsyms_offsets"); printf("\n"); if (base_relative) { - output_label("kallsyms_relative_base"); + output_label_begin("kallsyms_relative_base"); output_address(relative_base); + output_label_end("kallsyms_relative_base"); printf("\n"); } @@ -534,12 +549,13 @@ static void write_src(void) cleanup_symbol_name((char *)table[i]->sym); sort_symbols_by_name(); - output_label("kallsyms_seqs_of_names"); + output_label_begin("kallsyms_seqs_of_names"); for (i = 0; i < table_cnt; i++) printf("\t.byte 0x%02x, 0x%02x, 0x%02x\n", (unsigned char)(table[i]->seq >> 16), (unsigned char)(table[i]->seq >> 8), (unsigned char)(table[i]->seq >> 0)); + output_label_end("kallsyms_seqs_of_names"); printf("\n"); } diff --git a/usr/initramfs_data.S b/usr/initramfs_data.S index cd67edc38..dd1990aaf 100644 --- a/usr/initramfs_data.S +++ b/usr/initramfs_data.S @@ -22,11 +22,13 @@ in the ELF header, as required by certain architectures. */ -.section .init.ramfs,"a" +.section .init.ramfs,"",@ __irf_start: .incbin "usr/initramfs_inc_data" +.size __irf_start,.-__irf_start __irf_end: -.section .init.ramfs.info,"a" +.size __irf_end,0 +.section .init.ramfs.info,"",@ .globl __initramfs_size __initramfs_size: #ifdef CONFIG_64BIT @@ -34,3 +36,4 @@ __initramfs_size: #else .long __irf_end - __irf_start #endif +.size __initramfs_size,.-__initramfs_size -- 2.25.1