Skip to content

Commit

Permalink
kernel/generic: fix the arm gc-sections patch
Browse files Browse the repository at this point in the history
Latest binutils (2.37) exposed a long-standing bug. The kernel linking stage
would break at the SORTTAB step, due to the exception table having been
previously purged from vmlinux, as its section wasn't marked as unconditionally
kept. Fix thusly.

Additionally, the "#define ARM_MMU_DISCARD(x) KEEP(x)" change is bogus. It
would only apply to !CONFIG_MMU devices (which we don't support in OpenWrt), and
it would even break the build if referenced. Drop it.

While at it, rename the patch in order to make it obvious that it's
arm-specific.

Signed-off-by: Rui Salvaterra <rsalvaterra@gmail.com>
[Add same changes for kernel 5.4 too]
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
  • Loading branch information
rsalvaterra authored and hauke committed Jul 25, 2021
1 parent 2801fe6 commit 023a136
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 16 deletions.
Expand Up @@ -32,6 +32,15 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
lib1funcs.o ashldi3.o bswapsdi2.o \
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -75,7 +75,7 @@ SECTIONS
. = ALIGN(4);
__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
__start___ex_table = .;
- ARM_MMU_KEEP(*(__ex_table))
+ KEEP(*(__ex_table))
__stop___ex_table = .;
}

@@ -100,24 +100,24 @@ SECTIONS
}
.init.arch.info : {
Expand Down Expand Up @@ -63,14 +72,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

--- a/arch/arm/include/asm/vmlinux.lds.h
+++ b/arch/arm/include/asm/vmlinux.lds.h
@@ -23,19 +23,19 @@
#define ARM_MMU_DISCARD(x)
#else
#define ARM_MMU_KEEP(x)
-#define ARM_MMU_DISCARD(x) x
+#define ARM_MMU_DISCARD(x) KEEP(x)
#endif

@@ -29,13 +29,13 @@
#define PROC_INFO \
. = ALIGN(4); \
__proc_info_begin = .; \
Expand Down
Expand Up @@ -41,6 +41,15 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>
# but it is being used too early to link to meaningful stack_chk logic.
--- a/arch/arm/kernel/vmlinux.lds.S
+++ b/arch/arm/kernel/vmlinux.lds.S
@@ -73,7 +73,7 @@ SECTIONS
. = ALIGN(4);
__ex_table : AT(ADDR(__ex_table) - LOAD_OFFSET) {
__start___ex_table = .;
- ARM_MMU_KEEP(*(__ex_table))
+ KEEP(*(__ex_table))
__stop___ex_table = .;
}

@@ -100,24 +100,24 @@ SECTIONS
}
.init.arch.info : {
Expand Down Expand Up @@ -72,14 +81,7 @@ Signed-off-by: Gabor Juhos <juhosg@openwrt.org>

--- a/arch/arm/kernel/vmlinux.lds.h
+++ b/arch/arm/kernel/vmlinux.lds.h
@@ -22,13 +22,13 @@
#define ARM_MMU_DISCARD(x)
#else
#define ARM_MMU_KEEP(x)
-#define ARM_MMU_DISCARD(x) x
+#define ARM_MMU_DISCARD(x) KEEP(x)
#endif

@@ -28,7 +28,7 @@
#define PROC_INFO \
. = ALIGN(4); \
__proc_info_begin = .; \
Expand Down

0 comments on commit 023a136

Please sign in to comment.