标签: sparc

用于Solaris SPARC的C++ IDE

我们已经获得了一个C++代码库,显然是使用Rational Apex作为前端开发的.我们认为,Apex不太适合C++开发.

我们正在寻找一个可以使用的IDE,它具有语法高亮,代码行走(转到定义,显示用法),并且使用起来并不痛苦.

我们研究过NetBeans,Sun Studio和了解.NetBeans每一步都在与我们作斗争,Sun Studio缺乏功能,而且理解并不是真正的IDE,但我们正试图强迫它成为一个宏.

关于SO的其他问题是相似的,但它们似乎是更直接的问题(并且更加模糊).

我想知道的是Solaris开发人员使用的内容.我们是否需要为NetBeans或Sun Studio提供另一种外观,或者我们错过了什么?

c++ ide sparc solaris-10

5
推荐指数
1
解决办法
5667
查看次数

反汇编的gcc输出似乎执行"调用0"而不是"调用函数偏移",但工作正常

我只看了一下我从这个C程序得到的一个非常简单的SPARC程序集输出:

int addition_func(int a, int b)
{
  return(a+b);
}

void main()
{

int a = 20;
int b = 19;
int res;    

res = addition_func(a, b);
}
Run Code Online (Sandbox Code Playgroud)

反汇编.text:

00000000 <addition_func>:
 0: 81 c3 e0 08     retl 
 4: 90 02 00 09     add  %o0, %o1, %o0

00000008 <main>:
 8: 90 10 20 14     mov  0x14, %o0
 c: 92 10 20 13     mov  0x13, %o1
10: 82 13 c0 00     mov  %o7, %g1
14: 40 00 00 00     call  14 <main+0xc>
18: …
Run Code Online (Sandbox Code Playgroud)

assembly sparc disassembly

5
推荐指数
1
解决办法
883
查看次数

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中):

#include <stdio.h>
//#include <stdint.h>
#define uint32 unsigned long int
#define uint64 unsigned long long int


#define MULTIPLY(r, a, b)  /* (r = a * b) */   \
   asm("umul %1, %2, %0;"  /* unsigned mul */  \
       : /* regs out */  "=h"(r)               \
       : /* regs in  */  "r"(a),   "r"(b));
#if 0
       : /* clobbers */  "%y" );
#endif


