OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [bfd/] [cpu-i386.c] - Diff between revs 161 and 166

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 161 Rev 166
Line 21... Line 21...
   MA 02110-1301, USA.  */
   MA 02110-1301, USA.  */
 
 
#include "sysdep.h"
#include "sysdep.h"
#include "bfd.h"
#include "bfd.h"
#include "libbfd.h"
#include "libbfd.h"
 
#include "libiberty.h"
 
 
 
extern void * bfd_arch_i386_short_nop_fill (bfd_size_type, bfd_boolean,
 
                                            bfd_boolean);
 
 
static const bfd_arch_info_type *
static const bfd_arch_info_type *
bfd_i386_compatible (const bfd_arch_info_type *a,
bfd_i386_compatible (const bfd_arch_info_type *a,
                     const bfd_arch_info_type *b)
                     const bfd_arch_info_type *b)
{
{
Line 36... Line 40...
    compat = NULL;
    compat = NULL;
 
 
  return compat;
  return compat;
}
}
 
 
 
/* Fill the buffer with zero or nop instruction if CODE is TRUE.  Use
 
   multi byte nop instructions if LONG_NOP is TRUE.  */
 
 
 
static void *
 
bfd_arch_i386_fill (bfd_size_type count, bfd_boolean code,
 
                    bfd_boolean long_nop)
 
{
 
  /* nop */
 
  static const char nop_1[] = { 0x90 };
 
  /* xchg %ax,%ax */
 
  static const char nop_2[] = { 0x66, 0x90 };
 
  /* nopl (%[re]ax) */
 
  static const char nop_3[] = { 0x0f, 0x1f, 0x00 };
 
  /* nopl 0(%[re]ax) */
 
  static const char nop_4[] = { 0x0f, 0x1f, 0x40, 0x00 };
 
  /* nopl 0(%[re]ax,%[re]ax,1) */
 
  static const char nop_5[] = { 0x0f, 0x1f, 0x44, 0x00, 0x00 };
 
  /* nopw 0(%[re]ax,%[re]ax,1) */
 
  static const char nop_6[] = { 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00 };
 
  /* nopl 0L(%[re]ax) */
 
  static const char nop_7[] = { 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00 };
 
  /* nopl 0L(%[re]ax,%[re]ax,1) */
 
  static const char nop_8[] =
 
    { 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00};
 
  /* nopw 0L(%[re]ax,%[re]ax,1) */
 
  static const char nop_9[] =
 
    { 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
 
  /* nopw %cs:0L(%[re]ax,%[re]ax,1) */
 
  static const char nop_10[] =
 
    { 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00 };
 
  static const char *const nops[] =
 
    { nop_1, nop_2, nop_3, nop_4, nop_5,
 
      nop_6, nop_7, nop_8, nop_9, nop_10 };
 
  bfd_size_type nop_size = long_nop ? ARRAY_SIZE (nops) : 2;
 
 
 
  void *fill = bfd_malloc (count);
 
  if (fill == NULL)
 
    return fill;
 
 
 
  if (code)
 
    {
 
      bfd_byte *p = fill;
 
      while (count >= nop_size)
 
        {
 
          memcpy (p, nops[nop_size - 1], nop_size);
 
          p += nop_size;
 
          count -= nop_size;
 
        }
 
      if (count != 0)
 
        memcpy (p, nops[count - 1], count);
 
    }
 
  else
 
    memset (fill, 0, count);
 
 
 
  return fill;
 
}
 
 
 
/* Fill the buffer with zero or short nop instruction if CODE is TRUE.  */
 
 
 
void *
 
bfd_arch_i386_short_nop_fill (bfd_size_type count,
 
                              bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
 
                              bfd_boolean code)
 
{
 
  return bfd_arch_i386_fill (count, code, FALSE);
 
}
 
 
 
/* Fill the buffer with zero or long nop instruction if CODE is TRUE.  */
 
 
 
static void *
 
bfd_arch_i386_long_nop_fill (bfd_size_type count,
 
                             bfd_boolean is_bigendian ATTRIBUTE_UNUSED,
 
                             bfd_boolean code)
 
{
 
  return bfd_arch_i386_fill (count, code, TRUE);
 
}
 
 
static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
static const bfd_arch_info_type bfd_x64_32_arch_intel_syntax =
{
{
  64, /* 64 bits in a word */
  64, /* 64 bits in a word */
  64, /* 64 bits in an address */
  64, /* 64 bits in an address */
  8,  /* 8 bits in a byte */
  8,  /* 8 bits in a byte */
Line 49... Line 130...
  "i386:x64-32:intel",
  "i386:x64-32:intel",
  3,
  3,
  FALSE,
  FALSE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_long_nop_fill,
  0
  0
};
};
 
 
static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
static const bfd_arch_info_type bfd_x86_64_arch_intel_syntax =
{
{
Line 65... Line 147...
  "i386:x86-64:intel",
  "i386:x86-64:intel",
  3,
  3,
  FALSE,
  FALSE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_long_nop_fill,
  &bfd_x64_32_arch_intel_syntax,
  &bfd_x64_32_arch_intel_syntax,
};
};
 
 
static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
static const bfd_arch_info_type bfd_i386_arch_intel_syntax =
{
{
Line 81... Line 164...
  "i386:intel",
  "i386:intel",
  3,
  3,
  TRUE,
  TRUE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_short_nop_fill,
  &bfd_x86_64_arch_intel_syntax
  &bfd_x86_64_arch_intel_syntax
};
};
 
 
static const bfd_arch_info_type i8086_arch =
static const bfd_arch_info_type i8086_arch =
{
{
Line 97... Line 181...
  "i8086",
  "i8086",
  3,
  3,
  FALSE,
  FALSE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_short_nop_fill,
  &bfd_i386_arch_intel_syntax
  &bfd_i386_arch_intel_syntax
};
};
 
 
static const bfd_arch_info_type bfd_x64_32_arch =
static const bfd_arch_info_type bfd_x64_32_arch =
{
{
Line 113... Line 198...
  "i386:x64-32",
  "i386:x64-32",
  3,
  3,
  FALSE,
  FALSE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_long_nop_fill,
  &i8086_arch
  &i8086_arch
};
};
 
 
static const bfd_arch_info_type bfd_x86_64_arch =
static const bfd_arch_info_type bfd_x86_64_arch =
{
{
Line 129... Line 215...
  "i386:x86-64",
  "i386:x86-64",
  3,
  3,
  FALSE,
  FALSE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_long_nop_fill,
  &bfd_x64_32_arch
  &bfd_x64_32_arch
};
};
 
 
const bfd_arch_info_type bfd_i386_arch =
const bfd_arch_info_type bfd_i386_arch =
{
{
Line 145... Line 232...
  "i386",
  "i386",
  3,
  3,
  TRUE,
  TRUE,
  bfd_i386_compatible,
  bfd_i386_compatible,
  bfd_default_scan,
  bfd_default_scan,
 
  bfd_arch_i386_short_nop_fill,
  &bfd_x86_64_arch
  &bfd_x86_64_arch
};
};
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.