Update prebuilt Clang to r416183b from Android.

https://android.googlesource.com/platform/prebuilts/clang/host/
linux-x86/+/06a71ddac05c22edb2d10b590e1769b3f8619bef

clang 12.0.5 (based on r416183b) from build 7284624.

Change-Id: I277a316abcf47307562d8b748b84870f31a72866
Signed-off-by: Olivier Deprez <olivier.deprez@arm.com>
diff --git a/linux-x64/clang/include/lldb/Symbol/ObjectFile.h b/linux-x64/clang/include/lldb/Symbol/ObjectFile.h
index 84683e3..080724c 100644
--- a/linux-x64/clang/include/lldb/Symbol/ObjectFile.h
+++ b/linux-x64/clang/include/lldb/Symbol/ObjectFile.h
@@ -6,8 +6,8 @@
 //
 //===----------------------------------------------------------------------===//
 
-#ifndef liblldb_ObjectFile_h_
-#define liblldb_ObjectFile_h_
+#ifndef LLDB_SYMBOL_OBJECTFILE_H
+#define LLDB_SYMBOL_OBJECTFILE_H
 
 #include "lldb/Core/FileSpecList.h"
 #include "lldb/Core/ModuleChild.h"
@@ -63,16 +63,22 @@
 public:
   enum Type {
     eTypeInvalid = 0,
-    eTypeCoreFile,      /// A core file that has a checkpoint of a program's
-                        /// execution state
-    eTypeExecutable,    /// A normal executable
-    eTypeDebugInfo,     /// An object file that contains only debug information
-    eTypeDynamicLinker, /// The platform's dynamic linker executable
-    eTypeObjectFile,    /// An intermediate object file
-    eTypeSharedLibrary, /// A shared library that can be used during execution
-    eTypeStubLibrary, /// A library that can be linked against but not used for
-                      /// execution
-    eTypeJIT, /// JIT code that has symbols, sections and possibly debug info
+    /// A core file that has a checkpoint of a program's execution state.
+    eTypeCoreFile,
+    /// A normal executable.
+    eTypeExecutable,
+    /// An object file that contains only debug information.
+    eTypeDebugInfo,
+    /// The platform's dynamic linker executable.
+    eTypeDynamicLinker,
+    /// An intermediate object file.
+    eTypeObjectFile,
+    /// A shared library that can be used during execution.
+    eTypeSharedLibrary,
+    /// A library that can be linked against but not used for execution.
+    eTypeStubLibrary,
+    /// JIT code that has symbols, sections and possibly debug info.
+    eTypeJIT,
     eTypeUnknown
   };
 
@@ -85,6 +91,17 @@
     eStrataJIT
   };
 
+  /// If we have a corefile binary hint, this enum
+  /// specifies the binary type which we can use to
+  /// select the correct DynamicLoader plugin.
+  enum BinaryType {
+    eBinaryTypeInvalid = 0,
+    eBinaryTypeUnknown,
+    eBinaryTypeKernel,    /// kernel binary
+    eBinaryTypeUser,      /// user process binary
+    eBinaryTypeStandalone /// standalone binary / firmware
+  };
+
   struct LoadableData {
     lldb::addr_t Dest;
     llvm::ArrayRef<uint8_t> Contents;
@@ -124,7 +141,7 @@
   /// ObjectFile plug-in interface and returns the first instance that can
   /// parse the file.
   ///
-  /// \param[in] module
+  /// \param[in] module_sp
   ///     The parent module that owns this object file.
   ///
   /// \param[in] file_spec
@@ -152,7 +169,7 @@
   /// ObjectFile plug-in interface and returns the first instance that can
   /// parse the file.
   ///
-  /// \param[in] module
+  /// \param[in] module_sp
   ///     The parent module that owns this object file.
   ///
   /// \param[in] process_sp
@@ -166,10 +183,10 @@
                                        lldb::addr_t header_addr,
                                        lldb::DataBufferSP &file_data_sp);
 
