The driver behaves differently when I run it by specifying absolute path than when I run it with relative path. See example Relative: i00202 at ubuntu:/tmp$ mcc16 --save-temps -dry-run hello.c./clang-cc -I ./include -triple=pic16- -emit-llvm-bc hello.c -o hello.bc-pqDR1Y llvm-ld -link-as-library hello.bc-pqDR1Y -o tmp.bc-M1Rwip llc -march=pic16 -f tmp.bc-M1Rwip -o tmp.s-DcVczP gpasm -I ./inc tmp.s-DcVczP -o tmp.o mplink /k ./lkr /l ./lkr tmp.o -o a.out Absolute: i00202 at ubuntu:/tmp$ /home/i00202/projects/llvm/Debug/bin/mcc16 --save-temps -dry-run hello.c /home/i00202/projects/llvm/Debug/bin/clang-cc -I /home/i00202/projects/llvm/Debug/include -triple=pic16- -emit-llvm-bc hello.c -o hello.bc-iqtUNP llvm-ld -link-as-library hello.bc-iqtUNP -o tmp.bc-6pjc0L llc -march=pic16 -f tmp.bc-6pjc0L -o tmp.s-RYXucI gpasm -I /home/i00202/projects/llvm/Debug/inc tmp.s-RYXucI -o tmp.o mplink /k /home/i00202/projects/llvm/Debug/lkr /l /home/i00202/projects/llvm/Debug/lkr tmp.o -o a.out With absolute path it is able to find my headers, libs correctly but not with relative. While debugging with ddd, the ddd always printed full paths for headers etc. - Sanjiv
I found out the problem. Looks like I can not rely on argv[0] to contain the full path of the executable always. Can I rely on: static Path GetMainExecutable(const char *argv0, void *MainAddr); is it Cross-platform? What to pass for second parameter here. C++ forbids taking address of "main", and the "Main" of CompilerDriver is in a shared object here. - Sanjiv Sanjiv Gupta wrote:> The driver behaves differently when I run it by specifying absolute path > than when I run it with relative path. > See example > > Relative: > > i00202 at ubuntu:/tmp$ mcc16 --save-temps -dry-run hello.c./clang-cc -I > ./include -triple=pic16- -emit-llvm-bc hello.c -o hello.bc-pqDR1Y > llvm-ld -link-as-library hello.bc-pqDR1Y -o tmp.bc-M1Rwip > llc -march=pic16 -f tmp.bc-M1Rwip -o tmp.s-DcVczP > gpasm -I ./inc tmp.s-DcVczP -o tmp.o > mplink /k ./lkr /l ./lkr tmp.o -o a.out > > Absolute: > > i00202 at ubuntu:/tmp$ /home/i00202/projects/llvm/Debug/bin/mcc16 > --save-temps -dry-run hello.c > /home/i00202/projects/llvm/Debug/bin/clang-cc -I > /home/i00202/projects/llvm/Debug/include -triple=pic16- -emit-llvm-bc > hello.c -o hello.bc-iqtUNP > llvm-ld -link-as-library hello.bc-iqtUNP -o tmp.bc-6pjc0L > llc -march=pic16 -f tmp.bc-6pjc0L -o tmp.s-RYXucI > gpasm -I /home/i00202/projects/llvm/Debug/inc tmp.s-RYXucI -o tmp.o > mplink /k /home/i00202/projects/llvm/Debug/lkr /l > /home/i00202/projects/llvm/Debug/lkr tmp.o -o a.out > > > > With absolute path it is able to find my headers, libs correctly but not > with relative. > While debugging with ddd, the ddd always printed full paths for headers etc. > > - Sanjiv > > _______________________________________________ > LLVM Developers mailing list > LLVMdev at cs.uiuc.edu http://llvm.cs.uiuc.edu > http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev >
Hi Sanjiv, On Wed, Jul 1, 2009 at 7:02 PM, Sanjiv Gupta<sanjiv.gupta at microchip.com> wrote:> I found out the problem. Looks like I can not rely on argv[0] to contain the > full path of the executable always.Yeah, that's what I was thinking.> Can I rely on: > static Path GetMainExecutable(const char *argv0, void *MainAddr);Clang relies on it. According to http://llvm.org/viewvc/llvm-project/cfe/trunk/tools/driver/driver.cpp MainAddr can be any symbol in the binary. -- () ascii ribbon campaign - against html e-mail /\ www.asciiribbon.org - against proprietary attachments