Back to index

cell-binutils  2.17cvs20070401
Classes | Defines | Enumerations | Functions
elf32-sh64.h File Reference
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  sh64_elf_crange
struct  sh64_section_data
struct  _sh64_elf_section_data

Defines

#define SH64_CRANGES_SECTION_NAME   ".cranges"
#define SH64_CRANGE_SIZE   (4 + 4 + 2)
#define SH64_CRANGE_CR_ADDR_OFFSET   0
#define SH64_CRANGE_CR_SIZE_OFFSET   4
#define SH64_CRANGE_CR_TYPE_OFFSET   (4 + 4)
#define sh64_elf_section_data(sec)   ((struct _sh64_elf_section_data *) elf_section_data (sec))

Enumerations

enum  sh64_elf_cr_type { CRT_NONE = 0, CRT_DATA = 1, CRT_SH5_ISA16 = 2, CRT_SH5_ISA32 = 3 }

Functions

enum sh64_elf_cr_type sh64_get_contents_type (asection *, bfd_vma, sh64_elf_crange *)
bfd_boolean sh64_address_is_shmedia (asection *, bfd_vma)
int _bfd_sh64_crange_qsort_cmpb (const void *, const void *)
int _bfd_sh64_crange_qsort_cmpl (const void *, const void *)
int _bfd_sh64_crange_bsearch_cmpb (const void *, const void *)
int _bfd_sh64_crange_bsearch_cmpl (const void *, const void *)

Class Documentation

struct sh64_elf_crange

Definition at line 41 of file elf32-sh64.h.

Class Members
bfd_vma cr_addr
bfd_size_type cr_size
struct sh64_section_data

Definition at line 70 of file elf32-sh64.h.

Class Members
flagword contents_flags
bfd_size_type cranges_growth
struct _sh64_elf_section_data

Definition at line 79 of file elf32-sh64.h.

Collaboration diagram for _sh64_elf_section_data:
Class Members
struct sh64_section_data * sh64_info

Define Documentation

Definition at line 48 of file elf32-sh64.h.

Definition at line 49 of file elf32-sh64.h.

#define SH64_CRANGE_CR_TYPE_OFFSET   (4 + 4)

Definition at line 50 of file elf32-sh64.h.

#define SH64_CRANGE_SIZE   (4 + 4 + 2)

Definition at line 47 of file elf32-sh64.h.

#define SH64_CRANGES_SECTION_NAME   ".cranges"

Definition at line 23 of file elf32-sh64.h.

Definition at line 85 of file elf32-sh64.h.


Enumeration Type Documentation

Enumerator:
CRT_NONE 
CRT_DATA 
CRT_SH5_ISA16 
CRT_SH5_ISA32 

Definition at line 24 of file elf32-sh64.h.

                      {
  CRT_NONE = 0,
  CRT_DATA = 1,
  CRT_SH5_ISA16 = 2,
  CRT_SH5_ISA32 = 3
};

Function Documentation

int _bfd_sh64_crange_bsearch_cmpb ( const void *  ,
const void *   
)

Definition at line 63 of file elf32-sh64-com.c.

{
  bfd_vma a1 = *(bfd_vma *) p1;
  bfd_vma a2 = (bfd_vma) bfd_getb32 (p2);
  bfd_size_type size
    = (bfd_size_type) bfd_getb32 (SH64_CRANGE_CR_SIZE_OFFSET + (char *) p2);

  if (a1 >= a2 + size)
    return 1;
  if (a1 < a2)
    return -1;
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int _bfd_sh64_crange_bsearch_cmpl ( const void *  ,
const void *   
)

Definition at line 78 of file elf32-sh64-com.c.

{
  bfd_vma a1 = *(bfd_vma *) p1;
  bfd_vma a2 = (bfd_vma) bfd_getl32 (p2);
  bfd_size_type size
    = (bfd_size_type) bfd_getl32 (SH64_CRANGE_CR_SIZE_OFFSET + (char *) p2);

  if (a1 >= a2 + size)
    return 1;
  if (a1 < a2)
    return -1;
  return 0;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int _bfd_sh64_crange_qsort_cmpb ( const void *  ,
const void *   
)

Definition at line 37 of file elf32-sh64-com.c.

{
  bfd_vma a1 = bfd_getb32 (p1);
  bfd_vma a2 = bfd_getb32 (p2);

  /* Preserve order if there's ambiguous contents.  */
  if (a1 == a2)
    return (char *) p1 - (char *) p2;

  return a1 - a2;
}

Here is the call graph for this function:

Here is the caller graph for this function:

int _bfd_sh64_crange_qsort_cmpl ( const void *  ,
const void *   
)

Definition at line 50 of file elf32-sh64-com.c.

{
  bfd_vma a1 = (bfd_vma) bfd_getl32 (p1);
  bfd_vma a2 = (bfd_vma) bfd_getl32 (p2);

  /* Preserve order if there's ambiguous contents.  */
  if (a1 == a2)
    return (char *) p1 - (char *) p2;

  return a1 - a2;
}

Here is the call graph for this function:

Here is the caller graph for this function:

Definition at line 240 of file elf32-sh64-com.c.

Here is the call graph for this function:

Definition at line 187 of file elf32-sh64-com.c.

{
  asection *cranges;

  /* Fill in the range with the boundaries of the section as a default.  */
  if (bfd_get_flavour (sec->owner) == bfd_target_elf_flavour
      && elf_elfheader (sec->owner)->e_type == ET_EXEC)
    {
      rangep->cr_addr = bfd_get_section_vma (sec->owner, sec);
      rangep->cr_size = sec->size;
      rangep->cr_type = CRT_NONE;
    }
  else
    return FALSE;

  /* If none of the pertinent bits are set, then it's a SHcompact (or at
     least not SHmedia).  */
  if ((elf_section_data (sec)->this_hdr.sh_flags
       & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)) == 0)
    {
      enum sh64_elf_cr_type cr_type
       = ((bfd_get_section_flags (sec->owner, sec) & SEC_CODE) != 0
          ? CRT_SH5_ISA16 : CRT_DATA);
      rangep->cr_type = cr_type;
      return cr_type;
    }

  /* If only the SHF_SH5_ISA32 bit is set, then we have SHmedia.  */
  if ((elf_section_data (sec)->this_hdr.sh_flags
       & (SHF_SH5_ISA32 | SHF_SH5_ISA32_MIXED)) == SHF_SH5_ISA32)
    {
      rangep->cr_type = CRT_SH5_ISA32;
      return CRT_SH5_ISA32;
    }

  /* Otherwise, we have to look up the .cranges section.  */
  cranges = bfd_get_section_by_name (sec->owner, SH64_CRANGES_SECTION_NAME);

  if (cranges == NULL)
    /* A mixed section but there's no .cranges section.  This is probably
       bad input; it does not comply to specs.  */
    return CRT_NONE;

  /* If this call fails, we will still have CRT_NONE in rangep->cr_type
     and that will be suitable to return.  */
  sh64_address_in_cranges (cranges, addr, rangep);

  return rangep->cr_type;
}

Here is the call graph for this function:

Here is the caller graph for this function: