/* codeview.h - CodeView debug support
   Copyright (C) 2022-2024 Free Software Foundation, Inc.

   This file is part of GAS, the GNU Assembler.

   GAS 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.

   GAS 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 GAS; see the file COPYING.  If not, write to the Free
   Software Foundation, 51 Franklin Street - Fifth Floor, Boston, MA
   02110-1301, USA.  */

/* Header files referred to below can be found in Microsoft's PDB
   repository: https://github.com/microsoft/microsoft-pdb.  */

#ifndef GAS_CODEVIEW_H
#define GAS_CODEVIEW_H

#define CV_SIGNATURE_C13	4

#define DEBUG_S_SYMBOLS		0xf1
#define DEBUG_S_LINES		0xf2
#define DEBUG_S_STRINGTABLE	0xf3
#define DEBUG_S_FILECHKSMS	0xf4

#define S_OBJNAME		0x1101
#define S_COMPILE3		0x113c

#define CV_CFL_MASM		0x03

#define CV_CFL_80386		0x03
#define CV_CFL_X64		0xD0
#define CV_CFL_ARM64		0xF6

#define CHKSUM_TYPE_MD5		1

/* OBJNAMESYM in cvinfo.h */
struct OBJNAMESYM
{
  uint16_t length;
  uint16_t type;
  uint32_t signature;
};

/* COMPILESYM3 in cvinfo.h */
struct COMPILESYM3
{
  uint16_t length;
  uint16_t type;
  uint32_t flags;
  uint16_t machine;
  uint16_t frontend_major;
  uint16_t frontend_minor;
  uint16_t frontend_build;
  uint16_t frontend_qfe;
  uint16_t backend_major;
  uint16_t backend_minor;
  uint16_t backend_build;
  uint16_t backend_qfe;
} ATTRIBUTE_PACKED;

/* filedata in dumpsym7.cpp */
struct file_checksum
{
  uint32_t file_id;
  uint8_t checksum_length;
  uint8_t checksum_type;
} ATTRIBUTE_PACKED;

/* CV_DebugSLinesHeader_t in cvinfo.h */
struct cv_lines_header
{
  uint32_t offset;
  uint16_t section;
  uint16_t flags;
  uint32_t length;
};

/* CV_DebugSLinesFileBlockHeader_t in cvinfo.h */
struct cv_lines_block
{
  uint32_t file_id;
  uint32_t num_lines;
  uint32_t length;
};

/* CV_Line_t in cvinfo.h */
struct cv_line
{
  uint32_t offset;
  uint32_t line_no;
};

extern void codeview_finish (void);
extern void codeview_generate_asm_lineno (void);

#endif
