From c3aa32669815bb0ab124417a4decbf7e016595a5 Mon Sep 17 00:00:00 2001 From: "Koine Yuusuke(koinec)" Date: Sat, 31 Aug 2019 22:22:51 +0900 Subject: [PATCH] (LibGoblin) * CreateFile: drd64_libgoblin_dwarf_expression.[ch] * CreateFile: test_libgoblin_dwarf_expression.c --- libgoblin/Makefile | 13 +- libgoblin/drd64_libgoblin.h | 1 + libgoblin/drd64_libgoblin_dwarf_expression.c | 230 +++++++++++++++++++++++++++ libgoblin/drd64_libgoblin_dwarf_expression.h | 51 ++++++ libgoblin/test_libgoblin.c | 1 + libgoblin/test_libgoblin.h | 6 + libgoblin/test_libgoblin_dwarf_expression.c | 79 +++++++++ 7 files changed, 380 insertions(+), 1 deletion(-) create mode 100644 libgoblin/drd64_libgoblin_dwarf_expression.c create mode 100644 libgoblin/drd64_libgoblin_dwarf_expression.h create mode 100644 libgoblin/test_libgoblin_dwarf_expression.c diff --git a/libgoblin/Makefile b/libgoblin/Makefile index 53bf422..6d6aaa4 100644 --- a/libgoblin/Makefile +++ b/libgoblin/Makefile @@ -73,6 +73,7 @@ OBJS = drd64_libgoblin_api.o \ drd64_libgoblin_dwarf_abbrev.o \ drd64_libgoblin_dwarf_ranges.o \ drd64_libgoblin_dwarf_attrform.o \ + drd64_libgoblin_dwarf_expression.o \ drd64_libgoblin_dwarf_info.o \ drd64_libgoblin_dwarf_line.o \ drd64_libgoblin_dwarf_oldline.o \ @@ -120,6 +121,7 @@ HEADER = drd64_libgoblin.h \ drd64_libgoblin_dwarf_abbrev.h \ drd64_libgoblin_dwarf_ranges.h \ drd64_libgoblin_dwarf_attrform.h \ + drd64_libgoblin_dwarf_expression.h \ drd64_libgoblin_dwarf_info.h \ drd64_libgoblin_dwarf_line.h \ drd64_libgoblin_dwarf_oldline.h \ @@ -156,7 +158,8 @@ TEST_OBJS = test_libgoblin.o \ test_libgoblin_loadprog.o \ test_libgoblin_binfo.o \ test_libgoblin_objinfo.o \ - test_libgoblin_readbin.o + test_libgoblin_readbin.o \ + test_libgoblin_dwarf_expression.o TESTPROG = ../testdata/dwarftest @@ -255,6 +258,10 @@ drd64_libgoblin_dwarf_attrform.o: \ drd64_libgoblin_dwarf_attrform.c $(HEADER) $(CC) -c -o drd64_libgoblin_dwarf_attrform.o $(FLAGS_DEBUG) \ drd64_libgoblin_dwarf_attrform.c +drd64_libgoblin_dwarf_expression.o: \ + drd64_libgoblin_dwarf_expression.c $(HEADER) + $(CC) -c -o drd64_libgoblin_dwarf_expression.o $(FLAGS_DEBUG) \ + drd64_libgoblin_dwarf_expression.c drd64_libgoblin_dwarf_info.o: \ drd64_libgoblin_dwarf_info.c $(HEADER) $(CC) -c -o drd64_libgoblin_dwarf_info.o $(FLAGS_DEBUG) \ @@ -367,6 +374,10 @@ test_libgoblin_readbin.o: test_libgoblin_readbin.c $(HEADER) $(TEST_HEADER) $(CC) -c -o test_libgoblin_readbin.o \ $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \ test_libgoblin_readbin.c +test_libgoblin_dwarf_expression.o: test_libgoblin_dwarf_expression.c $(HEADER) $(TEST_HEADER) + $(CC) -c -o test_libgoblin_dwarf_expression.o \ + $(FLAGS_DEBUG) $(FLAGS_COMPILE) $(TEST_FLAGS_COMPILE) \ + test_libgoblin_dwarf_expression.c ../libfiletype.a: $(MAKE) -C ../libfiletype all diff --git a/libgoblin/drd64_libgoblin.h b/libgoblin/drd64_libgoblin.h index e839c3a..478d574 100644 --- a/libgoblin/drd64_libgoblin.h +++ b/libgoblin/drd64_libgoblin.h @@ -98,6 +98,7 @@ Comment: #include"drd64_libgoblin_dwarf_abbrev.h" #include"drd64_libgoblin_dwarf_ranges.h" #include"drd64_libgoblin_dwarf_attrform.h" +#include"drd64_libgoblin_dwarf_expression.h" #include"drd64_libgoblin_dwarf_info.h" #include"drd64_libgoblin_dwarf_line.h" #include"drd64_libgoblin_dwarf_oldline.h" diff --git a/libgoblin/drd64_libgoblin_dwarf_expression.c b/libgoblin/drd64_libgoblin_dwarf_expression.c new file mode 100644 index 0000000..ab608fc --- /dev/null +++ b/libgoblin/drd64_libgoblin_dwarf_expression.c @@ -0,0 +1,230 @@ +/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64 + + D r . D e a m o n 6 4 + for INTEL64(R), AMD64(R) + + Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved. + +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 Koine Yuusuke(koinec) ``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 Koine Yuusuke(koinec) OR 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. + +DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/ + +/* File Info ----------------------------------------------------------- +File: drd64_.c +Function: +Comment: +----------------------------------------------------------------------*/ + +#define DRD64_SRC_LIBGOBLIN_DWARF_EXPRESSION +#include"drd64_libgoblin.h" + +/*---------------------------------------------------------------------- +----------------------------------------------------------------------*/ + +/*---------------------------------------------------------------------- +----------------------------------------------------------------------*/ +LIBGOBLIN_DWARF_EXPRESSION_EXTERN +int + DWARF_Expression_Evaluate( + Byte *pb_data, + DWord dw_size ) +{ + return 0x00; +} + +/*---------------------------------------------------------------------- +----------------------------------------------------------------------*/ + + + +/* EOF of drd64_.c ----------------------------------- */ +/* + DW_OP_addr: // 0x03 + DW_OP_deref: // 0x06 + DW_OP_const1u: // 0x08 + DW_OP_const1s: // 0x09 + DW_OP_const2u: // 0x0a + DW_OP_const2s: // 0x0b + DW_OP_const4u: // 0x0c + DW_OP_const4s: // 0x0d + DW_OP_const8u: // 0x0e + DW_OP_const8s: // 0x0f + DW_OP_constu: // 0x10 + DW_OP_consts: // 0x11 + DW_OP_dup: // 0x12 + DW_OP_drop: // 0x13 + DW_OP_over: // 0x14 + DW_OP_pick: // 0x15 + DW_OP_swap: // 0x16 + DW_OP_rot: // 0x17 + DW_OP_xderef: // 0x18 + DW_OP_abs: // 0x19 + DW_OP_and: // 0x1a + DW_OP_div: // 0x1b + DW_OP_minus: // 0x1c + DW_OP_mod: // 0x1d + DW_OP_mul: // 0x1e + DW_OP_neg: // 0x1f + DW_OP_not: // 0x20 + DW_OP_or: // 0x21 + DW_OP_plus: // 0x22 + DW_OP_plus_uconst: // 0x23 + DW_OP_shl: // 0x24 + DW_OP_shr: // 0x25 + DW_OP_shra: // 0x26 + DW_OP_xor: // 0x27 + DW_OP_bra: // 0x28 + DW_OP_eq: // 0x29 + DW_OP_ge: // 0x2a + DW_OP_gt: // 0x2b + DW_OP_le: // 0x2c + DW_OP_lt: // 0x2d + DW_OP_ne: // 0x2e + DW_OP_skip: // 0x2f + DW_OP_lit0: // 0x30 + DW_OP_lit1: // 0x31 + DW_OP_lit2: // 0x32 + DW_OP_lit3: // 0x33 + DW_OP_lit4: // 0x34 + DW_OP_lit5: // 0x35 + DW_OP_lit6: // 0x36 + DW_OP_lit7: // 0x37 + DW_OP_lit8: // 0x38 + DW_OP_lit9: // 0x39 + DW_OP_lit10: // 0x3a + DW_OP_lit11: // 0x3b + DW_OP_lit12: // 0x3c + DW_OP_lit13: // 0x3d + DW_OP_lit14: // 0x3e + DW_OP_lit15: // 0x3f + DW_OP_lit16: // 0x40 + DW_OP_lit17: // 0x41 + DW_OP_lit18: // 0x42 + DW_OP_lit19: // 0x43 + DW_OP_lit20: // 0x44 + DW_OP_lit21: // 0x45 + DW_OP_lit22: // 0x46 + DW_OP_lit23: // 0x47 + DW_OP_lit24: // 0x48 + DW_OP_lit25: // 0x49 + DW_OP_lit26: // 0x4a + DW_OP_lit27: // 0x4b + DW_OP_lit28: // 0x4c + DW_OP_lit29: // 0x4d + DW_OP_lit30: // 0x4e + DW_OP_lit31: // 0x4f + DW_OP_reg0: // 0x50 + DW_OP_reg1: // 0x51 + DW_OP_reg2: // 0x52 + DW_OP_reg3: // 0x53 + DW_OP_reg4: // 0x54 + DW_OP_reg5: // 0x55 + DW_OP_reg6: // 0x56 + DW_OP_reg7: // 0x57 + DW_OP_reg8: // 0x58 + DW_OP_reg9: // 0x59 + DW_OP_reg10: // 0x5a + DW_OP_reg11: // 0x5b + DW_OP_reg12: // 0x5c + DW_OP_reg13: // 0x5d + DW_OP_reg14: // 0x5e + DW_OP_reg15: // 0x5f + DW_OP_reg16: // 0x60 + DW_OP_reg17: // 0x61 + DW_OP_reg18: // 0x62 + DW_OP_reg19: // 0x63 + DW_OP_reg20: // 0x64 + DW_OP_reg21: // 0x65 + DW_OP_reg22: // 0x66 + DW_OP_reg23: // 0x67 + DW_OP_reg24: // 0x68 + DW_OP_reg25: // 0x69 + DW_OP_reg26: // 0x6a + DW_OP_reg27: // 0x6b + DW_OP_reg28: // 0x6c + DW_OP_reg29: // 0x6d + DW_OP_reg30: // 0x6e + DW_OP_reg31: // 0x6f + DW_OP_breg0: // 0x70 + DW_OP_breg1: // 0x71 + DW_OP_breg2: // 0x72 + DW_OP_breg3: // 0x73 + DW_OP_breg4: // 0x74 + DW_OP_breg5: // 0x75 + DW_OP_breg6: // 0x76 + DW_OP_breg7: // 0x77 + DW_OP_breg8: // 0x78 + DW_OP_breg9: // 0x79 + DW_OP_breg10: // 0x7a + DW_OP_breg11: // 0x7b + DW_OP_breg12: // 0x7c + DW_OP_breg13: // 0x7d + DW_OP_breg14: // 0x7e + DW_OP_breg15: // 0x7f + DW_OP_breg16: // 0x80 + DW_OP_breg17: // 0x81 + DW_OP_breg18: // 0x82 + DW_OP_breg19: // 0x83 + DW_OP_breg20: // 0x84 + DW_OP_breg21: // 0x85 + DW_OP_breg22: // 0x86 + DW_OP_breg23: // 0x87 + DW_OP_breg24: // 0x88 + DW_OP_breg25: // 0x89 + DW_OP_breg26: // 0x8a + DW_OP_breg27: // 0x8b + DW_OP_breg28: // 0x8c + DW_OP_breg29: // 0x8d + DW_OP_breg30: // 0x8e + DW_OP_breg31: // 0x8f + DW_OP_regx: // 0x90 + DW_OP_fbreg: // 0x91 + DW_OP_bregx: // 0x92 + DW_OP_piece: // 0x93 + DW_OP_deref_size: // 0x94 + DW_OP_xderef_size: // 0x95 + DW_OP_nop: // 0x96 + DW_OP_push_object_address: // 0x97 + DW_OP_call2: // 0x98 + DW_OP_call4: // 0x99 + DW_OP_call_ref: // 0x9a + DW_OP_form_tls_address: // 0x9b + DW_OP_call_frame_cfa: // 0x9c + DW_OP_bit_piece: // 0x9d + DW_OP_implicit_value: // 0x9e + DW_OP_stack_value: // 0x9f + DW_OP_lo_user: // 0xe0 + DW_OP_hi_user: // 0xff + DW_OP_GNU_push_tls_address: // 0xe0 + DW_OP_GNU_uninit: // 0xf0 + DW_OP_GNU_encoded_addr: // 0xf1 + DW_OP_GNU_implicit_pointer: // 0xf2 + DW_OP_GNU_entry_value: // 0xf3 + DW_OP_GNU_const_type: // 0xf4 + DW_OP_GNU_regval_type: // 0xf5 + DW_OP_GNU_deref_type: // 0xf6 + DW_OP_GNU_convert: // 0xf7 + DW_OP_GNU_reinterpret: // 0xf9 + DW_OP_GNU_parameter_ref: // 0xfa + DW_OP_GNU_addr_index: // 0xfb + DW_OP_GNU_const_index: // 0xfc +*/ diff --git a/libgoblin/drd64_libgoblin_dwarf_expression.h b/libgoblin/drd64_libgoblin_dwarf_expression.h new file mode 100644 index 0000000..35d1ef6 --- /dev/null +++ b/libgoblin/drd64_libgoblin_dwarf_expression.h @@ -0,0 +1,51 @@ +/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64 + + D r . D e a m o n 6 4 + for INTEL64(R), AMD64(R) + + Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved. + +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 Koine Yuusuke(koinec) ``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 Koine Yuusuke(koinec) OR 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. + +DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/ + +/* File Info ----------------------------------------------------------- +File: drd64_.h +Function: Header +Comment: +----------------------------------------------------------------------*/ + +#ifndef DRD64_HEADER_LIBGOBLIN_DWARF_EXPRESSION +#define DRD64_HEADER_LIBGOBLIN_DWARF_EXPRESSION + +#include"drd64_libgoblin.h" + +#ifdef DRD64_SRC_LIBGOBLIN_DWARF_EXPRESSION + #define LIBGOBLIN_DWARF_EXPRESSION_EXTERN +#else + #define LIBGOBLIN_DWARF_EXPRESSION_EXTERN extern +#endif + + +#endif /* DRD64_HEADER_LIBGOBLIN_BINFO */ + +/* EOF of drd64_.h ----------------------------------- */ diff --git a/libgoblin/test_libgoblin.c b/libgoblin/test_libgoblin.c index 2c08d9c..4f14e88 100644 --- a/libgoblin/test_libgoblin.c +++ b/libgoblin/test_libgoblin.c @@ -57,6 +57,7 @@ int Test_LibGoblin_SrcFile(); Test_LibGoblin_ObjInfo(); Test_LibGoblin_ReadBinary(); + Test_LibGoblin_DWARF_Expression(); // Library Test ------------- Test_LibGoblin_LoadProg(); diff --git a/libgoblin/test_libgoblin.h b/libgoblin/test_libgoblin.h index 8602ee8..e6ececa 100644 --- a/libgoblin/test_libgoblin.h +++ b/libgoblin/test_libgoblin.h @@ -98,6 +98,12 @@ DRD64_TEST_LIBGOBLIN_READBINARY_EXTERN int Test_LibGoblin_ReadBinary( void ); #endif DRD64_TEST_LIBGOBLIN_LOADPROG_EXTERN int Test_LibGoblin_LoadProg( void ); +#ifdef DRD64_SRC_TEST_LIBGOBLIN_DWARF_EXPRESSION + #define DRD64_TEST_LIBGOBLIN_DWARF_EXPRESSION_EXTERN +#else + #define DRD64_TEST_LIBGOBLIN_DWARF_EXPRESSION_EXTERN extern +#endif +DRD64_TEST_LIBGOBLIN_DWARF_EXPRESSION_EXTERN int Test_LibGoblin_DWARF_Expression( void ); #endif /* DRD64_HEADER_XXX */ diff --git a/libgoblin/test_libgoblin_dwarf_expression.c b/libgoblin/test_libgoblin_dwarf_expression.c new file mode 100644 index 0000000..88e3bc6 --- /dev/null +++ b/libgoblin/test_libgoblin_dwarf_expression.c @@ -0,0 +1,79 @@ +/*DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64 + + D r . D e a m o n 6 4 + for INTEL64(R), AMD64(R) + + Copyright(C) 2007-2009 Koine Yuusuke(koinec). All rights reserved. + +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 Koine Yuusuke(koinec) ``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 Koine Yuusuke(koinec) OR 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. + +DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64DrDeAmOn64*/ + +/* File Info ----------------------------------------------------------- +File: drd64_.c +Function: +Comment: +----------------------------------------------------------------------*/ + +#define DRD64_SRC_TEST_LIBGOBLIN_DWARF_EXPRESSION +#include"drd64_libgoblin.h" +#include"test_libgoblin.h" + + +/* (API) LibGoblin_Init() & Term() ************************************/ +/*--------------------------------------------------------------------*/ +void Test_LibGoblin_DWARF_Expression_test00_001( void ) +{ + int i_result; + +/* + i_result = LibGoblin_Init(); + CU_ASSERT( 0x00 == i_result ); + + i_result = LibGoblin_Term(); + CU_ASSERT( 0x00 == i_result ); +*/ + + return; +} + + +/*---------------------------------------------------------------------- +----------------------------------------------------------------------*/ +DRD64_TEST_LIBGOBLIN_DWARF_EXPRESSION_EXTERN +int + Test_LibGoblin_DWARF_Expression( + void ) +{ + CU_pSuite pt_goblin; + + pt_goblin = CU_add_suite( "LibGoblin_DWARF_Expression", NULL, NULL ); + + CU_add_test( pt_goblin, "LibGoblin_DWARF_Expression_test00_001", + Test_LibGoblin_DWARF_Expression_test00_001 ); + + + return 0x00; +} + + +/* EOF of drd64_.c ----------------------------------- */ -- 2.11.0