Sync toplevel with upstream GCC.
Signed-off-by: Corinna Vinschen <corinna@vinschen.de>
This commit is contained in:
@ -1,3 +1,155 @@
|
||||
2016-03-17 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
* gomp-constants.h (enum gomp_map_kind): Rename
|
||||
GOMP_MAP_FORCE_DEALLOC to GOMP_MAP_DELETE. Adjust all users.
|
||||
|
||||
2016-03-03 Than McIntosh <thanm@google.com>
|
||||
|
||||
* plugin-api.h: Add new hooks to the plugin transfer vector to
|
||||
to support querying section alignment and section size.
|
||||
(ld_plugin_get_input_section_alignment): New hook.
|
||||
(ld_plugin_get_input_section_size): New hook.
|
||||
(ld_plugin_tag): Add LDPT_GET_INPUT_SECTION_ALIGNMENT
|
||||
and LDPT_GET_INPUT_SECTION_SIZE.
|
||||
(ld_plugin_tv): Add tv_get_input_section_alignment and
|
||||
tv_get_input_section_size.
|
||||
|
||||
2016-03-03 Evgenii Stepanov <eugenis@google.com>
|
||||
|
||||
* plugin-api.h (enum ld_plugin_tag): Add LDPT_GET_SYMBOLS_V3.
|
||||
|
||||
2016-01-19 Martin Jambor <mjambor@suse.cz>
|
||||
|
||||
* gomp-constants.h (GOMP_DEVICE_HSA): New macro.
|
||||
(GOMP_VERSION_HSA): Likewise.
|
||||
(GOMP_TARGET_ARG_DEVICE_MASK): Likewise.
|
||||
(GOMP_TARGET_ARG_DEVICE_ALL): Likewise.
|
||||
(GOMP_TARGET_ARG_SUBSEQUENT_PARAM): Likewise.
|
||||
(GOMP_TARGET_ARG_ID_MASK): Likewise.
|
||||
(GOMP_TARGET_ARG_NUM_TEAMS): Likewise.
|
||||
(GOMP_TARGET_ARG_THREAD_LIMIT): Likewise.
|
||||
(GOMP_TARGET_ARG_VALUE_SHIFT): Likewise.
|
||||
(GOMP_TARGET_ARG_HSA_KERNEL_ATTRIBUTES): Likewise.
|
||||
|
||||
2016-01-07 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* longlong.h: Change !__SHMEDIA__ to
|
||||
(!defined (__SHMEDIA__) || !__SHMEDIA__).
|
||||
Change __SHMEDIA__ to defined (__SHMEDIA__) && __SHMEDIA__.
|
||||
|
||||
2016-01-05 Mike Frysinger <vapier@gentoo.org>
|
||||
|
||||
* libiberty.h (dupargv): Change arg to char * const *.
|
||||
(writeargv, countargv): Likewise.
|
||||
|
||||
2015-11-25 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
|
||||
|
||||
* vtv-change-permission.h (VTV_PAGE_SIZE) [__sun__ && __svr4__ &&
|
||||
__sparc__]: Define.
|
||||
|
||||
2015-11-12 James Norris <jnorris@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
|
||||
* gomp-constants.h (enum gomp_map_kind): Add GOMP_MAP_DEVICE_RESIDENT
|
||||
and GOMP_MAP_LINK.
|
||||
|
||||
2015-11-09 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR gdb/17133
|
||||
* obstack.h (__attribute_pure__): Expand _GL_ATTRIBUTE_PURE.
|
||||
|
||||
2015-11-09 Alan Modra <amodra@gmail.com>
|
||||
|
||||
PR gdb/17133
|
||||
* obstack.h: Import current gnulib file.
|
||||
|
||||
2015-11-05 Jakub Jelinek <jakub@redhat.com>
|
||||
Ilya Verbin <ilya.verbin@intel.com>
|
||||
|
||||
* gomp-constants.h (GOMP_MAP_FLAG_SPECIAL_2): Define.
|
||||
(GOMP_MAP_FLAG_ALWAYS): Remove.
|
||||
(enum gomp_map_kind): Use GOMP_MAP_FLAG_SPECIAL_2 instead of
|
||||
GOMP_MAP_FLAG_ALWAYS for GOMP_MAP_ALWAYS_TO, GOMP_MAP_ALWAYS_FROM,
|
||||
GOMP_MAP_ALWAYS_TOFROM, GOMP_MAP_STRUCT, GOMP_MAP_RELEASE.
|
||||
Add GOMP_MAP_ALWAYS_POINTER and GOMP_MAP_FIRSTPRIVATE_REFERENCE.
|
||||
(GOMP_MAP_ALWAYS_P): Define.
|
||||
(GOMP_TARGET_FLAG_NOWAIT): Adjust comment.
|
||||
|
||||
2015-10-27 Daniel Jacobowitz <dan@codesourcery.com>
|
||||
Joseph Myers <joseph@codesourcery.com>
|
||||
Mark Shinwell <shinwell@codesourcery.com>
|
||||
Andrew Stubbs <ams@codesourcery.com>
|
||||
Rich Felker <dalias@libc.org>
|
||||
|
||||
* longlong.h (udiv_qrnnd): Add FDPIC compatible version for SH.
|
||||
|
||||
2015-10-18 Roland McGrath <roland@gnu.org>
|
||||
|
||||
PR other/63758
|
||||
* environ.h: New file.
|
||||
|
||||
2015-10-13 Jakub Jelinek <jakub@redhat.com>
|
||||
Ilya Verbin <ilya.verbin@intel.com>
|
||||
|
||||
* gomp-constants.h (GOMP_MAP_FLAG_ALWAYS): Define.
|
||||
(enum gomp_map_kind): Add GOMP_MAP_FIRSTPRIVATE,
|
||||
GOMP_MAP_FIRSTPRIVATE_INT, GOMP_MAP_USE_DEVICE_PTR,
|
||||
GOMP_MAP_ZERO_LEN_ARRAY_SECTION, GOMP_MAP_ALWAYS_TO,
|
||||
GOMP_MAP_ALWAYS_FROM, GOMP_MAP_ALWAYS_TOFROM, GOMP_MAP_STRUCT,
|
||||
GOMP_MAP_DELETE_ZERO_LEN_ARRAY_SECTION, GOMP_MAP_DELETE,
|
||||
GOMP_MAP_RELEASE, GOMP_MAP_FIRSTPRIVATE_POINTER.
|
||||
(GOMP_MAP_ALWAYS_TO_P, GOMP_MAP_ALWAYS_FROM_P): Define.
|
||||
(GOMP_TASK_FLAG_UNTIED, GOMP_TASK_FLAG_FINAL, GOMP_TASK_FLAG_MERGEABLE,
|
||||
GOMP_TASK_FLAG_DEPEND, GOMP_TASK_FLAG_PRIORITY, GOMP_TASK_FLAG_UP,
|
||||
GOMP_TASK_FLAG_GRAINSIZE, GOMP_TASK_FLAG_IF, GOMP_TASK_FLAG_NOGROUP,
|
||||
GOMP_TARGET_FLAG_NOWAIT, GOMP_TARGET_FLAG_EXIT_DATA,
|
||||
GOMP_TARGET_FLAG_UPDATE): Define.
|
||||
|
||||
2015-09-28 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gomp-constants.h (GOMP_VERSION_NVIDIA_PTX): Increment.
|
||||
(GOMP_DIM_GANG, GOMP_DIM_WORKER, GOMP_DIM_VECTOR, GOMP_DIM_MAX,
|
||||
GOMP_DIM_MASK): New.
|
||||
(GOMP_LAUNCH_DIM, GOMP_LAUNCH_ASYNC, GOMP_LAUNCH_WAIT): New.
|
||||
(GOMP_LAUNCH_CODE_SHIFT, GOMP_LAUNCH_DEVICE_SHIFT,
|
||||
GOMP_LAUNCH_OP_SHIFT): New.
|
||||
(GOMP_LAUNCH_PACK, GOMP_LAUNCH_CODE, GOMP_LAUNCH_DEVICE,
|
||||
GOMP_LAUNCH_OP): New.
|
||||
(GOMP_LAUNCH_OP_MAX): New.
|
||||
|
||||
2015-08-24 Nathan Sidwell <nathan@codesourcery.com>
|
||||
|
||||
* gomp-constants.h (GOMP_VERSION, GOMP_VERSION_NVIDIA_PTX,
|
||||
GOMP_VERSION_INTEL_MIC): New.
|
||||
(GOMP_VERSION_PACK, GOMP_VERSION_LIB, GOMP_VERSION_DEV): New.
|
||||
|
||||
2015-08-14 Pierre-Marie de Rodat <derodat@adacore.com>
|
||||
|
||||
* dwarf2.def (DW_AT_GNU_bias): New attribute.
|
||||
|
||||
2015-08-14 Pierre-Marie de Rodat <derodat@adacore.com>
|
||||
|
||||
* dwarf2.def (DW_AT_GNU_numerator, DW_AT_GNU_denominator): New
|
||||
attributes.
|
||||
|
||||
2015-08-11 Trevor Saunders <tbsaunde+gcc@tbsaunde.org>
|
||||
|
||||
* ansidecl.h (GCC_FINAL): New macro.
|
||||
|
||||
2015-08-10 Thomas Schwinge <thomas@codesourcery.com>
|
||||
|
||||
* gomp-constants.c (GOMP_DEVICE_HOST_NONSHM): Remove.
|
||||
|
||||
2015-05-22 Yunlian Jiang <yunlian@google.com>
|
||||
|
||||
* libiberty.h (asprintf): Don't declare if HAVE_DECL_ASPRINTF is
|
||||
not defined.
|
||||
|
||||
2015-03-19 Richard Biener <rguenther@suse.de>
|
||||
|
||||
* partition.h (struct partition_elem): Re-order elements to
|
||||
avoid padding.
|
||||
|
||||
2015-03-02 Markus Trippelsdorf <markus@trippelsdorf.de>
|
||||
|
||||
PR target/65261
|
||||
@ -18,7 +170,7 @@
|
||||
|
||||
* gomp-constants.h: New file.
|
||||
|
||||
2015-12-14 Jan-Benedict Glaw <jbglaw@lug-owl.de>
|
||||
2014-12-14 Jan-Benedict Glaw <jbglaw@lug-owl.de>
|
||||
|
||||
* libiberty.h: Merge Copyright year update from Binutils.
|
||||
|
||||
@ -62,15 +214,16 @@
|
||||
(DW_AT_APPLE_property_attribute, DW_AT_APPLE_objc_complete_type)
|
||||
(DW_AT_APPLE_property): New macros.
|
||||
|
||||
2014-11-11 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* ChangeLog.jit: New.
|
||||
|
||||
2014-11-05 Anthony Brandon <anthony.brandon@gmail.com>
|
||||
2014-11-11 Anthony Brandon <anthony.brandon@gmail.com>
|
||||
Manuel López-Ibáñez <manu@gcc.gnu.org>
|
||||
|
||||
PR driver/36312
|
||||
* filenames.h: Add prototype for canonical_filename_eq.
|
||||
|
||||
2014-11-11 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* ChangeLog.jit: New.
|
||||
|
||||
2014-10-28 Richard Henderson <rth@redhat.com>
|
||||
|
||||
* longlong.h [__alpha] (umul_ppmm): Disable for c++.
|
||||
|
@ -2674,12 +2674,6 @@ Wed Aug 21 20:32:13 1991 John Gilmore (gnu at cygint.cygnus.com)
|
||||
to reflect reality as I know it.
|
||||
|
||||
|
||||
Copyright (C) 1993-2003 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
||||
|
||||
Local Variables:
|
||||
mode: change-log
|
||||
left-margin: 8
|
||||
|
11
include/ChangeLog.jit
Normal file
11
include/ChangeLog.jit
Normal file
@ -0,0 +1,11 @@
|
||||
2014-09-25 David Malcolm <dmalcolm@redhat.com>
|
||||
|
||||
* libiberty.h (choose_tmpdir): New prototype.
|
||||
* ChangeLog.jit: New.
|
||||
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
|
||||
Copying and distribution of this file, with or without modification,
|
||||
are permitted in any medium without royalty provided the copyright
|
||||
notice and this notice are preserved.
|
@ -1,7 +1,5 @@
|
||||
/* ANSI and traditional C compatability macros
|
||||
Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
||||
2002, 2003, 2004, 2005, 2006, 2007, 2009, 2010, 2013
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
@ -313,6 +311,15 @@ So instead we use the macro below and test it against specific values. */
|
||||
#define ENUM_BITFIELD(TYPE) __extension__ enum TYPE
|
||||
#else
|
||||
#define ENUM_BITFIELD(TYPE) unsigned int
|
||||
#endif
|
||||
|
||||
/* This is used to mark a class or virtual function as final. */
|
||||
#if __cplusplus >= 201103L
|
||||
#define GCC_FINAL final
|
||||
#elif GCC_VERSION >= 4007
|
||||
#define GCC_FINAL __final
|
||||
#else
|
||||
#define GCC_FINAL
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Defs for interface to demanglers.
|
||||
Copyright 1992, 1993, 1994, 1995, 1996, 1997, 1998, 2000, 2001, 2002,
|
||||
2003, 2004, 2005, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
|
||||
|
||||
Copyright (C) 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License
|
||||
as published by the Free Software Foundation; either version 2, or
|
||||
@ -144,10 +143,10 @@ cplus_mangle_opname (const char *opname, int options);
|
||||
extern void
|
||||
set_cplus_marker_for_demangling (int ch);
|
||||
|
||||
extern enum demangling_styles
|
||||
extern enum demangling_styles
|
||||
cplus_demangle_set_style (enum demangling_styles style);
|
||||
|
||||
extern enum demangling_styles
|
||||
extern enum demangling_styles
|
||||
cplus_demangle_name_to_style (const char *name);
|
||||
|
||||
/* Callback typedef for allocation-less demangler interfaces. */
|
||||
@ -380,6 +379,10 @@ enum demangle_component_type
|
||||
/* A typecast, represented as a unary operator. The one subtree is
|
||||
the type to which the argument should be cast. */
|
||||
DEMANGLE_COMPONENT_CAST,
|
||||
/* A conversion operator, represented as a unary operator. The one
|
||||
subtree is the type to which the argument should be converted
|
||||
to. */
|
||||
DEMANGLE_COMPONENT_CONVERSION,
|
||||
/* A nullary expression. The left subtree is the operator. */
|
||||
DEMANGLE_COMPONENT_NULLARY,
|
||||
/* A unary expression. The left subtree is the operator, and the
|
||||
@ -443,6 +446,8 @@ enum demangle_component_type
|
||||
DEMANGLE_COMPONENT_PACK_EXPANSION,
|
||||
/* A name with an ABI tag. */
|
||||
DEMANGLE_COMPONENT_TAGGED_NAME,
|
||||
/* A transaction-safe function type. */
|
||||
DEMANGLE_COMPONENT_TRANSACTION_SAFE,
|
||||
/* A cloned function. */
|
||||
DEMANGLE_COMPONENT_CLONE
|
||||
};
|
||||
|
@ -1,9 +1,7 @@
|
||||
/* -*- c -*-
|
||||
Declarations and definitions of codes relating to the DWARF2 and
|
||||
DWARF3 symbolic debugging information formats.
|
||||
Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
|
||||
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
|
||||
Office (AJPO), Florida State University and Silicon Graphics Inc.
|
||||
@ -406,6 +404,13 @@ DW_AT (DW_AT_VMS_rtnbeg_pd_address, 0x2201)
|
||||
See http://gcc.gnu.org/wiki/DW_AT_GNAT_descriptive_type . */
|
||||
DW_AT (DW_AT_use_GNAT_descriptive_type, 0x2301)
|
||||
DW_AT (DW_AT_GNAT_descriptive_type, 0x2302)
|
||||
/* Rational constant extension.
|
||||
See https://gcc.gnu.org/wiki/DW_AT_GNU_numerator_denominator . */
|
||||
DW_TAG (DW_AT_GNU_numerator, 0x2303)
|
||||
DW_TAG (DW_AT_GNU_denominator, 0x2304)
|
||||
/* Biased integer extension.
|
||||
See https://gcc.gnu.org/wiki/DW_AT_GNU_bias . */
|
||||
DW_TAG (DW_AT_GNU_bias, 0x2305)
|
||||
/* UPC extension. */
|
||||
DW_AT (DW_AT_upc_threads_scaled, 0x3210)
|
||||
/* PGI (STMicroelectronics) extensions. */
|
||||
|
@ -1,8 +1,6 @@
|
||||
/* Declarations and definitions of codes relating to the DWARF2 and
|
||||
DWARF3 symbolic debugging information formats.
|
||||
Copyright (C) 1992, 1993, 1995, 1996, 1997, 1999, 2000, 2001, 2002,
|
||||
2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1992-2015 Free Software Foundation, Inc.
|
||||
|
||||
Written by Gary Funck (gary@intrepid.com) The Ada Joint Program
|
||||
Office (AJPO), Florida State University and Silicon Graphics Inc.
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* An abstract string datatype.
|
||||
Copyright (C) 1998, 1999, 2000, 2002, 2004, 2005, 2009
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1998-2015 Free Software Foundation, Inc.
|
||||
Contributed by Mark Mitchell (mark@markmitchell.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
33
include/environ.h
Normal file
33
include/environ.h
Normal file
@ -0,0 +1,33 @@
|
||||
/* Declare the environ system variable.
|
||||
Copyright (C) 2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the libiberty library.
|
||||
Libiberty is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2 of the License, or (at your option) any later version.
|
||||
|
||||
Libiberty is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with libiberty; see the file COPYING.LIB. If not,
|
||||
write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor,
|
||||
Boston, MA 02110-1301, USA. */
|
||||
|
||||
/* On OSX, the environ variable can be used directly in the code of an
|
||||
executable, but cannot be used in the code of a shared library (such as
|
||||
GCC's liblto_plugin, which links in libiberty code). Instead, the
|
||||
function _NSGetEnviron can be called to get the address of environ. */
|
||||
|
||||
#ifndef HAVE_ENVIRON_DECL
|
||||
# ifdef __APPLE__
|
||||
# include <crt_externs.h>
|
||||
# define environ (*_NSGetEnviron ())
|
||||
# else
|
||||
extern char **environ;
|
||||
# endif
|
||||
# define HAVE_ENVIRON_DECL
|
||||
#endif
|
@ -1,6 +1,5 @@
|
||||
/* A Fibonacci heap datatype.
|
||||
Copyright 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2009
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1998-2015 Free Software Foundation, Inc.
|
||||
Contributed by Daniel Berlin (dan@cgsoftware.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -5,7 +5,7 @@
|
||||
use forward- and back-slash in path names interchangeably, and
|
||||
some of them have case-insensitive file names.
|
||||
|
||||
Copyright 2000, 2001, 2007, 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of BFD, the Binary File Descriptor library.
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* IEEE floating point support declarations, for GDB, the GNU Debugger.
|
||||
Copyright 1991, 1994, 1995, 1997, 2000, 2003, 2005, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* Copyright 1991, 1992, 1993, 1996 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Interface between GCC C FE and GDB -*- c -*-
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
Copyright (C) 2014-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Interface between GCC C FE and GDB
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
Copyright (C) 2014-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Generic interface between GCC and GDB
|
||||
|
||||
Copyright (C) 2014 Free Software Foundation, Inc.
|
||||
Copyright (C) 2014-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Public attributes of the .gdb_index section.
|
||||
Copyright 2012 Free Software Foundation, Inc.
|
||||
Copyright (C) 2012-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GDB.
|
||||
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Declarations for getopt.
|
||||
Copyright 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998, 2000,
|
||||
2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 1989-2015 Free Software Foundation, Inc.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
@ -39,6 +39,7 @@
|
||||
/* Special map kinds, enumerated starting here. */
|
||||
#define GOMP_MAP_FLAG_SPECIAL_0 (1 << 2)
|
||||
#define GOMP_MAP_FLAG_SPECIAL_1 (1 << 3)
|
||||
#define GOMP_MAP_FLAG_SPECIAL_2 (1 << 4)
|
||||
#define GOMP_MAP_FLAG_SPECIAL (GOMP_MAP_FLAG_SPECIAL_1 \
|
||||
| GOMP_MAP_FLAG_SPECIAL_0)
|
||||
/* Flag to force a specific behavior (or else, trigger a run-time error). */
|
||||
@ -66,10 +67,28 @@ enum gomp_map_kind
|
||||
/* Must already be present. */
|
||||
GOMP_MAP_FORCE_PRESENT = (GOMP_MAP_FLAG_SPECIAL_0 | 2),
|
||||
/* Deallocate a mapping, without copying from device. */
|
||||
GOMP_MAP_FORCE_DEALLOC = (GOMP_MAP_FLAG_SPECIAL_0 | 3),
|
||||
GOMP_MAP_DELETE = (GOMP_MAP_FLAG_SPECIAL_0 | 3),
|
||||
/* Is a device pointer. OMP_CLAUSE_SIZE for these is unused; is implicitly
|
||||
POINTER_SIZE_UNITS. */
|
||||
GOMP_MAP_FORCE_DEVICEPTR = (GOMP_MAP_FLAG_SPECIAL_1 | 0),
|
||||
/* Do not map, copy bits for firstprivate instead. */
|
||||
/* OpenACC device_resident. */
|
||||
GOMP_MAP_DEVICE_RESIDENT = (GOMP_MAP_FLAG_SPECIAL_1 | 1),
|
||||
/* OpenACC link. */
|
||||
GOMP_MAP_LINK = (GOMP_MAP_FLAG_SPECIAL_1 | 2),
|
||||
/* Allocate. */
|
||||
GOMP_MAP_FIRSTPRIVATE = (GOMP_MAP_FLAG_SPECIAL | 0),
|
||||
/* Similarly, but store the value in the pointer rather than
|
||||
pointed by the pointer. */
|
||||
GOMP_MAP_FIRSTPRIVATE_INT = (GOMP_MAP_FLAG_SPECIAL | 1),
|
||||
/* Pointer translate host address into device address and copy that
|
||||
back to host. */
|
||||
GOMP_MAP_USE_DEVICE_PTR = (GOMP_MAP_FLAG_SPECIAL | 2),
|
||||
/* Allocate a zero length array section. Prefer next non-zero length
|
||||
mapping over previous non-zero length mapping over zero length mapping
|
||||
at the address. If not already mapped, do nothing (and pointer translate
|
||||
to NULL). */
|
||||
GOMP_MAP_ZERO_LEN_ARRAY_SECTION = (GOMP_MAP_FLAG_SPECIAL | 3),
|
||||
/* Allocate. */
|
||||
GOMP_MAP_FORCE_ALLOC = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_ALLOC),
|
||||
/* ..., and copy to device. */
|
||||
@ -77,7 +96,44 @@ enum gomp_map_kind
|
||||
/* ..., and copy from device. */
|
||||
GOMP_MAP_FORCE_FROM = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_FROM),
|
||||
/* ..., and copy to and from device. */
|
||||
GOMP_MAP_FORCE_TOFROM = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_TOFROM)
|
||||
GOMP_MAP_FORCE_TOFROM = (GOMP_MAP_FLAG_FORCE | GOMP_MAP_TOFROM),
|
||||
/* If not already present, allocate. And unconditionally copy to
|
||||
device. */
|
||||
GOMP_MAP_ALWAYS_TO = (GOMP_MAP_FLAG_SPECIAL_2 | GOMP_MAP_TO),
|
||||
/* If not already present, allocate. And unconditionally copy from
|
||||
device. */
|
||||
GOMP_MAP_ALWAYS_FROM = (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_FROM),
|
||||
/* If not already present, allocate. And unconditionally copy to and from
|
||||
device. */
|
||||
GOMP_MAP_ALWAYS_TOFROM = (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_TOFROM),
|
||||
/* Map a sparse struct; the address is the base of the structure, alignment
|
||||
it's required alignment, and size is the number of adjacent entries
|
||||
that belong to the struct. The adjacent entries should be sorted by
|
||||
increasing address, so it is easy to determine lowest needed address
|
||||
(address of the first adjacent entry) and highest needed address
|
||||
(address of the last adjacent entry plus its size). */
|
||||
GOMP_MAP_STRUCT = (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_FLAG_SPECIAL | 0),
|
||||
/* On a location of a pointer/reference that is assumed to be already mapped
|
||||
earlier, store the translated address of the preceeding mapping.
|
||||
No refcount is bumped by this, and the store is done unconditionally. */
|
||||
GOMP_MAP_ALWAYS_POINTER = (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_FLAG_SPECIAL | 1),
|
||||
/* Forced deallocation of zero length array section. */
|
||||
GOMP_MAP_DELETE_ZERO_LEN_ARRAY_SECTION
|
||||
= (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_FLAG_SPECIAL | 3),
|
||||
/* Decrement usage count and deallocate if zero. */
|
||||
GOMP_MAP_RELEASE = (GOMP_MAP_FLAG_SPECIAL_2
|
||||
| GOMP_MAP_DELETE),
|
||||
|
||||
/* Internal to GCC, not used in libgomp. */
|
||||
/* Do not map, but pointer assign a pointer instead. */
|
||||
GOMP_MAP_FIRSTPRIVATE_POINTER = (GOMP_MAP_LAST | 1),
|
||||
/* Do not map, but pointer assign a reference instead. */
|
||||
GOMP_MAP_FIRSTPRIVATE_REFERENCE = (GOMP_MAP_LAST | 2)
|
||||
};
|
||||
|
||||
#define GOMP_MAP_COPY_TO_P(X) \
|
||||
@ -91,6 +147,15 @@ enum gomp_map_kind
|
||||
#define GOMP_MAP_POINTER_P(X) \
|
||||
((X) == GOMP_MAP_POINTER)
|
||||
|
||||
#define GOMP_MAP_ALWAYS_TO_P(X) \
|
||||
(((X) == GOMP_MAP_ALWAYS_TO) || ((X) == GOMP_MAP_ALWAYS_TOFROM))
|
||||
|
||||
#define GOMP_MAP_ALWAYS_FROM_P(X) \
|
||||
(((X) == GOMP_MAP_ALWAYS_FROM) || ((X) == GOMP_MAP_ALWAYS_TOFROM))
|
||||
|
||||
#define GOMP_MAP_ALWAYS_P(X) \
|
||||
(GOMP_MAP_ALWAYS_TO_P (X) || ((X) == GOMP_MAP_ALWAYS_FROM))
|
||||
|
||||
|
||||
/* Asynchronous behavior. Keep in sync with
|
||||
libgomp/{openacc.h,openacc.f90,openacc_lib.h}:acc_async_t. */
|
||||
@ -101,16 +166,92 @@ enum gomp_map_kind
|
||||
|
||||
/* Device codes. Keep in sync with
|
||||
libgomp/{openacc.h,openacc.f90,openacc_lib.h}:acc_device_t as well as
|
||||
libgomp/libgomp_target.h. */
|
||||
libgomp/libgomp-plugin.h. */
|
||||
#define GOMP_DEVICE_NONE 0
|
||||
#define GOMP_DEVICE_DEFAULT 1
|
||||
#define GOMP_DEVICE_HOST 2
|
||||
#define GOMP_DEVICE_HOST_NONSHM 3
|
||||
/* #define GOMP_DEVICE_HOST_NONSHM 3 removed. */
|
||||
#define GOMP_DEVICE_NOT_HOST 4
|
||||
#define GOMP_DEVICE_NVIDIA_PTX 5
|
||||
#define GOMP_DEVICE_INTEL_MIC 6
|
||||
#define GOMP_DEVICE_HSA 7
|
||||
|
||||
#define GOMP_DEVICE_ICV -1
|
||||
#define GOMP_DEVICE_HOST_FALLBACK -2
|
||||
|
||||
/* GOMP_task/GOMP_taskloop* flags argument. */
|
||||
#define GOMP_TASK_FLAG_UNTIED (1 << 0)
|
||||
#define GOMP_TASK_FLAG_FINAL (1 << 1)
|
||||
#define GOMP_TASK_FLAG_MERGEABLE (1 << 2)
|
||||
#define GOMP_TASK_FLAG_DEPEND (1 << 3)
|
||||
#define GOMP_TASK_FLAG_PRIORITY (1 << 4)
|
||||
#define GOMP_TASK_FLAG_UP (1 << 8)
|
||||
#define GOMP_TASK_FLAG_GRAINSIZE (1 << 9)
|
||||
#define GOMP_TASK_FLAG_IF (1 << 10)
|
||||
#define GOMP_TASK_FLAG_NOGROUP (1 << 11)
|
||||
|
||||
/* GOMP_target{_ext,update_ext,enter_exit_data} flags argument. */
|
||||
#define GOMP_TARGET_FLAG_NOWAIT (1 << 0)
|
||||
#define GOMP_TARGET_FLAG_EXIT_DATA (1 << 1)
|
||||
/* Internal to libgomp. */
|
||||
#define GOMP_TARGET_FLAG_UPDATE (1U << 31)
|
||||
|
||||
/* Versions of libgomp and device-specific plugins. */
|
||||
#define GOMP_VERSION 0
|
||||
#define GOMP_VERSION_NVIDIA_PTX 1
|
||||
#define GOMP_VERSION_INTEL_MIC 0
|
||||
#define GOMP_VERSION_HSA 0
|
||||
|
||||
#define GOMP_VERSION_PACK(LIB, DEV) (((LIB) << 16) | (DEV))
|
||||
#define GOMP_VERSION_LIB(PACK) (((PACK) >> 16) & 0xffff)
|
||||
#define GOMP_VERSION_DEV(PACK) ((PACK) & 0xffff)
|
||||
|
||||
#define GOMP_DIM_GANG 0
|
||||
#define GOMP_DIM_WORKER 1
|
||||
#define GOMP_DIM_VECTOR 2
|
||||
#define GOMP_DIM_MAX 3
|
||||
#define GOMP_DIM_MASK(X) (1u << (X))
|
||||
|
||||
/* Varadic launch arguments. End of list is marked by a zero. */
|
||||
#define GOMP_LAUNCH_DIM 1 /* Launch dimensions, op = mask */
|
||||
#define GOMP_LAUNCH_ASYNC 2 /* Async, op = cst val if not MAX */
|
||||
#define GOMP_LAUNCH_WAIT 3 /* Waits, op = num waits. */
|
||||
#define GOMP_LAUNCH_CODE_SHIFT 28
|
||||
#define GOMP_LAUNCH_DEVICE_SHIFT 16
|
||||
#define GOMP_LAUNCH_OP_SHIFT 0
|
||||
#define GOMP_LAUNCH_PACK(CODE,DEVICE,OP) \
|
||||
(((CODE) << GOMP_LAUNCH_CODE_SHIFT) \
|
||||
| ((DEVICE) << GOMP_LAUNCH_DEVICE_SHIFT) \
|
||||
| ((OP) << GOMP_LAUNCH_OP_SHIFT))
|
||||
#define GOMP_LAUNCH_CODE(X) (((X) >> GOMP_LAUNCH_CODE_SHIFT) & 0xf)
|
||||
#define GOMP_LAUNCH_DEVICE(X) (((X) >> GOMP_LAUNCH_DEVICE_SHIFT) & 0xfff)
|
||||
#define GOMP_LAUNCH_OP(X) (((X) >> GOMP_LAUNCH_OP_SHIFT) & 0xffff)
|
||||
#define GOMP_LAUNCH_OP_MAX 0xffff
|
||||
|
||||
/* Bitmask to apply in order to find out the intended device of a target
|
||||
argument. */
|
||||
#define GOMP_TARGET_ARG_DEVICE_MASK ((1 << 7) - 1)
|
||||
/* The target argument is significant for all devices. */
|
||||
#define GOMP_TARGET_ARG_DEVICE_ALL 0
|
||||
|
||||
/* Flag set when the subsequent element in the device-specific argument
|
||||
values. */
|
||||
#define GOMP_TARGET_ARG_SUBSEQUENT_PARAM (1 << 7)
|
||||
|
||||
/* Bitmask to apply to a target argument to find out the value identifier. */
|
||||
#define GOMP_TARGET_ARG_ID_MASK (((1 << 8) - 1) << 8)
|
||||
/* Target argument index of NUM_TEAMS. */
|
||||
#define GOMP_TARGET_ARG_NUM_TEAMS (1 << 8)
|
||||
/* Target argument index of THREAD_LIMIT. */
|
||||
#define GOMP_TARGET_ARG_THREAD_LIMIT (2 << 8)
|
||||
|
||||
/* If the value is directly embeded in target argument, it should be a 16-bit
|
||||
at most and shifted by this many bits. */
|
||||
#define GOMP_TARGET_ARG_VALUE_SHIFT 16
|
||||
|
||||
/* HSA specific data structures. */
|
||||
|
||||
/* Identifiers of device-specific target arguments. */
|
||||
#define GOMP_TARGET_ARG_HSA_KERNEL_ATTRIBUTES (1 << 8)
|
||||
|
||||
#endif
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* An expandable hash tables datatype.
|
||||
Copyright (C) 1999, 2000, 2002, 2003, 2004, 2005, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1999-2015 Free Software Foundation, Inc.
|
||||
Contributed by Vladimir Makarov (vmakarov@cygnus.com).
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Utilities for reading leb128 values.
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
Copyright (C) 2012-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the libiberty library.
|
||||
Libiberty is free software; you can redistribute it and/or
|
||||
|
@ -80,7 +80,7 @@ extern void freeargv (char **);
|
||||
/* Duplicate an argument vector. Allocates memory using malloc. Use
|
||||
freeargv to free the vector. */
|
||||
|
||||
extern char **dupargv (char **) ATTRIBUTE_MALLOC;
|
||||
extern char **dupargv (char * const *) ATTRIBUTE_MALLOC;
|
||||
|
||||
/* Expand "@file" arguments in argv. */
|
||||
|
||||
@ -88,11 +88,11 @@ extern void expandargv (int *, char ***);
|
||||
|
||||
/* Write argv to an @-file, inserting necessary quoting. */
|
||||
|
||||
extern int writeargv (char **, FILE *);
|
||||
extern int writeargv (char * const *, FILE *);
|
||||
|
||||
/* Return the number of elements in argv. */
|
||||
|
||||
extern int countargv (char**);
|
||||
extern int countargv (char * const *);
|
||||
|
||||
/* Return the last component of a path name. Note that we can't use a
|
||||
prototype here because the parameter is declared inconsistently
|
||||
@ -621,7 +621,7 @@ extern int pexecute (const char *, char * const *, const char *,
|
||||
|
||||
extern int pwait (int, int *, int);
|
||||
|
||||
#if !HAVE_DECL_ASPRINTF
|
||||
#if defined(HAVE_DECL_ASPRINTF) && !HAVE_DECL_ASPRINTF
|
||||
/* Like sprintf but provides a pointer to malloc'd storage, which must
|
||||
be freed by the caller. */
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* longlong.h -- definitions for mixed size 32/64 bit arithmetic.
|
||||
Copyright (C) 1991-2014 Free Software Foundation, Inc.
|
||||
Copyright (C) 1991-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
@ -1086,7 +1086,7 @@ extern UDItype __umulsidi3 (USItype, USItype);
|
||||
} while (0)
|
||||
#endif
|
||||
|
||||
#if defined(__sh__) && !__SHMEDIA__ && W_TYPE_SIZE == 32
|
||||
#if defined(__sh__) && (!defined (__SHMEDIA__) || !__SHMEDIA__) && W_TYPE_SIZE == 32
|
||||
#ifndef __sh1__
|
||||
#define umul_ppmm(w1, w0, u, v) \
|
||||
__asm__ ( \
|
||||
@ -1102,6 +1102,33 @@ extern UDItype __umulsidi3 (USItype, USItype);
|
||||
/* This is the same algorithm as __udiv_qrnnd_c. */
|
||||
#define UDIV_NEEDS_NORMALIZATION 1
|
||||
|
||||
#ifdef __FDPIC__
|
||||
/* FDPIC needs a special version of the asm fragment to extract the
|
||||
code address from the function descriptor. __udiv_qrnnd_16 is
|
||||
assumed to be local and not to use the GOT, so loading r12 is
|
||||
not needed. */
|
||||
#define udiv_qrnnd(q, r, n1, n0, d) \
|
||||
do { \
|
||||
extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \
|
||||
__attribute__ ((visibility ("hidden"))); \
|
||||
/* r0: rn r1: qn */ /* r0: n1 r4: n0 r5: d r6: d1 */ /* r2: __m */ \
|
||||
__asm__ ( \
|
||||
"mov%M4 %4,r5\n" \
|
||||
" swap.w %3,r4\n" \
|
||||
" swap.w r5,r6\n" \
|
||||
" mov.l @%5,r2\n" \
|
||||
" jsr @r2\n" \
|
||||
" shll16 r6\n" \
|
||||
" swap.w r4,r4\n" \
|
||||
" mov.l @%5,r2\n" \
|
||||
" jsr @r2\n" \
|
||||
" swap.w r1,%0\n" \
|
||||
" or r1,%0" \
|
||||
: "=r" (q), "=&z" (r) \
|
||||
: "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \
|
||||
: "r1", "r2", "r4", "r5", "r6", "pr", "t"); \
|
||||
} while (0)
|
||||
#else
|
||||
#define udiv_qrnnd(q, r, n1, n0, d) \
|
||||
do { \
|
||||
extern UWtype __udiv_qrnnd_16 (UWtype, UWtype) \
|
||||
@ -1121,6 +1148,7 @@ extern UDItype __umulsidi3 (USItype, USItype);
|
||||
: "1" (n1), "r" (n0), "rm" (d), "r" (&__udiv_qrnnd_16) \
|
||||
: "r1", "r2", "r4", "r5", "r6", "pr", "t"); \
|
||||
} while (0)
|
||||
#endif /* __FDPIC__ */
|
||||
|
||||
#define UDIV_TIME 80
|
||||
|
||||
@ -1131,7 +1159,7 @@ extern UDItype __umulsidi3 (USItype, USItype);
|
||||
|
||||
#endif /* __sh__ */
|
||||
|
||||
#if defined (__SH5__) && __SHMEDIA__ && W_TYPE_SIZE == 32
|
||||
#if defined (__SH5__) && defined (__SHMEDIA__) && __SHMEDIA__ && W_TYPE_SIZE == 32
|
||||
#define __umulsidi3(u,v) ((UDItype)(USItype)u*(USItype)v)
|
||||
#define count_leading_zeros(count, x) \
|
||||
do \
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Data types used in the IL symbol table.
|
||||
Copyright (C) 2009 Free Software Foundation, Inc.
|
||||
Copyright (C) 2009-2015 Free Software Foundation, Inc.
|
||||
Contributed by Rafael Espindola <espindola@google.com>
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* md5.h - Declaration of functions and data types used for MD5 sum
|
||||
computing library functions.
|
||||
Copyright 1995, 1996, 2000 Free Software Foundation, Inc.
|
||||
Copyright (C) 1995-2015 Free Software Foundation, Inc.
|
||||
NOTE: The canonical source of this file is maintained with the GNU C
|
||||
Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu.
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* objalloc.h -- routines to allocate memory for objects
|
||||
Copyright 1997-2012 Free Software Foundation, Inc.
|
||||
Copyright (C) 1997-2015 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Cygnus Solutions.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,108 +1,102 @@
|
||||
/* obstack.h - object stack macros
|
||||
Copyright 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1996, 1997, 1998,
|
||||
1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1988-2015 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
NOTE: The canonical source of this file is maintained with the GNU C Library.
|
||||
Bugs can be reported to bug-glibc@gnu.org.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
Free Software Foundation; either version 2, or (at your option) any
|
||||
later version.
|
||||
|
||||
This program 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
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301,
|
||||
USA. */
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, see
|
||||
<http://www.gnu.org/licenses/>. */
|
||||
|
||||
/* Summary:
|
||||
|
||||
All the apparent functions defined here are macros. The idea
|
||||
is that you would use these pre-tested macros to solve a
|
||||
very specific set of problems, and they would run fast.
|
||||
Caution: no side-effects in arguments please!! They may be
|
||||
evaluated MANY times!!
|
||||
All the apparent functions defined here are macros. The idea
|
||||
is that you would use these pre-tested macros to solve a
|
||||
very specific set of problems, and they would run fast.
|
||||
Caution: no side-effects in arguments please!! They may be
|
||||
evaluated MANY times!!
|
||||
|
||||
These macros operate a stack of objects. Each object starts life
|
||||
small, and may grow to maturity. (Consider building a word syllable
|
||||
by syllable.) An object can move while it is growing. Once it has
|
||||
been "finished" it never changes address again. So the "top of the
|
||||
stack" is typically an immature growing object, while the rest of the
|
||||
stack is of mature, fixed size and fixed address objects.
|
||||
These macros operate a stack of objects. Each object starts life
|
||||
small, and may grow to maturity. (Consider building a word syllable
|
||||
by syllable.) An object can move while it is growing. Once it has
|
||||
been "finished" it never changes address again. So the "top of the
|
||||
stack" is typically an immature growing object, while the rest of the
|
||||
stack is of mature, fixed size and fixed address objects.
|
||||
|
||||
These routines grab large chunks of memory, using a function you
|
||||
supply, called `obstack_chunk_alloc'. On occasion, they free chunks,
|
||||
by calling `obstack_chunk_free'. You must define them and declare
|
||||
them before using any obstack macros.
|
||||
These routines grab large chunks of memory, using a function you
|
||||
supply, called 'obstack_chunk_alloc'. On occasion, they free chunks,
|
||||
by calling 'obstack_chunk_free'. You must define them and declare
|
||||
them before using any obstack macros.
|
||||
|
||||
Each independent stack is represented by a `struct obstack'.
|
||||
Each of the obstack macros expects a pointer to such a structure
|
||||
as the first argument.
|
||||
Each independent stack is represented by a 'struct obstack'.
|
||||
Each of the obstack macros expects a pointer to such a structure
|
||||
as the first argument.
|
||||
|
||||
One motivation for this package is the problem of growing char strings
|
||||
in symbol tables. Unless you are "fascist pig with a read-only mind"
|
||||
--Gosper's immortal quote from HAKMEM item 154, out of context--you
|
||||
would not like to put any arbitrary upper limit on the length of your
|
||||
symbols.
|
||||
One motivation for this package is the problem of growing char strings
|
||||
in symbol tables. Unless you are "fascist pig with a read-only mind"
|
||||
--Gosper's immortal quote from HAKMEM item 154, out of context--you
|
||||
would not like to put any arbitrary upper limit on the length of your
|
||||
symbols.
|
||||
|
||||
In practice this often means you will build many short symbols and a
|
||||
few long symbols. At the time you are reading a symbol you don't know
|
||||
how long it is. One traditional method is to read a symbol into a
|
||||
buffer, realloc()ating the buffer every time you try to read a symbol
|
||||
that is longer than the buffer. This is beaut, but you still will
|
||||
want to copy the symbol from the buffer to a more permanent
|
||||
symbol-table entry say about half the time.
|
||||
In practice this often means you will build many short symbols and a
|
||||
few long symbols. At the time you are reading a symbol you don't know
|
||||
how long it is. One traditional method is to read a symbol into a
|
||||
buffer, realloc()ating the buffer every time you try to read a symbol
|
||||
that is longer than the buffer. This is beaut, but you still will
|
||||
want to copy the symbol from the buffer to a more permanent
|
||||
symbol-table entry say about half the time.
|
||||
|
||||
With obstacks, you can work differently. Use one obstack for all symbol
|
||||
names. As you read a symbol, grow the name in the obstack gradually.
|
||||
When the name is complete, finalize it. Then, if the symbol exists already,
|
||||
free the newly read name.
|
||||
With obstacks, you can work differently. Use one obstack for all symbol
|
||||
names. As you read a symbol, grow the name in the obstack gradually.
|
||||
When the name is complete, finalize it. Then, if the symbol exists already,
|
||||
free the newly read name.
|
||||
|
||||
The way we do this is to take a large chunk, allocating memory from
|
||||
low addresses. When you want to build a symbol in the chunk you just
|
||||
add chars above the current "high water mark" in the chunk. When you
|
||||
have finished adding chars, because you got to the end of the symbol,
|
||||
you know how long the chars are, and you can create a new object.
|
||||
Mostly the chars will not burst over the highest address of the chunk,
|
||||
because you would typically expect a chunk to be (say) 100 times as
|
||||
long as an average object.
|
||||
The way we do this is to take a large chunk, allocating memory from
|
||||
low addresses. When you want to build a symbol in the chunk you just
|
||||
add chars above the current "high water mark" in the chunk. When you
|
||||
have finished adding chars, because you got to the end of the symbol,
|
||||
you know how long the chars are, and you can create a new object.
|
||||
Mostly the chars will not burst over the highest address of the chunk,
|
||||
because you would typically expect a chunk to be (say) 100 times as
|
||||
long as an average object.
|
||||
|
||||
In case that isn't clear, when we have enough chars to make up
|
||||
the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
|
||||
so we just point to it where it lies. No moving of chars is
|
||||
needed and this is the second win: potentially long strings need
|
||||
never be explicitly shuffled. Once an object is formed, it does not
|
||||
change its address during its lifetime.
|
||||
In case that isn't clear, when we have enough chars to make up
|
||||
the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed)
|
||||
so we just point to it where it lies. No moving of chars is
|
||||
needed and this is the second win: potentially long strings need
|
||||
never be explicitly shuffled. Once an object is formed, it does not
|
||||
change its address during its lifetime.
|
||||
|
||||
When the chars burst over a chunk boundary, we allocate a larger
|
||||
chunk, and then copy the partly formed object from the end of the old
|
||||
chunk to the beginning of the new larger chunk. We then carry on
|
||||
accreting characters to the end of the object as we normally would.
|
||||
When the chars burst over a chunk boundary, we allocate a larger
|
||||
chunk, and then copy the partly formed object from the end of the old
|
||||
chunk to the beginning of the new larger chunk. We then carry on
|
||||
accreting characters to the end of the object as we normally would.
|
||||
|
||||
A special macro is provided to add a single char at a time to a
|
||||
growing object. This allows the use of register variables, which
|
||||
break the ordinary 'growth' macro.
|
||||
A special macro is provided to add a single char at a time to a
|
||||
growing object. This allows the use of register variables, which
|
||||
break the ordinary 'growth' macro.
|
||||
|
||||
Summary:
|
||||
We allocate large chunks.
|
||||
We carve out one object at a time from the current chunk.
|
||||
Once carved, an object never moves.
|
||||
We are free to append data of any size to the currently
|
||||
growing object.
|
||||
Exactly one object is growing in an obstack at any one time.
|
||||
You can run one obstack per control block.
|
||||
You may have as many control blocks as you dare.
|
||||
Because of the way we do it, you can `unwind' an obstack
|
||||
back to a previous state. (You may remove objects much
|
||||
as you would with a stack.)
|
||||
*/
|
||||
Summary:
|
||||
We allocate large chunks.
|
||||
We carve out one object at a time from the current chunk.
|
||||
Once carved, an object never moves.
|
||||
We are free to append data of any size to the currently
|
||||
growing object.
|
||||
Exactly one object is growing in an obstack at any one time.
|
||||
You can run one obstack per control block.
|
||||
You may have as many control blocks as you dare.
|
||||
Because of the way we do it, you can "unwind" an obstack
|
||||
back to a previous state. (You may remove objects much
|
||||
as you would with a stack.)
|
||||
*/
|
||||
|
||||
|
||||
/* Don't do the contents of this file more than once. */
|
||||
@ -110,144 +104,128 @@ Summary:
|
||||
#ifndef _OBSTACK_H
|
||||
#define _OBSTACK_H 1
|
||||
|
||||
#ifndef _OBSTACK_INTERFACE_VERSION
|
||||
# define _OBSTACK_INTERFACE_VERSION 2
|
||||
#endif
|
||||
|
||||
#include <stddef.h> /* For size_t and ptrdiff_t. */
|
||||
#include <string.h> /* For __GNU_LIBRARY__, and memcpy. */
|
||||
|
||||
#if _OBSTACK_INTERFACE_VERSION == 1
|
||||
/* For binary compatibility with obstack version 1, which used "int"
|
||||
and "long" for these two types. */
|
||||
# define _OBSTACK_SIZE_T unsigned int
|
||||
# define _CHUNK_SIZE_T unsigned long
|
||||
# define _OBSTACK_CAST(type, expr) ((type) (expr))
|
||||
#else
|
||||
/* Version 2 with sane types, especially for 64-bit hosts. */
|
||||
# define _OBSTACK_SIZE_T size_t
|
||||
# define _CHUNK_SIZE_T size_t
|
||||
# define _OBSTACK_CAST(type, expr) (expr)
|
||||
#endif
|
||||
|
||||
/* If B is the base of an object addressed by P, return the result of
|
||||
aligning P to the next multiple of A + 1. B and P must be of type
|
||||
char *. A + 1 must be a power of 2. */
|
||||
|
||||
#define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A)))
|
||||
|
||||
/* Similar to __BPTR_ALIGN (B, P, A), except optimize the common case
|
||||
where pointers can be converted to integers, aligned as integers,
|
||||
and converted back again. If ptrdiff_t is narrower than a
|
||||
pointer (e.g., the AS/400), play it safe and compute the alignment
|
||||
relative to B. Otherwise, use the faster strategy of computing the
|
||||
alignment relative to 0. */
|
||||
|
||||
#define __PTR_ALIGN(B, P, A) \
|
||||
__BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0, \
|
||||
P, A)
|
||||
|
||||
#ifndef __attribute_pure__
|
||||
# if defined __GNUC_MINOR__ && __GNUC__ * 1000 + __GNUC_MINOR__ >= 2096
|
||||
# define __attribute_pure__ __attribute__ ((__pure__))
|
||||
# else
|
||||
# define __attribute_pure__
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/* We use subtraction of (char *) 0 instead of casting to int
|
||||
because on word-addressable machines a simple cast to int
|
||||
may ignore the byte-within-word field of the pointer. */
|
||||
|
||||
#ifndef __PTR_TO_INT
|
||||
# define __PTR_TO_INT(P) ((P) - (char *) 0)
|
||||
#endif
|
||||
|
||||
#ifndef __INT_TO_PTR
|
||||
# define __INT_TO_PTR(P) ((P) + (char *) 0)
|
||||
#endif
|
||||
|
||||
/* We need the type of the resulting object. If __PTRDIFF_TYPE__ is
|
||||
defined, as with GNU C, use that; that way we don't pollute the
|
||||
namespace with <stddef.h>'s symbols. Otherwise, if <stddef.h> is
|
||||
available, include it and use ptrdiff_t. In traditional C, long is
|
||||
the best that we can do. */
|
||||
|
||||
#ifdef __PTRDIFF_TYPE__
|
||||
# define PTR_INT_TYPE __PTRDIFF_TYPE__
|
||||
#else
|
||||
# ifdef HAVE_STDDEF_H
|
||||
# include <stddef.h>
|
||||
# define PTR_INT_TYPE ptrdiff_t
|
||||
# else
|
||||
# define PTR_INT_TYPE long
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#if defined _LIBC || defined HAVE_STRING_H
|
||||
# include <string.h>
|
||||
# define _obstack_memcpy(To, From, N) memcpy ((To), (From), (N))
|
||||
#else
|
||||
# ifdef memcpy
|
||||
# define _obstack_memcpy(To, From, N) memcpy ((To), (char *)(From), (N))
|
||||
# else
|
||||
# define _obstack_memcpy(To, From, N) bcopy ((char *)(From), (To), (N))
|
||||
# endif
|
||||
#endif
|
||||
|
||||
struct _obstack_chunk /* Lives at front of each chunk. */
|
||||
struct _obstack_chunk /* Lives at front of each chunk. */
|
||||
{
|
||||
char *limit; /* 1 past end of this chunk */
|
||||
struct _obstack_chunk *prev; /* address of prior chunk or NULL */
|
||||
char contents[4]; /* objects begin here */
|
||||
char *limit; /* 1 past end of this chunk */
|
||||
struct _obstack_chunk *prev; /* address of prior chunk or NULL */
|
||||
char contents[4]; /* objects begin here */
|
||||
};
|
||||
|
||||
struct obstack /* control current object in current chunk */
|
||||
struct obstack /* control current object in current chunk */
|
||||
{
|
||||
long chunk_size; /* preferred size to allocate chunks in */
|
||||
struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
|
||||
char *object_base; /* address of object we are building */
|
||||
char *next_free; /* where to add next char to current object */
|
||||
char *chunk_limit; /* address of char after current chunk */
|
||||
PTR_INT_TYPE temp; /* Temporary for some macros. */
|
||||
int alignment_mask; /* Mask of alignment for each object. */
|
||||
/* These prototypes vary based on `use_extra_arg', and we use
|
||||
casts to the prototypeless function type in all assignments,
|
||||
but having prototypes here quiets -Wstrict-prototypes. */
|
||||
struct _obstack_chunk *(*chunkfun) (void *, long);
|
||||
void (*freefun) (void *, struct _obstack_chunk *);
|
||||
void *extra_arg; /* first arg for chunk alloc/dealloc funcs */
|
||||
unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */
|
||||
unsigned maybe_empty_object:1;/* There is a possibility that the current
|
||||
chunk contains a zero-length object. This
|
||||
prevents freeing the chunk if we allocate
|
||||
a bigger chunk to replace it. */
|
||||
unsigned alloc_failed:1; /* No longer used, as we now call the failed
|
||||
handler on error, but retained for binary
|
||||
compatibility. */
|
||||
_CHUNK_SIZE_T chunk_size; /* preferred size to allocate chunks in */
|
||||
struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */
|
||||
char *object_base; /* address of object we are building */
|
||||
char *next_free; /* where to add next char to current object */
|
||||
char *chunk_limit; /* address of char after current chunk */
|
||||
union
|
||||
{
|
||||
_OBSTACK_SIZE_T i;
|
||||
void *p;
|
||||
} temp; /* Temporary for some macros. */
|
||||
_OBSTACK_SIZE_T alignment_mask; /* Mask of alignment for each object. */
|
||||
|
||||
/* These prototypes vary based on 'use_extra_arg'. */
|
||||
union
|
||||
{
|
||||
void *(*plain) (size_t);
|
||||
void *(*extra) (void *, size_t);
|
||||
} chunkfun;
|
||||
union
|
||||
{
|
||||
void (*plain) (void *);
|
||||
void (*extra) (void *, void *);
|
||||
} freefun;
|
||||
|
||||
void *extra_arg; /* first arg for chunk alloc/dealloc funcs */
|
||||
unsigned use_extra_arg : 1; /* chunk alloc/dealloc funcs take extra arg */
|
||||
unsigned maybe_empty_object : 1; /* There is a possibility that the current
|
||||
chunk contains a zero-length object. This
|
||||
prevents freeing the chunk if we allocate
|
||||
a bigger chunk to replace it. */
|
||||
unsigned alloc_failed : 1; /* No longer used, as we now call the failed
|
||||
handler on error, but retained for binary
|
||||
compatibility. */
|
||||
};
|
||||
|
||||
/* Declare the external functions we use; they are in obstack.c. */
|
||||
|
||||
extern void _obstack_newchunk (struct obstack *, int);
|
||||
extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T);
|
||||
extern void _obstack_free (struct obstack *, void *);
|
||||
extern int _obstack_begin (struct obstack *, int, int,
|
||||
void *(*) (long), void (*) (void *));
|
||||
extern int _obstack_begin_1 (struct obstack *, int, int,
|
||||
void *(*) (void *, long),
|
||||
void (*) (void *, void *), void *);
|
||||
extern int _obstack_memory_used (struct obstack *);
|
||||
|
||||
/* Do the function-declarations after the structs
|
||||
but before defining the macros. */
|
||||
extern int _obstack_begin (struct obstack *,
|
||||
_OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
|
||||
void *(*) (size_t), void (*) (void *));
|
||||
extern int _obstack_begin_1 (struct obstack *,
|
||||
_OBSTACK_SIZE_T, _OBSTACK_SIZE_T,
|
||||
void *(*) (void *, size_t),
|
||||
void (*) (void *, void *), void *);
|
||||
extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *)
|
||||
__attribute_pure__;
|
||||
|
||||
void obstack_init (struct obstack *obstack);
|
||||
|
||||
void * obstack_alloc (struct obstack *obstack, int size);
|
||||
|
||||
void * obstack_copy (struct obstack *obstack, void *address, int size);
|
||||
void * obstack_copy0 (struct obstack *obstack, void *address, int size);
|
||||
|
||||
void obstack_free (struct obstack *obstack, void *block);
|
||||
|
||||
void obstack_blank (struct obstack *obstack, int size);
|
||||
|
||||
void obstack_grow (struct obstack *obstack, void *data, int size);
|
||||
void obstack_grow0 (struct obstack *obstack, void *data, int size);
|
||||
|
||||
void obstack_1grow (struct obstack *obstack, int data_char);
|
||||
void obstack_ptr_grow (struct obstack *obstack, void *data);
|
||||
void obstack_int_grow (struct obstack *obstack, int data);
|
||||
|
||||
void * obstack_finish (struct obstack *obstack);
|
||||
|
||||
int obstack_object_size (struct obstack *obstack);
|
||||
|
||||
int obstack_room (struct obstack *obstack);
|
||||
void obstack_make_room (struct obstack *obstack, int size);
|
||||
void obstack_1grow_fast (struct obstack *obstack, int data_char);
|
||||
void obstack_ptr_grow_fast (struct obstack *obstack, void *data);
|
||||
void obstack_int_grow_fast (struct obstack *obstack, int data);
|
||||
void obstack_blank_fast (struct obstack *obstack, int size);
|
||||
|
||||
void * obstack_base (struct obstack *obstack);
|
||||
void * obstack_next_free (struct obstack *obstack);
|
||||
int obstack_alignment_mask (struct obstack *obstack);
|
||||
int obstack_chunk_size (struct obstack *obstack);
|
||||
int obstack_memory_used (struct obstack *obstack);
|
||||
|
||||
/* Error handler called when `obstack_chunk_alloc' failed to allocate
|
||||
more memory. This can be set to a user defined function. The
|
||||
default action is to print a message and abort. */
|
||||
/* Error handler called when 'obstack_chunk_alloc' failed to allocate
|
||||
more memory. This can be set to a user defined function which
|
||||
should either abort gracefully or use longjump - but shouldn't
|
||||
return. The default action is to print a message and abort. */
|
||||
extern void (*obstack_alloc_failed_handler) (void);
|
||||
|
||||
/* Exit value used when `print_and_abort' is used. */
|
||||
/* Exit value used when 'print_and_abort' is used. */
|
||||
extern int obstack_exit_failure;
|
||||
|
||||
|
||||
/* Pointer to beginning of object being allocated or to be allocated next.
|
||||
Note that this might not be the final address of the object
|
||||
because a new chunk might be needed to hold the final size. */
|
||||
|
||||
#define obstack_base(h) ((h)->object_base)
|
||||
#define obstack_base(h) ((void *) (h)->object_base)
|
||||
|
||||
/* Size for allocating ordinary chunks. */
|
||||
|
||||
@ -255,203 +233,210 @@ extern int obstack_exit_failure;
|
||||
|
||||
/* Pointer to next byte not yet allocated in current chunk. */
|
||||
|
||||
#define obstack_next_free(h) ((h)->next_free)
|
||||
#define obstack_next_free(h) ((void *) (h)->next_free)
|
||||
|
||||
/* Mask specifying low bits that should be clear in address of an object. */
|
||||
|
||||
#define obstack_alignment_mask(h) ((h)->alignment_mask)
|
||||
|
||||
/* To prevent prototype warnings provide complete argument list in
|
||||
standard C version. */
|
||||
# define obstack_init(h) \
|
||||
_obstack_begin ((h), 0, 0, \
|
||||
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
|
||||
/* To prevent prototype warnings provide complete argument list. */
|
||||
#define obstack_init(h) \
|
||||
_obstack_begin ((h), 0, 0, \
|
||||
_OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \
|
||||
_OBSTACK_CAST (void (*) (void *), obstack_chunk_free))
|
||||
|
||||
# define obstack_begin(h, size) \
|
||||
_obstack_begin ((h), (size), 0, \
|
||||
(void *(*) (long)) obstack_chunk_alloc, (void (*) (void *)) obstack_chunk_free)
|
||||
#define obstack_begin(h, size) \
|
||||
_obstack_begin ((h), (size), 0, \
|
||||
_OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \
|
||||
_OBSTACK_CAST (void (*) (void *), obstack_chunk_free))
|
||||
|
||||
# define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
_obstack_begin ((h), (size), (alignment), \
|
||||
(void *(*) (long)) (chunkfun), (void (*) (void *)) (freefun))
|
||||
#define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
|
||||
_obstack_begin ((h), (size), (alignment), \
|
||||
_OBSTACK_CAST (void *(*) (size_t), chunkfun), \
|
||||
_OBSTACK_CAST (void (*) (void *), freefun))
|
||||
|
||||
# define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
_obstack_begin_1 ((h), (size), (alignment), \
|
||||
(void *(*) (void *, long)) (chunkfun), \
|
||||
(void (*) (void *, void *)) (freefun), (arg))
|
||||
#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
|
||||
_obstack_begin_1 ((h), (size), (alignment), \
|
||||
_OBSTACK_CAST (void *(*) (void *, size_t), chunkfun), \
|
||||
_OBSTACK_CAST (void (*) (void *, void *), freefun), arg)
|
||||
|
||||
# define obstack_chunkfun(h, newchunkfun) \
|
||||
((h) -> chunkfun = (struct _obstack_chunk *(*)(void *, long)) (newchunkfun))
|
||||
#define obstack_chunkfun(h, newchunkfun) \
|
||||
((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun)))
|
||||
|
||||
# define obstack_freefun(h, newfreefun) \
|
||||
((h) -> freefun = (void (*)(void *, struct _obstack_chunk *)) (newfreefun))
|
||||
#define obstack_freefun(h, newfreefun) \
|
||||
((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun)))
|
||||
|
||||
#define obstack_1grow_fast(h,achar) (*((h)->next_free)++ = (achar))
|
||||
#define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar)))
|
||||
|
||||
#define obstack_blank_fast(h,n) ((h)->next_free += (n))
|
||||
#define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n)))
|
||||
|
||||
#define obstack_memory_used(h) _obstack_memory_used (h)
|
||||
|
||||
#if defined __GNUC__ && defined __STDC__ && __STDC__
|
||||
/* NextStep 2.0 cc is really gcc 1.93 but it defines __GNUC__ = 2 and
|
||||
does not implement __extension__. But that compiler doesn't define
|
||||
__GNUC_MINOR__. */
|
||||
# if __GNUC__ < 2 || (__NeXT__ && !__GNUC_MINOR__)
|
||||
|
||||
#if defined __GNUC__
|
||||
# if !defined __GNUC_MINOR__ || __GNUC__ * 1000 + __GNUC_MINOR__ < 2008
|
||||
# define __extension__
|
||||
# endif
|
||||
|
||||
/* For GNU C, if not -traditional,
|
||||
we can define these macros to compute all args only once
|
||||
without using a global variable.
|
||||
Also, we can avoid using the `temp' slot, to make faster code. */
|
||||
Also, we can avoid using the 'temp' slot, to make faster code. */
|
||||
|
||||
# define obstack_object_size(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(unsigned) (__o->next_free - __o->object_base); })
|
||||
# define obstack_object_size(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack const *__o = (OBSTACK); \
|
||||
(_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); })
|
||||
|
||||
# define obstack_room(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(unsigned) (__o->chunk_limit - __o->next_free); })
|
||||
/* The local variable is named __o1 to avoid a shadowed variable
|
||||
warning when invoked from other obstack macros. */
|
||||
# define obstack_room(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack const *__o1 = (OBSTACK); \
|
||||
(_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->next_free); })
|
||||
|
||||
# define obstack_make_room(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
if (__o->chunk_limit - __o->next_free < __len) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
(void) 0; })
|
||||
# define obstack_make_room(OBSTACK, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
_OBSTACK_SIZE_T __len = (length); \
|
||||
if (obstack_room (__o) < __len) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
(void) 0; })
|
||||
|
||||
# define obstack_empty_p(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
(__o->chunk->prev == 0 && __o->next_free - __o->chunk->contents == 0); })
|
||||
# define obstack_empty_p(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack const *__o = (OBSTACK); \
|
||||
(__o->chunk->prev == 0 \
|
||||
&& __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \
|
||||
__o->chunk->contents, \
|
||||
__o->alignment_mask)); })
|
||||
|
||||
# define obstack_grow(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
if (__o->next_free + __len > __o->chunk_limit) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
_obstack_memcpy (__o->next_free, (where), __len); \
|
||||
__o->next_free += __len; \
|
||||
(void) 0; })
|
||||
# define obstack_grow(OBSTACK, where, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
_OBSTACK_SIZE_T __len = (length); \
|
||||
if (obstack_room (__o) < __len) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
memcpy (__o->next_free, where, __len); \
|
||||
__o->next_free += __len; \
|
||||
(void) 0; })
|
||||
|
||||
# define obstack_grow0(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
if (__o->next_free + __len + 1 > __o->chunk_limit) \
|
||||
_obstack_newchunk (__o, __len + 1); \
|
||||
_obstack_memcpy (__o->next_free, (where), __len); \
|
||||
__o->next_free += __len; \
|
||||
*(__o->next_free)++ = 0; \
|
||||
(void) 0; })
|
||||
# define obstack_grow0(OBSTACK, where, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
_OBSTACK_SIZE_T __len = (length); \
|
||||
if (obstack_room (__o) < __len + 1) \
|
||||
_obstack_newchunk (__o, __len + 1); \
|
||||
memcpy (__o->next_free, where, __len); \
|
||||
__o->next_free += __len; \
|
||||
*(__o->next_free)++ = 0; \
|
||||
(void) 0; })
|
||||
|
||||
# define obstack_1grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + 1 > __o->chunk_limit) \
|
||||
_obstack_newchunk (__o, 1); \
|
||||
obstack_1grow_fast (__o, datum); \
|
||||
(void) 0; })
|
||||
# define obstack_1grow(OBSTACK, datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (obstack_room (__o) < 1) \
|
||||
_obstack_newchunk (__o, 1); \
|
||||
obstack_1grow_fast (__o, datum); })
|
||||
|
||||
/* These assume that the obstack alignment is good enough for pointers or ints,
|
||||
and that the data added so far to the current object
|
||||
/* These assume that the obstack alignment is good enough for pointers
|
||||
or ints, and that the data added so far to the current object
|
||||
shares that much alignment. */
|
||||
|
||||
# define obstack_ptr_grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
|
||||
_obstack_newchunk (__o, sizeof (void *)); \
|
||||
obstack_ptr_grow_fast (__o, datum); })
|
||||
# define obstack_ptr_grow(OBSTACK, datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (obstack_room (__o) < sizeof (void *)) \
|
||||
_obstack_newchunk (__o, sizeof (void *)); \
|
||||
obstack_ptr_grow_fast (__o, datum); })
|
||||
|
||||
# define obstack_int_grow(OBSTACK,datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (__o->next_free + sizeof (int) > __o->chunk_limit) \
|
||||
_obstack_newchunk (__o, sizeof (int)); \
|
||||
obstack_int_grow_fast (__o, datum); })
|
||||
# define obstack_int_grow(OBSTACK, datum) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
if (obstack_room (__o) < sizeof (int)) \
|
||||
_obstack_newchunk (__o, sizeof (int)); \
|
||||
obstack_int_grow_fast (__o, datum); })
|
||||
|
||||
# define obstack_ptr_grow_fast(OBSTACK,aptr) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
*(const void **) __o1->next_free = (aptr); \
|
||||
__o1->next_free += sizeof (const void *); \
|
||||
(void) 0; })
|
||||
# define obstack_ptr_grow_fast(OBSTACK, aptr) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
void *__p1 = __o1->next_free; \
|
||||
*(const void **) __p1 = (aptr); \
|
||||
__o1->next_free += sizeof (const void *); \
|
||||
(void) 0; })
|
||||
|
||||
# define obstack_int_grow_fast(OBSTACK,aint) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
*(int *) __o1->next_free = (aint); \
|
||||
__o1->next_free += sizeof (int); \
|
||||
(void) 0; })
|
||||
# define obstack_int_grow_fast(OBSTACK, aint) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
void *__p1 = __o1->next_free; \
|
||||
*(int *) __p1 = (aint); \
|
||||
__o1->next_free += sizeof (int); \
|
||||
(void) 0; })
|
||||
|
||||
# define obstack_blank(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
int __len = (length); \
|
||||
if (__o->chunk_limit - __o->next_free < __len) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
obstack_blank_fast (__o, __len); \
|
||||
(void) 0; })
|
||||
# define obstack_blank(OBSTACK, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
_OBSTACK_SIZE_T __len = (length); \
|
||||
if (obstack_room (__o) < __len) \
|
||||
_obstack_newchunk (__o, __len); \
|
||||
obstack_blank_fast (__o, __len); })
|
||||
|
||||
# define obstack_alloc(OBSTACK,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_blank (__h, (length)); \
|
||||
obstack_finish (__h); })
|
||||
# define obstack_alloc(OBSTACK, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_blank (__h, (length)); \
|
||||
obstack_finish (__h); })
|
||||
|
||||
# define obstack_copy(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow (__h, (where), (length)); \
|
||||
obstack_finish (__h); })
|
||||
# define obstack_copy(OBSTACK, where, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow (__h, (where), (length)); \
|
||||
obstack_finish (__h); })
|
||||
|
||||
# define obstack_copy0(OBSTACK,where,length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow0 (__h, (where), (length)); \
|
||||
obstack_finish (__h); })
|
||||
# define obstack_copy0(OBSTACK, where, length) \
|
||||
__extension__ \
|
||||
({ struct obstack *__h = (OBSTACK); \
|
||||
obstack_grow0 (__h, (where), (length)); \
|
||||
obstack_finish (__h); })
|
||||
|
||||
/* The local variable is named __o1 to avoid a name conflict
|
||||
when obstack_blank is called. */
|
||||
# define obstack_finish(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
void *value; \
|
||||
value = (void *) __o1->object_base; \
|
||||
if (__o1->next_free == value) \
|
||||
__o1->maybe_empty_object = 1; \
|
||||
__o1->next_free \
|
||||
= __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
|
||||
& ~ (__o1->alignment_mask)); \
|
||||
if (__o1->next_free - (char *)__o1->chunk \
|
||||
> __o1->chunk_limit - (char *)__o1->chunk) \
|
||||
__o1->next_free = __o1->chunk_limit; \
|
||||
__o1->object_base = __o1->next_free; \
|
||||
value; })
|
||||
/* The local variable is named __o1 to avoid a shadowed variable
|
||||
warning when invoked from other obstack macros, typically obstack_free. */
|
||||
# define obstack_finish(OBSTACK) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o1 = (OBSTACK); \
|
||||
void *__value = (void *) __o1->object_base; \
|
||||
if (__o1->next_free == __value) \
|
||||
__o1->maybe_empty_object = 1; \
|
||||
__o1->next_free \
|
||||
= __PTR_ALIGN (__o1->object_base, __o1->next_free, \
|
||||
__o1->alignment_mask); \
|
||||
if ((size_t) (__o1->next_free - (char *) __o1->chunk) \
|
||||
> (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) \
|
||||
__o1->next_free = __o1->chunk_limit; \
|
||||
__o1->object_base = __o1->next_free; \
|
||||
__value; })
|
||||
|
||||
# define obstack_free(OBSTACK, OBJ) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
void *__obj = (void *) (OBJ); \
|
||||
if (__obj > (void *)__o->chunk && __obj < (void *)__o->chunk_limit) \
|
||||
__o->next_free = __o->object_base = (char *) __obj; \
|
||||
else (obstack_free) (__o, __obj); })
|
||||
|
||||
#else /* not __GNUC__ or not __STDC__ */
|
||||
# define obstack_free(OBSTACK, OBJ) \
|
||||
__extension__ \
|
||||
({ struct obstack *__o = (OBSTACK); \
|
||||
void *__obj = (void *) (OBJ); \
|
||||
if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \
|
||||
__o->next_free = __o->object_base = (char *) __obj; \
|
||||
else \
|
||||
_obstack_free (__o, __obj); })
|
||||
|
||||
# define obstack_object_size(h) \
|
||||
(unsigned) ((h)->next_free - (h)->object_base)
|
||||
#else /* not __GNUC__ */
|
||||
|
||||
# define obstack_room(h) \
|
||||
(unsigned) ((h)->chunk_limit - (h)->next_free)
|
||||
# define obstack_object_size(h) \
|
||||
((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base))
|
||||
|
||||
# define obstack_empty_p(h) \
|
||||
((h)->chunk->prev == 0 && (h)->next_free - (h)->chunk->contents == 0)
|
||||
# define obstack_room(h) \
|
||||
((_OBSTACK_SIZE_T) ((h)->chunk_limit - (h)->next_free))
|
||||
|
||||
# define obstack_empty_p(h) \
|
||||
((h)->chunk->prev == 0 \
|
||||
&& (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \
|
||||
(h)->chunk->contents, \
|
||||
(h)->alignment_mask))
|
||||
|
||||
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
|
||||
so that we can avoid having void expressions
|
||||
@ -459,87 +444,92 @@ __extension__ \
|
||||
Casting the third operand to void was tried before,
|
||||
but some compilers won't accept it. */
|
||||
|
||||
# define obstack_make_room(h,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0))
|
||||
# define obstack_make_room(h, length) \
|
||||
((h)->temp.i = (length), \
|
||||
((obstack_room (h) < (h)->temp.i) \
|
||||
? (_obstack_newchunk (h, (h)->temp.i), 0) : 0), \
|
||||
(void) 0)
|
||||
|
||||
# define obstack_grow(h,where,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
|
||||
_obstack_memcpy ((h)->next_free, (where), (h)->temp), \
|
||||
(h)->next_free += (h)->temp)
|
||||
# define obstack_grow(h, where, length) \
|
||||
((h)->temp.i = (length), \
|
||||
((obstack_room (h) < (h)->temp.i) \
|
||||
? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \
|
||||
memcpy ((h)->next_free, where, (h)->temp.i), \
|
||||
(h)->next_free += (h)->temp.i, \
|
||||
(void) 0)
|
||||
|
||||
# define obstack_grow0(h,where,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
|
||||
_obstack_memcpy ((h)->next_free, (where), (h)->temp), \
|
||||
(h)->next_free += (h)->temp, \
|
||||
*((h)->next_free)++ = 0)
|
||||
# define obstack_grow0(h, where, length) \
|
||||
((h)->temp.i = (length), \
|
||||
((obstack_room (h) < (h)->temp.i + 1) \
|
||||
? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0), \
|
||||
memcpy ((h)->next_free, where, (h)->temp.i), \
|
||||
(h)->next_free += (h)->temp.i, \
|
||||
*((h)->next_free)++ = 0, \
|
||||
(void) 0)
|
||||
|
||||
# define obstack_1grow(h,datum) \
|
||||
( (((h)->next_free + 1 > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), 1), 0) : 0), \
|
||||
obstack_1grow_fast (h, datum))
|
||||
# define obstack_1grow(h, datum) \
|
||||
(((obstack_room (h) < 1) \
|
||||
? (_obstack_newchunk ((h), 1), 0) : 0), \
|
||||
obstack_1grow_fast (h, datum))
|
||||
|
||||
# define obstack_ptr_grow(h,datum) \
|
||||
( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
|
||||
obstack_ptr_grow_fast (h, datum))
|
||||
# define obstack_ptr_grow(h, datum) \
|
||||
(((obstack_room (h) < sizeof (char *)) \
|
||||
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
|
||||
obstack_ptr_grow_fast (h, datum))
|
||||
|
||||
# define obstack_int_grow(h,datum) \
|
||||
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
|
||||
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
|
||||
obstack_int_grow_fast (h, datum))
|
||||
# define obstack_int_grow(h, datum) \
|
||||
(((obstack_room (h) < sizeof (int)) \
|
||||
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
|
||||
obstack_int_grow_fast (h, datum))
|
||||
|
||||
# define obstack_ptr_grow_fast(h,aptr) \
|
||||
(((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr))
|
||||
# define obstack_ptr_grow_fast(h, aptr) \
|
||||
(((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr), \
|
||||
(void) 0)
|
||||
|
||||
# define obstack_int_grow_fast(h,aint) \
|
||||
(((int *) ((h)->next_free += sizeof (int)))[-1] = (aptr))
|
||||
# define obstack_int_grow_fast(h, aint) \
|
||||
(((int *) ((h)->next_free += sizeof (int)))[-1] = (aint), \
|
||||
(void) 0)
|
||||
|
||||
# define obstack_blank(h,length) \
|
||||
( (h)->temp = (length), \
|
||||
(((h)->chunk_limit - (h)->next_free < (h)->temp) \
|
||||
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
|
||||
obstack_blank_fast (h, (h)->temp))
|
||||
# define obstack_blank(h, length) \
|
||||
((h)->temp.i = (length), \
|
||||
((obstack_room (h) < (h)->temp.i) \
|
||||
? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \
|
||||
obstack_blank_fast (h, (h)->temp.i))
|
||||
|
||||
# define obstack_alloc(h,length) \
|
||||
(obstack_blank ((h), (length)), obstack_finish ((h)))
|
||||
# define obstack_alloc(h, length) \
|
||||
(obstack_blank ((h), (length)), obstack_finish ((h)))
|
||||
|
||||
# define obstack_copy(h,where,length) \
|
||||
(obstack_grow ((h), (where), (length)), obstack_finish ((h)))
|
||||
# define obstack_copy(h, where, length) \
|
||||
(obstack_grow ((h), (where), (length)), obstack_finish ((h)))
|
||||
|
||||
# define obstack_copy0(h,where,length) \
|
||||
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
|
||||
# define obstack_copy0(h, where, length) \
|
||||
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
|
||||
|
||||
# define obstack_finish(h) \
|
||||
( ((h)->next_free == (h)->object_base \
|
||||
? (((h)->maybe_empty_object = 1), 0) \
|
||||
: 0), \
|
||||
(h)->temp = __PTR_TO_INT ((h)->object_base), \
|
||||
(h)->next_free \
|
||||
= __INT_TO_PTR ((__PTR_TO_INT ((h)->next_free)+(h)->alignment_mask) \
|
||||
& ~ ((h)->alignment_mask)), \
|
||||
(((h)->next_free - (char *) (h)->chunk \
|
||||
> (h)->chunk_limit - (char *) (h)->chunk) \
|
||||
? ((h)->next_free = (h)->chunk_limit) : 0), \
|
||||
(h)->object_base = (h)->next_free, \
|
||||
(void *) __INT_TO_PTR ((h)->temp))
|
||||
# define obstack_finish(h) \
|
||||
(((h)->next_free == (h)->object_base \
|
||||
? (((h)->maybe_empty_object = 1), 0) \
|
||||
: 0), \
|
||||
(h)->temp.p = (h)->object_base, \
|
||||
(h)->next_free \
|
||||
= __PTR_ALIGN ((h)->object_base, (h)->next_free, \
|
||||
(h)->alignment_mask), \
|
||||
(((size_t) ((h)->next_free - (char *) (h)->chunk) \
|
||||
> (size_t) ((h)->chunk_limit - (char *) (h)->chunk)) \
|
||||
? ((h)->next_free = (h)->chunk_limit) : 0), \
|
||||
(h)->object_base = (h)->next_free, \
|
||||
(h)->temp.p)
|
||||
|
||||
# define obstack_free(h,obj) \
|
||||
( (h)->temp = (char *) (obj) - (char *) (h)->chunk, \
|
||||
(((h)->temp > 0 && (h)->temp < (h)->chunk_limit - (char *) (h)->chunk)\
|
||||
? (((h)->next_free = (h)->object_base \
|
||||
= (h)->temp + (char *) (h)->chunk), 0) \
|
||||
: ((obstack_free) ((h), (h)->temp + (char *) (h)->chunk), 0)))
|
||||
# define obstack_free(h, obj) \
|
||||
((h)->temp.p = (void *) (obj), \
|
||||
(((h)->temp.p > (void *) (h)->chunk \
|
||||
&& (h)->temp.p < (void *) (h)->chunk_limit) \
|
||||
? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p) \
|
||||
: _obstack_free ((h), (h)->temp.p)))
|
||||
|
||||
#endif /* not __GNUC__ or not __STDC__ */
|
||||
#endif /* not __GNUC__ */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* C++ */
|
||||
} /* C++ */
|
||||
#endif
|
||||
|
||||
#endif /* obstack.h */
|
||||
#endif /* _OBSTACK_H */
|
||||
|
@ -45,12 +45,12 @@ extern "C" {
|
||||
|
||||
struct partition_elem
|
||||
{
|
||||
/* The canonical element that represents the class containing this
|
||||
element. */
|
||||
int class_element;
|
||||
/* The next element in this class. Elements in each class form a
|
||||
circular list. */
|
||||
struct partition_elem* next;
|
||||
/* The canonical element that represents the class containing this
|
||||
element. */
|
||||
int class_element;
|
||||
/* The number of elements in this class. Valid only if this is the
|
||||
canonical element for its class. */
|
||||
unsigned class_count;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* plugin-api.h -- External linker plugin API. */
|
||||
|
||||
/* Copyright 2009, 2010 Free Software Foundation, Inc.
|
||||
/* Copyright (C) 2009-2016 Free Software Foundation, Inc.
|
||||
Written by Cary Coutant <ccoutant@google.com>.
|
||||
|
||||
This file is part of binutils.
|
||||
@ -345,6 +345,26 @@ enum ld_plugin_status
|
||||
const struct ld_plugin_section * section_list,
|
||||
unsigned int num_sections);
|
||||
|
||||
/* The linker's interface for retrieving the section alignment requirement
|
||||
of a specific section in an object. This interface should only be invoked in the
|
||||
claim_file handler. This function sets *ADDRALIGN to the ELF sh_addralign
|
||||
value of the input section. */
|
||||
|
||||
typedef
|
||||
enum ld_plugin_status
|
||||
(*ld_plugin_get_input_section_alignment) (const struct ld_plugin_section section,
|
||||
unsigned int *addralign);
|
||||
|
||||
/* The linker's interface for retrieving the section size of a specific section
|
||||
in an object. This interface should only be invoked in the claim_file handler.
|
||||
This function sets *SECSIZE to the ELF sh_size
|
||||
value of the input section. */
|
||||
|
||||
typedef
|
||||
enum ld_plugin_status
|
||||
(*ld_plugin_get_input_section_size) (const struct ld_plugin_section section,
|
||||
uint64_t *secsize);
|
||||
|
||||
enum ld_plugin_level
|
||||
{
|
||||
LDPL_INFO,
|
||||
@ -384,7 +404,10 @@ enum ld_plugin_tag
|
||||
LDPT_ALLOW_SECTION_ORDERING = 24,
|
||||
LDPT_GET_SYMBOLS_V2 = 25,
|
||||
LDPT_ALLOW_UNIQUE_SEGMENT_FOR_SECTIONS = 26,
|
||||
LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27
|
||||
LDPT_UNIQUE_SEGMENT_FOR_SECTIONS = 27,
|
||||
LDPT_GET_SYMBOLS_V3 = 28,
|
||||
LDPT_GET_INPUT_SECTION_ALIGNMENT = 29,
|
||||
LDPT_GET_INPUT_SECTION_SIZE = 30
|
||||
};
|
||||
|
||||
/* The plugin transfer vector. */
|
||||
@ -416,6 +439,8 @@ struct ld_plugin_tv
|
||||
ld_plugin_allow_section_ordering tv_allow_section_ordering;
|
||||
ld_plugin_allow_unique_segment_for_sections tv_allow_unique_segment_for_sections;
|
||||
ld_plugin_unique_segment_for_sections tv_unique_segment_for_sections;
|
||||
ld_plugin_get_input_section_alignment tv_get_input_section_alignment;
|
||||
ld_plugin_get_input_section_size tv_get_input_section_size;
|
||||
} tv_u;
|
||||
};
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* <ctype.h> replacement macros.
|
||||
|
||||
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000-2015 Free Software Foundation, Inc.
|
||||
Contributed by Zack Weinberg <zackw@stanford.edu>.
|
||||
|
||||
This file is part of the libiberty library.
|
||||
|
@ -1,7 +1,6 @@
|
||||
/* Declarations of functions and data types used for SHA1 sum
|
||||
library functions.
|
||||
Copyright (C) 2000, 2001, 2003, 2005, 2006, 2008, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 2000-2015 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by the
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* simple-object.h -- simple routines to read and write object files
|
||||
Copyright 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 2010-2015 Free Software Foundation, Inc.
|
||||
Written by Ian Lance Taylor, Google.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify it
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Sorting algorithms.
|
||||
Copyright (C) 2000, 2002 Free Software Foundation, Inc.
|
||||
Copyright (C) 2000-2015 Free Software Foundation, Inc.
|
||||
Contributed by Mark Mitchell <mark@codesourcery.com>.
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* A splay-tree datatype.
|
||||
Copyright 1998, 1999, 2000, 2002, 2005, 2007, 2009, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 1998-2015 Free Software Foundation, Inc.
|
||||
Contributed by Mark Mitchell (mark@markmitchell.com).
|
||||
|
||||
This file is part of GCC.
|
||||
|
@ -1,6 +1,6 @@
|
||||
/* Symbol concatenation utilities.
|
||||
|
||||
Copyright (C) 1998, 2000, 2010 Free Software Foundation, Inc.
|
||||
Copyright (C) 1998-2015 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -1,5 +1,5 @@
|
||||
/* Basic struct timeval utilities.
|
||||
Copyright (C) 2011 Free Software Foundation, Inc.
|
||||
Copyright (C) 2011-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the libiberty library.
|
||||
Libiberty is free software; you can redistribute it and/or
|
||||
|
@ -1,5 +1,4 @@
|
||||
/* Copyright (C) 2013
|
||||
Free Software Foundation
|
||||
/* Copyright (C) 2013-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of GCC.
|
||||
|
||||
@ -47,8 +46,12 @@ extern void __VLTChangePermission (int);
|
||||
/* TODO - Replace '4096' below with correct big page size. */
|
||||
#define VTV_PAGE_SIZE 4096
|
||||
#else
|
||||
#if defined(__sun__) && defined(__svr4__) && defined(__sparc__)
|
||||
#define VTV_PAGE_SIZE 8192
|
||||
#else
|
||||
#define VTV_PAGE_SIZE 4096
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
@ -1,8 +1,7 @@
|
||||
/* Definitions for data structures and routines for the regular
|
||||
expression library, version 0.12.
|
||||
|
||||
Copyright (C) 1985, 1989, 1990, 1991, 1992, 1993, 1995, 1996, 1997,
|
||||
1998, 2000, 2005 Free Software Foundation, Inc.
|
||||
Copyright (C) 1985-2015 Free Software Foundation, Inc.
|
||||
|
||||
This file is part of the GNU C Library. Its master source is NOT part of
|
||||
the C library, however. The master source lives in /gd/gnu/lib.
|
||||
|
@ -1,6 +1,5 @@
|
||||
/* Xtensa configuration settings.
|
||||
Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2010
|
||||
Free Software Foundation, Inc.
|
||||
Copyright (C) 2001-2015 Free Software Foundation, Inc.
|
||||
Contributed by Bob Wilson (bob.wilson@acm.org) at Tensilica.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
|
Reference in New Issue
Block a user