<table border="1" cellspacing="0" cellpadding="8">
    <tr>
        <th>Issue</th>
        <td>
            <a href=https://github.com/llvm/llvm-project/issues/94427>94427</a>
        </td>
    </tr>

    <tr>
        <th>Summary</th>
        <td>
            lld: Orphaned .got input section gets added to .dynamic output section
        </td>
    </tr>

    <tr>
      <th>Labels</th>
      <td>
            lld
      </td>
    </tr>

    <tr>
      <th>Assignees</th>
      <td>
      </td>
    </tr>

    <tr>
      <th>Reporter</th>
      <td>
          mintsuki
      </td>
    </tr>
</table>

<pre>
    Reproducer:
```sh
cat > GNUmakefile <<'eof'
override MAKEFLAGS += -rR

override KERNEL := kernel

define DEFAULT_VAR =
    ifeq ($(origin $1),default)
 override $(1) := $(2)
    endif
    ifeq ($(origin $1),undefined)
        override $(1) := $(2)
 endif
endef

override DEFAULT_KCC := cc
$(eval $(call DEFAULT_VAR,KCC,$(DEFAULT_KCC)))

override DEFAULT_KLD := ld
$(eval $(call DEFAULT_VAR,KLD,$(DEFAULT_KLD)))

override DEFAULT_KCFLAGS := -g -O2 -pipe
$(eval $(call DEFAULT_VAR,KCFLAGS,$(DEFAULT_KCFLAGS)))

override DEFAULT_KCPPFLAGS :=
$(eval $(call DEFAULT_VAR,KCPPFLAGS,$(DEFAULT_KCPPFLAGS)))

override DEFAULT_KLDFLAGS :=
$(eval $(call DEFAULT_VAR,KLDFLAGS,$(DEFAULT_KLDFLAGS)))

override KCFLAGS += \
 -Wall \
    -Wextra \
    -std=gnu11 \
    -ffreestanding \
    -fno-stack-protector \
    -fno-stack-check \
    -fno-lto \
    -fPIE \
    -m64 \
    -march=x86-64 \
    -mno-80387 \
    -mno-mmx \
    -mno-sse \
    -mno-sse2 \
 -mno-red-zone

override KCPPFLAGS := \
    -I src \
 $(KCPPFLAGS) \
    -MMD \
    -MP

override KLDFLAGS += \
 -m elf_x86_64 \
    -nostdlib \
    -pie \
    -z text \
 -z max-page-size=0x1000 \
    -T linker.ld

override CFILES := $(shell cd src && find -L * -type f -name '*.c')
override ASFILES := $(shell cd src && find -L * -type f -name '*.S')
override OBJ := $(addprefix obj/,$(CFILES:.c=.c.o) $(ASFILES:.S=.S.o))
override HEADER_DEPS := $(addprefix obj/,$(CFILES:.c=.c.d) $(ASFILES:.S=.S.d))

# Default target.
.PHONY: all
all: bin/$(KERNEL)

bin/$(KERNEL): GNUmakefile linker.ld $(OBJ)
        mkdir -p "$$(dirname $@)"
        $(KLD) $(OBJ) $(KLDFLAGS) -o $@

-include $(HEADER_DEPS)

obj/%.c.o: src/%.c GNUmakefile
        mkdir -p "$$(dirname $@)"
        $(KCC) $(KCFLAGS) $(KCPPFLAGS) -c $< -o $@

obj/%.S.o: src/%.S GNUmakefile
        mkdir -p "$$(dirname $@)"
        $(KCC) $(KCFLAGS) $(KCPPFLAGS) -c $< -o $@

.PHONY: clean
clean:
        rm -rf bin obj
eof
cat > linker.ld <<'eof'
OUTPUT_FORMAT(elf64-x86-64)
OUTPUT_ARCH(i386:x86-64)

ENTRY(_start)

PHDRS
{
 text     PT_LOAD    FLAGS(0x05); /* Execute + Read */
    rodata PT_LOAD    FLAGS(0x04); /* Read only */
    data     PT_LOAD FLAGS(0x06); /* Write + Read */
    dynamic  PT_DYNAMIC FLAGS(0x06); /* Dynamic PHDR for relocations */
}

SECTIONS
{
    . = 0xffffffff80000000;

    .text : {
        *(.text .text.*)
    } :text

    . = ALIGN(CONSTANT(MAXPAGESIZE));

    .rodata : {
 *(.rodata .rodata.*)
    } :rodata

    . = ALIGN(CONSTANT(MAXPAGESIZE));

    a_symbol = .;

    .data : {
        *(.data .data.*)
    } :data

    .dynamic : {
 *(.dynamic)
    } :data :dynamic

    .bss : {
        *(.bss .bss.*)
        *(COMMON)
    } :data

    /DISCARD/ : {
 *(.eh_frame*)
        *(.note .note.*)
        *(.interp)
 }
}
eof
mkdir -p ./src
cat > src/main.c <<'eof'
#include <stdint.h>
#include <stddef.h>

static void hcf(void) {
    asm ("cli");
    for (;;) {
        asm ("hlt");
 }
}

void _start(void) {
    hcf();
}

extern char a_symbol[];

uint64_t some_func(void) {
    return (uint64_t)a_symbol + 0x1234;
}
eof
```
Build with `make clean all KLD=ld.lld KCC=clang`.

