Соглашения о вызовах ARM в WinCE и Linux? - PullRequest
4 голосов
/ 17 июля 2010

WinCE и Linux используют одно и то же соглашение о вызовах в ARM? В чем различия?

Документы, которые я нашел до сих пор, не очень хорошо объясняют. Например, в http://msdn.microsoft.com/en-us/library/ms864497.aspx, в одной строке написано «Компилятор Windows CE .NET», а в следующей - «Компилятор ARM», а в нижней части - «CLARM», и неясно, относится ли это к один и тот же компилятор или разные компиляторы. Вот что я нашел до сих пор ...

Причина, по которой я спрашиваю, состоит в том, что я хотел бы попробовать использовать LLVM в WinCE для генерации некоторого простого кода во время выполнения, но он официально поддерживает только Linux.

Ответы [ 2 ]

2 голосов
/ 26 июля 2010

Соглашения о вызовах реализуются компилятором и не зависят от операционной системы. Сказав это, я могу подтвердить, что и gcc, и RVCT (компилятор ARM c / c ++) генерируют код, который следует соглашению о вызовах процедур для архитектуры ARM, о которой вы упоминали выше.

Глядя на ссылку на документацию Microsoft, я также могу подтвердить, что она соответствует соглашению о вызовах ARM.

1 голос
/ 23 декабря 2012

Мне попался точно такой же вопрос, на который я пытался найти ответ. А именно, где / какой документ что-то говорит или определяет ARM ABI, используемый в LINUX.

Следующий документ - самый близкий к моему ответу

ARM GNU/Linux Application Binary Interface Supplement

это от CodeSourcery и в зашифрованном виде в его резюме лежит, на мой взгляд, ответ на вопрос выше, а именно:

Application Binary Interface (ABI) for the ARM Architecture (документ, опубликованный ARM Ltd) определяет различные аспекты компиляции и связи, необходимые для взаимодействия между цепями инструментов, используемыми для архитектуры ARM.

Однако, поскольку ABI, опубликованный в этом документе, разработан без ссылки на конкретную операционную систему, существуют определенные аспекты, которые остаются неуказанными.

Очевидно, документ CodeSourcery предназначен для дополнения ABI для архитектуры ARM, определяя решения, принимаемые для этих аспектов при использовании операционной системы GNU / Linux.

Я предоставляю одну ссылку на этот документ (другие можно найти, выполнив поиск по названию документа):

http://www.boost.org/doc/libs/1_51_0_beta1/libs/context/doc/pdf/arm-linux-aapcs.pdf

Кажется, что стандарт, определяющий ARM ABI в LINUX, не существовал, и снова кажется, что документ CodeSourcery является попыткой охватить этот аспект.

...