coff-tic80.c

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

C
719
字号
/* BFD back-end for Texas Instruments TMS320C80 Multimedia Video Processor (MVP).   Copyright 1996, 1997, 1999, 2000 Free Software Foundation, Inc.   Written by Fred Fish (fnf@cygnus.com)   There is nothing new under the sun. This file draws a lot on other   coff files.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, 59 Temple Place - Suite 330,Boston, MA 02111-1307, USA.  */#include "bfd.h"#include "bfdlink.h"#include "sysdep.h"#include "libbfd.h"#include "coff/tic80.h"#include "coff/internal.h"#include "libcoff.h"#define COFF_DEFAULT_SECTION_ALIGNMENT_POWER (2)#define COFF_ALIGN_IN_SECTION_HEADER 1#define COFF_ALIGN_IN_SFLAGS 1#define GET_SCNHDR_FLAGS bfd_h_get_16#define PUT_SCNHDR_FLAGS bfd_h_put_16static void rtype2howto  PARAMS ((arelent *cache_ptr, struct internal_reloc *dst));static bfd_reloc_status_type ppbase_reloc  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));static bfd_reloc_status_type glob15_reloc  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));static bfd_reloc_status_type glob16_reloc  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));static bfd_reloc_status_type local16_reloc  PARAMS ((bfd *, arelent *, asymbol *, PTR, asection *, bfd *, char **));static boolean coff_tic80_relocate_section  PARAMS ((bfd *, struct bfd_link_info *, bfd *, asection *, bfd_byte *,	   struct internal_reloc *, struct internal_syment *, asection **));static reloc_howto_type tic80_howto_table[] ={  HOWTO (R_RELLONG,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 32,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_bitfield,	/* complain_on_overflow */	 NULL,				/* special_function */	 "RELLONG",			/* name */	 true,				/* partial_inplace */	 0xffffffff,			/* src_mask */	 0xffffffff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_MPPCR,			/* type */	 2,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 32,				/* bitsize */	 true,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_signed,	/* complain_on_overflow */	 NULL,				/* special_function */	 "MPPCR",			/* name */	 true,				/* partial_inplace */	 0xffffffff,			/* src_mask */	 0xffffffff,			/* dst_mask */	 true),				/* pcrel_offset */  HOWTO (R_ABS,				/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 32,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_bitfield,	/* complain_on_overflow */	 NULL,				/* special_function */	 "ABS",				/* name */	 true,				/* partial_inplace */	 0xffffffff,			/* src_mask */	 0xffffffff,			/* dst_mask */	 false),				/* pcrel_offset */  HOWTO (R_PPBASE,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 32,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 ppbase_reloc,			/* special_function */	 "PPBASE",			/* name */	 true,				/* partial_inplace */	 0xffffffff,			/* src_mask */	 0xffffffff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPLBASE,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 32,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 ppbase_reloc,			/* special_function */	 "PPLBASE",			/* name */	 true,				/* partial_inplace */	 0xffffffff,			/* src_mask */	 0xffffffff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PP15,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PP15",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PP15W,			/* type */	 2,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PP15W",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PP15H,			/* type */	 1,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PP15H",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PP16B,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 16,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob16_reloc,			/* special_function */	 "PP16B",			/* name */	 true,				/* partial_inplace */	 0x3ffc0,			/* src_mask */	 0x3ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPL15,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPL15",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPL15W,			/* type */	 2,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPL15W",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPL15H,			/* type */	 1,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPL15H",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPL16B,			/* type */	 0,				/* rightshift */	 2,				/* size (0 = byte, 1 = short, 2 = long) */	 16,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 local16_reloc,			/* special_function */	 "PPL16B",			/* name */	 true,				/* partial_inplace */	 0xffff,			/* src_mask */	 0xffff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPN15,			/* type */	 0,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PPN15",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPN15W,			/* type */	 2,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PPN15W",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPN15H,			/* type */	 1,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob15_reloc,			/* special_function */	 "PPN15H",			/* name */	 true,				/* partial_inplace */	 0x1ffc0,			/* src_mask */	 0x1ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPN16B,			/* type */	 0,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 16,				/* bitsize */	 false,				/* pc_relative */	 6,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 glob16_reloc,			/* special_function */	 "PPN16B",			/* name */	 true,				/* partial_inplace */	 0x3ffc0,			/* src_mask */	 0x3ffc0,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPLN15,			/* type */	 0,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPLN15",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPLN15W,			/* type */	 2,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPLN15W",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPLN15H,			/* type */	 1,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 NULL,				/* special_function */	 "PPLN15H",			/* name */	 true,				/* partial_inplace */	 0x7fff,			/* src_mask */	 0x7fff,			/* dst_mask */	 false),			/* pcrel_offset */  HOWTO (R_PPLN16B,			/* type */	 0,				/* rightshift */	 -2,				/* size (0 = byte, 1 = short, 2 = long) */	 15,				/* bitsize */	 false,				/* pc_relative */	 0,				/* bitpos */	 complain_overflow_dont,	/* complain_on_overflow */	 local16_reloc,			/* special_function */	 "PPLN16B",			/* name */	 true,				/* partial_inplace */	 0xffff,			/* src_mask */	 0xffff,			/* dst_mask */	 false)				/* pcrel_offset */};/* Special relocation functions, used when the output file is not   itself a COFF TIc80 file.  *//* This special function is used for the base address type   relocations.  */static bfd_reloc_status_typeppbase_reloc (abfd, reloc_entry, symbol_in, data, input_section, output_bfd,

⌨️ 快捷键说明

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