[RFC,v4,4/6] Handle DT_GNU_FLAGS_1 in readelf

Message ID 8cc812042ab7d50b9e384db52e938d325ea5233a.1594308458.git.vivek@collabora.com
State New
Headers show
Series
  • binutils patches for DT_GNU_FLAGS_1/DF_GNU_1_UNIQUE
Related show

Commit Message

Alan Modra via Binutils July 9, 2020, 3:29 p.m.
---
 binutils/readelf.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

-- 
2.11.0

Patch

diff --git a/binutils/readelf.c b/binutils/readelf.c
index 0feeed9831..1c26de5726 100644
--- a/binutils/readelf.c
+++ b/binutils/readelf.c
@@ -2229,6 +2229,7 @@  get_dynamic_type (Filedata * filedata, unsigned long type)
     case DT_GNU_LIBLIST: return "GNU_LIBLIST";
     case DT_GNU_LIBLISTSZ: return "GNU_LIBLISTSZ";
     case DT_GNU_HASH:	return "GNU_HASH";
+    case DT_GNU_FLAGS_1: return "GNU_FLAGS_1";
 
     default:
       if ((type >= DT_LOPROC) && (type <= DT_HIPROC))
@@ -10941,6 +10942,28 @@  the .dynstr section doesn't match the DT_STRTAB and DT_STRSZ tags\n"));
 	    }
 	  break;
 
+        case DT_GNU_FLAGS_1:
+	  if (do_dynamic)
+	    {
+	      printf (_("Flags:"));
+	      if (entry->d_un.d_val == 0)
+		printf (_(" None\n"));
+	      else
+		{
+		  unsigned long int val = entry->d_un.d_val;
+
+		  if (val & DF_GNU_1_UNIQUE)
+		    {
+		      printf (" UNIQUE");
+		      val ^= DF_GNU_1_UNIQUE;
+		    }
+		  if (val != 0)
+		    printf (" %lx", val);
+		  puts ("");
+		}
+	    }
+          break;
+
 	default:
 	  if ((entry->d_tag >= DT_VERSYM) && (entry->d_tag <= DT_VERNEEDNUM))
 	    filedata->version_info[DT_VERSIONTAGIDX (entry->d_tag)]