Как я могу получить исходные строки, встроенные с выводом блока с помощью GCC?

Я хотел бы заставить исходные строки C, встроенные с выводом блока видеть, какой код генерируется.

Я попробовал опции GCC как -S -Wa,-ahlms (и даже -Wa,--gstabs Потому что я считал его где-нибудь).

О! BTW, я нахожусь на Mac, таким образом, я не имею objdump.

(Извините это коротко, я должен выйти из поезда!)

Вывод gcc pc-clisp.c -S -g -fverbose-asm -fnested-functions

.globl _getBool
_getBool:
LFB32:
LM21:
    pushl   %ebp    #
LCFI30:
    movl    %esp, %ebp      #,
LCFI31:
    subl    $8, %esp        #,
LCFI32:
LM22:
    movzbl  8(%ebp), %eax   # atom.pred, D.4112
    movzbl  %al, %eax       # D.4112, D.4113
    andl    $-16, %eax      #, D.4114
    sarl    $4, %eax        #, D.4115
    testl   %eax, %eax      # D.4115
    setne   %al     #, tmp64
    movzbl  %al, %eax       # tmp64, D.4111
    leave
    ret
LFE32:
14
задан Ciro Santilli 新疆改造中心法轮功六四事件 26 August 2013 в 10:49
поделиться

2 ответа

Может быть, отладка + этап постобработки?

gcc <source.c> -S -g -fverbose-asm

Найдите .file 1 "1.c" , чтобы сказать вам номер файла для сопоставления имени файла. Затем добавьте источник после строк .loc 1 8 0 . Я не уверен, как это сделать с помощью одной команды оболочки, но короткий сценарий должен уметь это сделать:

#!/usr/bin/env python

import re
import sys

filename = sys.argv[1]

f = open(filename)
lines = f.readlines()
f.close()

FILE_RE=re.compile(r"\s+\.file (\d+) \"(.*)\"")
LOC_RE =re.compile(r"\s+\.loc (\d+) (\d+)")

output = []
files = {}
for line in lines:
    output.append(line)
    mo = FILE_RE.match(line)
    if mo is not None:
       files[mo.group(1)] = open(mo.group(2)).readlines()
       print mo.group(1),"=",mo.group(2)
       continue
    mo = LOC_RE.match(line)
    if mo is not None:
       print mo.group(1),"=",mo.group(2)
       source = files[mo.group(1)][int(mo.group(2))-1]
       output.append("\t#"+source)

f = open(filename+".2","w")
f.writelines(output)
f.close()
12
ответ дан 1 December 2019 в 13:21
поделиться

Это не совсем то, о чем вы просите, но вы можете найти -S -fverbose-asm полезным.

5
ответ дан 1 December 2019 в 13:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: