标签: sparc

为什么我的 erlang 构建会因 Solaris Sparc 上的核心转储而失败?

(我已经有了答案;我将回答我自己的问题,以便我可以分享我所学到的知识,并在将来为其他人省去这个麻烦)

当我尝试在 Solaris 10 Sparcv9 上构建 Erlang 时,构建中途失败:

cd lib && \
  ERL_TOP=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221 PATH=/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/bootstrap/bin:${PATH} \
        make opt SECONDARY_BOOTSTRAP=true
make[1]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib'
make[2]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe'
=== Entering application hipe
make[3]: Entering directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc'
erlc -W  +debug_info +warn_exported_vars +warn_missing_spec +warn_untyped_record -o../ebin hipe_consttab.erl
make[3]: *** [../ebin/hipe_consttab.beam] Bus Error (core dumped)
make[3]: Leaving directory `/var/tmp/pkgbuild-0/erlang/sparcv9/erlang-otp-73b4221/lib/hipe/misc'
Run Code Online (Sandbox Code Playgroud)

为什么会这样,我该怎么做才能完成我的 Erlang 构建?

erlang solaris sparc

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

编写一个非常基本的SPARC程序例程会导致数字是否为奇数

我正在编写一个名为isOdd的小型汇编程序,顾名思义,如果传递的整数是奇数,则通过从%运算返回1来返回.

到目前为止这是我的代码:

Function prototype: int isOdd( long num )

isOdd:
    save     %sp, -96, %sp  ! Save caller's window

    mov      %i0, %o0       ! Parameter num goes to %o0
    mov      2, %l0         ! 2 goes to local register
    call     .rem           ! Call modulus subroutine
    nop

    mov      %o0, %l0       ! moves the result of the subroutine 
                            ! to output register o0
    ret
    restore
Run Code Online (Sandbox Code Playgroud)

但是,我没有得到好的输出; 事实上,它似乎只是返回我传递给num的任何值,而不是实际进行模数运算.

谷歌对这样一个基本问题没有任何帮助.这是我的第一个汇编代码,所以我对"寄存器"的概念非常不熟悉,我认为将它们混合在一起就是我的错误所在.

在此先感谢您的帮助!

assembly sparc

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

用于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 prev;
   case 2:
      __asm__ __volatile__(LOCK_PREFIX "cmpxchgw %w1,%2"
                 : "=a"(prev)
                 : "q"(new), "m"(*__xg(ptr)), "0"(old)
                 : "memory");
      return prev;
   case 4:
      __asm__ __volatile__(LOCK_PREFIX "cmpxchgl %1,%2" …
Run Code Online (Sandbox Code Playgroud)

c assembly gcc sparc

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

SPARC 中的 jmpl 和 restore 指令顺序重要吗?

在这里读到一条jmpl指令必须跟在 nop.

SPARC V8 手册告诉我一条rett指令必须总是一条jmpl指令之前

但是,我一直无法找到jmplrestore指令之间的关系。我目前正在对SPARC V8架构和ELF的一个文件,我遇到有restore右后jmpl,而我希望的nop。我不知道这是正确的还是 ELF(以及扩展的 SPARC 代码)是错误的。

restore正确的权利jmpl吗?

io assembly sparc

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

标签 统计

sparc ×4

assembly ×3

c ×1

erlang ×1

gcc ×1

io ×1

solaris ×1