LINUX.ORG.RU

Ответ на: комментарий от mv

А где это определено/описано (что не могут)? И в чём принципиальная трудность, возникающая при возможных пересечениях?

anonymous
()
Ответ на: комментарий от anonymous

> А где это определено/описано (что не могут)?

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

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

vma представляет область виртуальной памяти :-), при этом нигде не упоминается именно о промежутке (по крайней мере я такого не встречал) как об определении vma.

Само предположение взялось из следующего - известно что вирт. адресное пространство процесса это набор vma: .text, .data, .bss и стек. Всё это указывается например через набор секций ELF-файла, расположение которых мы можем изменить если не использовать default скрипт компоновщика (ld --verbose).

При этом задание расположения секций (их расположения в памяти) определяется возможностями скрипта. Есть задача создания секций которые бы частично перекрывались. В связи с этим и возник вопрос - длпустим секции имеют одиноковые атрибуты - возможно ли это в принципе - из чего и возник вопрос о vma, т.к. возможно некоторые ограничения применительно к vma скажем в 2.6 ядрах исчезли (или эти возможности просто не используются).

BTW, раньше когда я занимался написанием драйверов я эксперементировал с методом mmap(), при этом (100% не поручусь) кажется есть возможность задавать vma из отдельных страниц не идущих одна за другой...

anonymous
()
Ответ на: комментарий от anonymous

>при этом (100% не поручусь) кажется есть возможность задавать vma из отдельных страниц не идущих одна за другой...

теоритически без проблем, вопрос в том насколько это реально в существующих имплементациях. А тебе зачем ?

alphex_kaanoken ★★★
()
Ответ на: комментарий от anonymous

> vma представляет область виртуальной памяти :-), при этом нигде не упоминается именно о промежутке (по крайней мере я такого не встречал) как об определении vma.

Из mm.h:

unsigned long vm_start; /* Our start address within vm_mm. */

unsigned long vm_end; /* The first byte after our end address within vm_mm. */

Если это не промежуток, то что это? :)

> Есть задача создания секций которые бы частично перекрывались.

Не вижу, зачем здесь перекрывающиеся vma. Убеди линкер положить секции по нужным адресам, и всё.

tailgunner ★★★★★
()
Ответ на: комментарий от alphex_kaanoken

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

Каким образом это сделать - желательно привести пример.

anonymous
()
Ответ на: комментарий от anonymous

> есть возможность задавать vma из отдельных страниц не идущих одна за другой...

При чём здесь маппинг физических страниц в виртуальное адресное пространство?

mv ★★★★★
()
Ответ на: комментарий от anonymous

> линкер ругается т.к. при задании адресов скачет location counter

Тогда всё. mmap не умеет отображать разный backing store на одинаковый адрес.

tailgunner ★★★★★
()
Ответ на: комментарий от mv

маппинг ни при чём - :-) - это я в качестве примера того, что возможно сущ возможность извернуться

anonymous
()
Ответ на: комментарий от anonymous

Это не возможность извернуться, это трансляция адресов. Для процесса нет разницы, физически непрерывно пространство или собранно по кускам.

mv ★★★★★
()
Ответ на: комментарий от mv

э...возможно неточно выразился - забудьте про mmap().

приведу пример, чтобы стало понятно: 1.o:

старт адрес 0x10000000 .init_1 { sym_init_1_a sym_init_1_b }

.data_1 { sym_data_1_a sym_data_1_b }

2.o:

старт 0x20000000 .init_2 { sym_init_2_a sym_init_2_b }

.data_2 { sym_data_2_a sym_data_2_b }

требуется:

sum.o:

.init { *(.init_1) *(.init_2) }

.data { *(.data_1) *(.data_2) }

Т.е. чтобы: 1. было две секции .init и .data 2. символы:

.init { sym_init_1_a 0x10000000 sym_init_1_b 0x10000004 sym_init_2_a 0x20000000 sym_init_2_b 0x20000004 }

.data { sym_data_1_a 0x10001000 sym_data_1_b 0x10001004 sym_data_2_a 0x20001000 sym_data_2_b 0x20001004 }

Как сделать?...

anonymous
()
Ответ на: комментарий от mv

есть два объектника - требуется объеденить - сделать один

НО! стартовые адреса разные (от которых пляшет location counter)

anonymous
()
Ответ на: комментарий от mv

какая разница библиотека или другой объектник?

адреса секций задаются жёстко а не идут одна за другой - тогда и проблем бы не было...

не линкуется однако.

anonymous
()
Ответ на: комментарий от mv

Sections: Idx Name Size VMA LMA File off Algn 0 .init 0001d000 c0008000 c0008000 00008000 2**2 CONTENTS, ALLOC, LOAD, CODE 1 .text 001ea6f8 c0025000 c0025000 00025000 2**10 CONTENTS, ALLOC, LOAD, READONLY, CODE 2 __ex_table 00000a68 c020f700 c020f700 0020f700 2**3 CONTENTS, ALLOC, LOAD, READONLY, DATA 3 .pci_fixup 00000000 c0210168 c0210168 00262960 2**0 CONTENTS 4 __ksymtab 00003ba8 c0210168 c0210168 00210168 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 5 __ksymtab_gpl 000006c0 c0213d10 c0213d10 00213d10 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 6 __kcrctab 00000000 c02143d0 c02143d0 00262960 2**0 CONTENTS 7 __kcrctab_gpl 00000000 c02143d0 c02143d0 00262960 2**0 CONTENTS 8 __markers 00000000 c02143d0 c02143d0 00262960 2**0 CONTENTS 9 __ksymtab_strings 0000923c c02143d0 c02143d0 002143d0 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 10 __param 00000140 c021e000 c021e000 0021e000 2**2 CONTENTS, ALLOC, LOAD, READONLY, DATA 11 .data 00042960 c0220000 c0220000 00220000 2**5 CONTENTS, ALLOC, LOAD, DATA 12 .bss 00027880 c0262960 c0262960 00262960 2**5 ALLOC 13 .comment 000083e8 00000000 00000000 00262960 2**0 CONTENTS, READONLY 14 .note.gnu.arm.ident 0000001c 00000000 00000000 0026ad48 2**0 CONTENTS, READONLY, LINK_ONCE_SAME_CONTENTS 15 __xen_guest 00000045 00000000 00000000 0026ad64 2**0 CONTENTS, READONLY 16 .debug_abbrev 00080d5a 00000000 00000000 0026ada9 2**0 CONTENTS, READONLY, DEBUGGING 17 .debug_info 00ee93b5 00000000 00000000 002ebb03 2**0 CONTENTS, READONLY, DEBUGGING 18 .debug_line 00112818 00000000 00000000 011d4eb8 2**0 CONTENTS, READONLY, DEBUGGING 19 .debug_pubnames 00019abd 00000000 00000000 012e76d0 2**0 CONTENTS, READONLY, DEBUGGING 20 .debug_str 0005ebcb 00000000 00000000 0130118d 2**0 CONTENTS, READONLY, DEBUGGING 21 .debug_aranges 00004e90 00000000 00000000 0135fd58 2**0 CONTENTS, READONLY, DEBUGGING 22 .debug_frame 00043ffc 00000000 00000000 01364be8 2**2 CONTENTS, READONLY, DEBUGGING 23 .debug_ranges 0003e938 00000000 00000000 013a8be4 2**0 CONTENTS, READONLY, DEBUGGING

