OpenCores
URL https://opencores.org/ocsvn/openrisc_2011-10-31/openrisc_2011-10-31/trunk

Subversion Repositories openrisc_2011-10-31

[/] [openrisc/] [tags/] [gnu-src/] [newlib-1.18.0/] [newlib-1.18.0-or32-1.0rc1/] [newlib/] [libc/] [sys/] [linux/] [linuxthreads/] [machine/] [i386/] [i386-sysdep.h] - Diff between revs 207 and 345

Only display areas with differences | Details | Blame | View Log

Rev 207 Rev 345
/* Assembler macros for i386.
/* Assembler macros for i386.
   Copyright (C) 1991, 92, 93, 95, 96, 98 Free Software Foundation, Inc.
   Copyright (C) 1991, 92, 93, 95, 96, 98 Free Software Foundation, Inc.
   This file is part of the GNU C Library.
   This file is part of the GNU C Library.
 
 
   The GNU C Library is free software; you can redistribute it and/or
   The GNU C Library is free software; you can redistribute it and/or
   modify it under the terms of the GNU Lesser General Public
   modify it under the terms of the GNU Lesser General Public
   License as published by the Free Software Foundation; either
   License as published by the Free Software Foundation; either
   version 2.1 of the License, or (at your option) any later version.
   version 2.1 of the License, or (at your option) any later version.
 
 
   The GNU C Library is distributed in the hope that it will be useful,
   The GNU C Library is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
   Lesser General Public License for more details.
   Lesser General Public License for more details.
 
 
   You should have received a copy of the GNU Lesser General Public
   You should have received a copy of the GNU Lesser General Public
   License along with the GNU C Library; if not, write to the Free
   License along with the GNU C Library; if not, write to the Free
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
   02111-1307 USA.  */
   02111-1307 USA.  */
 
 
#define NO_UNDERSCORES
#define NO_UNDERSCORES
 
 
#include <generic-sysdep.h>
#include <generic-sysdep.h>
 
 
#ifdef  __ASSEMBLER__
#ifdef  __ASSEMBLER__
 
 
/* Syntactic details of assembler.  */
/* Syntactic details of assembler.  */
 
 
#ifdef HAVE_ELF
#ifdef HAVE_ELF
 
 
/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
/* ELF uses byte-counts for .align, most others use log2 of count of bytes.  */
#define ALIGNARG(log2) 1<<log2
#define ALIGNARG(log2) 1<<log2
/* For ELF we need the `.type' directive to make shared libs work right.  */
/* For ELF we need the `.type' directive to make shared libs work right.  */
#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
#define ASM_SIZE_DIRECTIVE(name) .size name,.-name;
#define ASM_SIZE_DIRECTIVE(name) .size name,.-name;
 
 
/* In ELF C symbols are asm symbols.  */
/* In ELF C symbols are asm symbols.  */
#undef  NO_UNDERSCORES
#undef  NO_UNDERSCORES
#define NO_UNDERSCORES
#define NO_UNDERSCORES
 
 
#else
#else
 
 
#define ALIGNARG(log2) log2
#define ALIGNARG(log2) log2
#define ASM_TYPE_DIRECTIVE(name,type)   /* Nothing is specified.  */
#define ASM_TYPE_DIRECTIVE(name,type)   /* Nothing is specified.  */
#define ASM_SIZE_DIRECTIVE(name)        /* Nothing is specified.  */
#define ASM_SIZE_DIRECTIVE(name)        /* Nothing is specified.  */
 
 
#endif
#endif
 
 
 
 
/* Define an entry point visible from C.
/* Define an entry point visible from C.
 
 
   There is currently a bug in gdb which prevents us from specifying
   There is currently a bug in gdb which prevents us from specifying
   incomplete stabs information.  Fake some entries here which specify
   incomplete stabs information.  Fake some entries here which specify
   the current source file.  */
   the current source file.  */
#define ENTRY(name)                                                           \
#define ENTRY(name)                                                           \
  STABS_CURRENT_FILE1("")                                                     \
  STABS_CURRENT_FILE1("")                                                     \
  STABS_CURRENT_FILE(name)                                                    \
  STABS_CURRENT_FILE(name)                                                    \
  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name);                                   \
  ASM_GLOBAL_DIRECTIVE C_SYMBOL_NAME(name);                                   \
  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)                          \
  ASM_TYPE_DIRECTIVE (C_SYMBOL_NAME(name),@function)                          \
  .align ALIGNARG(4);                                                         \
  .align ALIGNARG(4);                                                         \
  STABS_FUN(name)                                                             \
  STABS_FUN(name)                                                             \
  C_LABEL(name)                                                               \
  C_LABEL(name)                                                               \
  CALL_MCOUNT
  CALL_MCOUNT
 
 
#undef  END
#undef  END
#define END(name)                                                             \
#define END(name)                                                             \
  ASM_SIZE_DIRECTIVE(name)                                                    \
  ASM_SIZE_DIRECTIVE(name)                                                    \
  STABS_FUN_END(name)
  STABS_FUN_END(name)
 
 
