Custom Alloca implementation

Hello all,

In my project, I need to allocate an extra 4 Bytes in every Alloca instruction. These additional bytes will be used to store the ‘allocation info’(like size and structure of the allocated object etc). Instead of adding 4 bytes to the Alloca ‘size’ operand at every Alloca Instruction, I was thinking to make this change at the level where Alloca gets converted to machine IR.

Can anyone please point me towards the code which actually handles this conversion(lowering of Alloca Inst)?

Hello Udit,
I’m not sure but can’t you achieve the same just using metadata avoiding to change the alloca instruction?

Thanks
Alberto

—Adding llvm-dev list to CC—

Hi Alberto,

Thanks for your prompt reply. Actually, I need this information(about total allocation size and object structure) on runtime, so that is why I was planning to encode this info and store it in the memory itself.

Regards,
Udit

Hi Udit,
No problem at all. When you say at runtime you mean using the Interpreter class or something else?

If I understood properly your problem I think you could do some getDataLayout.getTypeAllocSize(I->getOperand(0)->getType());

Where is I is the reference to the Alloca instruction.

I hope it is correct :slight_smile:

Alberto

---- CC’ing llvm-dev list ----

This is not really my area, but I am curious whether the memory safety you are seeking would be addressed by some combination of the Stack Protector pass and the Memory Sanitizer.

If you do wish a separate solution, note that (IIUC) alloca does not necessarily lower to a specific machine instruction. For one thing, scalar variables will typically be optimized into registers, and will not have a memory location at all. Local variables that are assigned to memory locations will be allocated a “stack slot” in the stack frame; this frame would be allocated in the function prologue. I am not sure where stack slots are assigned, but you could probably make the slots larger when they are assigned.

HTH,

–paulr