anonymous
()
Ответ на: комментарий от mv

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .init         0001d000  c0008000  c0008000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, CODE
  1 .text         001ea6f8  c0025000  c0025000  00025000  2**10
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 __ex_table    00000a68  c020f700  c020f700  0020f700  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .pci_fixup    00000000  c0210168  c0210168  00262960  2**0
                  CONTENTS
  4 __ksymtab     00003ba8  c0210168  c0210168  00210168  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab_gpl 000006c0  c0213d10  c0213d10  00213d10  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 __kcrctab     00000000  c02143d0  c02143d0  00262960  2**0
                  CONTENTS
  7 __kcrctab_gpl 00000000  c02143d0  c02143d0  00262960  2**0
                  CONTENTS
  8 __markers     00000000  c02143d0  c02143d0  00262960  2**0
                  CONTENTS
  9 __ksymtab_strings 0000923c  c02143d0  c02143d0  002143d0  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 __param       00000140  c021e000  c021e000  0021e000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 11 .data         00042960  c0220000  c0220000  00220000  2**5
                  CONTENTS, ALLOC, LOAD, DATA
 12 .bss          00027880  c0262960  c0262960  00262960  2**5
                  ALLOC
 13 .comment      000083e8  00000000  00000000  00262960  2**0
                  CONTENTS, READONLY
 14 .note.gnu.arm.ident 0000001c  00000000  00000000  0026ad48  2**0
                  CONTENTS, READONLY, LINK_ONCE_SAME_CONTENTS
 15 __xen_guest   00000045  00000000  00000000  0026ad64  2**0
                  CONTENTS, READONLY
 16 .debug_abbrev 00080d5a  00000000  00000000  0026ada9  2**0
                  CONTENTS, READONLY, DEBUGGING
 17 .debug_info   00ee93b5  00000000  00000000  002ebb03  2**0
                  CONTENTS, READONLY, DEBUGGING
 18 .debug_line   00112818  00000000  00000000  011d4eb8  2**0
                  CONTENTS, READONLY, DEBUGGING
 19 .debug_pubnames 00019abd  00000000  00000000  012e76d0  2**0
                  CONTENTS, READONLY, DEBUGGING
 20 .debug_str    0005ebcb  00000000  00000000  0130118d  2**0
                  CONTENTS, READONLY, DEBUGGING
 21 .debug_aranges 00004e90  00000000  00000000  0135fd58  2**0
                  CONTENTS, READONLY, DEBUGGING
 22 .debug_frame  00043ffc  00000000  00000000  01364be8  2**2
                  CONTENTS, READONLY, DEBUGGING
 23 .debug_ranges 0003e938  00000000  00000000  013a8be4  2**0
                  CONTENTS, READONLY, DEBUGGING

anonymous
()
Ответ на: комментарий от anonymous

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .init         00159000  d0008000  d0008000  00008000  2**2
                  CONTENTS, ALLOC, LOAD, CODE
  1 .text         001dee28  d0161000  d0161000  00161000  2**10
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  2 __ex_table    00000a60  d033fe30  d033fe30  0033fe30  2**3
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  3 .pci_fixup    00000000  d0340890  d0340890  00391760  2**0
                  CONTENTS
  4 __ksymtab     00003b78  d0340890  d0340890  00340890  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  5 __ksymtab_gpl 000006b8  d0344408  d0344408  00344408  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
  6 __kcrctab     00000000  d0344ac0  d0344ac0  00391760  2**0
                  CONTENTS
  7 __kcrctab_gpl 00000000  d0344ac0  d0344ac0  00391760  2**0
                  CONTENTS
  8 __markers     00000000  d0344ac0  d0344ac0  00391760  2**0
                  CONTENTS
  9 __ksymtab_strings 000091b8  d0344ac0  d0344ac0  00344ac0  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 10 __param       00000078  d034e000  d034e000  0034e000  2**2
                  CONTENTS, ALLOC, LOAD, READONLY, DATA
 11 .data         00041760  d0350000  d0350000  00350000  2**5
                  CONTENTS, ALLOC, LOAD, DATA
 12 .bss          000274a0  d0391760  d0391760  00391760  2**5
                  ALLOC
 13 .comment      00007ebd  00000000  00000000  00391760  2**0
                  CONTENTS, READONLY
 14 .note.gnu.arm.ident 0000001c  00000000  00000000  0039961d  2**0
                  CONTENTS, READONLY, LINK_ONCE_SAME_CONTENTS
 15 __xen_guest   00000045  00000000  00000000  00399639  2**0
                  CONTENTS, READONLY
 16 .debug_abbrev 0007c9e1  00000000  00000000  0039967e  2**0
                  CONTENTS, READONLY, DEBUGGING
 17 .debug_info   00e7f1a4  00000000  00000000  0041605f  2**0
                  CONTENTS, READONLY, DEBUGGING
 18 .debug_line   0010c50f  00000000  00000000  01295203  2**0
                  CONTENTS, READONLY, DEBUGGING
 19 .debug_pubnames 0001901a  00000000  00000000  013a1712  2**0
                  CONTENTS, READONLY, DEBUGGING
 20 .debug_str    0005c6f5  00000000  00000000  013ba72c  2**0
                  CONTENTS, READONLY, DEBUGGING
 21 .debug_aranges 00004b60  00000000  00000000  01416e21  2**0
                  CONTENTS, READONLY, DEBUGGING
 22 .debug_frame  0004267c  00000000  00000000  0141b984  2**2
                  CONTENTS, READONLY, DEBUGGING
 23 .debug_ranges 0003dbc0  00000000  00000000  0145e000  2**0
                  CONTENTS, READONLY, DEBUGGING

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.