-  static size_t GetModuleSpecifications(const FileSpec &file,
-                                        lldb::offset_t file_offset,
-                                        lldb::offset_t file_size,
-                                        ModuleSpecList &specs);
+  static size_t
+  GetModuleSpecifications(const FileSpec &file, lldb::offset_t file_offset,
+                          lldb::offset_t file_size, ModuleSpecList &specs,
+                          lldb::DataBufferSP data_sp = lldb::DataBufferSP());
 
   static size_t GetModuleSpecifications(const lldb_private::FileSpec &file,
                                         lldb::DataBufferSP &data_sp,
@@ -201,9 +218,13 @@
   ///     \b false otherwise and \a archive_file and \a archive_object
   ///     are guaranteed to be remain unchanged.
   static bool SplitArchivePathWithObject(
-      const char *path_with_object, lldb_private::FileSpec &archive_file,
+      llvm::StringRef path_with_object, lldb_private::FileSpec &archive_file,
       lldb_private::ConstString &archive_object, bool must_exist);
 
+  // LLVM RTTI support
+  static char ID;
+  virtual bool isA(const void *ClassID) const { return ClassID == &ID; }
+
   /// Gets the address size in bytes for the current object file.
   ///
   /// \return
@@ -346,13 +367,6 @@
   /// Frees the symbol table.
   ///
   /// This function should only be used when an object file is
-  ///
-  /// \param[in] flags
-  ///     eSymtabFromUnifiedSectionList: Whether to clear symbol table
-  ///     for unified module section list, or object file.
-  ///
-  /// \return
-  ///     The symbol table for this object file.
   virtual void ClearSymtab();
 
   /// Gets the UUID for this object file.
@@ -366,17 +380,6 @@
   ///     returned.
   virtual UUID GetUUID() = 0;
 
-  /// Gets the symbol file spec list for this object file.
-  ///
-  /// If the object file format contains a debug symbol file link, the values
-  /// will be returned in the FileSpecList.
-  ///
-  /// \return
-  ///     Returns filespeclist.
-  virtual lldb_private::FileSpecList GetDebugSymbolFilePaths() {
-    return FileSpecList();
-  }
-
   /// Gets the file spec list of libraries re-exported by this object file.
   ///
   /// If the object file format has the notion of one library re-exporting the
@@ -488,8 +491,8 @@
   /// \return
   ///     Returns the identifier string if one exists, else an empty
   ///     string.
-  virtual std::string GetIdentifierString () { 
-      return std::string(); 
+  virtual std::string GetIdentifierString () {
+      return std::string();
   }
 
   /// When the ObjectFile is a core file, lldb needs to locate the "binary" in
@@ -508,12 +511,17 @@
   ///   If the uuid of the binary is specified, this will be set.
   ///   If no UUID is available, will be cleared.
   ///
+  /// \param[out] type
+  ///   Return the type of the binary, which will dictate which
+  ///   DynamicLoader plugin should be used.
+  ///
   /// \return
   ///   Returns true if either address or uuid has been set.
-  virtual bool GetCorefileMainBinaryInfo (lldb::addr_t &address, UUID &uuid) {
-      address = LLDB_INVALID_ADDRESS;
-      uuid.Clear();
-      return false;
+  virtual bool GetCorefileMainBinaryInfo(lldb::addr_t &address, UUID &uuid,
+                                         ObjectFile::BinaryType &type) {
+    address = LLDB_INVALID_ADDRESS;
+    uuid.Clear();
+    return false;
   }
 
   virtual lldb::RegisterContextSP
@@ -653,10 +661,11 @@
   ///
   /// \param[in] target
   ///     Target where to load.
-  ///
-  /// \return
   virtual std::vector<LoadableData> GetLoadableData(Target &target);
 
+  /// Creates a plugin-specific call frame info
+  virtual std::unique_ptr<CallFrameInfo> CreateCallFrameInfo();
+
 protected:
   // Member variables.
   FileSpec m_file;
@@ -693,7 +702,8 @@
                                         uint64_t Offset);
 
 private:
-  DISALLOW_COPY_AND_ASSIGN(ObjectFile);
+  ObjectFile(const ObjectFile &) = delete;
+  const ObjectFile &operator=(const ObjectFile &) = delete;
 };
 
 } // namespace lldb_private
@@ -710,4 +720,4 @@
 };
 } // namespace llvm
 
-#endif // liblldb_ObjectFile_h_
+#endif // LLDB_SYMBOL_OBJECTFILE_H