diff mbox series

[mips-next,2/4] MIPS: vmlinux.lds.S: add ".rel.dyn" to DISCARDS

Message ID 20210104122016.47308-2-alobakin@pm.me
State New
Headers show
Series MIPS: vmlinux.lds.S sections fix & cleanup | expand

Commit Message

Alexander Lobakin Jan. 4, 2021, 12:20 p.m. UTC
GCC somehow manages to place some of the symbols from main.c into
.rel.dyn section:

mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn'
from `init/main.o' being placed in section `.rel.dyn'

I couldn't catch up the exact symbol, but seems like it's harmless
to discard it from the final vmlinux as kernel doesn't use or
support dynamic relocations.

Misc: sort DISCARDS section entries alphabetically.

Signed-off-by: Alexander Lobakin <alobakin@pm.me>
---
 arch/mips/kernel/vmlinux.lds.S | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Fangrui Song Jan. 5, 2021, 7:39 a.m. UTC | #1
On Mon, Jan 4, 2021 at 4:21 AM Alexander Lobakin <alobakin@pm.me> wrote:
>

> GCC somehow manages to place some of the symbols from main.c into

> .rel.dyn section:

>

> mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn'

> from `init/main.o' being placed in section `.rel.dyn'

>

> I couldn't catch up the exact symbol, but seems like it's harmless

> to discard it from the final vmlinux as kernel doesn't use or

> support dynamic relocations.

>

> Misc: sort DISCARDS section entries alphabetically.

>

> Signed-off-by: Alexander Lobakin <alobakin@pm.me>

> ---

>  arch/mips/kernel/vmlinux.lds.S | 3 ++-

>  1 file changed, 2 insertions(+), 1 deletion(-)

>

> diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S

> index 83e27a181206..1c3c2e903062 100644

> --- a/arch/mips/kernel/vmlinux.lds.S

> +++ b/arch/mips/kernel/vmlinux.lds.S

> @@ -221,9 +221,10 @@ SECTIONS

>                 /* ABI crap starts here */

>                 *(.MIPS.abiflags)

>                 *(.MIPS.options)

> +               *(.eh_frame)

>                 *(.options)

>                 *(.pdr)

>                 *(.reginfo)

> -               *(.eh_frame)

> +               *(.rel.dyn)

>         }

>  }

> --

> 2.30.0

>

>


(I don't know why I am on the CC list since I know little about
mips... Anyway, I know the LLD linker's behavior in case that was the
intention... )

I think it'd be good to know the reason why these dynamic relocations
are produced and fix the root cause.

arch/x86/kernel/vmlinux.lds.S asserts no dynamic relocation:
ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations
(.rela) detected!")
Jiaxun Yang Jan. 5, 2021, 8:59 a.m. UTC | #2
在 2021/1/5 下午3:39, Fāng-ruì Sòng 写道:
> On Mon, Jan 4, 2021 at 4:21 AM Alexander Lobakin <alobakin@pm.me> wrote:

>> GCC somehow manages to place some of the symbols from main.c into

>> .rel.dyn section:

>>

>> mips-alpine-linux-musl-ld: warning: orphan section `.rel.dyn'

>> from `init/main.o' being placed in section `.rel.dyn'

>>

>> I couldn't catch up the exact symbol, but seems like it's harmless

>> to discard it from the final vmlinux as kernel doesn't use or

>> support dynamic relocations.

>>

>> Misc: sort DISCARDS section entries alphabetically.

>>

>> Signed-off-by: Alexander Lobakin <alobakin@pm.me>

>> ---

>>   arch/mips/kernel/vmlinux.lds.S | 3 ++-

>>   1 file changed, 2 insertions(+), 1 deletion(-)

>>

>> diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S

>> index 83e27a181206..1c3c2e903062 100644

>> --- a/arch/mips/kernel/vmlinux.lds.S

>> +++ b/arch/mips/kernel/vmlinux.lds.S

>> @@ -221,9 +221,10 @@ SECTIONS

>>                  /* ABI crap starts here */

>>                  *(.MIPS.abiflags)

>>                  *(.MIPS.options)

>> +               *(.eh_frame)

>>                  *(.options)

>>                  *(.pdr)

>>                  *(.reginfo)

>> -               *(.eh_frame)

>> +               *(.rel.dyn)

>>          }

>>   }

>> --

>> 2.30.0

>>

>>

> (I don't know why I am on the CC list since I know little about

> mips... Anyway, I know the LLD linker's behavior in case that was the

> intention... )

>

> I think it'd be good to know the reason why these dynamic relocations

> are produced and fix the root cause.

>

> arch/x86/kernel/vmlinux.lds.S asserts no dynamic relocation:

> ASSERT(SIZEOF(.rela.dyn) == 0, "Unexpected run-time relocations

> (.rela) detected!")

Hi all,

Runtime .rela can't be avoided as MIPS kernel can't be built with fPIC.
Our relocatable kernel uses another approach, fixup dynamic relocations
at boot time.

abicalls simply gave us too much overhead on PIC code, which is unacceptable
for kernel.

In my local tests, PIC kernel reduced unix bench results for around 30%.

For MIPS Release6 and afterwards, we may utilize new pcrel instructions to
reduce overhead but for older ISA I don't have any idea.

Thanks.

- Jiaxun
diff mbox series

Patch

diff --git a/arch/mips/kernel/vmlinux.lds.S b/arch/mips/kernel/vmlinux.lds.S
index 83e27a181206..1c3c2e903062 100644
--- a/arch/mips/kernel/vmlinux.lds.S
+++ b/arch/mips/kernel/vmlinux.lds.S
@@ -221,9 +221,10 @@  SECTIONS
 		/* ABI crap starts here */
 		*(.MIPS.abiflags)
 		*(.MIPS.options)
+		*(.eh_frame)
 		*(.options)
 		*(.pdr)
 		*(.reginfo)
-		*(.eh_frame)
+		*(.rel.dyn)
 	}
 }