171 lines
4.6 KiB
Diff
171 lines
4.6 KiB
Diff
From 18c7f0ad07fdf735784c0125e5e05095c01c31eb Mon Sep 17 00:00:00 2001
|
|
From: Joel Severin <joel.severin@icemanor.se>
|
|
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
|
|
|