⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 seclet.c

📁 早期freebsd实现
💻 C
字号:
/* seclet.c   Copyright (C) 1992 Free Software Foundation, Inc.   Written by Cygnus Support.This file is part of BFD, the Binary File Descriptor library.This program is free software; you can redistribute it and/or modifyit under the terms of the GNU General Public License as published bythe Free Software Foundation; either version 2 of the License, or(at your option) any later version.This program is distributed in the hope that it will be useful,but WITHOUT ANY WARRANTY; without even the implied warranty ofMERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See theGNU General Public License for more details.You should have received a copy of the GNU General Public Licensealong with this program; if not, write to the Free SoftwareFoundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  *//* This module is part of BFD *//* The intention is that one day, all the code which uses sections   will change and use seclets instead - maybe seglet would have been   a better name..   Anyway, a seclet contains enough info to be able to describe an   area of output memory in one go.   The only description so far catered for is that of the   <<bfd_indirect_seclet>>, which is a select which points to a   <<section>> and the <<asymbols>> associated with the section, so   that relocation can be done when needed.   One day there will be more types - they will at least migrate from   the linker's data structures - also there could be extra stuff,   like a bss seclet, which descibes a lump of memory as containing   zeros compactly, without the horrible SEC_* flag cruft.*/#include "bfd.h"#include "sysdep.h"#include "libbfd.h"#include "seclet.h"#include "coff/internal.h"bfd_seclet_type *DEFUN(bfd_new_seclet,(abfd, section),      bfd *abfd AND      asection *section){  bfd_seclet_type *n = (bfd_seclet_type *)bfd_alloc(abfd, sizeof(bfd_seclet_type));  if (section->seclets_tail != (bfd_seclet_type *)NULL) {      section->seclets_tail->next = n;    }  else  {    section->seclets_head = n;  }  section->seclets_tail = n;  return n;}#define MAX_ERRORS_IN_A_ROW 10extern bfd_error_vector_type bfd_error_vector;voidDEFUN(rel,(abfd, seclet, output_section, data),      bfd *abfd AND      bfd_seclet_type *seclet AND      asection *output_section AND      PTR data){  if (output_section->flags & SEC_HAS_CONTENTS       && !(output_section->flags & SEC_NEVER_LOAD)      && seclet->size)  {    data = (PTR) bfd_get_relocated_section_contents(abfd, seclet, data);    if(bfd_set_section_contents(abfd,				output_section,				data,				seclet->offset,				seclet->size) == false)    {      abort();    }  }}voidDEFUN(seclet_dump_seclet,(abfd, seclet, section, data),      bfd *abfd AND      bfd_seclet_type *seclet AND      asection *section AND      PTR data){  switch (seclet->type)   {   case bfd_indirect_seclet:    /* The contents of this section come from another one somewhere       else */    rel(abfd, seclet, section, data);    break;   case bfd_fill_seclet:    /* Fill in the section with us */   {     char *d = malloc(seclet->size);     unsigned int i;     for (i =0;  i < seclet->size; i+=2) {       d[i] = seclet->u.fill.value >> 8;     }     for (i = 1; i < seclet->size; i+=2) {       d[i] = seclet->u.fill.value ;     }     bfd_set_section_contents(abfd, section, d, seclet->offset, seclet->size);   }    break;   default:    abort();  }}voidDEFUN(seclet_dump,(abfd, data),      bfd *abfd AND      PTR data){  /* Write all the seclets on the bfd out, relocate etc according to the     rules */  asection *o = abfd->sections;  while (o != (asection *)NULL)   {    bfd_seclet_type *p = o->seclets_head;    while (p != (bfd_seclet_type *)NULL)     {      seclet_dump_seclet(abfd, p, o, data);      p = p ->next;    }    o = o->next;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -