问题标签 [sparc]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Sparc V8比较和交换函数的内联汇编实现
我的 gcc 交叉编译器不支持用于原子内存访问的内置函数。我如何使用 Sparc V8 架构的内联汇编来实现以下功能:
那些内置执行原子比较和交换。即如果*ptr的当前值为oldval,则将newval写入*ptr。
c++ - 在 sparc solaris 上使用 gcc 为 long long 整数赋值
我遇到了一些我认为很奇怪的事情。测试程序
输出是:
那里没有惊喜。的long int
大小为 4 个字节,而long long
的大小为 8 个字节。但是,当我更改它以便分配 long long
在编译时我得到
现在,如果我使用选项强制构建 64 位,那么同样的测试会-m64
编译。我做错了什么还是这是 GCC 中的错误?
sockets - 将网络代码移植到 64 位
我有一个程序可以执行一些可以编译 32 位二进制文件的网络 IO
但是,当我在编译时设置 -m64 选项时,我得到以下相当神秘的错误
在我的程序中触发此错误的源代码 operation_networkio.cc 中的违规行似乎是
有人能告诉我我做错了什么以及如何解决这个问题吗?我在 Solaris sparc 上使用 GCC
c++ - SPARC 的 GCC 内联汇编:如何处理整数双字对?
据我了解,在 SPARC 中,32 位整数存储在单个寄存器中,64 位整数存储在相邻的寄存器对中,偶数寄存器包含高 32 位,奇数寄存器包含低 32 位。
我需要编写一些专门的 SPARC 内联汇编宏(内联汇编函数也可以)来处理 64 位整数双字对,我不知道如何泛指(使用 GCC 扩展内联汇编)我的内联汇编中的两半。虽然我的汇编宏比下面显示的 MULTIPLY() 宏稍微复杂一点,但乘法示例(如果有效)将演示如何处理 64 位双字对的两半。谁能告诉我如何修复我的 MULTIPLY() 宏?
以防万一,我在...
bash-2.03$ uname -a
SunOS [...] 5.8 Generic_117350-39 sun4u sparc SUNW,Ultra-80
这是我的简单示例程序(在 C 中):
其中,当使用 编译时gcc-3.2-sun4u/bin/gcc -o mult -mcpu=ultrasparc mult.c
,会产生以下输出:
我查看了-S -fverbose-asm
gcc 的输出,它正在对结果寄存器(偶数)进行一些奇怪的移位并写入相邻的奇数寄存器。我的问题是我不知道如何在扩展 asm 语法中泛指相邻的奇数寄存器。我想也许 'h' asm 约束"=h"(r)
可能与它有关,但我找不到任何如何使用它的例子。
c - 仅在 Solarix Unix Box 上运行时出现总线错误
它在我的 Linux 机器(Ubuntu)以及 x86 和 x64 的其他 linux 机器上编译并运行,但在 SunOS Generic_142900-02 sun4u sparc unix 机器上,它在线崩溃
出现总线错误,另外,当我用 GCC -G 编译它时,GDB 找不到任何调试符号
这是代码:
linux-kernel - 插入外部交叉编译的 SPARC Linux 模块时出现重定位错误
首先:我不是专家,所以请原谅我试图解释自己的任何错误。
我正在尝试使用 Sparc- 为 SPARC 机器交叉编译外部 Linux 模块Linux-GCC-4.4.2
。Linux 内核的版本是2.6.36.4-00037-g059aa91-dirty
. 它已经用LEON
处理器的一些文件进行了修补。向我提供了构建流程,它使用LinuxBuild
、Buildroot
和Busybox
. 我正在尝试制作 32 位操作系统。
一切似乎都正常,但是在我编译模块并尝试将其安装到 SPARC 系统后,我收到此错误:
这个错误来自于~/linuxbuild-1.0.3/linux/linux-2.6-git/arch/sparc/kernel/module.c
为了完整起见,我将提供整个方法:
因此,我了解默认情况是我所遇到的情况。ELF_R_TYPE(rel[i].r_info
(SPARC Relocations) 类型在我的~/linuxbuild-1.0.3/dist/buildroot/build-br/staging/usr/include/elf.h
文件中定义,其中一些类型如下:
所以重定位 6 对应于R_SPARC_DISP32
akaPC
相对 32 位。这在module.c
case 语句中定义,但仅限于 64 位部分。我想我要么需要自己编写重定位,要么弄清楚我需要什么重定位标志并在编译期间更改标志。我真的不明白重定位代码中发生了什么,所以请帮我弄清楚我应该如何解决这个问题。我不认为我可以将操作系统构建为 64 位,因为它似乎会破坏系统,所以请帮助我找到替代解决方案。
optimization - 机器指令 fxtod 是否应该慢得离谱
我有一个程序,我试图对其执行一些循环优化它是用 C++ 编写并使用 gcc 编译的
最终使用探查器,我跟踪了循环执行时间的一半以上到该行
这一行的所有内容都是 double 类型,但循环索引 nn 的类型是 long unsigned int
从 long unsigned int 到 double 的转换生成分析器标记的汇编指令 fxtod
作为测试,我从行中删除了对 nn 的引用,从而将强制转换从 unsigned int 删除为 double 并且循环的执行时间减少了近一半,在一个对 Ultrasparc IV 执行大约十几个浮点操作的循环中处理器。我确认 Ultrasparc II 也是如此,
从 int 到 double 的转换比缓存未命中要贵得多,更不用说浮点乘法是否正常?如果是这样,其他人通常会怎么做呢?
nn 的所有可能值(在这种情况下具有已知的有限范围)的查找表将比这更快
buffer-overflow - 为什么其中一个程序有效而另一个无效?
我最近完成了一个项目,我要编写一个程序来“攻击” SUN Sparc“服务器”并导致缓冲区溢出。基本上,目标是从正在运行的“服务器”内部启动 /bin/ksh。
最终我让它工作了,但我认为这是一个愚蠢的原因:当用户输入缓冲区和偏移值作为参数时它不起作用,但是当值被硬编码时它起作用。
这是“刚性”程序:
这是“灵活”的版本:
请注意,唯一的区别是我声明 BUFSIZE 和 OFFSET 而不定义它们,然后将它们设置在 main 中。
对于后代,这是我正在攻击的“服务器”:
这些都是在我的 Oracle Solaris 10 9/10 s10s_u9wos_14a SPARC 机器上编译的。
我的问题是:
为什么灵活的程序不能工作只是因为我做了 BUFSIZE 和 OFFSET 命令行参数?
assembly - 将 C 函数转换为程序集
嗨,我正在尝试将我编写的这个 C 函数转换为汇编代码(SPARC arc),但不断收到分段错误(核心转储)错误。该函数应该将字符串转换为长值。我知道我正确地完成了 C 函数,因为我已经对其进行了测试,并且它通过了所有测试。这是我要转换的 C 函数。
这是我写的汇编代码。
我调试了程序,当我调用 strtol 函数时出现了段错误。我不确定我做错了什么,我认为我正确地传递了参数,但我仍然得到那个错误。哦,在我的主要声明中,我声明了类似 FILE* StdError = stderr 的内容,以将 stderr 作为参数传递给 fprintf。
任何帮助都将不胜感激。
java - 在 sun solaris 8 上安装 java 1.6.31
我已经在 Solaris 8 Sparc 上安装了 java 1.6.0.31,但是当我输入命令时:
我的安装出了什么问题...?