Почему моя сборка erlang не удалась с дампом ядра на Solaris Sparc? - PullRequest
1 голос
/ 03 июля 2011

(у меня уже есть ответ на этот вопрос; я собираюсь ответить на свой собственный вопрос, чтобы я мог поделиться тем, что я узнал, и спасти кого-то еще от этой проблемы в будущем)

Когда я попытаюсьдля сборки Erlang на Solaris 10 Sparcv9 сборка завершается с ошибкой:

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'

Почему это так и что я могу сделать, чтобы завершить сборку Erlang?

1 Ответ

4 голосов
/ 03 июля 2011

Причина сбоя сборки связана с нарушением среды сборки.

В этом конкретном случае используется сборка Sun GCC. Эта конкретная версия GCC была скомпилирована для использования смеси ассемблера GNU и компоновщика Sun.

Платформа Sparc очень чувствительна к выравниванию кода, и она будет давать сбой (например, с ошибкой шины), если будет выполнен невыровненный код.

GNU-ассемблер, используемый в стандартной сборке GCC на Sparc Solaris 10, не так усердно работает для автоматического выравнивания функций, сгенерированных компилятором, что приводит к выравниванию кода.

Решение состоит в том, чтобы создать свой собственный GCC и убедиться, что вы используете системный ассемблер и компоновщик; Вы можете достичь этого, используя следующие параметры в скрипте настройки GCC:

  --with-as=/usr/ccs/bin/as \
  --without-gnu-as \
  --without-gnu-ld \
  --with-ld=/usr/ccs/bin/ld \

Результирующая сборка GCC сгенерирует правильно выровненный код и позволит вам успешно построить Erlang.

...