Skip to content

Support for versioned symbols is missing in static links #1189

@parth-07

Description

@parth-07

GNU ld supports versioned symbols with static links. We also need to support this for symbol versioning completeness.

Example:

#!/usr/bin/env bash

cat >1.c <<\EOF
__asm__(".symver foo1,foo@V1");
int foo1() {
  return 1;
}

__asm__(".symver foo2,foo@V2");
int foo2() {
  return 3;
}

__asm__(".symver bar,bar@@@V2");
int bar() {
  return 5;
}
EOF

cat >main.c <<\EOF
#include <stdio.h>

__asm__(".symver foo,foo@V2");
int foo();

int bar();

int main() {
  int u = foo() + bar();
  printf("u: %d\n",u);
  return 0;
}
EOF

clang-20 -o 1.o 1.c -c
clang-20 -o main.o main.c -c

LDs=(ld.eld ld.lld ld.bfd)
SFs=(eld lld bfd)

for i in "${!SFs[@]}"; do
  clang-20 -o main.${SFs[$i]}.out main.o 1.o --ld-path=$(which ${LDs[$i]})
done

./main.bfd.out prints 8 as expected.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions