2010-07-08 Manuel López-Ibáñez <manu@gcc.gnu.org> * toplev.h: Do not include diagnostic-core.h. Include diagnostic-core.h in every file that includes toplev.h. * c-tree.h: Do not include toplev.h. * pretty-print.h: Update comment. * Makefile.in: Update dependencies. * alias.c: Include diagnostic-core.h in every file that includes toplev.h. * attribs.c: Likewise. * auto-inc-dec.c: Likewise. * bb-reorder.c: Likewise. * bt-load.c: Likewise. * caller-save.c: Likewise. * calls.c: Likewise. * cfg.c: Likewise. * cfganal.c: Likewise. * cfgbuild.c: Likewise. * cfgcleanup.c: Likewise. * cfghooks.c: Likewise. * cfgloop.c: Likewise. * combine.c: Likewise. * config/alpha/alpha.c: Likewise. * config/arc/arc.c: Likewise. * config/arm/arm.c: Likewise. * config/arm/pe.c: Likewise. * config/avr/avr.c: Likewise. * config/bfin/bfin.c: Likewise. * config/cris/cris.c: Likewise. * config/crx/crx.c: Likewise. * config/darwin-c.c: Likewise. * config/darwin.c: Likewise. * config/fr30/fr30.c: Likewise. * config/frv/frv.c: Likewise. * config/h8300/h8300.c: Likewise. * config/host-darwin.c: Likewise. * config/i386/i386.c: Likewise. * config/i386/netware.c: Likewise. * config/i386/nwld.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/m68hc11/m68hc11.c: Likewise. * config/m68k/m68k.c: Likewise. * config/mcore/mcore.c: Likewise. * config/mep/mep-pragma.c: Likewise. * config/mep/mep.c: Likewise. * config/mmix/mmix.c: Likewise. * config/mn10300/mn10300.c: Likewise. * config/moxie/moxie.c: Likewise. * config/pa/pa.c: Likewise. * config/pdp11/pdp11.c: Likewise. * config/picochip/picochip.c: Likewise. * config/rs6000/rs6000-c.c: Likewise. * config/rs6000/rs6000.c: Likewise. * config/rx/rx.c: Likewise. * config/s390/s390.c: Likewise. * config/score/score.c: Likewise. * config/score/score3.c: Likewise. * config/score/score7.c: Likewise. * config/sh/sh.c: Likewise. * config/sh/symbian-base.c: Likewise. * config/sh/symbian-c.c: Likewise. * config/sh/symbian-cxx.c: Likewise. * config/sol2-c.c: Likewise. * config/sol2.c: Likewise. * config/sparc/sparc.c: Likewise. * config/spu/spu.c: Likewise. * config/stormy16/stormy16.c: Likewise. * config/v850/v850-c.c: Likewise. * config/v850/v850.c: Likewise. * config/vax/vax.c: Likewise. * config/vxworks.c: Likewise. * config/xtensa/xtensa.c: Likewise. * convert.c: Likewise. * cse.c: Likewise. * cselib.c: Likewise. * dbgcnt.c: Likewise. * dbxout.c: Likewise. * ddg.c: Likewise. * dominance.c: Likewise. * emit-rtl.c: Likewise. * explow.c: Likewise. * expmed.c: Likewise. * fixed-value.c: Likewise. * fold-const.c: Likewise. * fwprop.c: Likewise. * gcse.c: Likewise. * ggc-common.c: Likewise. * ggc-page.c: Likewise. * ggc-zone.c: Likewise. * gimple-low.c: Likewise. * gimplify.c: Likewise. * graph.c: Likewise. * haifa-sched.c: Likewise. * ifcvt.c: Likewise. * implicit-zee.c: Likewise. * integrate.c: Likewise. * ira-build.c: Likewise. * ira-color.c: Likewise. * ira-conflicts.c: Likewise. * ira-costs.c: Likewise. * ira-lives.c: Likewise. * ira.c: Likewise. * lists.c: Likewise. * loop-doloop.c: Likewise. * loop-iv.c: Likewise. * lto-opts.c: Likewise. * lto-symtab.c: Likewise. * main.c: Likewise. * modulo-sched.c: Likewise. * optabs.c: Likewise. * params.c: Likewise. * plugin.c: Likewise. * postreload-gcse.c: Likewise. * postreload.c: Likewise. * predict.c: Likewise. * profile.c: Likewise. * real.c: Likewise. * regcprop.c: Likewise. * reginfo.c: Likewise. * regmove.c: Likewise. * reorg.c: Likewise. * resource.c: Likewise. * rtl.c: Likewise. * rtlanal.c: Likewise. * sched-deps.c: Likewise. * sched-ebb.c: Likewise. * sched-rgn.c: Likewise. * sdbout.c: Likewise. * sel-sched-dump.c: Likewise. * sel-sched-ir.c: Likewise. * simplify-rtx.c: Likewise. * stmt.c: Likewise. * stor-layout.c: Likewise. * store-motion.c: Likewise. * targhooks.c: Likewise. * tree-cfg.c: Likewise. * tree-cfgcleanup.c: Likewise. * tree-dump.c: Likewise. * tree-eh.c: Likewise. * tree-inline.c: Likewise. * tree-nomudflap.c: Likewise. * tree-object-size.c: Likewise. * tree-optimize.c: Likewise. * tree-outof-ssa.c: Likewise. * tree-phinodes.c: Likewise. * tree-profile.c: Likewise. * tree-ssa-ccp.c: Likewise. * tree-ssa-coalesce.c: Likewise. * tree-ssa-live.c: Likewise. * tree-ssa-loop-niter.c: Likewise. * tree-ssa-loop-prefetch.c: Likewise. * tree-ssa-loop.c: Likewise. * tree-ssa-structalias.c: Likewise. * tree-ssa-uninit.c: Likewise. * tree-ssa.c: Likewise. * tree-vect-data-refs.c: Likewise. * tree-vect-loop-manip.c: Likewise. * tree-vect-loop.c: Likewise. * tree-vect-patterns.c: Likewise. * tree-vect-stmts.c: Likewise. * tree-vrp.c: Likewise. * varasm.c: Likewise. * vec.c: Likewise. * web.c: Likewise. * xcoffout.c: Likewise. c-family/ * c-common.h: Include diagnostic-core.h. Error if already included. * c-semantics.c: Do not define GCC_DIAG_STYLE here. cp/ * cp-tree.h: Do not include toplev.h. java/ * boehm.c: Include diagnostic-core.h in every file that includes toplev.h. * class.c: Likewise. * constants.c: Likewise. * decl.c: Likewise. * except.c: Likewise. * expr.c: Likewise. * jcf-parse.c: Likewise. * mangle.c: Likewise. * mangle_name.c: Likewise. * resource.c: Likewise. * typeck.c: Likewise. * verify-glue.c: Likewise. ada/ * gcc-interface/utils.c: Include diagnostic-core.h in every file that includes toplev.h. lto/ * lto-coff.c: Include diagnostic-core.h in every file that includes toplev.h. * lto-elf.c: Likewise. * lto-lang.c: Likewise. * lto-macho.c: Likewise. From-SVN: r161943
150 lines
4.4 KiB
C
150 lines
4.4 KiB
C
/* Functions related to building resource files.
|
|
Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
|
|
2007, 2008 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. */
|
|
|
|
#include "config.h"
|
|
#include "system.h"
|
|
#include "coretypes.h"
|
|
#include "tree.h"
|
|
#include "java-tree.h"
|
|
#include "jcf.h"
|
|
#include "diagnostic-core.h"
|
|
#include "toplev.h"
|
|
#include "output.h"
|
|
#include "parse.h"
|
|
#include "function.h"
|
|
#include "ggc.h"
|
|
#include "stdio.h"
|
|
#include "tree-iterator.h"
|
|
#include "cgraph.h"
|
|
|
|
/* DOS brain-damage */
|
|
#ifndef O_BINARY
|
|
#define O_BINARY 0 /* MS-DOS brain-damage */
|
|
#endif
|
|
|
|
/* A list of all the resources files. */
|
|
static GTY(()) VEC(tree,gc) *resources;
|
|
|
|
void
|
|
compile_resource_data (const char *name, const char *buffer, int length)
|
|
{
|
|
tree rtype, field = NULL_TREE, data_type, rinit, data, decl;
|
|
VEC(constructor_elt,gc) *v = NULL;
|
|
|
|
data_type = build_prim_array_type (unsigned_byte_type_node,
|
|
strlen (name) + length);
|
|
rtype = make_node (RECORD_TYPE);
|
|
PUSH_FIELD (input_location,
|
|
rtype, field, "name_length", unsigned_int_type_node);
|
|
PUSH_FIELD (input_location,
|
|
rtype, field, "resource_length", unsigned_int_type_node);
|
|
PUSH_FIELD (input_location, rtype, field, "data", data_type);
|
|
FINISH_RECORD (rtype);
|
|
START_RECORD_CONSTRUCTOR (v, rtype);
|
|
PUSH_FIELD_VALUE (v, "name_length",
|
|
build_int_cst (NULL_TREE, strlen (name)));
|
|
PUSH_FIELD_VALUE (v, "resource_length",
|
|
build_int_cst (NULL_TREE, length));
|
|
data = build_string (strlen(name) + length, buffer);
|
|
TREE_TYPE (data) = data_type;
|
|
PUSH_FIELD_VALUE (v, "data", data);
|
|
FINISH_RECORD_CONSTRUCTOR (rinit, v, rtype);
|
|
TREE_CONSTANT (rinit) = 1;
|
|
|
|
decl = build_decl (input_location,
|
|
VAR_DECL, java_mangle_resource_name (name), rtype);
|
|
TREE_STATIC (decl) = 1;
|
|
TREE_PUBLIC (decl) = 1;
|
|
java_hide_decl (decl);
|
|
DECL_ARTIFICIAL (decl) = 1;
|
|
DECL_IGNORED_P (decl) = 1;
|
|
TREE_READONLY (decl) = 1;
|
|
TREE_THIS_VOLATILE (decl) = 0;
|
|
DECL_INITIAL (decl) = rinit;
|
|
layout_decl (decl, 0);
|
|
pushdecl (decl);
|
|
rest_of_decl_compilation (decl, global_bindings_p (), 0);
|
|
varpool_finalize_decl (decl);
|
|
|
|
VEC_safe_push (tree, gc, resources, decl);
|
|
}
|
|
|
|
void
|
|
write_resource_constructor (tree *list_p)
|
|
{
|
|
tree decl, t, register_resource_fn;
|
|
unsigned ix;
|
|
|
|
if (resources == NULL)
|
|
return;
|
|
|
|
t = build_function_type_list (void_type_node, ptr_type_node, NULL);
|
|
t = build_decl (input_location,
|
|
FUNCTION_DECL, get_identifier ("_Jv_RegisterResource"), t);
|
|
TREE_PUBLIC (t) = 1;
|
|
DECL_EXTERNAL (t) = 1;
|
|
register_resource_fn = t;
|
|
|
|
/* Write out entries in the same order in which they were defined. */
|
|
for (ix = 0; VEC_iterate (tree, resources, ix, decl); ix++)
|
|
{
|
|
t = build_fold_addr_expr (decl);
|
|
t = build_call_expr (register_resource_fn, 1, t);
|
|
append_to_statement_list (t, list_p);
|
|
}
|
|
}
|
|
|
|
/* Generate a byte array representing the contents of FILENAME. The
|
|
array is assigned a unique local symbol. The array represents a
|
|
compiled Java resource, which is accessed by the runtime using
|
|
NAME. */
|
|
void
|
|
compile_resource_file (const char *name, const char *filename)
|
|
{
|
|
struct stat stat_buf;
|
|
int fd;
|
|
char *buffer;
|
|
|
|
fd = open (filename, O_RDONLY | O_BINARY);
|
|
if (fd < 0)
|
|
{
|
|
perror ("Failed to read resource file");
|
|
return;
|
|
}
|
|
if (fstat (fd, &stat_buf) != 0
|
|
|| ! S_ISREG (stat_buf.st_mode))
|
|
{
|
|
perror ("Could not figure length of resource file");
|
|
return;
|
|
}
|
|
buffer = XNEWVEC (char, strlen (name) + stat_buf.st_size);
|
|
strcpy (buffer, name);
|
|
read (fd, buffer + strlen (name), stat_buf.st_size);
|
|
close (fd);
|
|
|
|
compile_resource_data (name, buffer, stat_buf.st_size);
|
|
}
|
|
|
|
#include "gt-java-resource.h"
|