Open suzukiplan opened 3 hours ago
#macro hoge(arg1, arg2, arg3) { LD BC, arg1 LD DE, arg2 LD HL, arg3 } org $0000 hoge(1, 2, ($C000))
valgrind で調べたコールスタック
==202480== Process terminating with default action of signal 11 (SIGSEGV) ==202480== Access not within mapped region at address 0x4877FE0 ==202480== at 0x49E0AE4: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::~basic_string() (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33) ==202480== by 0x13CA41: std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >::~pair() (stl_pair.h:187) ==202480== by 0x144640: destroy<std::pair<TokenType, std::__cxx11::basic_string<char> > > (new_allocator.h:198) ==202480== by 0x144640: destroy<std::pair<TokenType, std::__cxx11::basic_string<char> > > (alloc_traits.h:558) ==202480== by 0x144640: std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::_M_erase(__gnu_cxx::__normal_iterator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >*, std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >) (vector.tcc:187) ==202480== by 0x13F238: std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >::erase(__gnu_cxx::__normal_iterator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > const*, std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > > >) (stl_vector.h:1535) ==202480== by 0x117C36: evaluate_formulas(std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*) (formulas.hpp:23) ==202480== by 0x117C68: evaluate_formulas(std::vector<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::allocator<std::pair<TokenType, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > >*) (formulas.hpp:26) ==202480== by 0x118958: evaluate_formulas(LineData*) (formulas.hpp:140) ==202480== by 0x138DF2: assemble(std::vector<LineData*, std::allocator<LineData*> >) (vgsasm.cpp:168) ==202480== by 0x13A04F: assemble(char const*) (vgsasm.cpp:340) ==202480== by 0x13A51A: main (vgsasm.cpp:417)
evaluate_formulas で解析前に line->printDebug() した結果:
line->printDebug()
`HOGE` `(` 0x1 `,` 0x2 `,` `(` 0xC000 `)` `)` Segmentation fault (core dumped)
マクロ引数の '()' が address ではなく bracket になっていることが問題。
valgrind で調べたコールスタック