Mono.Debugger.Backend.DwarfFrameReader.Entry.Read C# (CSharp) Method

Read() public method

public Read ( DwarfBinaryReader reader, long end_pos ) : void
reader DwarfBinaryReader
end_pos long
return void
            public void Read(DwarfBinaryReader reader, long end_pos)
            {
                while (reader.Position < end_pos) {
                    byte first = reader.ReadByte ();
                    int opcode = first >> 6;
                    int low = first & 0x3f;

                    if (opcode == (int) DW_CFA.offset) {
                        int offset = reader.ReadLeb128 ();
                        offset *= cie.DataAlignment;

                        columns [low + 1].State = State.Offset;
                        columns [low + 1].Register = 0;
                        columns [low + 1].Offset = offset;
                        continue;
                    } else if (opcode == (int) DW_CFA.advance_loc) {
                        current_address += low;
                        if (current_address > address)
                            return;
                        continue;
                    } else if (opcode != 0) {
                        continue;
                    }

                    switch ((DW_CFA) low) {
                    case DW_CFA.nop:
                        break;
                    case DW_CFA.def_cfa:
                        columns [0].State = State.Register;
                        columns [0].Register = reader.ReadLeb128 ();
                        columns [0].Offset = reader.ReadLeb128 ();
                        break;
                    case DW_CFA.def_cfa_register:
                        columns [0].State = State.Register;
                        columns [0].Register = reader.ReadLeb128 ();
                        break;
                    case DW_CFA.def_cfa_offset:
                        columns [0].Offset = reader.ReadLeb128 ();
                        break;
                    case DW_CFA.gnu_args_size:
                        // Ignored.
                        reader.ReadLeb128 ();
                        break;
                    default:
                        break;
                    }
                }
            }