diff options
author | somov <somov@yandex-team.ru> | 2022-02-10 16:45:47 +0300 |
---|---|---|
committer | Daniil Cherednik <dcherednik@yandex-team.ru> | 2022-02-10 16:45:47 +0300 |
commit | a5950576e397b1909261050b8c7da16db58f10b1 (patch) | |
tree | 7ba7677f6a4c3e19e2cefab34d16df2c8963b4d4 /contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c | |
parent | 81eddc8c0b55990194e112b02d127b87d54164a9 (diff) | |
download | ydb-a5950576e397b1909261050b8c7da16db58f10b1.tar.gz |
Restoring authorship annotation for <somov@yandex-team.ru>. Commit 1 of 2.
Diffstat (limited to 'contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c')
-rw-r--r-- | contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c | 366 |
1 files changed, 183 insertions, 183 deletions
diff --git a/contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c b/contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c index bdf403c762..135edef012 100644 --- a/contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c +++ b/contrib/tools/yasm/modules/objfmts/dbg/dbg-objfmt.c @@ -1,183 +1,183 @@ -/* - * Debugging object format (used to debug object format module interface) - * - * Copyright (C) 2001-2007 Peter Johnson - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE - * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -#include <util.h> - -#include <libyasm.h> - - -typedef struct yasm_objfmt_dbg { - yasm_objfmt_base objfmt; /* base structure */ - - FILE *dbgfile; -} yasm_objfmt_dbg; - -yasm_objfmt_module yasm_dbg_LTX_objfmt; - - -static yasm_objfmt * -dbg_objfmt_create(yasm_object *object) -{ - yasm_objfmt_dbg *objfmt_dbg = yasm_xmalloc(sizeof(yasm_objfmt_dbg)); - - objfmt_dbg->objfmt.module = &yasm_dbg_LTX_objfmt; - - objfmt_dbg->dbgfile = tmpfile(); - if (!objfmt_dbg->dbgfile) { - fprintf(stderr, N_("could not open temporary file")); - return 0; - } - fprintf(objfmt_dbg->dbgfile, "create()\n"); - return (yasm_objfmt *)objfmt_dbg; -} - -static void -dbg_objfmt_output(yasm_object *object, FILE *f, int all_syms, - yasm_errwarns *errwarns) -{ - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; - char buf[1024]; - size_t i; - - /* Copy temp file to real output file */ - rewind(objfmt_dbg->dbgfile); - while ((i = fread(buf, 1, 1024, objfmt_dbg->dbgfile))) { - if (fwrite(buf, 1, i, f) != i) - break; - } - - /* Reassign objfmt debug file to output file */ - fclose(objfmt_dbg->dbgfile); - objfmt_dbg->dbgfile = f; - - fprintf(objfmt_dbg->dbgfile, "output(f, object->\n"); - yasm_object_print(object, objfmt_dbg->dbgfile, 1); - fprintf(objfmt_dbg->dbgfile, "%d)\n", all_syms); - fprintf(objfmt_dbg->dbgfile, " Symbol Table:\n"); - yasm_symtab_print(object->symtab, objfmt_dbg->dbgfile, 1); -} - -static void -dbg_objfmt_destroy(yasm_objfmt *objfmt) -{ - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)objfmt; - fprintf(objfmt_dbg->dbgfile, "destroy()\n"); - yasm_xfree(objfmt); -} - -static void -dbg_objfmt_init_new_section(yasm_section *sect, unsigned long line) -{ - yasm_object *object = yasm_section_get_object(sect); - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; - fprintf(objfmt_dbg->dbgfile, "init_new_section(\"%s\", %lu)\n", - yasm_section_get_name(sect), line); - yasm_symtab_define_label(object->symtab, ".text", - yasm_section_bcs_first(sect), 1, 0); -} - -static yasm_section * -dbg_objfmt_add_default_section(yasm_object *object) -{ - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; - yasm_section *retval; - int isnew; - - fprintf(objfmt_dbg->dbgfile, "add_default_section()\n"); - retval = yasm_object_get_general(object, ".text", 0, 0, 0, &isnew, 0); - if (isnew) { - yasm_section_set_default(retval, 1); - } - return retval; -} - -static /*@observer@*/ /*@null@*/ yasm_section * -dbg_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, - /*@unused@*/ /*@null@*/ - yasm_valparamhead *objext_valparams, - unsigned long line) -{ - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; - yasm_valparam *vp; - yasm_section *retval; - int isnew; - - fprintf(objfmt_dbg->dbgfile, "section_switch(headp, "); - yasm_vps_print(valparams, objfmt_dbg->dbgfile); - fprintf(objfmt_dbg->dbgfile, ", "); - yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile); - fprintf(objfmt_dbg->dbgfile, ", %lu), returning ", line); - - vp = yasm_vps_first(valparams); - if (!yasm_vp_string(vp)) { - fprintf(objfmt_dbg->dbgfile, "NULL\n"); - return NULL; - } - retval = yasm_object_get_general(object, yasm_vp_string(vp), 0, 0, 0, - &isnew, line); - if (isnew) { - fprintf(objfmt_dbg->dbgfile, "(new) "); - } - yasm_section_set_default(retval, 0); - fprintf(objfmt_dbg->dbgfile, "\"%s\" section\n", vp->val); - return retval; -} - -static /*@observer@*/ /*@null@*/ yasm_symrec * -dbg_objfmt_get_special_sym(yasm_object *object, const char *name, - const char *parser) -{ - yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; - fprintf(objfmt_dbg->dbgfile, "get_special_sym(object, \"%s\", \"%s\")\n", - name, parser); - return NULL; -} - -/* Define valid debug formats to use with this object format */ -static const char *dbg_objfmt_dbgfmt_keywords[] = { - "null", - NULL -}; - -/* Define objfmt structure -- see objfmt.h for details */ -yasm_objfmt_module yasm_dbg_LTX_objfmt = { - "Trace of all info passed to object format module", - "dbg", - "dbg", - 32, - 0, - dbg_objfmt_dbgfmt_keywords, - "null", - NULL, /* no directives */ - NULL, /* no standard macros */ - dbg_objfmt_create, - dbg_objfmt_output, - dbg_objfmt_destroy, - dbg_objfmt_add_default_section, - dbg_objfmt_init_new_section, - dbg_objfmt_section_switch, - dbg_objfmt_get_special_sym -}; +/* + * Debugging object format (used to debug object format module interface) + * + * Copyright (C) 2001-2007 Peter Johnson + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND OTHER CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR OTHER CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ +#include <util.h> + +#include <libyasm.h> + + +typedef struct yasm_objfmt_dbg { + yasm_objfmt_base objfmt; /* base structure */ + + FILE *dbgfile; +} yasm_objfmt_dbg; + +yasm_objfmt_module yasm_dbg_LTX_objfmt; + + +static yasm_objfmt * +dbg_objfmt_create(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = yasm_xmalloc(sizeof(yasm_objfmt_dbg)); + + objfmt_dbg->objfmt.module = &yasm_dbg_LTX_objfmt; + + objfmt_dbg->dbgfile = tmpfile(); + if (!objfmt_dbg->dbgfile) { + fprintf(stderr, N_("could not open temporary file")); + return 0; + } + fprintf(objfmt_dbg->dbgfile, "create()\n"); + return (yasm_objfmt *)objfmt_dbg; +} + +static void +dbg_objfmt_output(yasm_object *object, FILE *f, int all_syms, + yasm_errwarns *errwarns) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + char buf[1024]; + size_t i; + + /* Copy temp file to real output file */ + rewind(objfmt_dbg->dbgfile); + while ((i = fread(buf, 1, 1024, objfmt_dbg->dbgfile))) { + if (fwrite(buf, 1, i, f) != i) + break; + } + + /* Reassign objfmt debug file to output file */ + fclose(objfmt_dbg->dbgfile); + objfmt_dbg->dbgfile = f; + + fprintf(objfmt_dbg->dbgfile, "output(f, object->\n"); + yasm_object_print(object, objfmt_dbg->dbgfile, 1); + fprintf(objfmt_dbg->dbgfile, "%d)\n", all_syms); + fprintf(objfmt_dbg->dbgfile, " Symbol Table:\n"); + yasm_symtab_print(object->symtab, objfmt_dbg->dbgfile, 1); +} + +static void +dbg_objfmt_destroy(yasm_objfmt *objfmt) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)objfmt; + fprintf(objfmt_dbg->dbgfile, "destroy()\n"); + yasm_xfree(objfmt); +} + +static void +dbg_objfmt_init_new_section(yasm_section *sect, unsigned long line) +{ + yasm_object *object = yasm_section_get_object(sect); + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + fprintf(objfmt_dbg->dbgfile, "init_new_section(\"%s\", %lu)\n", + yasm_section_get_name(sect), line); + yasm_symtab_define_label(object->symtab, ".text", + yasm_section_bcs_first(sect), 1, 0); +} + +static yasm_section * +dbg_objfmt_add_default_section(yasm_object *object) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_section *retval; + int isnew; + + fprintf(objfmt_dbg->dbgfile, "add_default_section()\n"); + retval = yasm_object_get_general(object, ".text", 0, 0, 0, &isnew, 0); + if (isnew) { + yasm_section_set_default(retval, 1); + } + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_section * +dbg_objfmt_section_switch(yasm_object *object, yasm_valparamhead *valparams, + /*@unused@*/ /*@null@*/ + yasm_valparamhead *objext_valparams, + unsigned long line) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + yasm_valparam *vp; + yasm_section *retval; + int isnew; + + fprintf(objfmt_dbg->dbgfile, "section_switch(headp, "); + yasm_vps_print(valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", "); + yasm_vps_print(objext_valparams, objfmt_dbg->dbgfile); + fprintf(objfmt_dbg->dbgfile, ", %lu), returning ", line); + + vp = yasm_vps_first(valparams); + if (!yasm_vp_string(vp)) { + fprintf(objfmt_dbg->dbgfile, "NULL\n"); + return NULL; + } + retval = yasm_object_get_general(object, yasm_vp_string(vp), 0, 0, 0, + &isnew, line); + if (isnew) { + fprintf(objfmt_dbg->dbgfile, "(new) "); + } + yasm_section_set_default(retval, 0); + fprintf(objfmt_dbg->dbgfile, "\"%s\" section\n", vp->val); + return retval; +} + +static /*@observer@*/ /*@null@*/ yasm_symrec * +dbg_objfmt_get_special_sym(yasm_object *object, const char *name, + const char *parser) +{ + yasm_objfmt_dbg *objfmt_dbg = (yasm_objfmt_dbg *)object->objfmt; + fprintf(objfmt_dbg->dbgfile, "get_special_sym(object, \"%s\", \"%s\")\n", + name, parser); + return NULL; +} + +/* Define valid debug formats to use with this object format */ +static const char *dbg_objfmt_dbgfmt_keywords[] = { + "null", + NULL +}; + +/* Define objfmt structure -- see objfmt.h for details */ +yasm_objfmt_module yasm_dbg_LTX_objfmt = { + "Trace of all info passed to object format module", + "dbg", + "dbg", + 32, + 0, + dbg_objfmt_dbgfmt_keywords, + "null", + NULL, /* no directives */ + NULL, /* no standard macros */ + dbg_objfmt_create, + dbg_objfmt_output, + dbg_objfmt_destroy, + dbg_objfmt_add_default_section, + dbg_objfmt_init_new_section, + dbg_objfmt_section_switch, + dbg_objfmt_get_special_sym +}; |