DT_USED запись в разделе .dynamic файла ELF - PullRequest
0 голосов
/ 28 февраля 2019

Меня интересует запись DT_USED в секции .dynamic.Однако я смог найти только два примера кода, которые описывают эту запись.

1.

#define DT_USED     0x7ffffffe  /* ignored - same as needed */

в https://github.com/switchbrew/switch-tools/blob/master/src/elf_common.h

2.

    case DT_USED:
    case DT_INIT_ARRAY:
    case DT_FINI_ARRAY:
      if (do_dynamic)
        {
          if (entry->d_tag == DT_USED
          && VALID_DYNAMIC_NAME (entry->d_un.d_val))
        {
          char *name = GET_DYNAMIC_NAME (entry->d_un.d_val);

          if (*name)
            {
              printf (_("Not needed object: [%s]\n"), name);
              break;
            }
        }

          print_vma (entry->d_un.d_val, PREFIX_HEX);
          putchar ('\n');
        }
      break;

в http://web.mit.edu/freebsd/head/contrib/binutils/binutils/readelf.c

Я хочу знать, что означает «Не нужный объект»?Означает ли это, что имена файлов, перечисленные здесь, не нужны?

1 Ответ

0 голосов
/ 20 марта 2019

В целом, рассматривая возможности динамического компоновщика Solaris, можно найти больше информации в общедоступных источниках Illumos (которые когда-то были получены из OpenSolaris).В этом случае кажется, что DT_USED всегда обрабатывается как DT_NEEDED, так что это, по сути, одно и то же.Один из заголовочных файлов usr/src/uts/common/sys/link.h также содержит следующее:

/*
 * DT_* entries between DT_HIPROC and DT_LOPROC are reserved for processor
 * specific semantics.
 *
 * DT_* encoding rules apply to all tag values larger than DT_LOPROC.
 */
#define DT_LOPROC   0x70000000  /* processor specific range */
#define DT_AUXILIARY    0x7ffffffd  /* shared library auxiliary name */
#define DT_USED     0x7ffffffe  /* ignored - same as needed */
#define DT_FILTER   0x7fffffff  /* shared library filter name */
#define DT_HIPROC   0x7fffffff

Возможно, здесь что-то планировалось, но, похоже, оно не реализовано (или раньшебыть и больше не будет).

...