Скомпилируйте ассемблерный код, который включает заголовочные файлы, содержащие C-определения - PullRequest
0 голосов
/ 24 ноября 2011

Я пытаюсь скомпилировать ассемблер и код на C вместе (не C на ассемблер), но не могу этого сделать.

Например

file common.h

#ifndef __COMMON_H__
#define __COMMON_H__

struct tree{
        tree* left;
        tree* right;

        void* elem;
};

void foo(int c);
#endif

file common.S

#include "common.h"

    .text
    .globl foo
    .ent foo
foo:
     //foo implementation

    .end foo

Когда я пытаюсь скомпилировать это:

# gcc -c common.S
common.h: Assembler messages:
common.h:5: Error: unrecognized opcode `struct tree{'
common.h:7: Error: unrecognized opcode `tree* left'
common.h:8: Error: unrecognized opcode `tree* right'
common.h:10: Error: unrecognized opcode `void* elem'
common.h:12: Error: junk at end of line, first unrecognized character is `}'
common.h:14: Error: unrecognized opcode `void foo(int c)'

Есть ли способ использовать C-определения в сборке, используя gcc?

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 24 ноября 2011

Нет, вы не можете включать объявления C на языке ассемблера. Ассемблер понятия не имеет, что означает struct tree.

Если вы хотите написать функцию foo на ассемблере, которая использует ваше определение struct tree, вам придется делать это без использования файла заголовка C.

Чтобы получить представление о том, как это может выглядеть, напишите функцию foo в C, скомпилируйте ее с помощью gcc -S, чтобы сгенерировать листинг сборки, а затем взгляните на полученный сгенерированный компилятором файл common.s. , (Вероятно, вы должны сделать это в отдельном каталоге, чтобы не стереть существующий файл common.s.)

Вы, вероятно, не увидите никаких ссылок на struct tree или на имена членов left, right и elem; вместо этого вы увидите коды операций сборки, которые ссылаются на данные с определенными смещениями.

1 голос
/ 24 ноября 2011

Вам не нужно компилировать файл заголовка.Попробуйте это:

# gcc -c common.S

без

#include <common.h> 

вместе. S

0 голосов
/ 25 ноября 2011

Я рекомендую вам обзор Inline Assembler Cookbook .

...