Add additional code to function (c/c++) while compiling

Raphael Zulliger zulliger@indel.ch
Thu Apr 15 14:29:00 GMT 2004


i'm very new to gcc-hacking. i've only used and built gcc (as a 
crosscompiler for powerpc-eabi) so far...

i would like to add a very simple stack-protection (for our own-brewed 
os) to the code compiled with gcc 3.x. therefore i should be able to add 
about 5 lines of PPC assembler to each function body... first i hoped 
this should be quite easy - but it seams to be harder than expected. at 
least for me.

first i tried to add the code in the rs6000.c in the function
    rs6000_output_function_prologue
ok this worked, but the stack-pointer (r1 in case of the PPC) is 
adjusted later - and of course i need the adjusted value of the 
stackpointer.

.LFB5:
    .loc 1 21 0
    .extern    my stackcheck_code   // my code
    stwu 1,-544(1)                           // stack adjustment...
.LCFI3:
    mflr 0
    stw 31,540(1)
.LCFI4:
    stw 0,548(1)
.LCFI5:
    mr 31,1
.LCFI6:


then i found that the file gcc/final.c (function final() ) calls the 
function final_scan_insn( ) which really writes out the assembler-code 
to the assembler-file. the problem seams to be that in this state of 
assembling, i don't have a chance to check if the actual insn is a 
stackpointer adjustment or some other commands, right? (ok, i could scan 
for the string "stwu" and the destination register "1"...)

at the moment i think the best place to add my "checking-code" is right 
after parsing the c/c++ code. but i really don't know in which file and 
which function...

in fact, everythings very unclear for me, thats why i'm writing to you.
it would be very nice, if someone could point me in the right direction 
by telling me what possibilities i do have and telling me what files & 
functions i have to extend. if it's not c-code (rtl, ...) i really would 
like to have a code-snippet which does:
    - compare the complete size of the stack, added to the value of a 
ppc-hardware-register (spr 274)
    - by a value which i may read from the memory

btw: this stack-check should be enabled/disabled by an -f switch or 
simillar, it's only needed for the powerpc-eabi-family and may be a hack 
instead of a clean solution.


thanks in advance!
raphael zulliger




More information about the Gcc-help mailing list