[LLVMdev] Problems of manipulating GEP for struct type

ChiaLun h3355626 at msn.com
Wed Oct 3 22:58:03 PDT 2012


I use JIT to execute the following LLVM IR,

define internal fastcc i32 @L_00008120_(%struct.ThreadContext* %ThreadCtx) {
  %0 = alloca i32
  %1 = alloca i32
  %2 = alloca %struct.ThreadContext*, align 4
  store %struct.ThreadContext* %ThreadCtx, %struct.ThreadContext** %2
  call void @reach()
  br label %L_00008120_

L_00008120_:                                      ; preds = %L_00000000_
  call void @reach()
  %3 = load %struct.ThreadContext** %2, align 4
  call void @reach()
  %4 = getelementptr inbounds %struct.ThreadContext* %3, i32 0, i32 1
  call void @reach()
  %5 = getelementptr inbounds [32 x i32]* %4, i32 0, i32 2
  call void @reach()
*  store i32 33056, i32* %5*
  call void @reach()
  br label %L_00008120_1



Somehow, the storeInst is not successfully performed, it gets

segmentation fault, I wonder if I miss something important.

I pinpoint the problems by inserting call void @reach(), before each

the codes for function reach are

void reach()
  puts("press any key");
	fprintf(stderr,"reach stderr\n");

so I am almost sure that the segmentation fault is derived from storeInst.

the structure struct.ThreadContext in LLVM IR corresponds to C struct

struct ThreadContext
    int id;
    int r[32];

    void init();
    void setsp(int);
    void setpc(int);

The function prototype
typedef uint32_t (*func)(struct ThreadContext* );

func = jit->runJITOnFunction(...);

then execute the function by

func(&ctx); // ctx is defined to be " struct ThreadContext ctx;"

My execution result

press any key

reach stderr
press any key

reach stderr
press any key

reach stderr
press any key

reach stderr
press any key

reach stderr
0  libDynTrans.so 0x013650b8
Stack dump:
0.	Program arguments: ./Release+Asserts/bin/translator
Segmentation fault

If anyone can give a hint on the possible reason of segmentation fault, I
would be grateful.

Chia Lun

View this message in context: http://llvm.1065342.n5.nabble.com/Problems-of-manipulating-GEP-for-struct-type-tp49616.html
Sent from the LLVM - Dev mailing list archive at Nabble.com.

More information about the llvm-dev mailing list