include:
authorRainer Orth <ro@TechFak.Uni-Bielefeld.DE>
Fri, 5 Mar 2010 21:04:59 +0000 (21:04 +0000)
committerRainer Orth <ro@TechFak.Uni-Bielefeld.DE>
Fri, 5 Mar 2010 21:04:59 +0000 (21:04 +0000)
* elf/common.h (VER_FLG_*): Document.
(VER_FLG_INFO): Define.

gold:
* dynobj.h (Verdef::Verdef): Add is_info arg, is_info member
function, is_info_ member.
* dynobj.cc (Verdef::write): Set VER_FLG_INFO if this->is_info_.
(Versions::Versions): Update caller.
(Versions::define_base_version): Likewise.
(Versions::add_def): Likewise.

elfcpp:
* elfcpp.h (VER_FLG_INFO): Define.

binutils:
* readelf.c (get_ver_flags): Handle VER_FLG_INFO.

binutils/ChangeLog
binutils/readelf.c
elfcpp/ChangeLog
elfcpp/elfcpp.h
gold/ChangeLog
gold/dynobj.cc
gold/dynobj.h
include/ChangeLog
include/elf/common.h

index 3d47c3c12e90582242ce0917a433a3078c836138..128454ccc9f520996425509fa20230f1b7f6e86e 100644 (file)
@@ -1,3 +1,7 @@
+2010-03-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * readelf.c (get_ver_flags): Handle VER_FLG_INFO.
+
 2010-03-02  Daniel Jacobowitz  <dan@codesourcery.com>
 
        * NEWS: Document .ARM.exidx / .ARM.extab support.
index 2c677598f9b59534f64a9878d2034d5cfac091b0..e3b54873ad65b95c7237cd176f90380cd8a25fcd 100644 (file)
@@ -7267,7 +7267,15 @@ get_ver_flags (unsigned int flags)
       strcat (buff, "WEAK ");
     }
 
-  if (flags & ~(VER_FLG_BASE | VER_FLG_WEAK))
+  if (flags & VER_FLG_INFO)
+    {
+      if (flags & (VER_FLG_BASE|VER_FLG_WEAK))
+       strcat (buff, "| ");
+
+      strcat (buff, "INFO ");
+    }
+
+  if (flags & ~(VER_FLG_BASE | VER_FLG_WEAK | VER_FLG_INFO))
     strcat (buff, "| <unknown>");
 
   return buff;
index a6c75cd184b4fb3edf83f0b30c660c6fc9457bf2..6f97d25ea1253aad4a4e532c3af8f8880f967520 100644 (file)
@@ -1,3 +1,7 @@
+2010-03-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * elfcpp.h (VER_FLG_INFO): Define.
+
 2010-01-21  Doug Kwan  <dougkwan@google.com>
 
        * arm.h (EXIDX_CANTUNWIND): New enum.
index 8ecbc0ae4cdfbaa9380ed36d23b85cc2abba1500..52b8b2534ee8671e445bb15b238eccdf7688c0e0 100644 (file)
@@ -1,6 +1,6 @@
 // elfcpp.h -- main header file for elfcpp    -*- C++ -*-
 
-// Copyright 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
+// Copyright 2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of elfcpp.
@@ -784,6 +784,7 @@ const int VER_NEED_CURRENT = 1;
 
 const int VER_FLG_BASE = 0x1;
 const int VER_FLG_WEAK = 0x2;
+const int VER_FLG_INFO = 0x4;
 
 // Special constants found in the SHT_GNU_versym entries.
 
index 33b730768be4909de4312a90b00d7e6aa7aaa940..c96650a23367b6725809f104c36d1c7dd99df7c1 100644 (file)
@@ -1,3 +1,12 @@
+2010-03-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * dynobj.h (Verdef::Verdef): Add is_info arg, is_info member
+       function, is_info_ member.
+       * dynobj.cc (Verdef::write): Set VER_FLG_INFO if this->is_info_.
+       (Versions::Versions): Update caller.
+       (Versions::define_base_version): Likewise.
+       (Versions::add_def): Likewise.
+
 2010-03-03  Sriraman Tallam  <tmsriram@google.com>
 
        * i386.cc (Target_i386::can_check_for_function_pointers): New function.
index dc6b009f49034764c8616592a1552713ee6e3f8a..fca9bbdf613cea35d2cb323e8850ddd2923a34d1 100644 (file)
@@ -1221,7 +1221,8 @@ Verdef::write(const Stringpool* dynpool, bool is_last, unsigned char* pb) const
   elfcpp::Verdef_write<size, big_endian> vd(pb);
   vd.set_vd_version(elfcpp::VER_DEF_CURRENT);
   vd.set_vd_flags((this->is_base_ ? elfcpp::VER_FLG_BASE : 0)
-                 | (this->is_weak_ ? elfcpp::VER_FLG_WEAK : 0));
+                 | (this->is_weak_ ? elfcpp::VER_FLG_WEAK : 0)
+                 | (this->is_info_ ? elfcpp::VER_FLG_INFO : 0));
   vd.set_vd_ndx(this->index());
   vd.set_vd_cnt(1 + this->deps_.size());
   vd.set_vd_hash(Dynobj::elf_hash(this->name()));
@@ -1353,7 +1354,7 @@ Versions::Versions(const Version_script_info& version_script,
           Verdef* const vd = new Verdef(
               version,
               this->version_script_.get_dependencies(version),
-              false, false, false);
+              false, false, false, false);
           this->defs_.push_back(vd);
           Key key(version_key, 0);
           this->version_table_.insert(std::make_pair(key, vd));
@@ -1391,7 +1392,7 @@ Versions::define_base_version(Stringpool* dynpool)
     name = parameters->options().output_file_name();
   name = dynpool->add(name, false, NULL);
   Verdef* vdbase = new Verdef(name, std::vector<std::string>(),
-                              true, false, true);
+                              true, false, false, true);
   this->defs_.push_back(vdbase);
   this->needs_base_version_ = false;
 }
@@ -1474,7 +1475,7 @@ Versions::add_def(const Symbol* sym, const char* version,
       // When creating a regular executable, automatically define
       // a new version.
       Verdef* vd = new Verdef(version, std::vector<std::string>(),
-                              false, false, false);
+                              false, false, false, false);
       this->defs_.push_back(vd);
       ins.first->second = vd;
     }
index 71d1b68f60cf7963660fd13a2abc29a271a98575..bc69187571ea849b1d316b90b2c64afe37b927f3 100644 (file)
@@ -360,9 +360,9 @@ class Verdef : public Version_base
 {
  public:
   Verdef(const char* name, const std::vector<std::string>& deps,
-         bool is_base, bool is_weak, bool is_symbol_created)
+         bool is_base, bool is_weak, bool is_info, bool is_symbol_created)
     : name_(name), deps_(deps), is_base_(is_base), is_weak_(is_weak),
-      is_symbol_created_(is_symbol_created)
+      is_info_(is_info), is_symbol_created_(is_symbol_created)
   { }
 
   // Return the version name.
@@ -391,6 +391,11 @@ class Verdef : public Version_base
   clear_weak()
   { this->is_weak_ = false; }
 
+  // Return whether this definition is informational.
+  bool
+  is_info() const
+  { return this->is_info_; }
+
   // Return whether a version symbol has been created for this
   // definition.
   bool
@@ -419,6 +424,8 @@ class Verdef : public Version_base
   bool is_base_;
   // Whether this version is weak.
   bool is_weak_;
+  // Whether this version is informational.
+  bool is_info_;
   // Whether a version symbol has been created.
   bool is_symbol_created_;
 };
index 64f6e1fbdbce9176bd908c8cc6da2ec8fe541c12..f153061e3491c4e53f880f99252c225957b76383 100644 (file)
@@ -1,3 +1,8 @@
+2010-03-05  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
+
+       * elf/common.h (VER_FLG_*): Document.
+       (VER_FLG_INFO): Define.
+
 2010-02-08  David S. Miller  <davem@davemloft.net>
 
        * elf/sparc.h (R_SPARC_JMP_IREL, R_SPARC_IRELATIVE): Define.
index e7ffac4b7b6a67e272b06c9c5ae300e04c29d981..6bad0d93c6836b1972296d640d8e3e19e7bf08b9 100644 (file)
 #define VER_DEF_CURRENT                1
 
 /* These constants appear in the vd_flags field of a Elf32_Verdef
-   structure.  */
+   structure.
+
+   Cf. the Solaris Linker and Libraries Guide, Ch. 7, Object File Format,
+   Versioning Sections, for a description:
+
+   http://docs.sun.com/app/docs/doc/819-0690/chapter6-93046?l=en&a=view  */
 
 #define VER_FLG_BASE           0x1
 #define VER_FLG_WEAK           0x2
+#define VER_FLG_INFO           0x4
 
 /* These special constants can be found in an Elf32_Versym field.  */