Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 31 Oct 2020 11:59:20 -0700 (PDT)
From:      "Rodney W. Grimes" <freebsd@gndrsh.dnsmgr.net>
To:        Dimitry Andric <dim@freebsd.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-12@freebsd.org
Subject:   Re: svn commit: r367228 - in stable: 11/contrib/llvm-project/lldb/source/Target 12/contrib/llvm-project/lldb/source/Target
Message-ID:  <202010311859.09VIxKjM006518@gndrsh.dnsmgr.net>
In-Reply-To: <202010311842.09VIg41m023136@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
> Author: dim
> Date: Sat Oct 31 18:42:03 2020
> New Revision: 367228
> URL: https://svnweb.freebsd.org/changeset/base/367228
> 
> Log:
>   MFC r364480:
>   
>   Merge commit 1ce07cd614be from llvm git (by me):
                                            ^^^^^^^
FYI, we have a username me so this is not the best
way to express yourself in commit mail:
freefall:rgrimes {102} grep ^me: /etc/passwd
me:*:589:589:Michael Elbel:/home/me:/usr/local/bin/bash


>   
>     Instantiate Error in Target::GetEntryPointAddress() only when
>     necessary
>   
>     When Target::GetEntryPointAddress() calls
>     exe_module->GetObjectFile()->GetEntryPointAddress(), and the returned
>     entry_addr is valid, it can immediately be returned.
>   
>     However, just before that, an llvm::Error value has been setup, but
>     in this case it is not consumed before returning, like is done
>     further below in the function.
>   
>     In https://bugs.freebsd.org/248745 we got a bug report for this,
>     where a very simple test case aborts and dumps core:
>   
>     * thread #1, name = 'testcase', stop reason = breakpoint 1.1
>         frame #0: 0x00000000002018d4 testcase`main(argc=1, argv=0x00007fffffffea18) at testcase.c:3:5
>        1    int main(int argc, char *argv[])
>        2    {
>     -> 3        return 0;
>        4    }
>     (lldb) p argc
>     Program aborted due to an unhandled Error:
>     Error value was Success. (Note: Success values must still be checked prior to being destroyed).
>   
>     Thread 1 received signal SIGABRT, Aborted.
>     thr_kill () at thr_kill.S:3
>     3       thr_kill.S: No such file or directory.
>     (gdb) bt
>     #0  thr_kill () at thr_kill.S:3
>     #1  0x00000008049a0004 in __raise (s=6) at /usr/src/lib/libc/gen/raise.c:52
>     #2  0x0000000804916229 in abort () at /usr/src/lib/libc/stdlib/abort.c:67
>     #3  0x000000000451b5f5 in fatalUncheckedError () at /usr/src/contrib/llvm-project/llvm/lib/Support/Error.cpp:112
>     #4  0x00000000019cf008 in GetEntryPointAddress () at /usr/src/contrib/llvm-project/llvm/include/llvm/Support/Error.h:267
>     #5  0x0000000001bccbd8 in ConstructorSetup () at /usr/src/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp:67
>     #6  0x0000000001bcd2c0 in ThreadPlanCallFunction () at /usr/src/contrib/llvm-project/lldb/source/Target/ThreadPlanCallFunction.cpp:114
>     #7  0x00000000020076d4 in InferiorCallMmap () at /usr/src/contrib/llvm-project/lldb/source/Plugins/Process/Utility/InferiorCallPOSIX.cpp:97
>     #8  0x0000000001f4be33 in DoAllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Plugins/Process/FreeBSD/ProcessFreeBSD.cpp:604
>     #9  0x0000000001fe51b9 in AllocatePage () at /usr/src/contrib/llvm-project/lldb/source/Target/Memory.cpp:347
>     #10 0x0000000001fe5385 in AllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Target/Memory.cpp:383
>     #11 0x0000000001974da2 in AllocateMemory () at /usr/src/contrib/llvm-project/lldb/source/Target/Process.cpp:2301
>     #12 CanJIT () at /usr/src/contrib/llvm-project/lldb/source/Target/Process.cpp:2331
>     #13 0x0000000001a1bf3d in Evaluate () at /usr/src/contrib/llvm-project/lldb/source/Expression/UserExpression.cpp:190
>     #14 0x00000000019ce7a2 in EvaluateExpression () at /usr/src/contrib/llvm-project/lldb/source/Target/Target.cpp:2372
>     #15 0x0000000001ad784c in EvaluateExpression () at /usr/src/contrib/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:414
>     #16 0x0000000001ad86ae in DoExecute () at /usr/src/contrib/llvm-project/lldb/source/Commands/CommandObjectExpression.cpp:646
>     #17 0x0000000001a5e3ed in Execute () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandObject.cpp:1003
>     #18 0x0000000001a6c4a3 in HandleCommand () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:1762
>     #19 0x0000000001a6f98c in IOHandlerInputComplete () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2760
>     #20 0x0000000001a90b08 in Run () at /usr/src/contrib/llvm-project/lldb/source/Core/IOHandler.cpp:548
>     #21 0x00000000019a6c6a in ExecuteIOHandlers () at /usr/src/contrib/llvm-project/lldb/source/Core/Debugger.cpp:903
>     #22 0x0000000001a70337 in RunCommandInterpreter () at /usr/src/contrib/llvm-project/lldb/source/Interpreter/CommandInterpreter.cpp:2946
>     #23 0x0000000001d9d812 in RunCommandInterpreter () at /usr/src/contrib/llvm-project/lldb/source/API/SBDebugger.cpp:1169
>     #24 0x0000000001918be8 in MainLoop () at /usr/src/contrib/llvm-project/lldb/tools/driver/Driver.cpp:675
>     #25 0x000000000191a114 in main () at /usr/src/contrib/llvm-project/lldb/tools/driver/Driver.cpp:890
>   
>     Fix the incorrect error catch by only instantiating an Error object
>     if it is necessary.
>   
>     Reviewed By: JDevlieghere
>   
>     Differential Revision: https://reviews.llvm.org/D86355
>   
>   This should fix lldb aborting as described in the scenario above.
>   
>   Reported by:	dmgk
>   PR:		248745
> 
> Modified:
>   stable/12/contrib/llvm-project/lldb/source/Target/Target.cpp
> Directory Properties:
>   stable/12/   (props changed)
> 
> Changes in other areas also in this revision:
> Modified:
>   stable/11/contrib/llvm-project/lldb/source/Target/Target.cpp
> Directory Properties:
>   stable/11/   (props changed)
>   stable/11/contrib/llvm-project/lldb/   (props changed)
> 
> Modified: stable/12/contrib/llvm-project/lldb/source/Target/Target.cpp
> ==============================================================================
> --- stable/12/contrib/llvm-project/lldb/source/Target/Target.cpp	Sat Oct 31 17:26:56 2020	(r367227)
> +++ stable/12/contrib/llvm-project/lldb/source/Target/Target.cpp	Sat Oct 31 18:42:03 2020	(r367228)
> @@ -2412,21 +2412,13 @@ lldb::addr_t Target::GetPersistentSymbol(ConstString n
>  
>  llvm::Expected<lldb_private::Address> Target::GetEntryPointAddress() {
>    Module *exe_module = GetExecutableModulePointer();
> -  llvm::Error error = llvm::Error::success();
> -  assert(!error); // Check the success value when assertions are enabled.
>  
> -  if (!exe_module || !exe_module->GetObjectFile()) {
> -    error = llvm::make_error<llvm::StringError>("No primary executable found",
> -                                                llvm::inconvertibleErrorCode());
> -  } else {
> +  // Try to find the entry point address in the primary executable.
> +  const bool has_primary_executable = exe_module && exe_module->GetObjectFile();
> +  if (has_primary_executable) {
>      Address entry_addr = exe_module->GetObjectFile()->GetEntryPointAddress();
>      if (entry_addr.IsValid())
>        return entry_addr;
> -
> -    error = llvm::make_error<llvm::StringError>(
> -        "Could not find entry point address for executable module \"" +
> -            exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"",
> -        llvm::inconvertibleErrorCode());
>    }
>  
>    const ModuleList &modules = GetImages();
> @@ -2437,14 +2429,21 @@ llvm::Expected<lldb_private::Address> Target::GetEntry
>        continue;
>  
>      Address entry_addr = module_sp->GetObjectFile()->GetEntryPointAddress();
> -    if (entry_addr.IsValid()) {
> -      // Discard the error.
> -      llvm::consumeError(std::move(error));
> +    if (entry_addr.IsValid())
>        return entry_addr;
> -    }
>    }
>  
> -  return std::move(error);
> +  // We haven't found the entry point address. Return an appropriate error.
> +  if (!has_primary_executable)
> +    return llvm::make_error<llvm::StringError>(
> +        "No primary executable found and could not find entry point address in "
> +        "any executable module",
> +        llvm::inconvertibleErrorCode());
> +
> +  return llvm::make_error<llvm::StringError>(
> +      "Could not find entry point address for primary executable module \"" +
> +          exe_module->GetFileSpec().GetFilename().GetStringRef() + "\"",
> +      llvm::inconvertibleErrorCode());
>  }
>  
>  lldb::addr_t Target::GetCallableLoadAddress(lldb::addr_t load_addr,
> 

-- 
Rod Grimes                                                 rgrimes@freebsd.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202010311859.09VIxKjM006518>