假設我寫一些C代碼,並生成一些組件是這樣的:如何使用GCC將彙編代碼前綴到程序上?
.text main: mvs $r3, $sp addi $r3, $r3, -16 mvs $sp, $r3 mvs $r3, $sp addi $r3, $r3, 3 shri $r3, $r3, 2 shai $r3, $r3, 2 call __main sti 8($r3), 25 sti 4($r3), 23 sti ($r3), 43 L2: ld $r4, 8($r3) ld $r5, 4($r3) add $r4, $r4, $r5 st 8($r3), $r4 ld $r4, 8($r3) ld $r5, 4($r3) sub $r4, $r4, $r5 st ($r3), $r4 jmp L2
我怎麼能注入更多的彙編代碼,就在主之間:和第一線? 目標是在運行通過c代碼生成的任何彙編代碼之前,將所有寄存器設置爲0。這是爲了默認寄存器的值,這是我正在使用的特定處理器所需的。
我想過使用gcc鏈接器和一個自定義對象文件來組裝我的自定義代碼在前面的項目,但我不知道我是否有與鏈接器的那種能力。
我曾考慮過使用crtbegin.asm,但我認爲這實際上意味着支持C++構造函數/解構器。所以這根本不會幫助我。
任何想法?
它會工作,只是將其作爲內聯彙編代碼插入C代碼文件中?或者甚至在'main'函數啓動之前就必須發生? –
理想情況下,它應該發生在主函數內部,但在生成的代碼之前。我發現你可以使用以下代碼注入代碼:TARGET_ASM_FILE_START,但它也發生在.text之前,我認爲這是錯誤的/錯誤的。 – RGroppa