[Lldb-commits] [clang] [lldb] [clang] Split ObjectFilePCHContainerReader from ObjectFilePCHContainerWriter (PR #99599)
https://github.com/ChuanqiXu9 closed https://github.com/llvm/llvm-project/pull/99599 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [lldb] [clang] Split ObjectFilePCHContainerReader from ObjectFilePCHContainerWriter (PR #99599)
https://github.com/ChuanqiXu9 updated https://github.com/llvm/llvm-project/pull/99599 >From 2249d5021fb3f9de213772603893e6fa2a0ff7f8 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Fri, 19 Jul 2024 11:02:36 +0800 Subject: [PATCH] [clang] Split ObjectFilePCHContainerReader from ObjectFilePCHContainerWriter Close https://github.com/llvm/llvm-project/issues/99479 See https://github.com/llvm/llvm-project/issues/99479 for details --- ...tions.h => ObjectFilePCHContainerWriter.h} | 10 +--- .../ObjectFilePCHContainerReader.h| 25 + clang/lib/CodeGen/CMakeLists.txt | 2 +- ...s.cpp => ObjectFilePCHContainerWriter.cpp} | 47 +--- clang/lib/Interpreter/Interpreter.cpp | 3 +- clang/lib/Interpreter/InterpreterUtils.h | 1 - clang/lib/Serialization/CMakeLists.txt| 2 + .../ObjectFilePCHContainerReader.cpp | 56 +++ .../Tooling/DependencyScanning/CMakeLists.txt | 1 - .../DependencyScanningWorker.cpp | 2 +- clang/tools/c-index-test/CMakeLists.txt | 1 - clang/tools/c-index-test/core_main.cpp| 2 +- clang/tools/clang-check/ClangCheck.cpp| 1 - clang/tools/driver/cc1_main.cpp | 3 +- lldb/source/Commands/CommandObjectTarget.cpp | 2 +- lldb/tools/lldb-instr/Instrument.cpp | 3 +- 16 files changed, 96 insertions(+), 65 deletions(-) rename clang/include/clang/CodeGen/{ObjectFilePCHContainerOperations.h => ObjectFilePCHContainerWriter.h} (74%) create mode 100644 clang/include/clang/Serialization/ObjectFilePCHContainerReader.h rename clang/lib/CodeGen/{ObjectFilePCHContainerOperations.cpp => ObjectFilePCHContainerWriter.cpp} (89%) create mode 100644 clang/lib/Serialization/ObjectFilePCHContainerReader.cpp diff --git a/clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h b/clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h similarity index 74% rename from clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h rename to clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h index 7a02d8725885a..26ee9f22258c1 100644 --- a/clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h +++ b/clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h @@ -1,4 +1,4 @@ -//===-- CodeGen/ObjectFilePCHContainerOperations.h - *- C++ -*-===// +//===-- CodeGen/ObjectFilePCHContainerWriter.h --*- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -29,14 +29,6 @@ class ObjectFilePCHContainerWriter : public PCHContainerWriter { std::shared_ptr Buffer) const override; }; -/// A PCHContainerReader implementation that uses LLVM to -/// wraps Clang modules inside a COFF, ELF, or Mach-O container. -class ObjectFilePCHContainerReader : public PCHContainerReader { - ArrayRef getFormats() const override; - - /// Returns the serialized AST inside the PCH container Buffer. - StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; -}; } #endif diff --git a/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h b/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h new file mode 100644 index 0..6281a3f428869 --- /dev/null +++ b/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h @@ -0,0 +1,25 @@ +//===-- Serialization/ObjectFilePCHContainerReader.h *- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// + +#ifndef LLVM_CLANG_SERIALIZATION_OBJECTFILEPCHCONTAINERREADER_H +#define LLVM_CLANG_SERIALIZATION_OBJECTFILEPCHCONTAINERREADER_H + +#include "clang/Frontend/PCHContainerOperations.h" + +namespace clang { +/// A PCHContainerReader implementation that uses LLVM to +/// wraps Clang modules inside a COFF, ELF, or Mach-O container. +class ObjectFilePCHContainerReader : public PCHContainerReader { + ArrayRef getFormats() const override; + + /// Returns the serialized AST inside the PCH container Buffer. + StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; +}; +} // namespace clang + +#endif diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index 2a179deddcc31..deb7b27266d73 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -110,7 +110,7 @@ add_clang_library(clangCodeGen MacroPPCallbacks.cpp MicrosoftCXXABI.cpp ModuleBuilder.cpp - ObjectFilePCHContainerOperations.cpp + ObjectFilePCHContainerWriter.cpp PatternInit.cpp SanitizerMetadata.cpp SwiftCallingConv.cpp diff --git a/clang/lib/CodeGen/ObjectFilePCHContainerOperations.cpp
[Lldb-commits] [clang] [lldb] [clang] Split ObjectFilePCHContainerReader from ObjectFilePCHContainerWriter (PR #99599)
https://github.com/ChuanqiXu9 created https://github.com/llvm/llvm-project/pull/99599 Close https://github.com/llvm/llvm-project/issues/99479 See https://github.com/llvm/llvm-project/issues/99479 for details >From 36e24bd88649e9d5771f1dbb668632d33ffe52d7 Mon Sep 17 00:00:00 2001 From: Chuanqi Xu Date: Fri, 19 Jul 2024 11:02:36 +0800 Subject: [PATCH] [clang] Split ObjectFilePCHContainerReader from ObjectFilePCHContainerWriter Close https://github.com/llvm/llvm-project/issues/99479 See https://github.com/llvm/llvm-project/issues/99479 for details --- ...tions.h => ObjectFilePCHContainerWriter.h} | 10 +--- .../ObjectFilePCHContainerReader.h| 26 + clang/lib/CodeGen/CMakeLists.txt | 2 +- ...s.cpp => ObjectFilePCHContainerWriter.cpp} | 47 +--- clang/lib/Interpreter/Interpreter.cpp | 3 +- clang/lib/Interpreter/InterpreterUtils.h | 1 - clang/lib/Serialization/CMakeLists.txt| 2 + .../ObjectFilePCHContainerReader.cpp | 56 +++ .../Tooling/DependencyScanning/CMakeLists.txt | 1 - .../DependencyScanningWorker.cpp | 2 +- clang/tools/c-index-test/CMakeLists.txt | 1 - clang/tools/c-index-test/core_main.cpp| 2 +- clang/tools/clang-check/ClangCheck.cpp| 1 - clang/tools/driver/cc1_main.cpp | 3 +- lldb/source/Commands/CommandObjectTarget.cpp | 2 +- lldb/tools/lldb-instr/Instrument.cpp | 3 +- 16 files changed, 97 insertions(+), 65 deletions(-) rename clang/include/clang/CodeGen/{ObjectFilePCHContainerOperations.h => ObjectFilePCHContainerWriter.h} (73%) create mode 100644 clang/include/clang/Serialization/ObjectFilePCHContainerReader.h rename clang/lib/CodeGen/{ObjectFilePCHContainerOperations.cpp => ObjectFilePCHContainerWriter.cpp} (89%) create mode 100644 clang/lib/Serialization/ObjectFilePCHContainerReader.cpp diff --git a/clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h b/clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h similarity index 73% rename from clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h rename to clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h index 7a02d8725885a..5aef4a2d23de0 100644 --- a/clang/include/clang/CodeGen/ObjectFilePCHContainerOperations.h +++ b/clang/include/clang/CodeGen/ObjectFilePCHContainerWriter.h @@ -1,4 +1,4 @@ -//===-- CodeGen/ObjectFilePCHContainerOperations.h - *- C++ -*-===// +//===-- CodeGen/ObjectFilePCHContainerWriter.h - *- C++ -*-===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. @@ -29,14 +29,6 @@ class ObjectFilePCHContainerWriter : public PCHContainerWriter { std::shared_ptr Buffer) const override; }; -/// A PCHContainerReader implementation that uses LLVM to -/// wraps Clang modules inside a COFF, ELF, or Mach-O container. -class ObjectFilePCHContainerReader : public PCHContainerReader { - ArrayRef getFormats() const override; - - /// Returns the serialized AST inside the PCH container Buffer. - StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; -}; } #endif diff --git a/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h b/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h new file mode 100644 index 0..65b90299545f7 --- /dev/null +++ b/clang/include/clang/Serialization/ObjectFilePCHContainerReader.h @@ -0,0 +1,26 @@ +//===-- Serialization/ObjectFilePCHContainerReader.h *- C++ -*-===// +// +// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. +// See https://llvm.org/LICENSE.txt for license information. +// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception +// +//===--===// + + +#ifndef LLVM_CLANG_SERIALIZATION_OBJECTFILEPCHCONTAINERREADER_H +#define LLVM_CLANG_SERIALIZATION_OBJECTFILEPCHCONTAINERREADER_H + +#include "clang/Frontend/PCHContainerOperations.h" + +namespace clang { +/// A PCHContainerReader implementation that uses LLVM to +/// wraps Clang modules inside a COFF, ELF, or Mach-O container. +class ObjectFilePCHContainerReader : public PCHContainerReader { + ArrayRef getFormats() const override; + + /// Returns the serialized AST inside the PCH container Buffer. + StringRef ExtractPCH(llvm::MemoryBufferRef Buffer) const override; +}; +} + +#endif \ No newline at end of file diff --git a/clang/lib/CodeGen/CMakeLists.txt b/clang/lib/CodeGen/CMakeLists.txt index 2a179deddcc31..deb7b27266d73 100644 --- a/clang/lib/CodeGen/CMakeLists.txt +++ b/clang/lib/CodeGen/CMakeLists.txt @@ -110,7 +110,7 @@ add_clang_library(clangCodeGen MacroPPCallbacks.cpp MicrosoftCXXABI.cpp ModuleBuilder.cpp - ObjectFilePCHContainerOperations.cpp + ObjectFilePCHContainerWriter.cpp PatternInit.cpp
[Lldb-commits] [clang] [clang-tools-extra] [libcxx] [lldb] [llvm] Add clang basic module directory (PR #93388)
ChuanqiXu9 wrote: BTW, I tried to split `Module` class into `ModuleBase`, `ClangModule` and `Cpp20Modules` (and HeaderUnits) classes to improve the readability. But it showed too hard and too many things get changes then I stopped. https://github.com/llvm/llvm-project/pull/93388 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [clang-tools-extra] [libcxx] [lldb] [llvm] Add clang basic module directory (PR #93388)
https://github.com/ChuanqiXu9 edited https://github.com/llvm/llvm-project/pull/93388 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [clang-tools-extra] [libcxx] [lldb] [llvm] Add clang basic module directory (PR #93388)
https://github.com/ChuanqiXu9 requested changes to this pull request. I don't like the PR since I don't feel it makes the code cleaner and it may make the downstream suffering backporting. https://github.com/llvm/llvm-project/pull/93388 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [clang] [clang-tools-extra] [compiler-rt] [lldb] [llvm] [mlir] [openmp] [polly] fix(python): fix comparison to None (PR #91857)
https://github.com/ChuanqiXu9 approved this pull request. https://github.com/llvm/llvm-project/pull/91857 ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits
[Lldb-commits] [lldb] fd37d48 - Set error message if ValueObjectRegister fails to write back to register
Author: Ilya Nozhkin Date: 2022-02-28T14:29:29+08:00 New Revision: fd37d489cfef3bf7d06b2b43dac2ad1381cdc56b URL: https://github.com/llvm/llvm-project/commit/fd37d489cfef3bf7d06b2b43dac2ad1381cdc56b DIFF: https://github.com/llvm/llvm-project/commit/fd37d489cfef3bf7d06b2b43dac2ad1381cdc56b.diff LOG: Set error message if ValueObjectRegister fails to write back to register SetValueFromCString and SetData methods return false if register can't be written but they don't set a error message. It sometimes confuses callers of these methods because they try to get the error message in case of failure but Status::AsCString returns nullptr. For example, lldb-vscode crashes due to this bug if some register can't be written. It invokes SBError::GetCString in case of error and doesn't check whether the result is nullptr (see request_setVariable implementation in lldb-vscode.cpp for more info). Reviewed By: labath, clayborg Differential Revision: https://reviews.llvm.org/D120319 Added: Modified: lldb/source/Core/ValueObjectRegister.cpp lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py Removed: diff --git a/lldb/source/Core/ValueObjectRegister.cpp b/lldb/source/Core/ValueObjectRegister.cpp index fc436385e2455..e342f7265dfb1 100644 --- a/lldb/source/Core/ValueObjectRegister.cpp +++ b/lldb/source/Core/ValueObjectRegister.cpp @@ -269,26 +269,30 @@ bool ValueObjectRegister::SetValueFromCString(const char *value_str, // The new value will be in the m_data. Copy that into our register value. error = m_reg_value.SetValueFromString(_reg_info, llvm::StringRef(value_str)); - if (error.Success()) { -if (m_reg_ctx_sp->WriteRegister(_reg_info, m_reg_value)) { - SetNeedsUpdate(); - return true; -} else - return false; - } else + if (!error.Success()) return false; + + if (!m_reg_ctx_sp->WriteRegister(_reg_info, m_reg_value)) { +error.SetErrorString("unable to write back to register"); +return false; + } + + SetNeedsUpdate(); + return true; } bool ValueObjectRegister::SetData(DataExtractor , Status ) { error = m_reg_value.SetValueFromData(_reg_info, data, 0, false); - if (error.Success()) { -if (m_reg_ctx_sp->WriteRegister(_reg_info, m_reg_value)) { - SetNeedsUpdate(); - return true; -} else - return false; - } else + if (!error.Success()) return false; + + if (!m_reg_ctx_sp->WriteRegister(_reg_info, m_reg_value)) { +error.SetErrorString("unable to write back to register"); +return false; + } + + SetNeedsUpdate(); + return true; } bool ValueObjectRegister::ResolveValue(Scalar ) { diff --git a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py index 46ecf2e5faeb8..d1948b6752753 100644 --- a/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py +++ b/lldb/test/API/functionalities/postmortem/elf-core/TestLinuxCore.py @@ -133,6 +133,29 @@ def test_read_memory(self): self.assertEqual(len(bytesread), 16) self.dbg.DeleteTarget(target) +@skipIfLLVMTargetMissing("X86") +def test_write_register(self): +"""Test that writing to register results in an error and that error + message is set.""" +target = self.dbg.CreateTarget("linux-x86_64.out") +process = target.LoadCore("linux-x86_64.core") +self.assertTrue(process, PROCESS_IS_VALID) + +thread = process.GetSelectedThread() +self.assertTrue(thread) + +frame = thread.GetSelectedFrame() +self.assertTrue(frame) + +reg_value = frame.FindRegister('eax') +self.assertTrue(reg_value) + +error = lldb.SBError() +success = reg_value.SetValueFromCString('10', error) +self.assertFalse(success) +self.assertTrue(error.Fail()) +self.assertIsNotNone(error.GetCString()) + @skipIfLLVMTargetMissing("X86") def test_FPR_SSE(self): # check x86_64 core file ___ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits