Hi,
In order to find out-of-bound accesses to global objects with AddressSanitizer (http://code.google.com/p/address-sanitizer/wiki/AddressSanitizer)
I need to create redzones to the left and to the right of every global variable.
I tried the following:
Before:
@Extern = global [10 x i8] zeroinitializer, align 1
After:
%0 = type { [32 x i8], [10 x i8], [54 x i8] }
@Extern_asan_redzone = global %0 zeroinitializer, align 1
@0 = global [10 x i8] zeroinitializer, align 1 << the old variable
@Extern = alias getelementptr inbounds (%0* @Extern_asan_redzone, i32 0, i32 1)
I.e. I created a global struct @Extern_asan_redzone of 3 elements and an alias @Extern that points to the middle element of this struct.
The compilation passes, but the resulting object looks like this:
000000000060d150 B Extern
000000000060d150 B Extern_asan_redzone
I.e. @Extern points to the beginning of @Extern_asan_redzone instead of middle.
Also, the comment in GlobalAlias.h says:
/// getAliasedGlobal() - Aliasee can be either global or bitcast of
/// global. This method retrives the global for both aliasee flavours.
So, the question: can I get an alias pointing to the middle of a GlobalVariable? How?
If not, is there some other way to create a left redzone for a global variable?
Thanks,
–kcc