Commit Graph

18692 Commits

Author SHA1 Message Date
Michal Gorny e47f89cb2c [lldb] [cmake] Use install directories for LLVM_* variables
Restore the previous behavior of using install directories for
LLVM_MAIN_INCLUDE_DIR, LLVM_LIBRARY_DIR and LLVM_BINARY_DIR.  The update
from llvm-config to CMake has changed the values of those values to use
LLVM_BUILD_* which is plain wrong and breaks stand-alone builds.
Instead, use the CMake counterparts of the values returned
by llvm-config.

Differential Revision: https://reviews.llvm.org/D57995

llvm-svn: 353925
2019-02-13 08:34:46 +00:00
Pavel Labath 7db8b5c4bd ObjectFilePECOFF: Create a "container" section spanning the entire module image
Summary:
This is coming from the discussion in D55356 (the most interesting part
happened on the mailing list, so it isn't reflected on the review page).

In short the issue is that lldb assumes that all bytes of a module image
in memory will be backed by a "section". This isn't the case for PECOFF
files because the initial bytes of the module image will contain the
file header, which does not correspond to any normal section in the
file. In particular, this means it is not possible to implement
GetBaseAddress function for PECOFF files, because that's supposed point
to the first byte of that header.

If my (limited) understanding of how PECOFF files work is correct, then
the OS is expecded to load the entire module into one continuous chunk
of memory. The address of that chunk (+/- ASLR) is given by the "image
base" field in the COFF header, and it's size by "image size". All of
the COFF sections are then loaded into this range.

If that's true, then we can model this behavior in lldb by creating a
"container" section to represent the entire module image, and then place
other sections inside that. This would make be consistent with how MachO
and ELF files are modelled (except that those can have multiple
top-level containers as they can be loaded into multiple discontinuous
chunks of memory).

This change required a small number of fixups in the PDB plugins, which
assumed a certain order of sections within the object file (which
obivously changes now). I fix this by changing the lookup code to use
section IDs (which are unchanged) instead of indexes. This has the nice
benefit of removing spurious -1s in the plugins as the section IDs in
the pdbs match the 1-based section IDs in the COFF plugin.

Besides making the implementation of GetBaseAddress possible, this also
improves the lookup of addresses in the gaps between the object file
sections, which will now be correctly resolved as belonging to the
object file.

Reviewers: zturner, amccarth, stella.stamenova, clayborg, lemo

Reviewed By: clayborg, lemo

Subscribers: JDevlieghere, abidh, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D56537

llvm-svn: 353916
2019-02-13 07:17:24 +00:00
Jonas Devlieghere d5b440369d Replace 'ap' with 'up' suffix in variable names. (NFC)
The `ap` suffix is a remnant of lldb's former use of auto pointers,
before they got deprecated. Although all their uses were replaced by
unique pointers, some variables still carried the suffix.

In r353795 I removed another auto_ptr remnant, namely redundant calls to
::get for unique_pointers. Jim justly noted that this is a good
opportunity to clean up the variable names as well.

I went over all the changes to ensure my find-and-replace didn't have
any undesired side-effects. I hope I didn't miss any, but if you end up
at this commit doing a git blame on a weirdly named variable, please
know that the change was unintentional.

llvm-svn: 353912
2019-02-13 06:25:41 +00:00
Jonas Devlieghere 63e2e59b89 [Reproducers] Integrate FileProvider with clang
This patch hooks up clang and lldb's reproducers functionality. It
ensures that when capturing a reproducer, headers and modules imported
through the expression parser are collected.

Differential revision: https://reviews.llvm.org/D58076

llvm-svn: 353906
2019-02-13 01:30:41 +00:00
Davide Italiano 3eac27789d [testsuite] Add a comment explaining what this test does.
llvm-svn: 353896
2019-02-12 23:02:53 +00:00
Davide Italiano caade28362 [testsuite] Convert TestSingleQuote to lit.
Nothing crazy, this is pretty mechanical.

llvm-svn: 353894
2019-02-12 22:57:57 +00:00
Jonas Devlieghere 1ca9dd8507 [lldb-instr] Pass PCHContainerOperations to ClangTool
On a local modules build this would cause an error.

> fatal error: no handler registered for module format 'obj'
> LLVM ERROR: unknown module format

Interestingly enough, this didn't trigger on the GreenDragon CMake bot,
which is configured with modules.

llvm-svn: 353869
2019-02-12 18:19:34 +00:00
Michal Gorny f6e5594e81 [lldb] [unittest] Avoid mixing '127.0.0.1' and 'localhost'
Fix the tests not to use '127.0.0.1' and 'localhost' interchangeably.
More specifically, since tests bind specifically to 127.0.0.1, connect
to that address as well; using 'localhost' can resolve to IPv6 address
which can cause issues -- for example, if the matching port happens to
be used by some other process, the tests hang forever waiting for
the client to connect.

While technically the case of randomly selected IPv4 port being taken
on IPv6 loopback is not very likely, NetBSD happens to be suffering from
some weird kernel issue where connection to that port succeeds
nevertheless.  Until we can really figure out what goes wrong there,
this saves us from the tests hanging randomly.

Differential Revision: https://reviews.llvm.org/D58131

llvm-svn: 353868
2019-02-12 18:09:00 +00:00
Greg Clayton 46336896a3 Fix Xcode project for RemoteAwarePlatform files.
llvm-svn: 353856
2019-02-12 16:54:28 +00:00
Pavel Labath 7f815a9a42 Have Stream::PutCStringAsRawHex8 take llvm::StringRef
This enables the function to be called with a StringRef without jumping
through any hoops. I rename the function to "PutStringAsRawHex8" to
honor the extended interface. I also remove ".c_str()" from any calls to
this function I could find.

llvm-svn: 353841
2019-02-12 14:28:55 +00:00
Pavel Labath 52d9c62a50 Extract common PlatformPOSIX/Windows code into a separate class
Summary:
The two classes contained a lot of duplicated code, but there wasn't a
good place to factor it to. It couldn't be the base Platform class,
since we also have platforms which are only remote (such as
PlatformGDBRemoteServer), and so it did not make sense for those to have
an m_remote_platform member.

This patch creates a new class, RemoteAwarePlatform, which can serve as
a base class for platforms which can both serve as a host, and forward
actions to a remote system. It is motivated partly by D56232 (which was
about to add a bunch of additional duplicated methods), and partly by my
own need to modify a function which happens to be implemented in both
places identically.

The patch moves the methods which are trivially identical in the two
classes into the common base class, there were one or two more methods
which could probably be merged into one, but this wasn't completely
trivial, so I did not attempt to do that now.

Reviewers: jingham, zturner, clayborg, asmith

Subscribers: emaste, mgorny, Hui, lldb-commits

Differential Revision: https://reviews.llvm.org/D58052

llvm-svn: 353812
2019-02-12 09:27:24 +00:00
Aleksandr Urakov eaa0ad672e [NativePDB] Process virtual bases in the correct order
Summary:
This patch makes virtual bases to be added in the correct order to the bases
list. It is important because `VTableContext` (`MicrosoftVTableContext` in our
case) uses then the order of virtual bases in the list to restore the virtual
table indexes. These indexes are used then to resolve the layout of the virtual
bases.

We haven't enough information about offsets of virtual bases regarding to the
object (moreover, in a common case we can't rely on such information, see the
example here: https://reviews.llvm.org/D53506#1272306 ), but there should be
enough information to restore the layout of the virtual bases from the indexes
in runtime. After D53506 this information is used whenever possible, so there
should be no problems with virtual bases' fields reading.

Reviewers: zturner, rnk, stella.stamenova

Subscribers: abidh, teemperor, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D56904

llvm-svn: 353806
2019-02-12 08:17:11 +00:00
Jonas Devlieghere 70355ace3f Remove redundant ::get() for smart pointer. (NFC)
This commit removes redundant calls to smart pointer’s ::get() method.

https://clang.llvm.org/extra/clang-tidy/checks/readability-redundant-smartptr-get.html

llvm-svn: 353795
2019-02-12 03:47:39 +00:00
Jonas Devlieghere 6e31f4758f [Thread] Update the correct variable
The new shared pointer was assigning to the temporary instead of the
member (m_curr_frames_sp).

llvm-svn: 353783
2019-02-12 01:04:57 +00:00
Jonas Devlieghere 9d0c5f9953 Define _ENABLE_EXTENDED_ALIGNED_STORAGE on Windows.
Apparently there are multiple places where MSVC complains about
instantiations with extended aligment. I think it's better to define
`_ENABLE_EXTENDED_ALIGNED_STORAGE` as suggested by the error message.

I don't have access to a Windows machine so this is all speculative.

llvm-svn: 353778
2019-02-12 00:30:21 +00:00
Jonas Devlieghere 55fb848e84 [ObjectFileMachO] Revert std::make_shared
This caused a rather interesting error message on MSVC: error C2338 and
I'm not sure how to properly fix it.

llvm-svn: 353769
2019-02-11 23:49:13 +00:00
Jonas Devlieghere c6091d2bed Some cleanup after moving to std::make_shared
Addresses Tatyana Krasnukha's feedback from D57990.

llvm-svn: 353768
2019-02-11 23:48:59 +00:00
Jonas Devlieghere 796ac80b86 Use std::make_shared in LLDB (NFC)
Unlike std::make_unique, which is only available since C++14,
std::make_shared is available since C++11. Not only is std::make_shared
a lot more readable compared to ::reset(new), it also performs a single
heap allocation for the object and control block.

Differential revision: https://reviews.llvm.org/D57990

llvm-svn: 353764
2019-02-11 23:13:08 +00:00
Raphael Isemann f75a9dc1a2 Fixed function name in log statement
llvm-svn: 353753
2019-02-11 21:45:33 +00:00
Jonas Devlieghere 31ad39c51f Use of `@return` is not appropriate for a function with a void return type.
The comment for this declaration causes a warning with -Wdocumentation:
Invalid @return in documentation comment SetCollectingStats() in
SBTarget.h.

llvm-svn: 353752
2019-02-11 21:43:18 +00:00
Jonas Devlieghere cc2a16783b Update SymbolVendorMacOSX for new GetUUID interface
The interface changed in r353714.

llvm-svn: 353721
2019-02-11 17:19:26 +00:00
Pavel Labath bd334efd0a Simplify ObjectFile::GetUUID
instead of returning the UUID through by-ref argument and a boolean
value indicating success, we can just return it directly. Since the UUID
class already has an invalid state, it can be used to denote the failure
without the additional bool.

llvm-svn: 353714
2019-02-11 16:14:02 +00:00
Aleksandr Urakov eac19858e9 [build.py] Add `-fms-compatibility-version=19` to `build.py`
Summary:
`clang-cl` can't compile tests containing `char16_t` and `char32_t` types
without the MSVC compatibility option passed. This patch adds the option to the
`clang-cl` call in the `build.py` script by default.

Reviewers: zturner, labath, stella.stamenova, serge-sans-paille

Reviewed By: labath

Subscribers: lldb-commits, leonid.mashinskiy

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D57809

llvm-svn: 353709
2019-02-11 15:13:33 +00:00
Pavel Labath 841bea933b Breakpad: auto-detect path style of file entries
Summary:
This adds support for auto-detection of path style to SymbolFileBreakpad
(similar to how r351328 did the same for DWARF). We guess each file
entry separately, as we have no idea which file came from which compile
units (and different compile units can have different path styles). The
breakpad generates should have already converted the paths to absolute
ones, so this guess should be reasonable accurate, but as always with
these kinds of things, it is hard to give guarantees about anything.

In an attempt to bring some unity to the path guessing logic, I move the
guessing logic from inside SymbolFileDWARF into the FileSpec class and
have both symbol files use it to implent their desired behavior.

Reviewers: clayborg, lemo, JDevlieghere

Subscribers: aprantl, markmentovai, lldb-commits

Differential Revision: https://reviews.llvm.org/D57895

llvm-svn: 353702
2019-02-11 14:11:00 +00:00
Michal Gorny c1adbc6c94 [lldb] [lit] Fix finding lld-link when it is not in 'compiler dir'
Fix the build helper to find lld-link via PATH lookup, rather than
making a fragile assumption that it will be present in the 'compiler
directory'.  This fixes tests on Gentoo where clang and lld
are installed in different directories.

Differential Revision: https://reviews.llvm.org/D58001

llvm-svn: 353701
2019-02-11 14:09:48 +00:00
Michal Gorny 8780771c51 [lldb] [test] Skip lldb-mi test if LLDB_DISABLE_PYTHON is used
Skip running lldb-mi tests when Python support is disabled.  This causes
lldb-mi to unconditionally fail, and therefore all the relevant tests
fail as well.

Differential Revision: https://reviews.llvm.org/D58000

llvm-svn: 353700
2019-02-11 14:09:43 +00:00
Pavel Labath cfc3f751aa Revert "minidump: Add ability to attach (breakpad) symbol files to placeholder modules"
The commit has broken TestMiniDump.py on windows. Reverting while I
investigate.

This reverts r353677.

llvm-svn: 353686
2019-02-11 10:30:24 +00:00
Michal Gorny f68b6cbae2 [lldb] [lldb-instr] Add missing linkage to clang libraries
Fix build errors against shared clang by adding all the libraries used
in the code.

Differential Revision: https://reviews.llvm.org/D57999

llvm-svn: 353680
2019-02-11 10:02:26 +00:00
Pavel Labath 734648bb4a minidump: Add ability to attach (breakpad) symbol files to placeholder modules
Summary:
The reason this wasn't working was that ProcessMinidump was creating odd
object-file-less modules, and SymbolFileBreakpad required the module to
have an associated object file because it needed to get its base
address.

This fixes that by introducing a PlaceholderObjectFile to serve as a
dummy object file. The general idea for this is taken from D55142, but
I've reworked it a bit to avoid the need for the PlaceholderModule
class. Now that we have an object file, our modules are sufficiently
similar to regular modules that we can use the regular Module class
almost out of the box -- the only thing I needed to tweak was the
Module::CreateModuleFromObjectFile functon to set the module's FileSpec
in addition to it's architecture. This wasn't needed for ObjectFileJIT
(the other user of CreateModuleFromObjectFile), but it shouldn't hurt it
either, and the change seems like a straightforward extension of this
function.

Reviewers: clayborg, lemo, amccarth

Subscribers: lldb-commits

Differential Revision: https://reviews.llvm.org/D57751

llvm-svn: 353677
2019-02-11 09:32:08 +00:00
Michal Gorny f048d448e0 [lldb] [MainLoop] Initialize empty sigset_t correctly
Fix MainLoop::RunImpl::get_sigmask() to correctly return empty sigset_t
when SIGNAL_POLLING_UNSUPPORTED is true.  On NetBSD (and probably
on some other platforms), integers are not implicitly convertible to
sigset_t, so 'return 0' is erraneous.  Instead, sigset_t should be reset
through sigemptyset().

While at it, move common parts out of the #ifdef.

Differential Revision: https://reviews.llvm.org/D57959

llvm-svn: 353675
2019-02-11 09:18:46 +00:00
Chandler Carruth 023f999822 Update files to the new header that were incorrectly landed with the old
one.

llvm-svn: 353663
2019-02-11 08:03:41 +00:00
Raphael Isemann d1307ec4cc Fix x86 return pattern detection
Summary: Replace 0xc9 (LEAVE) with 0xcb (RETF) in ret_pattern_p(). Also put 0xc3 first, since it is the most common form and will match first.

Reviewers: jasonmolenda

Reviewed By: jasonmolenda

Subscribers: labath, lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D57928

llvm-svn: 353643
2019-02-10 15:41:53 +00:00
Raphael Isemann ada705a5d2 lldb: Fix compilation on OpenBSD
Summary: Update the OpenBSD Host.cpp for the new SetFile() function signature. Fixes compiling lldb on OpenBSD.

Reviewers: krytarowski

Reviewed By: krytarowski

Subscribers: lldb-commits

Tags: #lldb

Differential Revision: https://reviews.llvm.org/D57907

llvm-svn: 353642
2019-02-10 15:23:58 +00:00
Jason Molenda 3b68761dc3 Tiny fix spotted by static analyzer; GetPath() returns a std::string,
we get a pointer to the c-string rep and then the temporary object
is destructed and we still refer to the c-string after that.

llvm-svn: 353581
2019-02-08 23:36:25 +00:00
James Y Knight ae2f951219 [opaque pointer types] Update calls to CreateCall to pass the function
type in lldb and polly.

llvm-svn: 353549
2019-02-08 19:30:46 +00:00
Michal Gorny 01486b22bb [lldb] [unittests] Disable MainLoopTest::DetectsEOF on NetBSD
The NetBSD kernel currently does not support detecting closed slave pty
via kevent on master pty.  This causes the test to hang forever.
To avoid that, disable the test until the kernel is fixed.

Differential Revision: https://reviews.llvm.org/D57912

llvm-svn: 353545
2019-02-08 18:56:11 +00:00
Aleksandr Urakov ee21a66a7b [NFC] Fix license headers after r352845
llvm-svn: 353503
2019-02-08 08:48:15 +00:00
Jim Ingham 3c247076cc Removing some unimplemented methods from the SB headers
NFC

llvm-svn: 353487
2019-02-08 00:34:04 +00:00
Jonas Devlieghere 166c262f23 [CommandInterpreter] Early return on error (NFC)
We save two levels of indentation by returning early if the given file
doesn't exists or cannot be opened.

llvm-svn: 353472
2019-02-07 21:51:20 +00:00
Adrian Prantl 238ce2128c Silence fallthrough warnings in debugserver.
llvm-svn: 353468
2019-02-07 21:22:38 +00:00
Aaron Smith 397c51b655 Add missing overrides
llvm-svn: 353447
2019-02-07 18:52:22 +00:00
Aaron Smith 3a14249525 [lldb-server] Improve support on Windows
Summary:
This commit contains the following changes:

  - Rewrite vfile close/read/write packet handlers with portable routines from lldb.
    This removes #if(s) and allows the handlers to work on Windows.

  - Fix a bug in File::Write. This is intended to write data at an offset to a file
    but actually writes at the current position of the file.

  - Add a default boolean argument 'should_close_fd' to FileSystem::Open to
    let the user decide whether to close the fd or not.

Reviewers: zturner, llvm-commits, labath

Reviewed By: zturner

Subscribers: Hui, labath, abidh, lldb-commits

Differential Revision: https://reviews.llvm.org/D56231

llvm-svn: 353446
2019-02-07 18:46:25 +00:00
Jonas Devlieghere 1e6ba23608 [lldb-instr] Make lldb-instr a test dependency
llvm-svn: 353444
2019-02-07 18:41:59 +00:00
Aaron Smith 981e63581a [gdb-remote] Use lldb's portable Host::GetEnvironment() instead of getenv
Reviewers: zturner, llvm-commits, labath, serge-sans-paille

Reviewed By: labath

Subscribers: Hui, labath, lldb-commits

Differential Revision: https://reviews.llvm.org/D56230

llvm-svn: 353440
2019-02-07 18:22:00 +00:00
Pavel Labath bae220ce9c Fix headers for files added in r353047
I started working on that patch before the headers were updated. Since
they were new files, I didn't get any conflicts during rebase.

llvm-svn: 353429
2019-02-07 17:16:25 +00:00
Pavel Labath a5d19759b2 Fix signed/unsigned mismatches in ProcessInfoTest.cpp
llvm-svn: 353420
2019-02-07 15:56:40 +00:00
Pavel Labath 9303afb30e Fix incorrect log messages in NativeProcessLinux (pr40588)
The "signal" argument was removed from the MonitorCallback function, but
not from the log statements within it. This wasn't noticed because the
name "signal" suddenly started referring to the libc function with that
name.

This fixes that.

llvm-svn: 353419
2019-02-07 15:56:35 +00:00
Pavel Labath fe9bb8ff24 Breakpad: temporarily XFAIL line-table tests
The tests are failing on windows because the paths in the symbol file
are parsed using the host path style. I'm working on a patch to have
SymbolFileBreakpad auto-detect the correct path style (similar to dwarf
r351328).

I originally wanted to make this a part of the initial line-table patch,
but then I simply forgot.

llvm-svn: 353410
2019-02-07 14:47:12 +00:00
Pavel Labath 67f6d842fa use_lldb_suite.py: Fix potential infinite loop
The loop searching for use_lldb_suite_root had a bug where if the marker
file happened to be missing, it would enter an infinite loop. While this
shouldn't happen in normal circumstances, it can happen accidentally,
and debugging it is not very pleasant.

The loop had an exit condition, but it was incorrent (os.path.dirname
returning None). This will never happen as dirname will just return the
same folder over and over again once it reaches the root folder. This
fixes the exit condition to account for that.

llvm-svn: 353406
2019-02-07 14:03:43 +00:00
Pavel Labath 76016ba1ca Fix some warnings introduced in r353324 (ReproducerInstrumentation patch)
GetIndexForObjectImpl generated a bunch of "conversion casts away
constness warnings". Change the function to use "const void *" (and
static_cast, while I'm at it), to avoid this.

Driver.cpp: unused variable "replay" (this was actually caused by a
subsequent partial revert of this patch). I just finish the revert by
removing the variable completely.

llvm-svn: 353405
2019-02-07 13:51:38 +00:00