int main(int argc, char** argv)
{ …
Run Code Online (Sandbox Code Playgroud)

c c++ gcc sparc inline-assembly

5
推荐指数
1
解决办法
2215
查看次数

抛出的异常从未被捕获,但是线程没有被杀死?

这种情况发生在Solaris sparc机器上:

-bash-3.2$ uname -a
SunOS b2s-sol10spr-1 5.10 Generic_147147-26 sun4v sparc sun4v
Run Code Online (Sandbox Code Playgroud)

我发现异常处理有一个奇怪的问题.这是一个简短的调试会话日志:

GNU gdb (GDB) 7.7
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "sparc-sun-solaris2.10".
Type "show configuration" for configuration details.
For bug reporting instructions, please …
Run Code Online (Sandbox Code Playgroud)

c++ gcc solaris exception-handling sparc

5
推荐指数
0
解决办法
324
查看次数

以下程序集对以下.c文件执行的操作

我写了下面的代码,你能解释一下汇编在这里讲的是什么吗?

typedef struct
{
    int abcd[5];
} hh;

void main()
{
    printf("%d", ((hh*)0)+1);
}  
Run Code Online (Sandbox Code Playgroud)

部件:

        .file   "aa.c"
        .section        ".rodata"
        .align 8
.LLC0:

        .asciz  "%d\n"
        .section        ".text"
        .align 4
        .global main
        .type   main, #function
        .proc   020
main:

        save    %sp, -112, %sp
        sethi   %hi(.LLC0), %g1
        or      %g1, %lo(.LLC0), %o0
        mov     20, %o1
        call    printf, 0
         nop
        return  %i7+8
         nop
        .size   main, .-main
        .ident  "GCC: (GNU) 4.2.1"
Run Code Online (Sandbox Code Playgroud)

c compiler-construction assembly sparc

4
推荐指数
1
解决办法
1121
查看次数

乱序执行会导致推测性内存访问吗?

当无序处理器遇到类似的东西时

LOAD R1, 0x1337
LOAD R2, $R1
LOAD R3, 0x42
Run Code Online (Sandbox Code Playgroud)

假设所有访问都会导致高速缓存未命中,处理器是否可以在询问内容$ R1甚至0x1337之前询问内存控制器0x42的内容?如果是这样,假设访问$ R1将导致异常(例如,分段错误),我们可以认为0x42是以推测方式加载的,对吗?

顺便说一句,当一个加载存储单元向内存控制器发送请求时,它是否可以在收到前一个请求之前发送第二个请求?

我的问题并不针对任何架构.欢迎与任何主流架构相关的答案.

architecture x86 arm powerpc sparc

4
推荐指数
1
解决办法
1674
查看次数

如何编写Sparc程序集并在Qemu或Simics中运行其二进制文件?

我正在尝试开始编写一些Sparc程序集,但我无法弄清楚如何组装和运行代码.我用arcTools编写了弧形,但就我已经用装配而言.我已下载了simics和qemu,但我不知道从哪里开始.谁能指出我正确的方向?谢谢.

assembly qemu sparc simics

4
推荐指数
1
解决办法
1103
查看次数

SIGALRM在Solaris 9上睡觉时

在Solaris 9(Sparc)上的chroot环境中运行Perl时,我遇到了一些奇怪的错误.我们正在使用自定义的Perl,但它几乎完全使用Perl 5.8.7,这个版本已经运行了多年在各种平台包括Solaris 8-10.

以下代码非常简单:

#!/usr/bin/perl
use strict; 
use warnings;

print "About to sleep(1)\n";
sleep 1;
print "Just woke up!\n";
Run Code Online (Sandbox Code Playgroud)

但是,如果我这样做,"就是醒来!" 从不打印 - 相反,程序结束,"闹钟"响应屏幕.只有在睡眠时才会发生这种情况 - 如果我编写的程序执行大量数学操作并需要10秒钟才能运行,那么一切正常.它也只发生在chroot环境中.

我已经转储了%SIG,它有一个'ALRM => undef'的条目,这是预期的 - 非chrooted环境具有相同的行为.但是,如果我将脚本更改为包括:

$SIG{ALRM} = sub {};
Run Code Online (Sandbox Code Playgroud)

......一切正常 那么,这笔交易是什么?我没有很多使用Solaris的经验,但必须有一种方法可以使默认的信号处理程序正常运行.

perl signals solaris sparc

3
推荐指数
1
解决办法
1888
查看次数

Strcpy()会破坏Solaris中复制的字符串,但不会损坏Linux

我正在为一个类编写C代码.这个类要求我们的代码在学校服务器上编译和运行,这是一个sparc solaris机器.我正在运行Linux x64.

我有这条线要解析(这不是实际的代码,但输入我的程序):

while ( cond1 ){ 
Run Code Online (Sandbox Code Playgroud)

我需要将"while"和"cond1"捕获到单独的字符串中.我一直在用strtok()这个.在Linux中,以下行:

char *cond = NULL;
cond = (char *)malloc(sizeof(char));
memset(cond, 0, sizeof(char));
strcpy(cond, strtok(NULL, ": \t\(){")); //already got the "while" out of the line
Run Code Online (Sandbox Code Playgroud)

将正确捕获字符串"cond1".然而,在solaris机器上运行它,给我字符串"cone1".

请注意,在我的程序中的许多其他情况下,字符串正在被正确复制.(例如,"while")被正确捕获.

有谁知道这里发生了什么?

c solaris sparc strcpy

3
推荐指数
1
解决办法
784
查看次数

在我的 SPARC 程序集中调试段错误的最佳方法是什么?

我正在编写一个 sparc 编译器。我的一个测试用例在从命令行正常运行时工作正常,但是当我将输出重定向到文件时出现段错误。

我试过使用 GDB,但组装起来很困难。我怎样才能找出像哪条装配线导致段错误这样简单的事情?

compiler-construction assembly gdb sparc

3
推荐指数
1
解决办法
939
查看次数