Позиционно-зависимый тип данных в разделе кода PIC? - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть двоичный файл, зависящий от нескольких общих библиотек, и я хотел бы создать двоичный файл PIC, за исключением одной таблицы только для чтения.

Я хочу, чтобы все разделы кода могли иметь доступ к этой таблице без соблюдения.GOTPCREL.Мне все равно, в каком разделе данных (.bss, .data и т. Д.) Находится эта таблица, но я хочу, чтобы она была только для чтения и к ней могли обращаться напрямую все общие библиотеки и основной двоичный файл,Поэтому, я думаю, он должен войти в двоичный файл, а не в одну из общих библиотек.

В настоящее время он у меня есть в разделе .data.rel.ro, и он доступен только для чтения, однако для доступа к его данным мне нужно получить егоадрес через .GOT вот так: TABLENAME@GOTPCREL(%rip) и потом использовать адрес.Причина, по которой я спрашиваю, состоит в том, что я хотел бы использовать инструкцию bt, и для предоставления ей адреса таблицы мне нужно иметь две инструкции, а также один временный регистр.Если таблица не была перемещаемой, я мог указать ее адрес в фазе связывания, например: bt %REG, TABLENAME, требуя только одну инструкцию без какого-либо дополнительного регистра.

Это вообще что-то достижимое?

Вот более конкретный пример:

Основной программный код:

    .text
    ### SOME CODE 
    .section     .data.rel.ro,"aw",@progbits
    .globl  MYTABLE
MYTABLE:
    .zeros  128   # my table of 128 bytes all zeros for illustration

Одна из общих библиотек:

    .text
    .globl  myfun
    .type   myfun, @function
myfun:
    xor     %rax, %rax
    movq    MYTABLE@GOTPCREL(%rip), %rcx   ### I like to have "bt %r11, MYABLE"
    bt      %r11, (%rcx)                   ### instead of these two lines
    jb      label
    movq    $1, %rax
label:
    ret
...