[PATCH] D58762: [BinaryFormat] Add DT_USED tag into dynamic section.

Xing via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Feb 27 23:02:41 PST 2019


Higuoxing created this revision.
Higuoxing added reviewers: jhenderson, grimar.
Herald added subscribers: llvm-commits, fedor.sergeev, krytarowski, emaste.
Herald added a project: LLVM.
Higuoxing retitled this revision from "[BinaryFormat] Add DT_USED tag into dynamic section.

<<Replace this line with your revision title>" to "[BinaryFormat] Add DT_USED tag into dynamic section.".

This tag is documented in https://docs.oracle.com/cd/E19253-01/817-1984/chapter6-42444/index.html 
Though I could not find some docs that describe it in detail, I found some code snippets.

1.

  	/*
  	 * Look up the string in the string table and get its offset. If
  	 * this succeeds, then it is possible that there is a DT_NEEDED
  	 * dynamic entry that references it.
  	 */
  	have_string = elfedit_sec_findstr(argstate->str.sec,
  	    strpad_elt.dn_dyn.d_un.d_val, arg, &str_offset) != 0;
  	if (have_string) {
  		dyn = argstate->dynamic.data;
  		for (ndx = 0; ndx < numdyn; dyn++, ndx++) {
  			if (((dyn->d_tag == DT_NEEDED) ||
  			    (dyn->d_tag == DT_USED)) &&
  			    (dyn->d_un.d_val == str_offset))
  				goto done;
  		}
  	}

https://github.com/kofemann/opensolaris/blob/80192cd83bf665e708269dae856f9145f7190f74/usr/src/cmd/sgs/elfedit/modules/common/syminfo.c#L512

1.

  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.

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

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


Repository:
  rL LLVM

https://reviews.llvm.org/D58762

Files:
  include/llvm/BinaryFormat/DynamicTags.def


Index: include/llvm/BinaryFormat/DynamicTags.def
===================================================================
--- include/llvm/BinaryFormat/DynamicTags.def
+++ include/llvm/BinaryFormat/DynamicTags.def
@@ -196,6 +196,7 @@
 
 // Sun machine-independent extensions.
 DYNAMIC_TAG(AUXILIARY, 0x7FFFFFFD) // Shared object to load before self
+DYNAMIC_TAG(USED, 0x7FFFFFFE)      // Same as DT_NEEDED
 DYNAMIC_TAG(FILTER, 0x7FFFFFFF)    // Shared object to get values from
 
 


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D58762.188679.patch
Type: text/x-patch
Size: 477 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190228/e1201a73/attachment.bin>


More information about the llvm-commits mailing list