Задать флаг секции

Тема в разделе "LANGS.C", создана пользователем Praetor11, 26 янв 2011.

  1. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Существует ли какой-нибудь способ задать атрибуты секции (shareable, writeable, readable etc.) из кода, параметров командной строки и скрипта линкера? Компилятор g++ (gcc), линкер ld.

    Следующие решения НЕ предлагать:
    1)Используя objcopy и параметр -set-section-flags=
    2)Проводить только стадию ассембляции и в файлах с асмовским кодом вручную забивать флаги секции: .sectionname,"flags" с последующей компиляцией в объектный файл и сборкой.

    Хотелось бы что-нибудь в аттрибутах, типа
    __attribute__((section(".data"), shared))) но чтобы вместо шаред можно было использовать и другие флаги.
    или через скрипт линкера, типа:
    SECTIONS
    {
    .text (WRITE|READ|SHARE) :
    {
    *(.text)
    }
    }
    Ну или что-то с опциями командной строки для g++, ld, cc1plus.
    Ну или какой-то другой способ...
     
  2. slesh

    slesh New Member

    Публикаций:
    0
    Регистрация:
    6 фев 2009
    Сообщения:
    214
    у хз. насчет gcc и ld не знаю. Для MS VC всегда работали методы #pragma comment(linker, "/SECTION:.text,EWR")
    Может и тут также будет пахать. Хотя сомневаюсь. Но всё же попробуй
     
  3. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Спасибо но в лд это неработает(((..Там вообще прагмы коммент нету.
     
  4. cppasm

    cppasm New Member

    Публикаций:
    0
    Регистрация:
    18 июл 2006
    Сообщения:
    923
    Мануалы для кого писаны?
    http://www.linuxselfhelp.com/gnu/ld/html_chapter/ld_3.html
    Раздел Memory Layout.

     
  5. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    это даже есть в man ld насколько я помню
     
  6. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    cppasm

    Биг спс вам конечно, но в связи с моим ОЧЕНЬ плохим инглишем я бы попросил вас немного пояснить где именно используется то, что вы описали: в коде или скрипте линкера. И плиз простой пример...Очень надо

    Man идет вместе с исходниками ld и скорее всего на англе(
     
  7. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    "GCC. Настольная книrа пользователей, проrраммистов и системных администраторов." Автор: Гриффитс А., год: 2004, страниц: 609
    или "GCC. Полное руководство. Platinum Edition"

    О ld на русском:
    +http://www.opennet.ru/docs/RUS/gnu_ld/

    Очень рекомендую победить в себе лень и выучить английский и другие языки.
     
  8. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    Это я читал, там нет ни одного примера установки флагов доступа для определнной секции, там даже не написано об этом ничего:
    `Letter'
    Section Attribute
    `R'
    Read-only sections.
    `W'
    Read/write sections.
    `X'
    Sections containing executable code.
    `A'
    Allocated sections.
    `I'
    Initialized sections.
    `L'
    Same as I.
    `!'
    Invert the sense of any of the following attributes.

    Спасиб за совет, он безумно ценный, только лучше посоветуйте научиться стать миллионером и неинтересоваться такими приземленными вопросами на форумах :))

    По сабжу: народ приведите пример использования изложенного cppasm в коде скрипта линкера, как мне установить аттрибут writeable на секцию .text??
     
  9. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Praetor11
    Ты вообще читал ссылки которые тебе написали?
    Там все написано черным по белому.
     
  10. NoName

    NoName New Member

    Публикаций:
    0
    Регистрация:
    1 авг 2004
    Сообщения:
    1.229
    Код (Text):
    1.       MEMORY
    2.       {
    3.               mem1:          o=0x000000    l=0x10000
    4.               mem2 (RW):     o=0x020000    l=0x40000
    5.               mem3 (RW):     o=0x070000    l=0x40000
    6.               mem1:          o=0x120000    l=0x04000
    7.       }
    8.    
    9.  
    10.  
    11.       SECTIONS
    12.       {
    13.               outsec1: { f1.o(.data) } > mem1
    14.               outsec2: { f2.o(.data) } > mem3
    15.       }
     
  11. Praetor11

    Praetor11 New Member

    Публикаций:
    0
    Регистрация:
    11 окт 2009
    Сообщения:
    80
    О наконецто пример) урра..Пойду пробовать новые сверхспособности в деле..)