Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет kouzdra ([info]kouzdra)
@ 2013-03-21 12:46:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
Ненависти псто:
Решил было навести порядок в своей проге и протестировать ее на предмет выравнивания, вскрытие показало:

# include <stdio.h>
# include <stdlib.h>

void align_on () {
  asm("pushf\n"
      "orl $(1<<18),(%esp)\n"
      "popf");
}


void align_off () {
  asm("pushf\n"
      "andl $(~(1<<18)),(%esp)\n"
      "popf");
}

int main () {
  printf ("hello\n");
  char s [20];
  align_on ();
  printf ("%s\n", getenv ("PATH"));
  align_off ();
  printf ("hello %d\n", *(int *) &s[1]);
  return 0;
}


getenv валится при этом по bus error.

Какого хрена стандартные функции-то на выравнивании падают?

Это же вообще-то гря некий минимум приличий.


(Добавить комментарий)


[info]dorkavla
2013-03-21 13:56 (ссылка)
Хотите поговорить о Дреппнере?

(Ответить)


[info]steinkrauz
2013-03-21 13:57 (ссылка)
В продуктах Microsoft™ таких проблем не возникает. ©

(Ответить)


(Анонимно)
2013-03-21 18:24 (ссылка)
% ./foo
hello
/home/plhk/bin:/bin:/sbin:/usr/bin:/usr/sbin:/usr/X11R6/bin:/usr/local/bin:/usr/local/sbin:/usr/games:/usr/local/jdk-1.6.0/bin/:/home/plhk/.cabal/bin/:.
hello -1340342265
% uname
OpenBSD

хехе

(Ответить)


[info]ketmar
2013-03-21 20:17 (ссылка)
а какого хрена на x86 включать этот режим? отличное возмущение, да: «мужики, я тут вашей ножовкой бетон пилил, так вот: сломалась ваша ножовка! говно она, а не ножовка!»

(Ответить) (Ветвь дискуссии)


[info]kouzdra
2013-03-21 20:31 (ссылка)
А с того, что в корректной, переносимой и соответствующей стандарту программе на С таких проблем быть не должно. Потому возникло желание собственно выловить собственные баги на тему - а оказалось, что там в libc уже клоповник.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2013-03-21 20:44 (ссылка)
с какого это хуя твоя программа, жестоко заточеная на x86 при помощи асма, стала переносима?! O_O

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2013-03-21 21:07 (ссылка)
C помощью асма я всего лишь включил режимчик, при помощи которого проессор от интеля мне начинает напоминать что оно кривое.

PS: Дядя - вы дурак?

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2013-03-21 21:32 (ссылка)
нет, дорогой, это ты дурак. архитектура x86 подразумевает, что невыравненый доступ — ок. ты это отключил и возмущаешься. убери нахуй асм, собери то же самое для архитектуры, где выравнивание обязательно, проверь, падает ли. я-то ответ знаю.

а ты сейчас хуй в тиски сунул и удивляешься, что больно. оно, конечно, твоё право — но ради тебя детектор хуев в тиски никто встраивать не должен.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]kouzdra
2013-03-21 21:37 (ссылка)
Стандарт языка С подразумевает что это не ОК.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]ketmar
2013-03-21 21:46 (ссылка)
а вот это не вредно бы доказать пруфлинком. что-то я в стандарте ничего про такое не помню.

(Ответить) (Уровень выше)


[info]qwerty
2013-03-22 04:09 (ссылка)
А ведь нет такого требования в стандарте. Стандарт в электронной удобной для поиска форме можно посмотреть, например, здесь. Выравнивание там требуется по мере необходимости для целевой архитектуры. x86 без специально выставленного режима выравнивания, очевидно, не требует. Со специально выставленным режимом - это уже другой таргет и не знаю, поддерживается ли он gcc для x86.

(Ответить) (Ветвь дискуссии)


[info]ketmar
2013-03-22 22:33 (ссылка)
конечно, нет. и я это знал изначально. поэтому куздра никаких пруфов не привёл, а заткнулся и сделал вид, что ничего такого не было, просьба моя крайне глупая и отвечать на неё вовсе не стоит. точно так же он не знает, почему ячейки форта не обязаны быть длиной в слово, и как можно красиво уложить форт на разные архитектуры.

подозреваю, что в тех областях, в которых я его поймать не могу, он лажает не менее феерически. ума не приложу, зачем я периодически пытаюсь с ним спорить.

(Ответить) (Уровень выше)


[info]ketmar
2013-03-22 22:34 (ссылка)
p.s. afair, ни gcc не поддерживает, ни glibc. да и не должны, штука достаточно экзотическая, чтобы не заморачиваться.

(Ответить) (Уровень выше)


[info]blue_slonopotam
2013-03-23 22:01 (ссылка)
А невыровненное обращение о сих пор ужас с двумя походами к памяти или кэш всё стерпит?

(Ответить)