Распечатка 10.1 Загрузчик bFLT

Предыдущая  Содержание  Следующая V*D*V

Распечатка 10.1

 

  …

if ((flags & (FLAT_FLAG_RAM|FLAT_FLAG_GZIP)) == 0) {

 

  …

 

/*

 * Случай отображения в ПЗУ: отображаем из файла для XIP

 */

textpos = do_mmap(bprm->file, 0, text_len, PROT_READ|PROT_EXEC,

                                                        0, 0);

 

  …

 

/*

 * Выделяем память для разделов данных, стека и данных переадресации.

 * Отметим, что это делается также для общих библиотек

 */

realdatastart = do_mmap(0, 0, data_len + extra +

                        MAX_SHARED_LIBS * sizeof(unsigned long),

                        PROT_READ|PROT_WRITE|PROT_EXEC, 0, 0);

 

  …

  …

 

/*

 * Читаем секцию .data из файла в память, распаковываем,

 * если необходимо

 */

#ifdef CONFIG_BINFMT_ZFLAT

if (flags & FLAT_FLAG_GZDATA) {

  result = decompress_exec(bprm, fpos, (char *) datapos,

               data_len + (relocs * sizeof(unsigned long)), 0);

}else

#endif

{

result = bprm->file->f_op->read(bprm->file, (char *) datapos,

               data_len + (relocs * sizeof(unsigned long)), &fpos);

}

 

  …

  …

 

} else {

/*

 * Случай отображений в RAM: Выделение памяти для всего

 * (текста, данных, стека, данных переадресации)

 */

textpos = do_mmap(0, 0, text_len + data_len + extra +

                  MAX_SHARED_LIBS * sizeof(unsigned long),

                  PROT_READ | PROT_EXEC | PROT_WRITE, 0, 0);

 

  …

  …

 

/*

 * Читаем разделы .text, .data из файла в ОЗУ, распаковываем,

 * если необходимо

 */

if (flags & FLAT_FLAG_GZIP) {

  result = decompress_exec(bprm, sizeof (struct flat_hdr),

           (((char *) textpos) + sizeof (struct flat_hdr)),

           (text_len + data_len + (relocs * sizeof(unsigned long))

           - sizeof (struct flat_hdr)), 0);

  …

result = bprm->file->f_op->read(bprm->file, (char *) textpos,

                                text_len, &fpos);

  …

 

Предыдущая  Содержание  Следующая