Dmitry Belyavsky (beldmit) wrote,
Dmitry Belyavsky
beldmit

Category:

Слышен звон адресов из malloc-а

Попробовал собрать наш продукт clang-ом под 32-битный arm. Получил несудьбу.

clang предлагает довольно агрессивную реализацию memset/memcpy и родственников, которая требует выравнивания памяти по 16 байтам минимум, иначе прилетает SIGBUS.
Доверчивый clang поверил, что структура выравнивается по 16 байтам. После того, как я перестал его обманывать, он подставил правильную версию memset.

Память, которую он должен зачищать, прилетает извне. При этом полученный блок оказывается выровнен по 8 байтам. То есть в половине случаев это окажется по 16 и всё сработает, а в половине - по 8, и получим SIGBUS.

Гранулировать выравнивание адресов из malloc-а вообще говоря нельзя. Точнее, есть несколько функций, в работоспособности которых я сомневаюсь, и тип max_align_t, который определяется как

// Define 'max_align_t' to match the GCC definition.
typedef struct {
  long long __clang_max_align_nonce1
      __attribute__((__aligned__(__alignof__(long long))));
  long double __clang_max_align_nonce2
      __attribute__((__aligned__(__alignof__(long double))));
} max_align_t;


а в GCC это __BIGGEST_ALIGNMENT__

То «извне», из которого прилетает это самое __BIGGEST_ALIGNMENT__, я могу и пересобрать. Но вообще печально я гляжу.

This entry was originally posted at https://beldmit.dreamwidth.org/875130.html. Your comment? (comment count unavailable comments)
Tags: компьютерное, программирование, работа
Subscribe

  • Менять невозможно по собственной воле среду обитанья

    Уф. Прошёл квест "смени страну в Google Play", потому что без него не ставилось приложение от T-Mobile. А там это, сладкое слово "халява",…

  • Метажизнь

    Конвеевскую «Жизнь» IT-шники нашего поколения знают примерно все. Про Тьюринг-полноту «Жизни» тоже слышали. Попались несколько красивых ссылок на…

  • QUIC стандартизирован

    Если кто не заметил, протокол QUIC стандартизован и получил номер RFC 9000. Если его внедрят массово, это даст очень забавный эффект, который мне…

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 23 comments

  • Менять невозможно по собственной воле среду обитанья

    Уф. Прошёл квест "смени страну в Google Play", потому что без него не ставилось приложение от T-Mobile. А там это, сладкое слово "халява",…

  • Метажизнь

    Конвеевскую «Жизнь» IT-шники нашего поколения знают примерно все. Про Тьюринг-полноту «Жизни» тоже слышали. Попались несколько красивых ссылок на…

  • QUIC стандартизирован

    Если кто не заметил, протокол QUIC стандартизован и получил номер RFC 9000. Если его внедрят массово, это даст очень забавный эффект, который мне…