|
|
Message-ID: <CAMbhsRTerS-AN2e4BwYV+_ZxMj0mhrTzoOpr8xqp702=PuDrKw@mail.gmail.com>
Date: Wed, 28 Oct 2026 11:16:35 -0700
From: Colin Cross <ccross@...roid.com>
To: Rich Felker <dalias@...c.org>
Cc: musl@...ts.openwall.com
Subject: Re: [PATCH] Remove NO_LEGACY_INITFINI
On Wed, Oct 28, 2026 at 5:37 AM Rich Felker <dalias@...c.org> wrote:
> I don't understand what the original problem you're trying to solve
> is, and we're not going to make a change that's not well-motivated.
> This is *probably* the tooling you were talking about doing something
> very wrong, but I can't tell from the limited description:
>
> "This conflicts with tools that rewrite the DT_INIT entry if it
> exists. The problem was seen with LLVM BOLT, which in some cases
> inserts its initializers in DT_INIT."
>
> In arm or aarch64 binaries, except for very old ones produced before
> we had init_array support, DT_INIT should not be present. So if there
> is tooling that only rewrites them if they exist, I don't see how it
> would be having any problem now. The only problem would be if it's
> *adding* a DT_INIT when it doesn't already exist and expecting that to
> be run. And if that's the case, it should just be fixed to not do
> that. I don't think we want to be adding a contract to run legacy
> DT_INIT code where we previously haven't just to support some
> particular tooling, when the tooling could just be fixed to not do
> that.
That's not what I see with the latest musl-cross-make:
$ output/bin/aarch64-linux-musl-cc /tmp/test.c -o /tmp/a.out
$ output/bin/aarch64-linux-musl-objdump /tmp/a.out -d -j .init -p
...
Dynamic Section:
NEEDED libc.so
INIT 0x00000000004003e0
FINI 0x00000000004005a4
...
Disassembly of section .init:
00000000004003e0 <_init>:
4003e0: a9bf7bfd stp x29, x30, [sp, #-16]!
4003e4: 910003fd mov x29, sp
4003e8: a8c17bfd ldp x29, x30, [sp], #16
4003ec: d65f03c0 ret
The ld man page says:
-init=name
When creating an ELF executable or shared object, call NAME
when the executable or shared
object is loaded, by setting DT_INIT to the address of
the function. By default, the
linker uses "_init" as the function to call.
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.