5

I want to do the analysis of debug information of C++ code. As I understand, Clang should be able to handle C++.

I tried clang myFile.cpp. But I get

clang: error: unable to execute command: program not executable
clang error: linker command failed due to signal 1 (use -v to see invocation).

After setting the path for llvm-ld, it partially works. I mean, if I perform

clang C:myFile.cpp -S -emit-llvm -o -

it outputs some information. But it still fails for clang myFile.cpp with error

clang version 2.9 (tags/RELEASE_29/final)
Target: i686-pc-win32
Thread model: posix
 "C:/FrontEnd/llvm/bin/Debug/clang.exe" -cc1 -triple i686-pc-win32 -emit-obj -mrelax-all -disable-free -main-file-name BinarySearch_Kernels.cpp -mrelocation-model static -mdisable-fp-elim -masm-verbose -mconstructor-aliases -momit-leaf-frame-pointer -v -resource-dir C:/FrontEnd/l
lvm/bin/Debug\..\lib\clang\2.9 -ferror-limit 19 -fmessage-length 280 -fcxx-exceptions -fexceptions -fms-extensions -fmsc-version=1300 -fgnu-runtime -fdiagnostics-show-option -fcolor-diagnostics -o C:/Users/ilipov/AppData/Local/Temp/cc-563130.o -x c++ C:\clang\BinarySearch_Kernels
.cpp
clang -cc1 version 2.9 based upon llvm 2.9 hosted on i686-pc-win32
ignoring nonexistent directory "/usr/local/include"
ignoring nonexistent directory "/usr/include"
  #include "..." search starts here:
  #include <...> search starts here:
 C:/FrontEnd/llvm/bin/Debug/../lib/clang/2.9/include
 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include
 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\include
End of search list.
 "link.exe" -out:a.out -defaultlib:libcmt -nologo C:/Users/ilipov/AppData/Local/Temp/cc-563130.o
clang: error: unable to execute command: program not executable
clang: error: linker command failed due to signal 1 (use -v to see invocation)

Any case, I want to get as full debug information as possible

For example, for

class stamBase
{
public:
    int get1(){return 2;};
    int get0(){return 0;}
};
class stamDer : public stamBase
{
public:
    int get1(){return 1;}
};
void func()
{
    stamDer d;
    int x = d.get1();
}

I get

target datalayout = "e-p:32:32:32-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-f80:128:128-v64:64:64-v128:128:128-a0:0:64-f80:32:32-n8:16:32"
target triple = "i686-pc-win32"
%class.stamDer = type { i8 }
define void @_Z4funcv() {
entry:
  %d = alloca %class.stamDer, align 1
  %x = alloca i32, align 4
  %call = call i32 @_ZN7stamDer4get1Ev(%class.stamDer* %d)
  store i32 %call, i32* %x, align 4
  ret void
}
define linkonce_odr i32 @_ZN7stamDer4get1Ev(%class.stamDer* %this) nounwind align 2 {
entry:
  %this.addr = alloca %class.stamDer*, align 4
  store %class.stamDer* %this, %class.stamDer** %this.addr, align 4
  %this1 = load %class.stamDer** %this.addr
  ret i32 1
}

From my investigation of Clang debug information code, I thought that I should get the information for stamBase too!

How can I run Clang correctly for accepting full debug information and preventing Clang errors?

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
YAKOVM
  • 9,805
  • 31
  • 116
  • 217

1 Answers1

4

I think you need to install a linker. GNU ld will be fine; you should be able to install it via your package manager.

There also is an LLVM linker. It is less popular, but it would run out of the box with Clang once installed (just add it to the PATH a rerun clang).

Peter Mortensen
  • 30,738
  • 21
  • 105
  • 131
slaphappy
  • 6,894
  • 3
  • 34
  • 59
  • I use clang with llvm - is there anothe option for the linker? – YAKOVM Aug 09 '11 at 11:38
  • 1
    @Yakov: either ld or gold, both should work. ld has the advantage of being standard and cross-platform. – Matthieu M. Aug 09 '11 at 11:57
  • Suppose I installed llvm-ld or GNU-ld either-ld.how should I run clang now with my cpp file? – YAKOVM Aug 09 '11 at 12:04
  • I have llvm-ld exe. It was added to path.But I still get the same error. – YAKOVM Aug 09 '11 at 12:48
  • @Yakov: You should run it with `-v` to have more details about your error, and post relevant information here. – slaphappy Aug 09 '11 at 13:01
  • -cc1 -triple i686-pc-win32 -emit-obj -mrelax-all -disable-free -main-file-n lvm/bin/Debug\..\lib\clang\2.9 -ferror-limit 19 -fmessage-length 280 -fcxx-exceptions -fexceptions -fms-extensions.cpp clang -cc1 version 2.9 based upon llvm 2.9 hosted on i686-pc-win32 ignoring nonexistent directory "/usr/local/include" ignoring nonexistent directory "/usr/include" #include "..." search starts here: #include <...> search starts here: C:/llvm/bin/Debug/../lib/clang/2.9/include C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\\includ – YAKOVM Aug 09 '11 at 13:13
  • This has been stripped by the comment system, can you put that into the question ? – slaphappy Aug 09 '11 at 13:21
  • llvm-ld is not a general purpose linker and will not solve this problem. You need the developer tools for your platform installed in order to get binaries linked. – echristo Aug 09 '11 at 21:57