elf32-i860.c

来自「基于4个mips核的noc设计」· C语言 代码 · 共 1,108 行 · 第 1/3 页

C
1,108
字号
/* Intel i860 specific support for 32-bit ELF.   Copyright 1993, 1995, 1999, 2000, 2001 Free Software Foundation, Inc.   Full i860 support contributed by Jason Eckhardt <jle@cygnus.com>.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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.  */#include "bfd.h"#include "sysdep.h"#include "libbfd.h"#include "elf-bfd.h"#include "elf/i860.h"/* Prototypes.  */static reloc_howto_type *lookup_howto  PARAMS ((unsigned int));static reloc_howto_type *elf32_i860_reloc_type_lookup  PARAMS ((bfd *abfd, bfd_reloc_code_real_type code));static void elf32_i860_info_to_howto_rela  PARAMS ((bfd *, arelent *, Elf32_Internal_Rela *));static bfd_reloc_status_type elf32_i860_relocate_splitn  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));static bfd_reloc_status_type elf32_i860_relocate_pc16  PARAMS ((bfd *,  asection *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));static bfd_reloc_status_type elf32_i860_relocate_pc26  PARAMS ((bfd *,  asection *, Elf_Internal_Rela *, bfd_byte *, bfd_vma));static bfd_reloc_status_type elf32_i860_relocate_highadj  PARAMS ((bfd *,  Elf_Internal_Rela *, bfd_byte *, bfd_vma));static boolean elf32_i860_relocate_section  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,	   Elf_Internal_Rela *, Elf_Internal_Sym *, asection **));static bfd_reloc_status_type i860_final_link_relocate  PARAMS ((reloc_howto_type *, bfd *, asection *, bfd_byte *,	   Elf_Internal_Rela *, bfd_vma));static boolean elf32_i860_is_local_label_name  PARAMS ((bfd *, const char *));/* This howto table is preliminary.  */static reloc_howto_type elf32_i860_howto_table [] ={  /* This relocation does nothing.  */  HOWTO (R_860_NONE,		/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_NONE",		/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0,			/* dst_mask */	 false),		/* pcrel_offset */  /* A 32-bit absolute relocation.  */  HOWTO (R_860_32,		/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_32",		/* name */	 false,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_860_COPY,		/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_COPY",		/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_860_GLOB_DAT,	/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_GLOB_DAT",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_860_JUMP_SLOT,	/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_JUMP_SLOT",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),		/* pcrel_offset */  HOWTO (R_860_RELATIVE,	/* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_RELATIVE",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),		/* pcrel_offset */  /* A 26-bit PC-relative relocation.  */  HOWTO (R_860_PC26,	        /* type */	 2,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 26,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_PC26",		/* name */	 false,			/* partial_inplace */	 0x3ffffff,		/* src_mask */	 0x3ffffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_PLT26,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 26,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_PLT26",		/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 true),		        /* pcrel_offset */  /* A 16-bit PC-relative relocation.  */  HOWTO (R_860_PC16,	        /* type */	 2,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 true,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_bitfield, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_PC16",		/* name */	 false,			/* partial_inplace */	 0x1f07ff,		/* src_mask */	 0x1f07ff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_LOW0,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOW0",		/* name */	 false,			/* partial_inplace */	 0xffff,		/* src_mask */	 0xffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_SPLIT0,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPLIT0",	/* name */	 false,			/* partial_inplace */	 0x1f07ff,		/* src_mask */	 0x1f07ff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOW1,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOW1",		/* name */	 false,			/* partial_inplace */	 0xfffe,		/* src_mask */	 0xfffe,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_SPLIT1,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPLIT1",	/* name */	 false,			/* partial_inplace */	 0x1f07fe,		/* src_mask */	 0x1f07fe,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOW2,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOW2",		/* name */	 false,			/* partial_inplace */	 0xfffc,		/* src_mask */	 0xfffc,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_SPLIT2,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPLIT2",	/* name */	 false,			/* partial_inplace */	 0x1f07fc,		/* src_mask */	 0x1f07fc,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOW3,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOW3",		/* name */	 false,			/* partial_inplace */	 0xfff8,		/* src_mask */	 0xfff8,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_LOGOT0,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOT0",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_SPGOT0,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPGOT0",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_LOGOT1,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOT1",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_SPGOT1,	        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 16,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPGOT1",	/* name */	 false,			/* partial_inplace */	 0,			/* src_mask */	 0xffff,		/* dst_mask */	 true),		        /* pcrel_offset */  HOWTO (R_860_LOGOTOFF0,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_LOGOTOFF0",	/* name */	 true,			/* partial_inplace */	 0xffffffff,		/* src_mask */	 0xffffffff,		/* dst_mask */	 false),	        /* pcrel_offset */  HOWTO (R_860_SPGOTOFF0,        /* type */	 0,			/* rightshift */	 2,			/* size (0 = byte, 1 = short, 2 = long) */	 32,			/* bitsize */	 false,			/* pc_relative */	 0,			/* bitpos */	 complain_overflow_dont, /* complain_on_overflow */	 bfd_elf_generic_reloc,	/* special_function */	 "R_860_SPGOTOFF0",	/* name */

⌨️ 快捷键说明

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