Tag: sparc

SPARC大会问题

我想在我的C程序中编写一个非常简单的内联汇编程序,然后将本地寄存器%l0 – %l7设置为不同的值。 我尝试了以下简单的方法: asm volatile ( “.text\n\t” “mov 0, %%l0 \n\t” “mov 1, %%l1 \n\t” “mov 2, %%l2 \n\t” “mov 3, %%l3 \n\t” “mov 4, %%l4 \n\t” “mov 5, %%l5 \n\t” “mov 6, %%l6 \n\t” “mov 7, %%l7 \n\t” ); 不幸的是,汇编器告诉:每条指令的非法操作数。 有人可以非常高兴地指出我如何正确地将立即值传递给SPARC汇编程序吗? 非常感谢! 编辑:谢谢克里斯,我做了你建议的更改,但Sparc编译器仍然告诉一些关于非法操作数…

SPARC程序集参数中的printf格式说明符?

如何使用SPARC程序集获得相当于此C的内容: printf( “Hello, my name is %s.\n”, name ); 使用函数原型: void printName( const char* msg, const char* name ) 其中msg是“你好,我的名字是%s。\ n”。 我知道我可以使用.asciz在数据段中定义“Hello,my name is%s。\ n”而没有第一个参数msg,但有没有办法将字符串传递给一个具有%的汇编函数它的标识符? char *甚至可以采用格式标识符吗? 我尝试了以下但是我获得了核心转储。 C中的函数调用: char * msg = “Hello, my name is %s.\n”; char * name = “Foo”; printName( msg, name ); 部件: mov %i0, %o0 mov %i1, %o1 call […]

Sparc函数编译对齐

我希望我的程序使得二进制文件中的每个函数在结束后都留有一些空间。 因此,稍后如果需要进行一些小的更改,则仅更改该function,并使用额外的空间作为计算较小变化的空间。 -falign-function可以完成这项工作但不会提供一致的空间。 无论如何要做到这一点? 还是更好的方法呢?

无法使用clang交叉编译到SPARC

所以情况就是这样:我需要能够从Linux机器(在Ubuntu上,它的价值)编译二进制文件,它们能够从SPARC服务器运行。 我正在尝试编译的程序非常简单: #include #include int main() { printf(“Testing the SPARC program…”); return EXIT_SUCCESS; } 我已经尝试了许多不同的编译行来使它工作,但遗憾的是似乎没有任何工作。 我试过传统的: clang -target sparc blah.c -o blahsparc 但这不起作用,有一堆汇编程序失败: /tmp/blah-519e77.s: Assembler messages: /tmp/blah-519e77.s:7: Error: unknown pseudo-op: ‘.register’ /tmp/blah-519e77.s:8: Error: unknown pseudo-op: ‘.register’ /tmp/blah-519e77.s:9: Error: unknown pseudo-op: ‘.register’ /tmp/blah-519e77.s:10: Error: unknown pseudo-op: ‘.register’ /tmp/blah-519e77.s:11: Error: no such instruction: ‘save %sp,-240,%sp’ /tmp/blah-519e77.s:12: Error: […]

用于Sparc架构的GCC内联汇编

我在互联网上找到了__sync_val_compare_and_swap的实现: #define LOCK_PREFIX “lock ; ” struct __xchg_dummy { unsigned long a[100]; }; #define __xg(x) ((struct __xchg_dummy *)(x)) static inline unsigned long __cmpxchg(volatile void *ptr, unsigned long old, unsigned long new, int size) { unsigned long prev; switch (size) { case 1: __asm__ __volatile__(LOCK_PREFIX “cmpxchgb %b1,%2” : “=a”(prev) : “q”(new), “m”(*__xg(ptr)), “0”(old) : “memory”); return […]

Makefile问题 – 读者的致命错误

