Changeset View
Changeset View
Standalone View
Standalone View
head/contrib/binutils/bfd/elflink.c
- This file is larger than 256 KB, so syntax highlighting is disabled by default.
Show First 20 Lines • Show All 4,350 Lines • ▼ Show 20 Lines | if (!add_needed | ||||
const char *soname = elf_dt_name (abfd); | const char *soname = elf_dt_name (abfd); | ||||
/* A symbol from a library loaded via DT_NEEDED of some | /* A symbol from a library loaded via DT_NEEDED of some | ||||
other library is referenced by a regular object. | other library is referenced by a regular object. | ||||
Add a DT_NEEDED entry for it. Issue an error if | Add a DT_NEEDED entry for it. Issue an error if | ||||
--no-add-needed is used. */ | --no-add-needed is used. */ | ||||
if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) | if ((elf_dyn_lib_class (abfd) & DYN_NO_NEEDED) != 0) | ||||
{ | { | ||||
bfd_boolean looks_soish; | |||||
const char *print_name; | |||||
int print_len; | |||||
size_t len, lend = 0; | |||||
looks_soish = FALSE; | |||||
print_name = soname; | |||||
print_len = strlen(soname); | |||||
if (strncmp(soname, "lib", 3) == 0) | |||||
{ | |||||
len = print_len; | |||||
if (len > 5 && strcmp(soname + len - 2, ".a") == 0) | |||||
lend = len - 5; | |||||
else | |||||
{ | |||||
while (len > 6 && (ISDIGIT(soname[len - 1]) || | |||||
soname[len - 1] == '.')) | |||||
len--; | |||||
if (strncmp(soname + len - 3, ".so", 3) == 0) | |||||
lend = len - 6; | |||||
} | |||||
if (lend != 0) | |||||
{ | |||||
print_name = soname + 3; | |||||
print_len = lend; | |||||
looks_soish = TRUE; | |||||
} | |||||
} | |||||
(*_bfd_error_handler) | (*_bfd_error_handler) | ||||
(_("%B: invalid DSO for symbol `%s' definition"), | (_("undefined reference to symbol `%s' (try adding -l%s%.*s)"), | ||||
abfd, name); | name, looks_soish? "" : ":", print_len, print_name); | ||||
bfd_set_error (bfd_error_bad_value); | bfd_set_error (bfd_error_bad_value); | ||||
goto error_free_vers; | goto error_free_vers; | ||||
} | } | ||||
elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED; | elf_dyn_lib_class (abfd) &= ~DYN_AS_NEEDED; | ||||
add_needed = TRUE; | add_needed = TRUE; | ||||
ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); | ret = elf_add_dt_needed_tag (abfd, info, soname, add_needed); | ||||
▲ Show 20 Lines • Show All 7,202 Lines • Show Last 20 Lines |