[Lldb-commits] [PATCH] D71498: Fix ARM32 inferior calls
Jan Kratochvil via Phabricator via lldb-commits
lldb-commits at lists.llvm.org
Fri Dec 13 16:49:12 PST 2019
jankratochvil created this revision.
jankratochvil added reviewers: omjavaid, labath.
jankratochvil added a project: LLDB.
Herald added subscribers: kristof.beyls, aprantl.
jankratochvil added a reviewer: jasonmolenda.
echo -e '#include <unistd.h>\nint main(void){\nsync();return 0;}'|./bin/clang -g -x c -;./bin/lldb -o 'file ./a.out' -o 'b main' -o r -o 'p (void)sync()'
Actual:
error: Expression can't be run, because there is no JIT compiled function
Expected:
<nothing, sync() has been executed>
Casting from 32-bit `void *` to `uint64_t` requires an intermediate `uintptr_t` cast otherwise the pointer gets sign-extended:
echo -e '#include <stdio.h>\n#include <stdint.h>\nint main(void){void *p=(void *)0x80000000;unsigned long long ull=(unsigned long long)p;unsigned long long ull2=(unsigned long long)(uintptr_t)p;printf("p=%p ull=0x%llx ull2=0x%llx\\n",p,ull,ull2);return 0;}'|gcc -Wall -m32 -x c -;./a.out
<stdin>: In function ‘main’:
<stdin>:3:66: warning: cast from pointer to integer of different size [-Wpointer-to-int-cast]
p=0x80000000 ull=0xffffffff80000000 ull2=0x80000000
With debug output:
Actual:
IRMemoryMap::WriteMemory (0xb6ff8640, 0xffffffffb6f82158, 0x112) went to [0xb6ff8640..0xb6ff86b3)
Code can be run in the target.
Found function, has local address 0xffffffffb6f84000 and remote address 0xffffffffffffffff
Couldn't disassemble function : Couldn't find code range for function _Z12$__lldb_exprPv
Sections:
[0xb6f84000+0x3c]->0xb6ff9020 (alignment 4, section ID 0, name .text)
...
HandleCommand, command did not succeed
error: Expression can't be run, because there is no JIT compiled function
Expected:
IRMemoryMap::WriteMemory (0xb6ff8640, 0xb6faa15c, 0x128) went to [0xb6ff8640..0xb6ff86c3)
IRExecutionUnit::GetRemoteAddressForLocal() found 0xb6fac000 in [0xb6fac000..0xb6fac040], and returned 0xb6ff9020 from [0xb6ff9020..0xb6ff9060].
Code can be run in the target.
Found function, has local address 0xb6fac000 and remote address 0xb6ff9020
Function's code range is [0xb6ff9020+0x40]
...
Function data has contents:
0xb6ff9020: 10 4c 2d e9 08 b0 8d e2 08 d0 4d e2 00 40 a0 e1
...
Function disassembly:
0xb6ff9020: 0xe92d4c10 push {r4, r10, r11, lr}
Effect of this patch on ARM32:
-=before patch
+=after patch
********************
-Unexpected Passing Tests (1):
+Unexpected Passing Tests (3):
+ lldb-api :: commands/expression/char/TestExprsChar.py
+ lldb-api :: commands/expression/ir-interpreter/TestIRInterpreter.py
lldb-api :: linux/builtin_trap/TestBuiltinTrap.py
********************
-Failing Tests (102):
+Failing Tests (43):
- lldb-api :: commands/expression/argument_passing_restrictions/TestArgumentPassingRestrictions.py
- lldb-api :: commands/expression/call-function/TestCallStdStringFunction.py
- lldb-api :: commands/expression/call-function/TestCallStopAndContinue.py
- lldb-api :: commands/expression/call-function/TestCallUserDefinedFunction.py
- lldb-api :: commands/expression/call-overridden-method/TestCallOverriddenMethod.py
- lldb-api :: commands/expression/call-restarts/TestCallThatRestarts.py
- lldb-api :: commands/expression/char/TestExprsChar.py
- lldb-api :: commands/expression/class_template_specialization_empty_pack/TestClassTemplateSpecializationParametersHandling.py
- lldb-api :: commands/expression/context-object/TestContextObject.py
- lldb-api :: commands/expression/dont_allow_jit/TestAllowJIT.py
- lldb-api :: commands/expression/entry-bp/TestExprEntryBP.py
- lldb-api :: commands/expression/expr-in-syscall/TestExpressionInSyscall.py
- lldb-api :: commands/expression/formatters/TestFormatters.py
- lldb-api :: commands/expression/inline-namespace/TestInlineNamespace.py
- lldb-api :: commands/expression/no-deadlock/TestExprDoesntBlock.py
- lldb-api :: commands/expression/persistent_types/TestNestedPersistentTypes.py
- lldb-api :: commands/expression/persistent_types/TestPersistentTypes.py
- lldb-api :: commands/expression/pr35310/TestExprsBug35310.py
- lldb-api :: commands/expression/radar_9531204/TestPrintfAfterUp.py
- lldb-api :: commands/expression/radar_9673664/TestExprHelpExamples.py
lldb-api :: commands/expression/rdar44436068/Test128BitsInteger.py
- lldb-api :: commands/expression/static-initializers/TestStaticInitializers.py
- lldb-api :: commands/expression/test/TestExprs.py
- lldb-api :: commands/expression/timeout/TestCallWithTimeout.py
- lldb-api :: commands/expression/unwind_expression/TestUnwindExpression.py
- lldb-api :: commands/expression/xvalue/TestXValuePrinting.py
lldb-api :: commands/register/register/register_command/TestRegisters.py
lldb-api :: commands/watchpoints/hello_watchlocation/TestWatchLocation.py
lldb-api :: commands/watchpoints/multi_watchpoint_slots/TestWatchpointMultipleSlots.py
lldb-api :: commands/watchpoints/watchpoint_size/TestWatchpointSizes.py
lldb-api :: functionalities/breakpoint/require_hw_breakpoints/TestRequireHWBreakpoints.py
- lldb-api :: functionalities/data-formatter/data-formatter-cpp/TestDataFormatterCpp.py
- lldb-api :: functionalities/data-formatter/data-formatter-synthval/TestDataFormatterSynthVal.py
lldb-api :: functionalities/load_unload/TestLoadUnload.py
- lldb-api :: functionalities/load_using_paths/TestLoadUsingPaths.py
- lldb-api :: functionalities/memory/find/TestMemoryFind.py
- lldb-api :: functionalities/process_group/TestChangeProcessGroup.py
lldb-api :: functionalities/return-value/TestReturnValue.py
lldb-api :: functionalities/show_location/TestShowLocationDwarf5.py
lldb-api :: functionalities/thread/num_threads/TestNumThreads.py
- lldb-api :: lang/c/const_variables/TestConstVariables.py
- lldb-api :: lang/c/function_types/TestFunctionTypes.py
- lldb-api :: lang/c/shared_lib/TestSharedLib.py
- lldb-api :: lang/c/strings/TestCStrings.py
- lldb-api :: lang/c/struct_types/TestStructTypes.py
- lldb-api :: lang/cpp/auto/TestCPPAuto.py
- lldb-api :: lang/cpp/call-function/TestCallCPPFunction.py
- lldb-api :: lang/cpp/chained-calls/TestCppChainedCalls.py
- lldb-api :: lang/cpp/class-template-parameter-pack/TestClassTemplateParameterPack.py
- lldb-api :: lang/cpp/extern_c/TestExternCSymbols.py
- lldb-api :: lang/cpp/global_operators/TestCppGlobalOperators.py
- lldb-api :: lang/cpp/lambdas/TestLambdas.py
- lldb-api :: lang/cpp/llvm-style/TestLLVMStyle.py
- lldb-api :: lang/cpp/namespace/TestNamespace.py
- lldb-api :: lang/cpp/namespace/TestNamespaceLookup.py
- lldb-api :: lang/cpp/namespace_conflicts/TestNamespaceConflicts.py
- lldb-api :: lang/cpp/namespace_definitions/TestNamespaceDefinitions.py
- lldb-api :: lang/cpp/operators/TestCppOperators.py
- lldb-api :: lang/cpp/overloaded-functions/TestOverloadedFunctions.py
- lldb-api :: lang/cpp/rvalue-references/TestRvalueReferences.py
- lldb-api :: lang/cpp/scope/TestCppScope.py
- lldb-api :: lang/cpp/static_methods/TestCPPStaticMethods.py
- lldb-api :: lang/cpp/symbols/TestSymbols.py
- lldb-api :: lang/cpp/template-function/TestTemplateFunctions.py
- lldb-api :: lang/cpp/template/TestTemplateArgs.py
- lldb-api :: lang/cpp/this/TestCPPThis.py
lldb-api :: lang/cpp/trivial_abi/TestTrivialABI.py
- lldb-api :: lang/cpp/unicode-literals/TestUnicodeLiterals.py
- lldb-api :: lang/cpp/virtual/TestVirtual.py
lldb-api :: python_api/thread/TestThreadAPI.py
lldb-api :: tools/lldb-server/TestLldbGdbServer.py
lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-PT_INTERP.yaml
lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-PT_TLS.yaml
lldb-shell :: ObjectFile/ELF/PT_LOAD-overlap-section.yaml
lldb-shell :: ObjectFile/ELF/PT_LOAD.yaml
lldb-shell :: ObjectFile/ELF/PT_TLS-overlap-PT_LOAD.yaml
lldb-shell :: Reproducer/Functionalities/TestDataFormatter.test
lldb-shell :: Reproducer/Functionalities/TestImageList.test
lldb-shell :: Reproducer/Functionalities/TestStepping.test
lldb-shell :: Reproducer/TestDump.test
lldb-shell :: Reproducer/TestGDBRemoteRepro.test
lldb-shell :: Reproducer/TestRelativePath.test
lldb-shell :: Reproducer/TestReuseDirectory.test
lldb-shell :: Reproducer/TestSynchronous.test
lldb-shell :: Reproducer/TestWorkingDir.test
lldb-shell :: SymbolFile/DWARF/anon_class_w_and_wo_export_symbols.ll
lldb-shell :: SymbolFile/DWARF/clang-ast-from-dwarf-unamed-and-anon-structs.cpp
- lldb-shell :: SymbolFile/DWARF/debug-types-expressions.test
lldb-shell :: SymbolFile/NativePDB/ast-functions.cpp
lldb-shell :: SymbolFile/NativePDB/ast-methods.cpp
lldb-shell :: SymbolFile/NativePDB/ast-types.cpp
lldb-shell :: SymbolFile/NativePDB/bitfields.cpp
lldb-shell :: SymbolFile/NativePDB/break-by-function.cpp
lldb-shell :: SymbolFile/NativePDB/break-by-line.cpp
lldb-shell :: SymbolFile/NativePDB/function-types-builtins.cpp
lldb-shell :: SymbolFile/NativePDB/function-types-classes.cpp
lldb-shell :: SymbolFile/NativePDB/global-classes.cpp
lldb-shell :: SymbolFile/NativePDB/globals-bss.cpp
lldb-shell :: SymbolFile/NativePDB/globals-fundamental.cpp
lldb-shell :: SymbolFile/NativePDB/nested-types.cpp
lldb-shell :: SymbolFile/NativePDB/source-list.cpp
lldb-shell :: SymbolFile/NativePDB/tag-types.cpp
-********************
-Unresolved Tests (1):
- lldb-api :: functionalities/thread/concurrent_events/TestConcurrentManyWatchpoints.py
For me even LLDB trunk was failing. And I do not see how the functionality could be affected by my D63540 <https://reviews.llvm.org/D63540>.
Repository:
rG LLVM Github Monorepo
https://reviews.llvm.org/D71498
Files:
lldb/source/Expression/IRExecutionUnit.cpp
lldb/source/Expression/IRMemoryMap.cpp
Index: lldb/source/Expression/IRMemoryMap.cpp
===================================================================
--- lldb/source/Expression/IRMemoryMap.cpp
+++ lldb/source/Expression/IRMemoryMap.cpp
@@ -579,8 +579,8 @@
LLDB_LOGF(log,
"IRMemoryMap::WriteMemory (0x%" PRIx64 ", 0x%" PRIx64
", 0x%" PRId64 ") went to [0x%" PRIx64 "..0x%" PRIx64 ")",
- (uint64_t)process_address, (uint64_t)bytes, (uint64_t)size,
- (uint64_t)allocation.m_process_start,
+ (uint64_t)process_address, (uint64_t)(uintptr_t)bytes,
+ (uint64_t)size, (uint64_t)allocation.m_process_start,
(uint64_t)allocation.m_process_start +
(uint64_t)allocation.m_size);
}
Index: lldb/source/Expression/IRExecutionUnit.cpp
===================================================================
--- lldb/source/Expression/IRExecutionUnit.cpp
+++ lldb/source/Expression/IRExecutionUnit.cpp
@@ -347,8 +347,9 @@
function.getName().str().c_str());
return;
}
- m_jitted_functions.push_back(JittedFunction(
- function.getName().str().c_str(), external, (lldb::addr_t)fun_ptr));
+ m_jitted_functions.push_back(
+ JittedFunction(function.getName().str().c_str(), external,
+ (lldb::addr_t)(uintptr_t)fun_ptr));
}
CommitAllocations(process_sp);
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D71498.233891.patch
Type: text/x-patch
Size: 1390 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/lldb-commits/attachments/20191214/162d3e49/attachment.bin>
More information about the lldb-commits
mailing list