2015-07-07 Andrew MacLeod <amacleod@redhat.com> * tree-core.h: Include symtab.h. * rtl.h: Include hard-reg-set.h but not flags.h. (HARD_CONST): Remove condition compilation involving HARD_CONST since hard-reg-set.h is always included. * regs.h: Don't include hard-reg-set.h or rtl.h. * cfg.h: Include dominance.h. * gimple.h: Include tree-ssa-alias.h and gimple-expr.h. * backend.h: New. Aggregate commonly used backend header files. * gimple-ssa.h: Don't include tree-hasher.h. * ssa.h: New. Aggregate commonly used SSA header files. * regset.h: Remove bitmap.h and hard-reg-set.h #includes. * sel-sched-ir.h: Flatten includes. * lra-int.h: Flatten completely. * sel-sched-dump.h: Flatten includes. * ira-int.h: Flatten includes. * gimple-streamer.h: Remove all includes. * cfgloop.h: Remove all #includes except cfgloopmanip.h. * resource.h: Flatten hard-reg-set.h and df.h. * sched-int.h: Flatten insn-arrt.h and df.h. * valtrack.h: flatten bitmap.h, df.h, and rtl.h * df.h: Flatten includes, leaving regset.h, alloc-pool.h and timevar.h. * genattrtab.c (write_header): Adjust generated includes. * genautomata.c (main): Likewise. * genconditions.c (write-header): Likewise. * genemit.c (main): Likewise. * gengtype.c (open_base_files): Likewise. * genopinit.c (main): Likewise. * genoutput.c (output_prologue): Likewise. * genpeep.c (main): Likewise. * genpreds.c (write_insn_preds_c): Likewise. * genrecog.c (write_header): Likewise. * alias.c: Adjust includes. * asan.c: Likewise. * attribs.c: Likewise. * auto-inc-dec.c: Likewise. * auto-profile.c: Likewise. * bb-reorder.c: Likewise. * bt-load.c: Likewise. * builtins.c: Likewise. * caller-save.c: Likewise. * calls.c: Likewise. * ccmp.c: Likewise. * cfg.c: Likewise. * cfganal.c: Likewise. * cfgbuild.c: Likewise. * cfgcleanup.c: Likewise. * cfgexpand.c: Likewise. * cfghooks.c: Likewise. * cfgloop.c: Likewise. * cfgloopanal.c: Likewise. * cfgloopmanip.c: Likewise. * cfgrtl.c: Likewise. * cgraph.c: Likewise. * cgraphbuild.c: Likewise. * cgraphclones.c: Likewise. * cgraphunit.c: Likewise. * cilk-common.c: Likewise. * combine-stack-adj.c: Likewise. * combine.c: Likewise. * compare-elim.c: Likewise. * convert.c: Likewise. * coverage.c: Likewise. * cppbuiltin.c: Likewise. * cprop.c: Likewise. * cse.c: Likewise. * cselib.c: Likewise. * data-streamer-in.c: Likewise. * data-streamer-out.c: Likewise. * data-streamer.c: Likewise. * dbxout.c: Likewise. * dce.c: Likewise. * ddg.c: Likewise. * debug.c: Likewise. * df-core.c: Likewise. * df-problems.c: Likewise. * df-scan.c: Likewise. * dfp.c: Likewise. * dojump.c: Likewise. * dominance.c: Likewise. * domwalk.c: Likewise. * double-int.c: Likewise. * dse.c: Likewise. * dumpfile.c: Likewise. * dwarf2asm.c: Likewise. * dwarf2cfi.c: Likewise. * dwarf2out.c: Likewise. * emit-rtl.c: Likewise. * et-forest.c: Likewise. * except.c: Likewise. * explow.c: Likewise. * expmed.c: Likewise. * expr.c: Likewise. * final.c: Likewise. * fixed-value.c: Likewise. * fold-const.c: Likewise. * function.c: Likewise. * fwprop.c: Likewise. * gcc-plugin.h: Likewise. * gcse-common.c: Likewise. * gcse.c: Likewise. * generic-match-head.c: Likewise. * ggc-page.c: Likewise. * gimple-builder.c: Likewise. * gimple-expr.c: Likewise. * gimple-fold.c: Likewise. * gimple-iterator.c: Likewise. * gimple-low.c: Likewise. * gimple-match-head.c: Likewise. * gimple-pretty-print.c: Likewise. * gimple-ssa-isolate-paths.c: Likewise. * gimple-ssa-strength-reduction.c: Likewise. * gimple-streamer-in.c: Likewise. * gimple-streamer-out.c: Likewise. * gimple-walk.c: Likewise. * gimple.c: Likewise. * gimplify-me.c: Likewise. * gimplify.c: Likewise. * godump.c: Likewise. * graph.c: Likewise. * graphite-blocking.c: Likewise. * graphite-dependences.c: Likewise. * graphite-interchange.c: Likewise. * graphite-isl-ast-to-gimple.c: Likewise. * graphite-optimize-isl.c: Likewise. * graphite-poly.c: Likewise. * graphite-scop-detection.c: Likewise. * graphite-sese-to-poly.c: Likewise. * graphite.c: Likewise. * haifa-sched.c: Likewise. * hw-doloop.c: Likewise. * ifcvt.c: Likewise. * init-regs.c: Likewise. * internal-fn.c: Likewise. * ipa-chkp.c: Likewise. * ipa-comdats.c: Likewise. * ipa-cp.c: Likewise. * ipa-devirt.c: Likewise. * ipa-icf-gimple.c: Likewise. * ipa-icf.c: Likewise. * ipa-inline-analysis.c: Likewise. * ipa-inline-transform.c: Likewise. * ipa-inline.c: Likewise. * ipa-polymorphic-call.c: Likewise. * ipa-profile.c: Likewise. * ipa-prop.c: Likewise. * ipa-pure-const.c: Likewise. * ipa-ref.c: Likewise. * ipa-reference.c: Likewise. * ipa-split.c: Likewise. * ipa-utils.c: Likewise. * ipa-visibility.c: Likewise. * ipa.c: Likewise. * ira-build.c: Likewise. * ira-color.c: Likewise. * ira-conflicts.c: Likewise. * ira-costs.c: Likewise. * ira-emit.c: Likewise. * ira-lives.c: Likewise. * ira.c: Likewise. * jump.c: Likewise. * langhooks.c: Likewise. * lcm.c: Likewise. * loop-doloop.c: Likewise. * loop-init.c: Likewise. * loop-invariant.c: Likewise. * loop-iv.c: Likewise. * loop-unroll.c: Likewise. * lower-subreg.c: Likewise. * lra-assigns.c: Likewise. * lra-coalesce.c: Likewise. * lra-constraints.c: Likewise. * lra-eliminations.c: Likewise. * lra-lives.c: Likewise. * lra-remat.c: Likewise. * lra-spills.c: Likewise. * lra.c: Likewise. * lto-cgraph.c: Likewise. * lto-compress.c: Likewise. * lto-opts.c: Likewise. * lto-section-in.c: Likewise. * lto-section-out.c: Likewise. * lto-streamer-in.c: Likewise. * lto-streamer-out.c: Likewise. * lto-streamer.c: Likewise. * mcf.c: Likewise. * mode-switching.c: Likewise. * modulo-sched.c: Likewise. * omega.c: Likewise. * omp-low.c: Likewise. * optabs.c: Likewise. * opts-global.c: Likewise. * passes.c: Likewise. * plugin.c: Likewise. * postreload-gcse.c: Likewise. * postreload.c: Likewise. * predict.c: Likewise. * print-rtl.c: Likewise. * print-tree.c: Likewise. * profile.c: Likewise. * real.c: Likewise. * realmpfr.c: Likewise. * recog.c: Likewise. * ree.c: Likewise. * reg-stack.c: Likewise. * regcprop.c: Likewise. * reginfo.c: Likewise. * regrename.c: Likewise. * regstat.c: Likewise. * reload.c: Likewise. * reload1.c: Likewise. * reorg.c: Likewise. * resource.c: Likewise. * rtl-chkp.c: Likewise. * rtlanal.c: Likewise. * rtlhooks.c: Likewise. * sanopt.c: Likewise. * sched-deps.c: Likewise. * sched-ebb.c: Likewise. * sched-rgn.c: Likewise. * sched-vis.c: Likewise. * sdbout.c: Likewise. * sel-sched-dump.c: Likewise. * sel-sched-ir.c: Likewise. * sel-sched.c: Likewise. * sese.c: Likewise. * shrink-wrap.c: Likewise. * simplify-rtx.c: Likewise. * stack-ptr-mod.c: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * store-motion.c: Likewise. * stringpool.c: Likewise. * symtab.c: Likewise. * target-globals.c: Likewise. * targhooks.c: Likewise. * toplev.c: Likewise. * tracer.c: Likewise. * trans-mem.c: Likewise. * tree-affine.c: Likewise. * tree-browser.c: Likewise. * tree-call-cdce.c: Likewise. * tree-cfg.c: Likewise. * tree-cfgcleanup.c: Likewise. * tree-chkp-opt.c: Likewise. * tree-chkp.c: Likewise. * tree-chrec.c: Likewise. * tree-complex.c: Likewise. * tree-data-ref.c: Likewise. * tree-dfa.c: Likewise. * tree-diagnostic.c: Likewise. * tree-dump.c: Likewise. * tree-eh.c: Likewise. * tree-emutls.c: Likewise. * tree-if-conv.c: Likewise. * tree-inline.c: Likewise. * tree-into-ssa.c: Likewise. * tree-iterator.c: Likewise. * tree-loop-distribution.c: Likewise. * tree-nested.c: Likewise. * tree-nrv.c: Likewise. * tree-object-size.c: Likewise. * tree-outof-ssa.c: Likewise. * tree-parloops.c: Likewise. * tree-phinodes.c: Likewise. * tree-predcom.c: Likewise. * tree-pretty-print.c: Likewise. * tree-profile.c: Likewise. * tree-scalar-evolution.c: Likewise. * tree-sra.c: Likewise. * tree-ssa-address.c: Likewise. * tree-ssa-alias.c: Likewise. * tree-ssa-ccp.c: Likewise. * tree-ssa-coalesce.c: Likewise. * tree-ssa-copy.c: Likewise. * tree-ssa-copyrename.c: Likewise. * tree-ssa-dce.c: Likewise. * tree-ssa-dom.c: Likewise. * tree-ssa-dse.c: Likewise. * tree-ssa-forwprop.c: Likewise. * tree-ssa-ifcombine.c: Likewise. * tree-ssa-live.c: Likewise. * tree-ssa-loop-ch.c: Likewise. * tree-ssa-loop-im.c: Likewise. * tree-ssa-loop-ivcanon.c: Likewise. * tree-ssa-loop-ivopts.c: Likewise. * tree-ssa-loop-manip.c: Likewise. * tree-ssa-loop-niter.c: Likewise. * tree-ssa-loop-prefetch.c: Likewise. * tree-ssa-loop-unswitch.c: Likewise. * tree-ssa-loop.c: Likewise. * tree-ssa-math-opts.c: Likewise. * tree-ssa-operands.c: Likewise. * tree-ssa-phiopt.c: Likewise. * tree-ssa-phiprop.c: Likewise. * tree-ssa-pre.c: Likewise. * tree-ssa-propagate.c: Likewise. * tree-ssa-reassoc.c: Likewise. * tree-ssa-sccvn.c: Likewise. * tree-ssa-scopedtables.c: Likewise. * tree-ssa-sink.c: Likewise. * tree-ssa-strlen.c: Likewise. * tree-ssa-structalias.c: Likewise. * tree-ssa-tail-merge.c: Likewise. * tree-ssa-ter.c: Likewise. * tree-ssa-threadedge.c: Likewise. * tree-ssa-threadupdate.c: Likewise. * tree-ssa-uncprop.c: Likewise. * tree-ssa-uninit.c: Likewise. * tree-ssa.c: Likewise. * tree-ssanames.c: Likewise. * tree-stdarg.c: Likewise. * tree-streamer-in.c: Likewise. * tree-streamer-out.c: Likewise. * tree-streamer.c: Likewise. * tree-switch-conversion.c: Likewise. * tree-tailcall.c: Likewise. * tree-vect-data-refs.c: Likewise. * tree-vect-generic.c: Likewise. * tree-vect-loop-manip.c: Likewise. * tree-vect-loop.c: Likewise. * tree-vect-patterns.c: Likewise. * tree-vect-slp.c: Likewise. * tree-vect-stmts.c: Likewise. * tree-vectorizer.c: Likewise. * tree-vrp.c: Likewise. * tree.c: Likewise. * tsan.c: Likewise. * ubsan.c: Likewise. * valtrack.c: Likewise. * value-prof.c: Likewise. * var-tracking.c: Likewise. * varasm.c: Likewise. * varpool.c: Likewise. * vmsdbgout.c: Likewise. * vtable-verify.c: Likewise. * web.c: Likewise. * wide-int.cc: Likewise. * xcoffout.c: Likewise. * config/aarch64/aarch64-builtins.c: Likewise. * config/aarch64/aarch64.c: Likewise. * config/aarch64/cortex-a57-fma-steering.c: Likewise. * config/alpha/alpha.c: Likewise. * config/arc/arc.c: Likewise. * config/arm/aarch-common.c: Likewise. * config/arm/arm-builtins.c: Likewise. * config/arm/arm-c.c: Likewise. * config/arm/arm.c: Likewise. * config/avr/avr-c.c: Likewise. * config/avr/avr-log.c: Likewise. * config/avr/avr.c: Likewise. * config/bfin/bfin.c: Likewise. * config/c6x/c6x.c: Likewise. * config/cr16/cr16.c: Likewise. * config/cris/cris.c: Likewise. * config/darwin-c.c: Likewise. * config/darwin.c: Likewise. * config/epiphany/epiphany.c: Likewise. * config/epiphany/mode-switch-use.c: Likewise. * config/epiphany/resolve-sw-modes.c: Likewise. * config/fr30/fr30.c: Likewise. * config/frv/frv.c: Likewise. * config/ft32/ft32.c: Likewise. * config/h8300/h8300.c: Likewise. * config/i386/i386-c.c: Likewise. * config/i386/i386.c: Likewise. * config/i386/msformat-c.c: Likewise. * config/i386/winnt-cxx.c: Likewise. * config/i386/winnt-stubs.c: Likewise. * config/i386/winnt.c: Likewise. * config/ia64/ia64-c.c: Likewise. * config/ia64/ia64.c: Likewise. * config/iq2000/iq2000.c: Likewise. * config/lm32/lm32.c: Likewise. * config/m32c/m32c-pragma.c: Likewise. * config/m32c/m32c.c: Likewise. * config/m32r/m32r.c: Likewise. * config/m68k/m68k.c: Likewise. * config/mcore/mcore.c: Likewise. * config/mep/mep-pragma.c: Likewise. * config/mep/mep.c: Likewise. * config/microblaze/microblaze-c.c: Likewise. * config/microblaze/microblaze.c: Likewise. * config/mips/mips.c: Likewise. * config/mmix/mmix.c: Likewise. * config/mn10300/mn10300.c: Likewise. * config/moxie/moxie.c: Likewise. * config/msp430/msp430-c.c: Likewise. * config/msp430/msp430.c: Likewise. * config/nds32/nds32-cost.c: Likewise. * config/nds32/nds32-fp-as-gp.c: Likewise. * config/nds32/nds32-intrinsic.c: Likewise. * config/nds32/nds32-isr.c: Likewise. * config/nds32/nds32-md-auxiliary.c: Likewise. * config/nds32/nds32-memory-manipulation.c: Likewise. * config/nds32/nds32-pipelines-auxiliary.c: Likewise. * config/nds32/nds32-predicates.c: Likewise. * config/nds32/nds32.c: Likewise. * config/nios2/nios2.c: Likewise. * config/nvptx/nvptx.c: Likewise. * config/pa/pa.c: Likewise. * config/pdp11/pdp11.c: Likewise. * config/rl78/rl78-c.c: Likewise. * config/rl78/rl78.c: Likewise. * config/rs6000/rs6000-c.c: Likewise. * config/rs6000/rs6000.c: Likewise. * config/rx/rx.c: Likewise. * config/s390/s390-c.c: Likewise. * config/s390/s390.c: Likewise. * config/sh/sh-c.c: Likewise. * config/sh/sh-mem.cc: Likewise. * config/sh/sh.c: Likewise. * config/sh/sh_optimize_sett_clrt.cc: Likewise. * config/sh/sh_treg_combine.cc: Likewise. * config/sol2-c.c: Likewise. * config/sol2-cxx.c: Likewise. * config/sol2-stubs.c: Likewise. * config/sol2.c: Likewise. * config/sparc/sparc-c.c: Likewise. * config/sparc/sparc.c: Likewise. * config/spu/spu-c.c: Likewise. * config/spu/spu.c: Likewise. * config/stormy16/stormy16.c: Likewise. * config/tilegx/mul-tables.c: Likewise. * config/tilegx/tilegx-c.c: Likewise. * config/tilegx/tilegx.c: Likewise. * config/tilepro/mul-tables.c: Likewise. * config/tilepro/tilepro-c.c: Likewise. * config/tilepro/tilepro.c: Likewise. * config/v850/v850-c.c: Likewise. * config/v850/v850.c: Likewise. * config/vax/vax.c: Likewise. * config/visium/visium.c: Likewise. * config/vms/vms-c.c: Likewise. * config/vms/vms.c: Likewise. * config/vxworks.c: Likewise. * config/xtensa/xtensa.c: Likewise. ada 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * gcc-interface/cuintp.c: Adjust includes. * gcc-interface/decl.c: Likewise. * gcc-interface/misc.c: Likewise. * gcc-interface/targtyps.c: Likewise. * gcc-interface/trans.c: Likewise. * gcc-interface/utils.c: Likewise. * gcc-interface/utils2.c: Likewise. c 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * c-array-notation.c: Adjust includes. * c-aux-info.c: Likewise. * c-convert.c: Likewise. * c-decl.c: Likewise. * c-errors.c: Likewise. * c-lang.c: Likewise. * c-objc-common.c: Likewise. * c-parser.c: Likewise. * c-typeck.c: Likewise. c-family 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * array-notation-common.c: Adjust includes. * c-ada-spec.c: Likewise. * c-cilkplus.c: Likewise. * c-common.h: Likewise. * c-cppbuiltin.c: Likewise. * c-dump.c: Likewise. * c-format.c: Likewise. * c-gimplify.c: Likewise. * c-indentation.c: Likewise. * c-lex.c: Likewise. * c-omp.c: Likewise. * c-opts.c: Likewise. * c-pch.c: Likewise. * c-ppoutput.c: Likewise. * c-pragma.c: Likewise. * c-pretty-print.c: Likewise. * c-semantics.c: Likewise. * c-ubsan.c: Likewise. * cilk.c: Likewise. * stub-objc.c: Likewise. cp 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * call.c: Adjust includes. * class.c: Likewise. * constexpr.c: Likewise. * cp-array-notation.c: Likewise. * cp-gimplify.c: Likewise. * cp-lang.c: Likewise. * cp-objcp-common.c: Likewise. * cp-ubsan.c: Likewise. * cvt.c: Likewise. * decl.c: Likewise. * decl2.c: Likewise. * dump.c: Likewise. * error.c: Likewise. * except.c: Likewise. * expr.c: Likewise. * friend.c: Likewise. * init.c: Likewise. * lambda.c: Likewise. * lex.c: Likewise. * mangle.c: Likewise. * method.c: Likewise. * name-lookup.c: Likewise. * optimize.c: Likewise. * parser.c: Likewise. * pt.c: Likewise. * ptree.c: Likewise. * repo.c: Likewise. * rtti.c: Likewise. * search.c: Likewise. * semantics.c: Likewise. * tree.c: Likewise. * typeck.c: Likewise. * typeck2.c: Likewise. fortran 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * convert.c: Adjust includes. * cpp.c: Likewise. * decl.c: Likewise. * f95-lang.c: Likewise. * iresolve.c: Likewise. * match.c: Likewise. * module.c: Likewise. * options.c: Likewise. * target-memory.c: Likewise. * trans-array.c: Likewise. * trans-common.c: Likewise. * trans-const.c: Likewise. * trans-decl.c: Likewise. * trans-expr.c: Likewise. * trans-intrinsic.c: Likewise. * trans-io.c: Likewise. * trans-openmp.c: Likewise. * trans-stmt.c: Likewise. * trans-types.c: Likewise. * trans.c: Likewise. go 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * go-backend.c: Adjust includes. * go-gcc.cc: Likewise. * go-lang.c: Likewise. java 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * boehm.c: Adjust includes. * builtins.c: Likewise. * class.c: Likewise. * constants.c: Likewise. * decl.c: Likewise. * except.c: Likewise. * expr.c: Likewise. * java-gimplify.c: Likewise. * jcf-dump.c: Likewise. * jcf-io.c: Likewise. * jcf-parse.c: Likewise. * jvgenmain.c: Likewise. * lang.c: Likewise. * mangle.c: Likewise. * mangle_name.c: Likewise. * resource.c: Likewise. * typeck.c: Likewise. * verify-glue.c: Likewise. jit 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * dummy-frontend.c: Adjust includes. * jit-common.h: Likewise. * jit-playback.c: Likewise. lto 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * lto-lang.c: Adjust includes. * lto-object.c: Likewise. * lto-partition.c: Likewise. * lto-symtab.c: Likewise. * lto.c: Likewise. objc 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * objc-act.c: Adjust includes. * objc-encoding.c: Likewise. * objc-gnu-runtime-abi-01.c: Likewise. * objc-lang.c: Likewise. * objc-map.c: Likewise. * objc-next-runtime-abi-01.c: Likewise. * objc-next-runtime-abi-02.c: Likewise. * objc-runtime-shared-support.c: Likewise. objcp 2015-07-07 Andrew MacLeod <amacleod@redhat.com> * objcp-decl.c: Adjust includes. * objcp-lang.c: Likewise. From-SVN: r225531
506 lines
10 KiB
C
506 lines
10 KiB
C
/* Glue to interface gcj with bytecode verifier.
|
|
Copyright (C) 2003-2015 Free Software Foundation, Inc.
|
|
|
|
This file is part of GCC.
|
|
|
|
GCC 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 3, or (at your option)
|
|
any later version.
|
|
|
|
GCC 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.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with GCC; see the file COPYING3. If not see
|
|
<http://www.gnu.org/licenses/>.
|
|
|
|
Java and all Java-based marks are trademarks or registered trademarks
|
|
of Sun Microsystems, Inc. in the United States and other countries.
|
|
The Free Software Foundation is independent of Sun Microsystems, Inc. */
|
|
|
|
/* Written by Tom Tromey <tromey@redhat.com>. */
|
|
|
|
#include "config.h"
|
|
|
|
#include "system.h"
|
|
#include "coretypes.h"
|
|
#include "alias.h"
|
|
#include "tree.h"
|
|
#include "options.h"
|
|
#include "stringpool.h"
|
|
#include "parse.h"
|
|
|
|
#include "verify.h"
|
|
#include "java-tree.h"
|
|
#include "java-except.h"
|
|
#include "diagnostic-core.h"
|
|
|
|
void *
|
|
vfy_alloc (size_t bytes)
|
|
{
|
|
return xmalloc (bytes);
|
|
}
|
|
|
|
void
|
|
vfy_free (void *mem)
|
|
{
|
|
free (mem);
|
|
}
|
|
|
|
bool
|
|
vfy_strings_equal (vfy_string one, vfy_string two)
|
|
{
|
|
return one == two;
|
|
}
|
|
|
|
const char *
|
|
vfy_string_bytes (vfy_string str)
|
|
{
|
|
return IDENTIFIER_POINTER (str);
|
|
}
|
|
|
|
int
|
|
vfy_string_length (vfy_string str)
|
|
{
|
|
return IDENTIFIER_LENGTH (str);
|
|
}
|
|
|
|
vfy_string
|
|
vfy_init_name (void)
|
|
{
|
|
return init_identifier_node;
|
|
}
|
|
|
|
vfy_string
|
|
vfy_clinit_name (void)
|
|
{
|
|
return clinit_identifier_node;
|
|
}
|
|
|
|
static const char*
|
|
skip_one_type (const char* ptr)
|
|
{
|
|
int ch = *ptr++;
|
|
|
|
while (ch == '[')
|
|
{
|
|
ch = *ptr++;
|
|
}
|
|
|
|
if (ch == 'L')
|
|
{
|
|
do { ch = *ptr++; } while (ch != ';');
|
|
}
|
|
|
|
return ptr;
|
|
}
|
|
|
|
int
|
|
vfy_count_arguments (vfy_string signature)
|
|
{
|
|
const char *ptr = IDENTIFIER_POINTER (signature);
|
|
int arg_count = 0;
|
|
|
|
/* Skip '('. */
|
|
ptr++;
|
|
|
|
/* Count args. */
|
|
while (*ptr != ')')
|
|
{
|
|
ptr = skip_one_type (ptr);
|
|
arg_count += 1;
|
|
}
|
|
|
|
return arg_count;
|
|
}
|
|
|
|
vfy_string
|
|
vfy_get_string (const char *s, int len)
|
|
{
|
|
return get_identifier_with_length (s, len);
|
|
}
|
|
|
|
vfy_string
|
|
vfy_get_signature (vfy_method *method)
|
|
{
|
|
return method->signature;
|
|
}
|
|
|
|
vfy_string
|
|
vfy_get_method_name (vfy_method *method)
|
|
{
|
|
return method->name;
|
|
}
|
|
|
|
bool
|
|
vfy_is_static (vfy_method *method)
|
|
{
|
|
return METHOD_STATIC (method->method);
|
|
}
|
|
|
|
const unsigned char *
|
|
vfy_get_bytecode (vfy_method *method)
|
|
{
|
|
return method->bytes;
|
|
}
|
|
|
|
vfy_exception *
|
|
vfy_get_exceptions (vfy_method *method)
|
|
{
|
|
return method->exceptions;
|
|
}
|
|
|
|
void
|
|
vfy_get_exception (vfy_exception *exceptions, int index, int *handler,
|
|
int *start, int *end, int *handler_type)
|
|
{
|
|
*handler = exceptions[index].handler;
|
|
*start = exceptions[index].start;
|
|
*end = exceptions[index].end;
|
|
*handler_type = exceptions[index].type;
|
|
}
|
|
|
|
int
|
|
vfy_tag (vfy_constants *pool, int index)
|
|
{
|
|
int result = JPOOL_TAG (pool, index);
|
|
/* gcj will resolve constant pool entries other than string and
|
|
class references. The verifier doesn't care about the values, so
|
|
we just strip off the resolved flag. */
|
|
if ((result & CONSTANT_ResolvedFlag) != 0
|
|
&& result != CONSTANT_ResolvedString
|
|
&& result != CONSTANT_ResolvedClass)
|
|
result &= ~ CONSTANT_ResolvedFlag;
|
|
return result;
|
|
}
|
|
|
|
void
|
|
vfy_load_indexes (vfy_constants *pool, int index,
|
|
vfy_uint_16 *index0, vfy_uint_16 *index1)
|
|
{
|
|
*index0 = JPOOL_USHORT1 (pool, index);
|
|
*index1 = JPOOL_USHORT2 (pool, index);
|
|
}
|
|
|
|
vfy_constants *
|
|
vfy_get_constants (vfy_jclass klass)
|
|
{
|
|
return TYPE_JCF (klass);
|
|
}
|
|
|
|
int
|
|
vfy_get_constants_size (vfy_jclass klass)
|
|
{
|
|
return JPOOL_SIZE (TYPE_JCF (klass));
|
|
}
|
|
|
|
vfy_string
|
|
vfy_get_pool_string (vfy_constants *pool, int index)
|
|
{
|
|
return get_name_constant (pool, index);
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_get_pool_class (vfy_constants *pool, int index)
|
|
{
|
|
vfy_jclass k;
|
|
k = get_class_constant (pool, index);
|
|
return k;
|
|
}
|
|
|
|
vfy_string
|
|
vfy_get_class_name (vfy_jclass klass)
|
|
{
|
|
return DECL_NAME (TYPE_NAME (klass));
|
|
}
|
|
|
|
bool
|
|
vfy_is_assignable_from (vfy_jclass target, vfy_jclass source)
|
|
{
|
|
/* Any class is always assignable to itself, or java.lang.Object. */
|
|
if (source == target || target == object_type_node)
|
|
return true;
|
|
|
|
/* For the C++ ABI, perform this test statically. */
|
|
if (! flag_indirect_dispatch)
|
|
return can_widen_reference_to (source, target);
|
|
|
|
/* For the BC-ABI, we assume at compile time that reference types are always
|
|
compatible. However, a type assertion table entry is emitted so that the
|
|
runtime can detect binary-incompatible changes. */
|
|
|
|
add_type_assertion (current_class, JV_ASSERT_TYPES_COMPATIBLE, source,
|
|
target);
|
|
return true;
|
|
}
|
|
|
|
char
|
|
vfy_get_primitive_char (vfy_jclass klass)
|
|
{
|
|
tree sig;
|
|
gcc_assert (vfy_is_primitive (klass));
|
|
sig = build_java_signature (klass);
|
|
return (IDENTIFIER_POINTER (sig))[0];
|
|
}
|
|
|
|
bool
|
|
vfy_is_array (vfy_jclass klass)
|
|
{
|
|
return TYPE_ARRAY_P (klass);
|
|
}
|
|
|
|
bool
|
|
vfy_is_interface (vfy_jclass klass)
|
|
{
|
|
return CLASS_INTERFACE (TYPE_NAME (klass));
|
|
}
|
|
|
|
bool
|
|
vfy_is_primitive (vfy_jclass klass)
|
|
{
|
|
return JPRIMITIVE_TYPE_P (klass);
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_get_superclass (vfy_jclass klass)
|
|
{
|
|
vfy_jclass k;
|
|
k = CLASSTYPE_SUPER (klass);
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_get_array_class (vfy_jclass klass)
|
|
{
|
|
vfy_jclass k;
|
|
k = build_java_array_type (klass, -1);
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_get_component_type (vfy_jclass klass)
|
|
{
|
|
vfy_jclass k;
|
|
gcc_assert (vfy_is_array (klass));
|
|
k = TYPE_ARRAY_ELEMENT (klass);
|
|
if (TREE_CODE (k) == POINTER_TYPE)
|
|
k = TREE_TYPE (k);
|
|
return k;
|
|
}
|
|
|
|
bool
|
|
vfy_is_abstract (vfy_jclass klass)
|
|
{
|
|
return CLASS_ABSTRACT (TYPE_NAME (klass));
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_find_class (vfy_jclass ignore ATTRIBUTE_UNUSED, vfy_string name)
|
|
{
|
|
vfy_jclass k;
|
|
|
|
k = get_type_from_signature (name);
|
|
if (TREE_CODE (k) == POINTER_TYPE)
|
|
k = TREE_TYPE (k);
|
|
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_object_type (void)
|
|
{
|
|
vfy_jclass k;
|
|
k = object_type_node;
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_class_type (void)
|
|
{
|
|
return class_type_node;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_string_type (void)
|
|
{
|
|
vfy_jclass k;
|
|
k = string_type_node;
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_throwable_type (void)
|
|
{
|
|
vfy_jclass k;
|
|
k = throwable_type_node;
|
|
return k;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_unsuitable_type (void)
|
|
{
|
|
return TYPE_SECOND;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_return_address_type (void)
|
|
{
|
|
return TYPE_RETURN_ADDR;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_null_type (void)
|
|
{
|
|
return TYPE_NULL;
|
|
}
|
|
|
|
bool
|
|
vfy_class_has_field (vfy_jclass klass, vfy_string name,
|
|
vfy_string signature)
|
|
{
|
|
tree field = TYPE_FIELDS (klass);
|
|
while (field != NULL_TREE)
|
|
{
|
|
if (DECL_NAME (field) == name
|
|
&& build_java_signature (TREE_TYPE (field)) == signature)
|
|
return true;
|
|
field = DECL_CHAIN (field);
|
|
}
|
|
return false;
|
|
}
|
|
|
|
int
|
|
vfy_fail (const char *message, int pc, vfy_jclass ignore1 ATTRIBUTE_UNUSED,
|
|
vfy_method *ignore2 ATTRIBUTE_UNUSED)
|
|
{
|
|
if (pc == -1)
|
|
error ("verification failed: %s", message);
|
|
else
|
|
error ("verification failed at PC=%d: %s", pc, message);
|
|
/* We have to return a value for the verifier to throw. */
|
|
return 1;
|
|
}
|
|
|
|
vfy_jclass
|
|
vfy_get_primitive_type (int type)
|
|
{
|
|
vfy_jclass k;
|
|
k = decode_newarray_type (type);
|
|
return k;
|
|
}
|
|
|
|
void
|
|
vfy_note_stack_depth (vfy_method *method, int pc, int depth)
|
|
{
|
|
tree val = make_tree_vec (method->max_locals + depth);
|
|
(*type_states)[pc] = val;
|
|
/* Called for side effects. */
|
|
lookup_label (pc);
|
|
}
|
|
|
|
void
|
|
vfy_note_stack_type (vfy_method *method, int pc, int slot, vfy_jclass type)
|
|
{
|
|
tree vec;
|
|
|
|
slot += method->max_locals;
|
|
|
|
if (type == object_type_node)
|
|
type = object_ptr_type_node;
|
|
|
|
vec = (*type_states)[pc];
|
|
TREE_VEC_ELT (vec, slot) = type;
|
|
/* Called for side effects. */
|
|
lookup_label (pc);
|
|
}
|
|
|
|
void
|
|
vfy_note_local_type (vfy_method *method ATTRIBUTE_UNUSED, int pc, int slot,
|
|
vfy_jclass type)
|
|
{
|
|
tree vec;
|
|
|
|
if (type == object_type_node)
|
|
type = object_ptr_type_node;
|
|
|
|
vec = (*type_states)[pc];
|
|
TREE_VEC_ELT (vec, slot) = type;
|
|
/* Called for side effects. */
|
|
lookup_label (pc);
|
|
}
|
|
|
|
void
|
|
vfy_note_instruction_seen (int pc)
|
|
{
|
|
instruction_bits[pc] |= BCODE_VERIFIED;
|
|
}
|
|
|
|
/* Verify the bytecodes of the current method.
|
|
Return 1 on success, 0 on failure. */
|
|
int
|
|
verify_jvm_instructions_new (JCF *jcf, const unsigned char *byte_ops,
|
|
long length)
|
|
{
|
|
vfy_method method;
|
|
int i, result, eh_count;
|
|
vfy_exception *exceptions;
|
|
|
|
method_init_exceptions ();
|
|
|
|
JCF_SEEK (jcf, DECL_CODE_OFFSET (current_function_decl) + length);
|
|
eh_count = JCF_readu2 (jcf);
|
|
|
|
exceptions = (vfy_exception *) xmalloc (eh_count * sizeof (vfy_exception));
|
|
for (i = 0; i < eh_count; ++i)
|
|
{
|
|
int start_pc, end_pc, handler_pc, catch_type;
|
|
unsigned char *p = jcf->read_ptr + 8 * i;
|
|
start_pc = GET_u2 (p);
|
|
end_pc = GET_u2 (p+2);
|
|
handler_pc = GET_u2 (p+4);
|
|
catch_type = GET_u2 (p+6);
|
|
|
|
if (start_pc < 0 || start_pc >= length
|
|
|| end_pc < 0 || end_pc > length || start_pc >= end_pc
|
|
|| handler_pc < 0 || handler_pc >= length)
|
|
{
|
|
error ("bad pc in exception_table");
|
|
free (exceptions);
|
|
return 0;
|
|
}
|
|
|
|
exceptions[i].handler = handler_pc;
|
|
exceptions[i].start = start_pc;
|
|
exceptions[i].end = end_pc;
|
|
exceptions[i].type = catch_type;
|
|
|
|
add_handler (start_pc, end_pc,
|
|
lookup_label (handler_pc),
|
|
catch_type == 0 ? NULL_TREE
|
|
: get_class_constant (jcf, catch_type));
|
|
instruction_bits[handler_pc] |= BCODE_EXCEPTION_TARGET;
|
|
}
|
|
|
|
gcc_assert (sanity_check_exception_range (&whole_range));
|
|
|
|
method.method = current_function_decl;
|
|
method.signature = build_java_signature (TREE_TYPE (current_function_decl));
|
|
method.name = DECL_NAME (current_function_decl);
|
|
method.bytes = byte_ops;
|
|
method.exceptions = exceptions;
|
|
method.defining_class = DECL_CONTEXT (current_function_decl);
|
|
method.max_stack = DECL_MAX_STACK (current_function_decl);
|
|
method.max_locals = DECL_MAX_LOCALS (current_function_decl);
|
|
method.code_length = length;
|
|
method.exc_count = eh_count;
|
|
|
|
result = verify_method (&method);
|
|
|
|
free (exceptions);
|
|
|
|
return result;
|
|
}
|