我正在为学校项目创建的makefile遇到一些问题。 我正在编译和组装C文件和SPARC程序集文件(分别)并链接它们。 我在Unix环境中工作。 这是makefile: proj09.exe: proj09.driver.o proj09.support.o gcc -Wall proj09.driver.o proj09.support.o -o proj09.exe proj09.driver.o: proj09.driver.c /user/cse320/Projects/project09.support.h gcc -Wall -c proj09.driver.c /user/cse320/Projects/project09.support.h proj09.support.o: proj09.support.s gcc -Wall proj09.support.s 但是,当我试图制作它时,我得到一个读者错误,特别是: “阅读器中的致命错误:proj09.makefile,第2行:看到意外的行尾” 现在我知道通常这意味着某些内容格式不正确,但我不知道在这种情况下它可能是什么。 另外,我不是100%确定这是makefile的正确代码(特别是我的support.s文件的汇编,以及两个文件的链接)。 如果这是一个重复的问题,我道歉,我事先查看了档案,找不到任何有用的东西。 任何帮助将不胜感激! 编辑:我不明白为什么这会有所作为,但我使用gedit实际编写代码,然后将文件传输到SSH进行链接。

“未定义的符号_memset”

我问了一个类似的问题,但我有一些更新让我很困惑。 基本上,我想用链接器链接许多目标文件,如下所示: /usr/ccs/bin/ld -oq -e start_master -dn -z defs -M ../../../mapfile.q {list of object files} 我收到以下错误: Undefined first referenced symbol in file _memset reconf.o 有趣的是,memset没有在reconf.c中引用,我也对整个目录进行了grep,但是在任何其他文件中也没有引用_memset。 因此,我想知道为什么我从链接器收到此错误消息,尽管在我的源代码中实际上没有使用_memset。 有人知道这里会发生什么吗? 非常感谢,这个错误正在驱使我们精神上! 编辑: 我尝试将路径添加到memset库并将其与-lc链接并以详细模式运行: /usr/ccs/bin/ld -oq -e start_master -dn -z defs -z verbose -L/usr/lib -M ../../../mapfile.q {list of object files} -lc 然后我得到以下错误:ld:致命:library -lc:not found ld:fatal:文件处理错误。 没有输出写入q 虽然libc.so显然在/ usr / […]

在编译时未定义引用`__sync_val_compare_and_swap_4’错误,使用gcc 4.1.1和4.2.0对Sparc v8目标

使用crosstool脚本我在Cygwin下构建了Sparc架构的以下编译器gcc-4.1.1和4.2.0 20061024(预发行版): $ ./sparc-unknown-linux-gnu-gcc -v Using built-in specs. Target: sparc-unknown-linux-gnu Configured with: /crosstool-0.43/build/sparc-unknown-linux-gnu/gcc-4.1.1-glibc-2.3.6/gcc-4.1.1/configure –target=sparc-unknown-linux-gnu –host=i686-host_pc-cygwin –prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu –with-headers=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-gnu/include –with-local-prefix=/opt/crosstool/gcc-4.1.1-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-gnu –disable-nls –enable-threads=posix –enable-symvers=gnu –enable-__cxa_atexit –enable-languages=c,c++ –enable-shared –enable-c99 –enable-long-long Thread model: posix gcc version 4.1.1 和 $ ./sparc-unknown-linux-gnu-gcc -v Using built-in specs. Target: sparc-unknown-linux-gnu Configured with: /crosstool-0.43/build/sparc-unknown-linux-gnu/gcc-4.2-20061024- glibc-2.3.6/gcc-4.2-20061024/configure –target=sparc-unknown-linux-gnu –host=i 686-host_pc-cygwin –prefix=/opt/crosstool/gcc-4.2-20061024-glibc-2.3.6/sparc-un known-linux-gnu –with-headers=/opt/crosstool/gcc-4.2-20061024-glibc-2.3.6/sparc -unknown-linux-gnu/sparc-unknown-linux-gnu/include –with-local-prefix=/opt/cros stool/gcc-4.2-20061024-glibc-2.3.6/sparc-unknown-linux-gnu/sparc-unknown-linux-g nu […]