aboutsummaryrefslogtreecommitdiff
path: root/clang/lib/Analysis/FormatString.cpp
diff options
context:
space:
mode:
authorRui Ueyama <ruiu@google.com>2014-08-29 20:33:27 +0000
committerRui Ueyama <ruiu@google.com>2014-08-29 20:33:27 +0000
commit495a031ce46002047bb917c8c363187eda98c6b7 (patch)
treee973c7ae2a4b140f5fbf3bc05da2e6269acbf119 /clang/lib/Analysis/FormatString.cpp
parent163ef0402a231796c8dc915a92dd5a8e72d70079 (diff)
downloadllvm-495a031ce46002047bb917c8c363187eda98c6b7.zip
llvm-495a031ce46002047bb917c8c363187eda98c6b7.tar.gz
llvm-495a031ce46002047bb917c8c363187eda98c6b7.tar.bz2
[PECOFF] Fix AMD64_REL_[1-5] and AMD64_SECTION relocations
I hope this is the last fix for x64 relocations as I've wasted a few days on this. This caused a mysterious issue that some C++ programs crash on startup. It was because a null pointer is passed as argv to main. __tmainCRTStartup calls main, but before that it calls all initialization routines between .text$xc_a and .text$xc_z. pre_cpp_init is one of such routines, and it is the one who initializes a heap pointer for argv for later use. That routine was not called for some reason. It turned out that __tmainCRTStartup was skipping a block of code because of the relocation bug. A condition in the function depends on a memory load, and that memory load was referring a wrong location. As a result a jump instruction took the wrong branch, skipping pre_cpp_init and so on. This patch fixes the issue. Also added more tests to fix them once and for all. llvm-svn: 216772
Diffstat (limited to 'clang/lib/Analysis/FormatString.cpp')
0 files changed, 0 insertions, 0 deletions