Relevant part of `llvm-readelf -a`:
```
Program Headers:
  Type           Offset   VirtAddr PhysAddr           FileSiz  MemSiz   Flg Align
  LOAD           0x001000 0xffffffff80000000 0xffffffff80000000 0x000090 0x000090 R E 0x1000
  LOAD 0x002000 0xffffffff80001000 0xffffffff80001000 0x0000d8 0x0000d8 RW 0x1000
  DYNAMIC        0x002000 0xffffffff80001000 0xffffffff80001000 0x0000d8 0x0000d8 RW  0x8

 Section to Segment mapping:
  Segment Sections...
   00     .text .dynsym .gnu.hash .hash .dynstr .rela.dyn 
 01     .dynamic .got 
   02     .dynamic .got
```

This seems incorrect. It also causes the following `llvm-readelf` warning:
```
llvm-readelf: warning: 'bin/kernel': invalid PT_DYNAMIC size (0xd8)
llvm-readelf: warning: 'bin/kernel': PT_DYNAMIC dynamic table is invalid: SHT_DYNAMIC will be used
```
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWF1z4rjS_jXKTZddRubzgguDYZKdJFDA7Lzz3lDCkkEb2eZIIkPm15-SbIxtnFRmdy-Oi7JNd-vpR1KrWzJRiu9TxsaoN0G98I6c9CGT44SnWp1e-N0uo2_jFTvKjJ4iJpEfIC9EXoD6Xv5Th1wQEQ3In8GX528JeWExFwyQPzU_PGBZjPAgN8xemZScMngKvs7mj8GXNSA8QX4IjlwV4HXDr7PV8-wRjG8_hBcmUyaqhpTFPGUQzubBt8fN9s9gBcgPcx0AAI_ZfwDhIcJdhIeZ5HueAsLdDsIjhKeUxeQktPmTNykd5w2M2cV5LsFXWwBgKeXxp72d0pwurWGY63fcVnwyA9g6bpcB-TqdXoCiqLC0gOyViAI7IkJURxDh6dfpFOFprq5A2W6MSirv-XwMLz4F_Q2fj-GtTyP7lM9pEU65X2cPzgKDc-RH9ju9tiAtPS_kn2OyXFa5_I77omULgVLzyQn4mwyKhm3z8An_5STkaxr1pkXIOt-Nr-t_AHC-s7OWpCFUmiI_3KenTqehiWPJmNIkpTzdN3Vp5ihNohfnKDPNIp3Jdy2iA4teWrRCZ03p8mHWECX9blNCZHRAfnge9p1bZZo5Q88fDlrkSXJukSrF2qW4OppGJhl1fmUpe2ci6jHYwHwAJaOKLJ_rapA1Gjw9NSGelu2Oy8i7CYEEmIi352F_ezNOaaY0FXzXEB95czB-gWZnXUX9BQk5O0eyZ47ivxjyQ-_c8Tyv0XADgqcvTLplQqrzns4fHmfrespVByYERDQfLNxHuA8xTyk4j4BwAI5-OzKIwUlJYhL3AOHAjexz1IAP1v8W_roVfzH5o45NKD1KFvMzZLu_EJ6XCzrvKPINUz90Izezs211BUujXBvl2ipvvd3PgnC22oaz5frveqUfeaW3KQZhH8K8VoMmcs-0myvc5f3i-QfyAyCi2BiYFz-AHU8tBRvadhfRwGw38IPaNqYMm4LtYvJHBWaUvFAuwTkCwtgaGBvKZTFlXdT1bGdw2aLwZ-taDRNKTbkIneyCUaHt8DQSp3KrUJmMZlou5qBnZ9kPTJxdBNU-_vPO2I1BmUWuOeQ2rTiRlfrT9r5dKa-blNf_o5SvARgJRtJiQ2xfy_2yN5IJODI2MWmXRr55y-L69rkSa22b58W3zfLbZjtfrJ6CjSnlIu53nbzwlFNfGAWr6T3CQ-4P-8gPGjb5ffa8Wf1AeLhVmkjdUC7vw9W6EAwmRSK1uddcy832cRGE5rUYpqF39np2-UzATlgAszOLTtrMwgRWjJgFFBhVmZRlRokm74B162AWIEvF2w2KxaiSqoD06yDfJf-ID31LScIjixT-eA6eHqYfgIWFtRkpiDMJkoksIppnqapBo0FYHdn1bLp5WDzfDC4AuOboAt45Lq6hl1_In1QRrGleB_0Aagjmsr6HuYG9u1ZSOXCggd2fG90NrqUQPD58eTZpe_G83gTPJtiegv9bBl9m64f_nxXZuYVUMaN1WgWfQlc83-OUa_9VVmSr3pJdJiyG20a7hXR9LHPmH_FuZX0JqNbxKJTvgdlnYdLE3Sn1IV2jN7cbsleb6eLpafH82Z4gPA8f1tNgFSI8b-8OO2xjSRL2vks3zTQDe_-AmMtTzeTxqr0un8tLmTfL5O8iPDeVopZN89KREJ66UXtCRdgva6k_VZryVLsH5M_eUVMWV9X2rjTRPILXjFM4RDHCQ_NqS0l1dohK8u8COBLc1qprqBq9SSBG70_Mr9m6jnAQuolwO0j53dK6JPh2Zjnp2tKpY7CzZjKF6EBkuZbyD0aNtXTiqe53txpUlrBtfEqj93xKpk8yNd25tEF4dF2neALeuYP97i2lcu7Lb1D538mJCwo_uT4A6ntmm5CXY7MrNIcS5IeCukJQMJXfDyNB0j3qe261Aysm2CtJNRyJ1JDFBkqI18SRjFAmYnCIcXjzGawomTLbS5LAvTGWqjQD2Jh9_PVaxLFippD-yaUOKJWwPLwp-3K95lywNf8F8MQS-4S52EMg-D69wF6qZnF5Z8-zJ5_bAtIuMo9R5WUFM8gPTzUPRo9vQVpcda64dHh9WX1vwF6Ka4X4P3UA3nlYy1prFplSDDqDNdsnLNWQkOORp_vKxFw0hbFyXbcMUs-Da6E12Vq9JeDu05N7IOoAxd3ItQRXMkHMHyjaex2olQB3n2m4YuNbbWtM5ffNgStQjCUKeBplUrJIu_CggQiVQUROiinQBwZxJkT2034fqUcu6nvwk8i02v2Gq5q5H1TMzdEzPysVn1_xwEh5-koEp9XdkjmBg90t0WGZwX8buAJ4GSBNdoIBVxenxmx9f7X7yYWAHYOTYrTRuzs69unIH5E7Nu4MOoNev9PveHeHsRdFfdrr-Z3ertPbRfHIGw58MvC7EWYkwtEdH2MPd72-1_O6uN_z3G4vIqTv-8TzOrgX9VHXYwnhwjVddDO5v-NKndh41O3iwZ0gOyaU_baOsRDU5OxeeCfHdkB2p71CXU9wpdW1veZasLEx9gNYyOOBpIzmwcPT40mDKsJ6z7QCQimjJsLLQMpOumJ1d5JifND6aJOR2bbO91wfTjs3yhKE58Zt8XCOMvuLRRrhue2DQnied-N1jP8bAAD__66AVNk">