/* Remove the following two lines once the gdb bug is fixed.  */
/* Remove the following two lines once the gdb bug is fixed.  */
#define STABS_CURRENT_FILE(name)                                              \
#define STABS_CURRENT_FILE(name)                                              \
  STABS_CURRENT_FILE1 (#name)
  STABS_CURRENT_FILE1 (#name)
#define STABS_CURRENT_FILE1(name)                                             \
#define STABS_CURRENT_FILE1(name)                                             \
  1: .stabs name,100,0,0,1b;
  1: .stabs name,100,0,0,1b;
/* Emit stabs definition lines.  We use F(0,1) and define t(0,1) as `int',
/* Emit stabs definition lines.  We use F(0,1) and define t(0,1) as `int',
   the same way gcc does it.  */
   the same way gcc does it.  */
#define STABS_FUN(name) STABS_FUN2(name, name##:F(0,1))
#define STABS_FUN(name) STABS_FUN2(name, name##:F(0,1))
#define STABS_FUN2(name, namestr)                                             \
#define STABS_FUN2(name, namestr)                                             \
  .stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,0,0;                  \
  .stabs "int:t(0,1)=r(0,1);-2147483648;2147483647;",128,0,0,0;                  \
  .stabs #namestr,36,0,0,name;
  .stabs #namestr,36,0,0,name;
#define STABS_FUN_END(name)                                                   \
#define STABS_FUN_END(name)                                                   \
  1: .stabs "",36,0,0,1b-name;
  1: .stabs "",36,0,0,1b-name;
 
 
/* If compiled for profiling, call `mcount' at the start of each function.  */
/* If compiled for profiling, call `mcount' at the start of each function.  */
#ifdef  PROF
#ifdef  PROF
/* The mcount code relies on a normal frame pointer being on the stack
/* The mcount code relies on a normal frame pointer being on the stack
   to locate our caller, so push one just for its benefit.  */
   to locate our caller, so push one just for its benefit.  */
#define CALL_MCOUNT \
#define CALL_MCOUNT \
  pushl %ebp; movl %esp, %ebp; call JUMPTARGET(mcount); popl %ebp;
  pushl %ebp; movl %esp, %ebp; call JUMPTARGET(mcount); popl %ebp;
#else
#else
#define CALL_MCOUNT             /* Do nothing.  */
#define CALL_MCOUNT             /* Do nothing.  */
#endif
#endif
 
 
#ifdef  NO_UNDERSCORES
#ifdef  NO_UNDERSCORES
/* Since C identifiers are not normally prefixed with an underscore
/* Since C identifiers are not normally prefixed with an underscore
   on this system, the asm identifier `syscall_error' intrudes on the
   on this system, the asm identifier `syscall_error' intrudes on the
   C name space.  Make sure we use an innocuous name.  */
   C name space.  Make sure we use an innocuous name.  */
#define syscall_error   __syscall_error
#define syscall_error   __syscall_error
#define mcount          _mcount
#define mcount          _mcount
#endif
#endif
 
 
#define PSEUDO(name, syscall_name, args)                                      \
#define PSEUDO(name, syscall_name, args)                                      \
lose: SYSCALL_PIC_SETUP                                                       \
lose: SYSCALL_PIC_SETUP                                                       \
  jmp JUMPTARGET(syscall_error)                                               \
  jmp JUMPTARGET(syscall_error)                                               \
  .globl syscall_error;                                                       \
  .globl syscall_error;                                                       \
  ENTRY (name)                                                                \
  ENTRY (name)                                                                \
  DO_CALL (syscall_name, args);                                               \
  DO_CALL (syscall_name, args);                                               \
  jb lose
  jb lose
 
 
#undef  PSEUDO_END
#undef  PSEUDO_END
#define PSEUDO_END(name)                                                      \
#define PSEUDO_END(name)                                                      \
  END (name)
  END (name)
 
 
#ifdef PIC
#ifdef PIC
#define JUMPTARGET(name)        name##@PLT
#define JUMPTARGET(name)        name##@PLT
#define SYSCALL_PIC_SETUP \
#define SYSCALL_PIC_SETUP \
    pushl %ebx;                                                               \
    pushl %ebx;                                                               \
    call 0f;                                                                  \
    call 0f;                                                                  \
0:  popl %ebx;                                                                 \
0:  popl %ebx;                                                                 \
    addl $_GLOBAL_OFFSET_TABLE+[.-0b], %ebx;
    addl $_GLOBAL_OFFSET_TABLE+[.-0b], %ebx;
#else
#else
#define JUMPTARGET(name)        name
#define JUMPTARGET(name)        name
#define SYSCALL_PIC_SETUP       /* Nothing.  */
#define SYSCALL_PIC_SETUP       /* Nothing.  */
#endif
#endif
 
 
/* Local label name for asm code. */
/* Local label name for asm code. */
#ifndef L
#ifndef L
#define L(name)         name
#define L(name)         name
#endif
#endif
 
 
#endif  /* __ASSEMBLER__ */
#endif  /* __ASSEMBLER__ */
 
 

powered by: WebSVN 2.1.0

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