packaging: support aarch64 build
[platform/upstream/binutils.git] / gold / reloc.h
index 973adb0..da14ec1 100644 (file)
@@ -1,7 +1,6 @@
 // reloc.h -- relocate input files for gold   -*- C++ -*-
 
-// Copyright 2006, 2007, 2008, 2009, 2010, 2011, 2012
-// Free Software Foundation, Inc.
+// Copyright (C) 2006-2014 Free Software Foundation, Inc.
 // Written by Ian Lance Taylor <iant@google.com>.
 
 // This file is part of gold.
@@ -38,7 +37,7 @@ namespace gold
 class General_options;
 class Object;
 class Relobj;
-class Read_relocs_data;
+struct Read_relocs_data;
 class Symbol;
 class Layout;
 class Output_data;
@@ -724,11 +723,11 @@ class Bits
 {
  public:
   // Sign extend an n-bit unsigned integer stored in a uint32_t into
-  // an int32_t.  BITS must be between 0 and 32.
+  // an int32_t.  BITS must be between 1 and 32.
   static inline int32_t
   sign_extend32(uint32_t val)
   {
-    gold_assert(bits >= 0 && bits <= 32);
+    gold_assert(bits > 0 && bits <= 32);
     if (bits == 32)
       return static_cast<int32_t>(val);
     uint32_t mask = (~static_cast<uint32_t>(0)) >> (32 - bits);
@@ -745,7 +744,7 @@ class Bits
   static inline bool
   has_overflow32(uint32_t val)
   {
-    gold_assert(bits >= 0 && bits <= 32);
+    gold_assert(bits > 0 && bits <= 32);
     if (bits == 32)
       return false;
     int32_t max = (1 << (bits - 1)) - 1;
@@ -761,7 +760,7 @@ class Bits
   static inline bool
   has_signed_unsigned_overflow32(uint32_t val)
   {
-    gold_assert(bits >= 0 && bits <= 32);
+    gold_assert(bits > 0 && bits <= 32);
     if (bits == 32)
       return false;
     int32_t max = static_cast<int32_t>((1U << bits) - 1);
@@ -778,11 +777,11 @@ class Bits
   { return (a & ~mask) | (b & mask); }
 
   // Sign extend an n-bit unsigned integer stored in a uint64_t into
-  // an int64_t.  BITS must be between 0 and 64.
+  // an int64_t.  BITS must be between 1 and 64.
   static inline int64_t
   sign_extend(uint64_t val)
   {
-    gold_assert(bits >= 0 && bits <= 64);
+    gold_assert(bits > 0 && bits <= 64);
     if (bits == 64)
       return static_cast<int64_t>(val);
     uint64_t mask = (~static_cast<uint64_t>(0)) >> (64 - bits);
@@ -799,7 +798,7 @@ class Bits
   static inline bool
   has_overflow(uint64_t val)
   {
-    gold_assert(bits >= 0 && bits <= 64);
+    gold_assert(bits > 0 && bits <= 64);
     if (bits == 64)
       return false;
     int64_t max = (static_cast<int64_t>(1) << (bits - 1)) - 1;
@@ -815,7 +814,7 @@ class Bits
   static inline bool
   has_signed_unsigned_overflow64(uint64_t val)
   {
-    gold_assert(bits >= 0 && bits <= 64);
+    gold_assert(bits > 0 && bits <= 64);
     if (bits == 64)
       return false;
     int64_t max = static_cast<int64_t>((static_cast<uint64_t>(1) << bits) - 1);
@@ -873,6 +872,16 @@ class Track_relocs
   int
   advance(off_t offset);
 
+  // Checkpoint the current position in the reloc section.
+  section_size_type
+  checkpoint() const
+  { return this->pos_; }
+
+  // Reset the position to CHECKPOINT.
+  void
+  reset(section_size_type checkpoint)
+  { this->pos_ = checkpoint; }
+
  private:
   // The contents of the input object's reloc section.
   const unsigned char* prelocs_;