ld: Add pdb support to aarch64-w64-mingw32

This extends PDB support to the aarch64 PE targets.

The changes to the test files are just to make it so they can be assembled as
either x86, x86_64, or aarch64, mainly by changing the comment style.
The only actual code change here is in adding the architecture constants
to pdb.c.
This commit is contained in:
Mark Harmstone
2023-01-23 23:01:54 +00:00
parent 5cf1148314
commit 9a02fbd198
16 changed files with 902 additions and 885 deletions
+1 -1
View File
@@ -121,7 +121,7 @@ aarch64-*-haiku*) targ_emul=aarch64haiku
aarch64-*-pe* | aarch64-*-mingw*)
targ_emul=aarch64pe
targ_extra_emuls="arm64pe"
targ_extra_ofiles="deffilep.o pep-dll-aarch64.o pe-dll.o"
targ_extra_ofiles="deffilep.o pep-dll-aarch64.o pe-dll.o pdb.o"
;;
alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
targ_emul=elf64alpha_fbsd
+2 -1
View File
@@ -79,7 +79,8 @@ EOF
case ${target} in
x86_64-*-mingw* | x86_64-*-pe | x86_64-*-pep | x86_64-*-cygwin | \
i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe)
i[3-7]86-*-mingw32* | i[3-7]86-*-cygwin* | i[3-7]86-*-winnt | i[3-7]86-*-pe | \
aarch64-*-mingw* | aarch64-*-pe* )
fragment <<EOF
#include "pdb.h"
EOF
+25 -11
View File
@@ -591,13 +591,20 @@ populate_type_stream (bfd *pdb, bfd *stream, struct types *types)
static uint16_t
get_arch_number (bfd *abfd)
{
if (abfd->arch_info->arch != bfd_arch_i386)
return 0;
switch (abfd->arch_info->arch)
{
case bfd_arch_i386:
if (abfd->arch_info->mach & bfd_mach_x86_64)
return IMAGE_FILE_MACHINE_AMD64;
else
return IMAGE_FILE_MACHINE_I386;
if (abfd->arch_info->mach & bfd_mach_x86_64)
return IMAGE_FILE_MACHINE_AMD64;
case bfd_arch_aarch64:
return IMAGE_FILE_MACHINE_ARM64;
return IMAGE_FILE_MACHINE_I386;
default:
return 0;
}
}
/* Validate the DEBUG_S_FILECHKSMS entry within a module's .debug$S
@@ -3618,13 +3625,20 @@ handle_debugt_section (asection *s, bfd *mod, struct types *types,
static uint16_t
target_processor (bfd *abfd)
{
if (abfd->arch_info->arch != bfd_arch_i386)
return 0;
switch (abfd->arch_info->arch)
{
case bfd_arch_i386:
if (abfd->arch_info->mach & bfd_mach_x86_64)
return CV_CFL_X64;
else
return CV_CFL_80386;
if (abfd->arch_info->mach & bfd_mach_x86_64)
return CV_CFL_X64;
else
return CV_CFL_80386;
case bfd_arch_aarch64:
return CV_CFL_ARM64;
default:
return 0;
}
}
/* Create the symbols that go in "* Linker *", the dummy module created
+1
View File
@@ -820,6 +820,7 @@ struct objname
#define CV_CFL_80386 0x03
#define CV_CFL_X64 0xD0
#define CV_CFL_ARM64 0xF6
#define CV_CFL_LINK 0x07
+33 -33
View File
@@ -26,20 +26,20 @@
.gproc2:
.short .gproc2_end - .gproc2 - 2
.short S_GPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long 1 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1002 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long 1 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1002 /* type */
.secrel32 proc2
.secidx proc2
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc2"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc2_end:
.short .udt1 - .gproc2_end - 2
@@ -48,7 +48,7 @@
.udt1:
.short .syms_end - .udt1 - 2
.short S_UDT
.long 0x1004 # struct bar
.long 0x1004 /* struct bar */
.asciz "bar"
.syms_end:
@@ -57,19 +57,19 @@
.long CV_SIGNATURE_C13
# Type 1000, const uint32_t
/* Type 1000, const uint32_t */
.mod1:
.short .arglist1 - .mod1 - 2
.short LF_MODIFIER
.long T_UINT4
.short 1 # const
.short 1 /* const */
.p2align 2
# Type 1001, arglist (uint32_t)
/* Type 1001, arglist (uint32_t) */
.arglist1:
.short .proctype1 - .arglist1 - 2
.short LF_ARGLIST
.long 1 # no. entries
.long 1 /* no. entries */
.long T_UINT4
# Type 1002, procedure (return type T_VOID, arglist 1001)
@@ -77,34 +77,34 @@
.short .fieldlist1 - .proctype1 - 2
.short LF_PROCEDURE
.long T_VOID
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x1001
# Type 1003, field list for struct bar
/* Type 1003, field list for struct bar */
.fieldlist1:
.short .struct1 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_UINT4
.short 0 # offset
.short 0 /* offset */
.asciz "num1"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 1004, declaration of struct bar
/* Type 1004, declaration of struct bar */
.struct1:
.short .types_end - .struct1 - 2
.short LF_STRUCTURE
.short 1 # no. members
.short 0 # property
.long 0x1003 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "bar" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 1 /* no. members */
.short 0 /* property */
.long 0x1003 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "bar" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.types_end:
+246 -246
View File
@@ -47,23 +47,23 @@
.ldata1:
.short .ldata1a - .ldata1 - 2
.short S_LDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar1
.secidx lvar1
.asciz "lvar1"
.ldata1a: # duplicate with same address
.ldata1a: /* duplicate with same address */
.short .ldata1b - .ldata1a - 2
.short S_LDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar1
.secidx lvar1
.asciz "lvar1"
.ldata1b: # duplicate with different address
.ldata1b: /* duplicate with different address */
.short .ldata2 - .ldata1b - 2
.short S_LDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar1a
.secidx lvar1a
.asciz "lvar1"
@@ -71,7 +71,7 @@
.ldata2:
.short .gdata1 - .ldata2 - 2
.short S_LDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar2
.secidx lvar2
.asciz "lvar2"
@@ -79,7 +79,7 @@
.gdata1:
.short .gdata2 - .gdata1 - 2
.short S_GDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 gvar1
.secidx gvar1
.asciz "gvar1"
@@ -87,7 +87,7 @@
.gdata2:
.short .gproc1 - .gdata2 - 2
.short S_GDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 gvar2
.secidx gvar2
.asciz "gvar2"
@@ -95,20 +95,20 @@
.gproc1:
.short .gproc1_end - .gproc1 - 2
.short S_GPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc1_end - proc1 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1002 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc1_end - proc1 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1002 /* type */
.secrel32 proc1
.secidx proc1
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc1"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc1_end:
.short .gproc2 - .gproc1_end - 2
@@ -117,31 +117,31 @@
.gproc2:
.short .udt1 - .gproc2 - 2
.short S_GPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc2_end - proc2 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1002 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc2_end - proc2 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1002 /* type */
.secrel32 proc2
.secidx proc2
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc2"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.udt1:
.short .ldata3 - .udt1 - 2
.short S_UDT
.long 0x1011 # struct bar
.long 0x1011 /* struct bar */
.asciz "bar"
.ldata3:
.short .lthread1 - .ldata3 - 2
.short S_LDATA32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar3
.secidx lvar3
.asciz "lvar3"
@@ -149,7 +149,7 @@
.lthread1:
.short .gproc2_end - .lthread1 - 2
.short S_LTHREAD32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar4
.secidx lvar4
.asciz "lvar4"
@@ -161,20 +161,20 @@
.gproc3:
.short .gproc3_end - .gproc3 - 2
.short S_LPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc3_end - proc3 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1002 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc3_end - proc3 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1002 /* type */
.secrel32 proc3
.secidx proc3
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc3"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc3_end:
.short .gproc4 - .gproc3_end - 2
@@ -183,20 +183,20 @@
.gproc4:
.short .gproc4_end - .gproc4 - 2
.short S_LPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc4_end - proc4 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1002 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc4_end - proc4 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1002 /* type */
.secrel32 proc4
.secidx proc4
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc4"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc4_end:
.short .gproc5 - .gproc4_end - 2
@@ -205,20 +205,20 @@
.gproc5:
.short .gproc5_end - .gproc5 - 2
.short S_GPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc5_end - proc5 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1003 # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc5_end - proc5 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1003 /* func ID */
.secrel32 proc5
.secidx proc5
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc5"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc5_end:
.short .gproc6 - .gproc5_end - 2
@@ -227,20 +227,20 @@
.gproc6:
.short .gproc6_end - .gproc6 - 2
.short S_GPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc6_end - proc6 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1004 # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc6_end - proc6 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1004 /* func ID */
.secrel32 proc6
.secidx proc6
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc6"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc6_end:
.short .gproc7 - .gproc6_end - 2
@@ -249,18 +249,18 @@
.gproc7:
.short .gproc7_end - .gproc7 - 2
.short S_GPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc7_end - proc7 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100a # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc7_end - proc7 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100a /* func ID */
.secrel32 proc7
.secidx proc7
.byte 0 # flags
.byte 0 /* flags */
.asciz "foo::method"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.gproc7_end:
.short .gproc8 - .gproc7_end - 2
@@ -269,16 +269,16 @@
.gproc8:
.short .gproc8_end - .gproc8 - 2
.short S_GPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc8_end - proc8 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100b # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc8_end - proc8 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100b /* func ID */
.secrel32 proc8
.secidx proc8
.byte 0 # flags
.byte 0 /* flags */
.asciz "foo::method2"
.gproc8_end:
@@ -288,20 +288,20 @@
.gproc9:
.short .gproc9_end - .gproc9 - 2
.short S_LPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc9_end - proc9 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100c # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc9_end - proc9 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100c /* func ID */
.secrel32 proc9
.secidx proc9
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc9"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc9_end:
.short .gproc10 - .gproc9_end - 2
@@ -310,19 +310,19 @@
.gproc10:
.short .gproc10_end - .gproc10 - 2
.short S_GPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc10_end - proc10 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100d # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc10_end - proc10 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100d /* func ID */
.secrel32 proc10
.secidx proc10
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc10"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.gproc10_end:
.short .gproc11 - .gproc10_end - 2
@@ -331,16 +331,16 @@
.gproc11:
.short .gproc11_end - .gproc11 - 2
.short S_LPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc11_end - proc11 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100e # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc11_end - proc11 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100e /* func ID */
.secrel32 proc11
.secidx proc11
.byte 0 # flags
.byte 0 /* flags */
.asciz "foo::method3"
.gproc11_end:
@@ -350,16 +350,16 @@
.gproc12:
.short .gproc12_end - .gproc12 - 2
.short S_LPROC32_ID
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc12_end - proc12 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x100f # func ID
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc12_end - proc12 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x100f /* func ID */
.secrel32 proc12
.secidx proc12
.byte 0 # flags
.byte 0 /* flags */
.asciz "foo::method4"
.gproc12_end:
@@ -369,7 +369,7 @@
.udt2:
.short .constant1 - .udt2 - 2
.short S_UDT
.long 0x1009 # class foo
.long 0x1009 /* class foo */
.asciz "foo"
.constant1:
@@ -378,9 +378,9 @@
.long T_UINT4
.short 42
.asciz "answer"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.constant2:
.short .lthread2 - .constant2 - 2
@@ -389,13 +389,13 @@
.short LF_UQUADWORD
.quad 0x0123456789abcdef
.asciz "answer2"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.lthread2:
.short .lthread3 - .lthread2 - 2
.short S_LTHREAD32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar5
.secidx lvar5
.asciz "lvar5"
@@ -403,7 +403,7 @@
.lthread3:
.short .gthread1 - .lthread3 - 2
.short S_LTHREAD32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 lvar6
.secidx lvar6
.asciz "lvar6"
@@ -411,7 +411,7 @@
.gthread1:
.short .gthread2 - .gthread1 - 2
.short S_GTHREAD32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 gvar3
.secidx gvar3
.asciz "gvar3"
@@ -419,7 +419,7 @@
.gthread2:
.short .syms_end - .gthread2 - 2
.short S_GTHREAD32
.long 0x1000 # const uint32_t
.long 0x1000 /* const uint32_t */
.secrel32 gvar4
.secidx gvar4
.asciz "gvar4"
@@ -431,197 +431,197 @@
.long CV_SIGNATURE_C13
# Type 1000, const uint32_t
/* Type 1000, const uint32_t */
.mod1:
.short .arglist1 - .mod1 - 2
.short LF_MODIFIER
.long T_UINT4
.short 1 # const
.short 1 /* const */
.p2align 2
# Type 1001, arglist (uint32_t)
/* Type 1001, arglist (uint32_t) */
.arglist1:
.short .proctype1 - .arglist1 - 2
.short LF_ARGLIST
.long 1 # no. entries
.long 1 /* no. entries */
.long T_UINT4
# Type 1002, procedure (return type T_VOID, arglist 1001)
/* Type 1002, procedure (return type T_VOID, arglist 1001) */
.proctype1:
.short .funcid1 - .proctype1 - 2
.short LF_PROCEDURE
.long T_VOID
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x1001
# Type 1003, func ID for proc5
/* Type 1003, func ID for proc5 */
.funcid1:
.short .funcid2 - .funcid1 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x1002 # type
.long 0 /* parent scope */
.long 0x1002 /* type */
.asciz "proc5"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1004, func ID for proc6
/* Type 1004, func ID for proc6 */
.funcid2:
.short .class1 - .funcid2 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x1002 # type
.long 0 /* parent scope */
.long 0x1002 /* type */
.asciz "proc6"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1005, forward declaration of class foo
/* Type 1005, forward declaration of class foo */
.class1:
.short .ptr1 - .class1 - 2
.short LF_CLASS
.short 0 # no. members
.short 0x80 # property (forward declaration)
.long 0 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0x80 /* property (forward declaration) */
.long 0 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1006, pointer to 1005
/* Type 1006, pointer to 1005 */
.ptr1:
.short .mfunction1 - .ptr1 - 2
.short LF_POINTER
.long 0x1005
.long (8 << 13) | CV_PTR_64
# Type 1007, member function of 1005, return type void, arg list 1001
/* Type 1007, member function of 1005, return type void, arg list 1001 */
.mfunction1:
.short .fieldlist1 - .mfunction1 - 2
.short LF_MFUNCTION
.long T_VOID
.long 0x1005
.long 0x1006 # type of "this" pointer
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.long 0x1001 # arg list
.long 0 # "this" adjustment
.long 0x1006 /* type of "this" pointer */
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x1001 /* arg list */
.long 0 /* "this" adjustment */
# Type 1008, field list for class foo
/* Type 1008, field list for class foo */
.fieldlist1:
.short .class2 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x1007 # method type
.short 0 /* method attribute */
.long 0x1007 /* method type */
.asciz "method"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x1007 # method type
.short 0 /* method attribute */
.long 0x1007 /* method type */
.asciz "method2"
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x1007 # method type
.short 0 /* method attribute */
.long 0x1007 /* method type */
.asciz "method3"
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x1007 # method type
.short 0 /* method attribute */
.long 0x1007 /* method type */
.asciz "method4"
# Type 1009, actual declaration of class foo
/* Type 1009, actual declaration of class foo */
.class2:
.short .mfunc1 - .class2 - 2
.short LF_CLASS
.short 0 # no. members
.short 0 # property
.long 0x1008 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0 /* property */
.long 0x1008 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100a, function "method" within class "foo"
/* Type 100a, function "method" within class "foo" */
.mfunc1:
.short .mfunc2 - .mfunc1 - 2
.short LF_MFUNC_ID
.long 0x1009 # parent class
.long 0x1002 # function type
.long 0x1009 /* parent class */
.long 0x1002 /* function type */
.asciz "method"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 100b, function "method2" within class "foo"
/* Type 100b, function "method2" within class "foo" */
.mfunc2:
.short .funcid3 - .mfunc2 - 2
.short LF_MFUNC_ID
.long 0x1009 # parent class
.long 0x1002 # function type
.long 0x1009 /* parent class */
.long 0x1002 /* function type */
.asciz "method2"
# Type 100c, func ID for proc9
/* Type 100c, func ID for proc9 */
.funcid3:
.short .funcid4 - .funcid3 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x1002 # type
.long 0 /* parent scope */
.long 0x1002 /* type */
.asciz "proc9"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100d, func ID for proc10
/* Type 100d, func ID for proc10 */
.funcid4:
.short .mfunc3 - .funcid4 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x1002 # type
.long 0 /* parent scope */
.long 0x1002 /* type */
.asciz "proc10"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 100e, function "method3" within class "foo"
/* Type 100e, function "method3" within class "foo" */
.mfunc3:
.short .mfunc4 - .mfunc3 - 2
.short LF_MFUNC_ID
.long 0x1009 # parent class
.long 0x1002 # function type
.long 0x1009 /* parent class */
.long 0x1002 /* function type */
.asciz "method3"
# Type 100f, function "method4" within class "foo"
/* Type 100f, function "method4" within class "foo" */
.mfunc4:
.short .fieldlist2 - .mfunc4 - 2
.short LF_MFUNC_ID
.long 0x1009 # parent class
.long 0x1002 # function type
.long 0x1009 /* parent class */
.long 0x1002 /* function type */
.asciz "method4"
# Type 1010, field list for struct bar
/* Type 1010, field list for struct bar */
.fieldlist2:
.short .struct1 - .fieldlist2 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_UINT4
.short 0 # offset
.short 0 /* offset */
.asciz "num1"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 1011, declaration of struct bar
/* Type 1011, declaration of struct bar */
.struct1:
.short .types_end - .struct1 - 2
.short LF_STRUCTURE
.short 1 # no. members
.short 0 # property
.long 0x1010 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "bar" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 1 /* no. members */
.short 0 /* property */
.long 0x1010 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "bar" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.types_end:
@@ -657,37 +657,37 @@ lvar5:
.global main
main:
jmp main
.short 0
.secrel32 .data
.global proc2
proc2:
nop
.byte 0
.proc2_end:
.global proc4
proc4:
nop
.byte 0
.proc4_end:
.global proc6
proc6:
nop
.byte 0
.proc6_end:
.global proc8
proc8:
nop
.byte 0
.proc8_end:
.global proc10
proc10:
nop
.byte 0
.proc10_end:
.global proc12
proc12:
nop
.byte 0
.proc12_end:
.section "gcsect"
@@ -705,32 +705,32 @@ gvar4:
.global proc1
proc1:
nop
.byte 0
.proc1_end:
.global proc3
proc3:
nop
.byte 0
.proc3_end:
.global proc5
proc5:
nop
.byte 0
.proc5_end:
.global proc7
proc7:
nop
.byte 0
.proc7_end:
.global proc9
proc9:
nop
.byte 0
.proc9_end:
.global proc11
proc11:
nop
.byte 0
.proc11_end:
lvar6:
+162 -162
View File
@@ -50,26 +50,26 @@
.objname1:
.short .compile1 - .objname1 - 2
.short S_OBJNAME
.long 0 # signature
.long 0 /* signature */
.asciz "syms3.o"
.compile1:
.short .unamespace1 - .compile1 - 2
.short S_COMPILE3
.long 0 # flags
.short CV_CFL_AMD64 # target processor
.short 0 # frontend major
.short 0 # frontend minor
.short 0 # frontend build
.short 0 # frontend qfe
.short 0 # backend major
.short 0 # backend minor
.short 0 # backend build
.short 0 # backend qfe
.long 0 /* flags */
.short CV_CFL_AMD64 /* target processor */
.short 0 /* frontend major */
.short 0 /* frontend minor */
.short 0 /* frontend build */
.short 0 /* frontend qfe */
.short 0 /* backend major */
.short 0 /* backend minor */
.short 0 /* backend build */
.short 0 /* backend qfe */
.asciz "GNU AS"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.unamespace1:
.short .sbuildinfo1 - .unamespace1 - 2
@@ -79,180 +79,180 @@
.sbuildinfo1:
.short .gproc1 - .sbuildinfo1 - 2
.short S_BUILDINFO
.long 0x1007 # type
.long 0x1007 /* type */
.gproc1:
.short .frameproc1 - .gproc1 - 2
.short S_GPROC32
.long 0 # parent
.long 0 # end
.long 0 # next symbol
.long .proc1_end - proc1 # length
.long 0 # debug start offset
.long 0 # debug end offset
.long 0x1001 # type
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next symbol */
.long .proc1_end - proc1 /* length */
.long 0 /* debug start offset */
.long 0 /* debug end offset */
.long 0x1001 /* type */
.secrel32 proc1
.secidx proc1
.byte 0 # flags
.byte 0 /* flags */
.asciz "proc1"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.frameproc1:
.short .framecookie1 - .frameproc1 - 2
.short S_FRAMEPROC
.long 0 # frame size
.long 0 # frame padding
.long 0 # padding offset
.long 0 # size of callee-save registers
.long 0 # offset of exception handler
.short 0 # section of exception handler
.long 0 # flags
.byte 0xf2 # padding
.byte 0xf1 # padding
.long 0 /* frame size */
.long 0 /* frame padding */
.long 0 /* padding offset */
.long 0 /* size of callee-save registers */
.long 0 /* offset of exception handler */
.short 0 /* section of exception handler */
.long 0 /* flags */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.framecookie1:
.short .bprel1 - .framecookie1 - 2
.short S_FRAMECOOKIE
.long 8 # frame-relative offset
.short CV_AMD64_RAX # register
.long 0 # cookie type (CV_COOKIETYPE_COPY)
.byte 0 # flags
.byte 0xf1 # padding
.long 8 /* frame-relative offset */
.short CV_AMD64_RAX /* register */
.long 0 /* cookie type (CV_COOKIETYPE_COPY) */
.byte 0 /* flags */
.byte 0xf1 /* padding */
.bprel1:
.short .reg1 - .bprel1 - 2
.short S_BPREL32
.long 4 # BP-relative offset
.long 0x1008 # type
.long 4 /* BP-relative offset */
.long 0x1008 /* type */
.asciz "foo"
.reg1:
.short .regrel1 - .reg1 - 2
.short S_REGISTER
.long 0x1008 # type
.long 0x1008 /* type */
.short CV_AMD64_RAX
.asciz "bar"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.regrel1:
.short .local1 - .regrel1 - 2
.short S_REGREL32
.long 4 # offset
.long 0x1008 # type
.long 4 /* offset */
.long 0x1008 /* type */
.short CV_AMD64_RAX
.asciz "baz"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.local1:
.short .defrange1 - .local1 - 2
.short S_LOCAL
.long 0x1008 # type
.short 0 # flags
.long 0x1008 /* type */
.short 0 /* flags */
.asciz "local1"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.defrange1:
.short .local2 - .defrange1 - 2
.short S_DEFRANGE_REGISTER_REL
.short CV_AMD64_RAX
.short 0 # offset parent
.long 0 # offset register
.secrel32 .block1 # offset
.secidx .block1 # section
.short .block1_end - .block1 # length
.short .gap1 - .block1 # gap 1 offset
.short .gap1_end - .gap1 # gap 1 length
.short 0 /* offset parent */
.long 0 /* offset register */
.secrel32 .block1 /* offset */
.secidx .block1 /* section */
.short .block1_end - .block1 /* length */
.short .gap1 - .block1 /* gap 1 offset */
.short .gap1_end - .gap1 /* gap 1 length */
.local2:
.short .defrange2 - .local2 - 2
.short S_LOCAL
.long 0x1008 # type
.short 0 # flags
.long 0x1008 /* type */
.short 0 /* flags */
.asciz "local2"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.defrange2:
.short .local3 - .defrange2 - 2
.short S_DEFRANGE_FRAMEPOINTER_REL
.long 4 # frame pointer offset
.secrel32 .block1 # offset
.secidx .block1 # section
.short .block1_end - .block1 # length
.short .gap1 - .block1 # gap 1 offset
.short .gap1_end - .gap1 # gap 1 length
.long 4 /* frame pointer offset */
.secrel32 .block1 /* offset */
.secidx .block1 /* section */
.short .block1_end - .block1 /* length */
.short .gap1 - .block1 /* gap 1 offset */
.short .gap1_end - .gap1 /* gap 1 length */
.local3:
.short .defrange3 - .local3 - 2
.short S_LOCAL
.long 0x1008 # type
.short 0 # flags
.long 0x1008 /* type */
.short 0 /* flags */
.asciz "local3"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.defrange3:
.short .local4 - .defrange3 - 2
.short S_DEFRANGE_SUBFIELD_REGISTER
.short CV_AMD64_RAX
.short 0 # attributes
.long 4 # offset in parent variable
.secrel32 .block1 # offset
.secidx .block1 # section
.short .block1_end - .block1 # length
.short .gap1 - .block1 # gap 1 offset
.short .gap1_end - .gap1 # gap 1 length
.short 0 /* attributes */
.long 4 /* offset in parent variable */
.secrel32 .block1 /* offset */
.secidx .block1 /* section */
.short .block1_end - .block1 /* length */
.short .gap1 - .block1 /* gap 1 offset */
.short .gap1_end - .gap1 /* gap 1 length */
.local4:
.short .defrange4 - .local4 - 2
.short S_LOCAL
.long 0x1008 # type
.short 0 # flags
.long 0x1008 /* type */
.short 0 /* flags */
.asciz "local4"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.defrange4:
.short .local5 - .defrange4 - 2
.short S_DEFRANGE_FRAMEPOINTER_REL_FULL_SCOPE
.long 4 # frame pointer offset
.long 4 /* frame pointer offset */
.local5:
.short .defrange5 - .local5 - 2
.short S_LOCAL
.long 0x1008 # type
.short 0 # flags
.long 0x1008 /* type */
.short 0 /* flags */
.asciz "local5"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.defrange5:
.short .inlinesite1 - .defrange5 - 2
.short S_DEFRANGE_REGISTER
.short CV_AMD64_RAX
.short 0 # attributes
.secrel32 .block1 # offset
.secidx .block1 # section
.short .block1_end - .block1 # length
.short .gap1 - .block1 # gap 1 offset
.short .gap1_end - .gap1 # gap 1 length
.short 0 /* attributes */
.secrel32 .block1 /* offset */
.secidx .block1 /* section */
.short .block1_end - .block1 /* length */
.short .gap1 - .block1 /* gap 1 offset */
.short .gap1_end - .gap1 /* gap 1 length */
.inlinesite1:
.short .inlinesite1end - .inlinesite1 - 2
.short S_INLINESITE
.long 0 # parent
.long 0 # end
.long 0x1009 # inlinee (inline_func)
.long 0 /* parent */
.long 0 /* end */
.long 0x1009 /* inlinee (inline_func) */
.inlinesite1end:
.short .sblock1 - .inlinesite1end - 2
@@ -261,24 +261,24 @@
.sblock1:
.short .label1 - .sblock1 - 2
.short S_BLOCK32
.long 0 # parent (filled in by linker)
.long 0 # end (filled in by linker)
.long .block1_end - .block1 # length
.long 0 /* parent (filled in by linker) */
.long 0 /* end (filled in by linker) */
.long .block1_end - .block1 /* length */
.secrel32 .block1
.secidx .block1
.byte 0 # name
.byte 0xf1 # padding
.byte 0 /* name */
.byte 0xf1 /* padding */
.label1:
.short .sblock1_end - .label1 - 2
.short S_LABEL32
.secrel32 label
.secidx label
.byte 0 # flags
.byte 0 /* flags */
.asciz "label"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.sblock1_end:
.short .thunk1 - .sblock1_end - 2
@@ -287,15 +287,15 @@
.thunk1:
.short .thunk1_end - .thunk1 - 2
.short S_THUNK32
.long 0 # parent
.long 0 # end
.long 0 # next
.long 0 /* parent */
.long 0 /* end */
.long 0 /* next */
.secrel32 thunk
.secidx thunk
.short .thunk_end - thunk
.byte 0 # THUNK_ORDINAL value
.byte 0 /* THUNK_ORDINAL value */
.asciz "thunk"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.thunk1_end:
.short .heapallocsite1 - .thunk1_end - 2
@@ -307,7 +307,7 @@
.secrel32 .gap1_end
.secidx .gap1_end
.short .block1_end - .gap1_end
.long 0x1008 # type
.long 0x1008 /* type */
.gproc1_end:
.short .syms_end - .gproc1_end - 2
@@ -319,91 +319,91 @@
.long CV_SIGNATURE_C13
# Type 1000, arglist (uint32_t)
/* Type 1000, arglist (uint32_t) */
.arglist1:
.short .proctype1 - .arglist1 - 2
.short LF_ARGLIST
.long 1 # no. entries
.long 1 /* no. entries */
.long T_UINT4
# Type 1001, procedure (return type T_VOID, arglist 1000)
/* Type 1001, procedure (return type T_VOID, arglist 1000) */
.proctype1:
.short .string1 - .proctype1 - 2
.short LF_PROCEDURE
.long T_VOID
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x1000
# Type 1002, string "/tmp" (build directory)
/* Type 1002, string "/tmp" (build directory) */
.string1:
.short .string2 - .string1 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "/tmp"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1003, string "gcc" (compiler)
/* Type 1003, string "gcc" (compiler) */
.string2:
.short .string3 - .string2 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "gcc"
# Type 1004, string "tmp.c" (source file)
/* Type 1004, string "tmp.c" (source file) */
.string3:
.short .string4 - .string3 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "tmp.c"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1005, string "tmp.pdb" (PDB file)
/* Type 1005, string "tmp.pdb" (PDB file) */
.string4:
.short .string5 - .string4 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "tmp.pdb"
# Type 1006, string "-gcodeview" (command arguments)
/* Type 1006, string "-gcodeview" (command arguments) */
.string5:
.short .buildinfo1 - .string5 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "-gcodeview"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 1007, build info
/* Type 1007, build info */
.buildinfo1:
.short .mod1 - .buildinfo1 - 2
.short LF_BUILDINFO
.short 5 # count
.long 0x1002 # build directory
.long 0x1003 # compiler
.long 0x1004 # source file
.long 0x1005 # PDB file
.long 0x1006 # command arguments
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 5 /* count */
.long 0x1002 /* build directory */
.long 0x1003 /* compiler */
.long 0x1004 /* source file */
.long 0x1005 /* PDB file */
.long 0x1006 /* command arguments */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1008, const uint32_t
/* Type 1008, const uint32_t */
.mod1:
.short .funcid1 - .mod1 - 2
.short LF_MODIFIER
.long T_UINT4
.short 1 # const
.short 1 /* const */
.p2align 2
# Type 1009, func ID for inline_func
/* Type 1009, func ID for inline_func */
.funcid1:
.short .types_end - .funcid1 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x1001 # type
.long 0 /* parent scope */
.long 0x1001 /* type */
.asciz "inline_func"
.types_end:
@@ -412,19 +412,19 @@
.global proc1
proc1:
nop
.byte 0
.block1:
nop
.byte 0
label:
nop
.byte 0
.gap1:
nop
.byte 0
.gap1_end:
nop
.byte 0
.block1_end:
nop
.byte 0
.proc1_end:
thunk:
nop
.byte 0
.thunk_end:
+4 -4
View File
@@ -8,20 +8,20 @@
.long CV_SIGNATURE_C13
# Type 1000, volatile long
/* Type 1000, volatile long */
.mod1:
.short .mod2 - .mod1 - 2
.short LF_MODIFIER
.long T_LONG
.short 2 # volatile
.short 2 /* volatile */
.p2align 2
# Type 1001, const long
/* Type 1001, const long */
.mod2:
.short .types_end - .mod2 - 2
.short LF_MODIFIER
.long T_LONG
.short 1 # const
.short 1 /* const */
.p2align 2
.types_end:
+266 -266
View File
@@ -44,567 +44,567 @@
.long CV_SIGNATURE_C13
# Type 1000, const long
/* Type 1000, const long */
.mod1:
.short .mod2 - .mod1 - 2
.short LF_MODIFIER
.long T_LONG
.short 1 # const
.short 1 /* const */
.p2align 2
# Type 1001, volatile unsigned long
/* Type 1001, volatile unsigned long */
.mod2:
.short .mod3 - .mod2 - 2
.short LF_MODIFIER
.long T_ULONG
.short 2 # volatile
.short 2 /* volatile */
.p2align 2
# Type 1002, const volatile int
/* Type 1002, const volatile int */
.mod3:
.short .ptr1 - .mod3 - 2
.short LF_MODIFIER
.long T_INT4
.short 3 # const volatile
.short 3 /* const volatile */
.p2align 2
# Type 1003, const long * (64-bit pointer)
/* Type 1003, const long * (64-bit pointer) */
.ptr1:
.short .ptr2 - .ptr1 - 2
.short LF_POINTER
.long 0x1000
.long (8 << 13) | CV_PTR_64
# Type 1004, volatile unsigned long * (32-bit pointer)
/* Type 1004, volatile unsigned long * (32-bit pointer) */
.ptr2:
.short .arglist1 - .ptr2 - 2
.short LF_POINTER
.long 0x1001
.long (4 << 13) | CV_PTR_NEAR32
# Type 1005, arg list of types 1000, 1001, 1002
/* Type 1005, arg list of types 1000, 1001, 1002 */
.arglist1:
.short .proc1 - .arglist1 - 2
.short LF_ARGLIST
.long 3 # no. entries
.long 3 /* no. entries */
.long 0x1000
.long 0x1001
.long 0x1002
# Type 1006, procedure, return type 1001, arg list 1005
/* Type 1006, procedure, return type 1001, arg list 1005 */
.proc1:
.short .arr1 - .proc1 - 2
.short LF_PROCEDURE
.long 0x1001
.byte 0 # calling convention
.byte 0 # attributes
.short 3 # no. parameters
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 3 /* no. parameters */
.long 0x1005
# Type 1007, array[3] of const long *
/* Type 1007, array[3] of const long * */
.arr1:
.short .bitfield1 - .arr1 - 2
.short LF_ARRAY
.long 0x1003 # element type
.long T_INT4 # index type
.short 24 # length in bytes
.byte 0 # name
.byte 0xf1 # padding
.long 0x1003 /* element type */
.long T_INT4 /* index type */
.short 24 /* length in bytes */
.byte 0 /* name */
.byte 0xf1 /* padding */
# Type 1008, bitfield of uint32_t, position 0, length 1
/* Type 1008, bitfield of uint32_t, position 0, length 1 */
.bitfield1:
.short .bitfield2 - .bitfield1 - 2
.short LF_BITFIELD
.long T_UINT4
.byte 1
.byte 0
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1009, bitfield of uint32_t, position 1, length 31
/* Type 1009, bitfield of uint32_t, position 1, length 31 */
.bitfield2:
.short .fieldlist1 - .bitfield2 - 2
.short LF_BITFIELD
.long T_UINT4
.byte 31
.byte 1
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100a, field list (1008 as num1, 1009 as num2)
/* Type 100a, field list (1008 as num1, 1009 as num2) */
.fieldlist1:
.short .struct1 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1008
.short 0 # offset
.short 0 /* offset */
.asciz "num1"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1009
.short 0 # offset
.short 0 /* offset */
.asciz "num2"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 100b, anonymous struct, field list 100a
/* Type 100b, anonymous struct, field list 100a */
.struct1:
.short .struct2 - .struct1 - 2
.short LF_STRUCTURE
.short 2 # no. members
.short 0 # property
.long 0x100a # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.short 2 /* no. members */
.short 0 /* property */
.long 0x100a /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "<unnamed-tag>"
# Type 100c, forward declaration of struct foo
/* Type 100c, forward declaration of struct foo */
.struct2:
.short .ptr3 - .struct2 - 2
.short LF_STRUCTURE
.short 0 # no. members
.short 0x280 # property (has unique name, forward declaration)
.long 0 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "foo" # name
.asciz "bar" # unique name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0x280 /* property (has unique name, forward declaration) */
.long 0 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "foo" /* name */
.asciz "bar" /* unique name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100d, pointer to 100c
/* Type 100d, pointer to 100c */
.ptr3:
.short .arglist2 - .ptr3 - 2
.short LF_POINTER
.long 0x100c
.long (8 << 13) | CV_PTR_64
# Type 100e, empty arg list
/* Type 100e, empty arg list */
.arglist2:
.short .mfunc1 - .arglist2 - 2
.short LF_ARGLIST
.long 0 # no. entries
.long 0 /* no. entries */
# Type 100f, member function of 100c, return type 1001
/* Type 100f, member function of 100c, return type 1001 */
.mfunc1:
.short .mfunc2 - .mfunc1 - 2
.short LF_MFUNCTION
.long 0x1001
.long 0x100c
.long 0x100d # type of "this" pointer
.byte 0 # calling convention
.byte 0 # attributes
.short 0 # no. parameters
.long 0x100e # arg list
.long 0 # "this" adjustment
.long 0x100d /* type of "this" pointer */
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 0 /* no. parameters */
.long 0x100e /* arg list */
.long 0 /* "this" adjustment */
# Type 1010, member function of 100c, return type 1001, arg list 1005
/* Type 1010, member function of 100c, return type 1001, arg list 1005 */
.mfunc2:
.short .methodlist1 - .mfunc2 - 2
.short LF_MFUNCTION
.long 0x1001
.long 0x100c
.long 0x100d # type of "this" pointer
.byte 0 # calling convention
.byte 0 # attributes
.short 3 # no. parameters
.long 0x1005 # arg list
.long 0 # "this" adjustment
.long 0x100d /* type of "this" pointer */
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 3 /* no. parameters */
.long 0x1005 /* arg list */
.long 0 /* "this" adjustment */
# Type 1011, method list for both member functions 100f and 1010
/* Type 1011, method list for both member functions 100f and 1010 */
.methodlist1:
.short .fieldlist2 - .methodlist1 - 2
.short LF_METHODLIST
.short 0 # attributes
.short 0 # padding
.short 0 /* attributes */
.short 0 /* padding */
.long 0x100f
.short 0 # attributes
.short 0 # padding
.short 0 /* attributes */
.short 0 /* padding */
.long 0x1010
# Type 1012, field list (uint32_t as num1)
/* Type 1012, field list (uint32_t as num1) */
.fieldlist2:
.short .struct3 - .fieldlist2 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_UINT4
.short 0 # offset
.short 0 /* offset */
.asciz "num"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x100f # method type
.short 0 /* method attribute */
.long 0x100f /* method type */
.asciz "method"
.byte 0xf1
.short LF_METHOD
.short 2 # no. overloads
.long 0x1011 # method list
.short 2 /* no. overloads */
.long 0x1011 /* method list */
.asciz "method2"
# Type 1013, struct foo, field list 1012
/* Type 1013, struct foo, field list 1012 */
.struct3:
.short .fieldlist3 - .struct3 - 2
.short LF_STRUCTURE
.short 2 # no. members
.short 0x200 # property (has unique name)
.long 0x1012 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "foo" # name
.asciz "bar" # unique name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 2 /* no. members */
.short 0x200 /* property (has unique name) */
.long 0x1012 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "foo" /* name */
.asciz "bar" /* unique name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1014, field list (uint32_t as num1, char as num2)
/* Type 1014, field list (uint32_t as num1, char as num2) */
.fieldlist3:
.short .union1 - .fieldlist3 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_UINT4
.short 0 # offset
.short 0 /* offset */
.asciz "num1"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_CHAR
.short 0 # offset
.short 0 /* offset */
.asciz "num2"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 1015, anonymous union (field list 1014)
/* Type 1015, anonymous union (field list 1014) */
.union1:
.short .union2 - .union1 - 2
.short LF_UNION
.short 2 # no. members
.short 0 # property
.short 2 /* no. members */
.short 0 /* property */
.long 0x1014
.short 4 # size
.short 4 /* size */
.asciz "<unnamed-tag>"
# Type 1016, forward declaration of union baz
/* Type 1016, forward declaration of union baz */
.union2:
.short .union3 - .union2 - 2
.short LF_UNION
.short 0 # no. members
.short 0x280 # property (has unique name, forward declaration)
.long 0 # field list
.short 0 # size
.short 0 /* no. members */
.short 0x280 /* property (has unique name, forward declaration) */
.long 0 /* field list */
.short 0 /* size */
.asciz "baz"
.asciz "qux"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1017, union baz (field list 1014)
/* Type 1017, union baz (field list 1014) */
.union3:
.short .fieldlist4 - .union3 - 2
.short LF_UNION
.short 2 # no. members
.short 0x200 # property (has unique name, forward declaration)
.long 0x1014 # field list
.short 4 # size
.short 2 /* no. members */
.short 0x200 /* property (has unique name, forward declaration) */
.long 0x1014 /* field list */
.short 4 /* size */
.asciz "baz"
.asciz "qux"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1018, field list for enum (red = 0, green = 1, blue = -1, yellow = 0x8000, purple = 0x100000000)
/* Type 1018, field list for enum (red = 0, green = 1, blue = -1, yellow = 0x8000, purple = 0x100000000) */
.fieldlist4:
.short .enum1 - .fieldlist4 - 2
.short LF_FIELDLIST
.short LF_ENUMERATE
.short 3 # public
.short 0 # value
.short 3 /* public */
.short 0 /* value */
.asciz "red"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_ENUMERATE
.short 3 # public
.short 1 # value
.short 3 /* public */
.short 1 /* value */
.asciz "green"
.short LF_ENUMERATE
.short 3 # public
.short 3 /* public */
.short LF_LONG
.long 0xffffffff # value
.long 0xffffffff /* value */
.asciz "blue"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.short LF_ENUMERATE
.short 3 # public
.short 3 /* public */
.short LF_USHORT
.short 0x8000 # value
.short 0x8000 /* value */
.asciz "yellow"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.short LF_ENUMERATE
.short 3 # public
.short 3 /* public */
.short LF_UQUADWORD
.quad 0x100000000 # value
.quad 0x100000000 /* value */
.asciz "purple"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1019, forward reference to enum
/* Type 1019, forward reference to enum */
.enum1:
.short .enum2 - .enum1 - 2
.short LF_ENUM
.short 0 # no. elements
.short 0x280 # property (has unique name, forward ref)
.long T_UQUAD # underlying type
.long 0 # field list
.short 0 /* no. elements */
.short 0x280 /* property (has unique name, forward ref) */
.long T_UQUAD /* underlying type */
.long 0 /* field list */
.asciz "colour"
.asciz "colour2"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 101a, enum (field list 1018)
/* Type 101a, enum (field list 1018) */
.enum2:
.short .fieldlist5 - .enum2 - 2
.short LF_ENUM
.short 5 # no. elements
.short 0x200 # property (has unique name)
.long T_UQUAD # underlying type
.long 0x1018 # field list
.short 5 /* no. elements */
.short 0x200 /* property (has unique name) */
.long T_UQUAD /* underlying type */
.long 0x1018 /* field list */
.asciz "colour"
.asciz "colour2"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# Type 101b, field list referencing other field list 1018
/* Type 101b, field list referencing other field list 1018 */
.fieldlist5:
.short .vtshape1 - .fieldlist5 - 2
.short LF_FIELDLIST
.short LF_INDEX
.short 0 # padding
.short 0 /* padding */
.long 0x1018
# Type 101c, virtual function table shape
/* Type 101c, virtual function table shape */
.vtshape1:
.short .ptr4 - .vtshape1 - 2
.short LF_VTSHAPE
.short 1 # no. descriptors
.byte 0 # descriptor (CV_VTS_near)
.byte 0xf1 # padding
.short 1 /* no. descriptors */
.byte 0 /* descriptor (CV_VTS_near) */
.byte 0xf1 /* padding */
# Type 101d, pointer to 101c
/* Type 101d, pointer to 101c */
.ptr4:
.short .fieldlist6 - .ptr4 - 2
.short LF_POINTER
.long 0x101c
.long (8 << 13) | CV_PTR_64
# Type 101e, fieldlist for enum
/* Type 101e, fieldlist for enum */
.fieldlist6:
.short .enum3 - .fieldlist6 - 2
.short LF_FIELDLIST
.short LF_ENUMERATE
.short 3 # public
.short 0 # value
.short 3 /* public */
.short 0 /* value */
.asciz "a"
# Type 101f, nested enum
/* Type 101f, nested enum */
.enum3:
.short .fieldlist7 - .enum3 - 2
.short LF_ENUM
.short 1 # no. elements
.short 0x8 # property (is nested)
.long T_UINT4 # underlying type
.long 0x101e # field list
.short 1 /* no. elements */
.short 0x8 /* property (is nested) */
.long T_UINT4 /* underlying type */
.long 0x101e /* field list */
.asciz "quux::nested_enum"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1020, field list for struct quux
/* Type 1020, field list for struct quux */
.fieldlist7:
.short .struct4 - .fieldlist7 - 2
.short LF_FIELDLIST
.short LF_BCLASS
.short 0 # attributes
.long 0x1013 # base class
.short 4 # offset within class
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* attributes */
.long 0x1013 /* base class */
.short 4 /* offset within class */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_VFUNCTAB
.short 0 # padding
.long 0x101d # pointer to vtshape
.short 0 /* padding */
.long 0x101d /* pointer to vtshape */
.short LF_VBCLASS
.short 0 # attribute
.long 0x1013 # type index of direct virtual base class
.long 0x101d # type index of virtual base pointer
.short 0 # virtual base pointer offset
.short 0 # virtual base offset from vbtable
.short 0 /* attribute */
.long 0x1013 /* type index of direct virtual base class */
.long 0x101d /* type index of virtual base pointer */
.short 0 /* virtual base pointer offset */
.short 0 /* virtual base offset from vbtable */
.short LF_STMEMBER
.short 0 # attribute
.long 0x1001 # volatile unsigned long
.short 0 /* attribute */
.long 0x1001 /* volatile unsigned long */
.asciz "static_member"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_NESTTYPE
.short 0 # padding
.long 0x101f # enum type
.short 0 /* padding */
.long 0x101f /* enum type */
.asciz "nested_enum"
# Type 1021, struct quux, field list 1020
/* Type 1021, struct quux, field list 1020 */
.struct4:
.short .arr2 - .struct4 - 2
.short LF_STRUCTURE
.short 1 # no. members
.short 0 # property
.long 0x1020 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "quux" # name
.byte 0xf1 # padding
.short 1 /* no. members */
.short 0 /* property */
.long 0x1020 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "quux" /* name */
.byte 0xf1 /* padding */
# Type 1022, array[60000] of char
/* Type 1022, array[60000] of char */
.arr2:
.short .fieldlist8 - .arr2 - 2
.short LF_ARRAY
.long T_CHAR # element type
.long T_INT4 # index type
.long T_CHAR /* element type */
.long T_INT4 /* index type */
.short LF_USHORT
.short 60000 # size in bytes
.byte 0 # name
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 60000 /* size in bytes */
.byte 0 /* name */
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1023, field list for struct longstruct
/* Type 1023, field list for struct longstruct */
.fieldlist8:
.short .struct5 - .fieldlist8 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short 0 # offset
.short 0 /* offset */
.asciz "a"
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short LF_USHORT
.short 60000 # offset
.short 60000 /* offset */
.asciz "b"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short LF_ULONG
.long 120000 # offset
.long 120000 /* offset */
.asciz "c"
# Type 1024, struct longstruct
/* Type 1024, struct longstruct */
.struct5:
.short .fieldlist9 - .struct5 - 2
.short LF_STRUCTURE
.short 3 # no. members
.short 0 # property
.long 0x1023 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 3 /* no. members */
.short 0 /* property */
.long 0x1023 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short LF_ULONG
.long 180000 # size
.asciz "longstruct" # name
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.long 180000 /* size */
.asciz "longstruct" /* name */
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1025, field list for union longunion
/* Type 1025, field list for union longunion */
.fieldlist9:
.short .union4 - .fieldlist9 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short 0 # offset
.short 0 /* offset */
.asciz "a"
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short 0 # offset
.short 0 /* offset */
.asciz "b"
# Type 1026, union longunion (field list 1025)
/* Type 1026, union longunion (field list 1025) */
.union4:
.short .fieldlist10 - .union4 - 2
.short LF_UNION
.short 2 # no. members
.short 0 # property
.long 0x1025 # field list
.short 2 /* no. members */
.short 0 /* property */
.long 0x1025 /* field list */
.short LF_USHORT
.short 60000 # size
.short 60000 /* size */
.asciz "longunion"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1027, field list with base class longstruct
/* Type 1027, field list with base class longstruct */
.fieldlist10:
.short .fieldlist11 - .fieldlist10 - 2
.short LF_FIELDLIST
.short LF_BCLASS
.short 0 # attributes
.long 0x1024 # base class
.short 0 /* attributes */
.long 0x1024 /* base class */
.short LF_ULONG
.long 120000 # offset within class
.byte 0xf2 # padding
.byte 0xf1 # padding
.long 120000 /* offset within class */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short 0 # offset
.short 0 /* offset */
.asciz "d"
# Type 1028, field list with virtual base class longstruct
/* Type 1028, field list with virtual base class longstruct */
.fieldlist11:
.short .struct6 - .fieldlist11 - 2
.short LF_FIELDLIST
.short LF_VBCLASS
.short 0 # attributes
.long 0x1024 # type index of direct virtual base class
.long 0 # type index of virtual base pointer
.short 0 /* attributes */
.long 0x1024 /* type index of direct virtual base class */
.long 0 /* type index of virtual base pointer */
.short LF_USHORT
.short 60000 # virtual base pointer offset
.short 60000 /* virtual base pointer offset */
.short LF_ULONG
.long 120000 # virtual base offset from vbtable
.byte 0xf2 # padding
.byte 0xf1 # padding
.long 120000 /* virtual base offset from vbtable */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long 0x1022
.short 0 # offset
.short 0 /* offset */
.asciz "d"
# Type 1029, forward declaration of struct IUnknown
/* Type 1029, forward declaration of struct IUnknown */
.struct6:
.short .vftable1 - .struct6 - 2
.short LF_STRUCTURE
.short 0 # no. members
.short 0x80 # property (forward declaration)
.long 0 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "IUnknown" # name
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0x80 /* property (forward declaration) */
.long 0 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "IUnknown" /* name */
.byte 0xf1 /* padding */
# Type 102a, virtual function table
/* Type 102a, virtual function table */
.vftable1:
.short .types_end - .vftable1 - 2
.short LF_VFTABLE
.long 0x1029 # type
.long 0 # base vftable
.long 0 # offset
.long .vftable1_names_end - .vftable1_names # length of names array
.long 0x1029 /* type */
.long 0 /* base vftable */
.long 0 /* offset */
.long .vftable1_names_end - .vftable1_names /* length of names array */
.vftable1_names:
.asciz "IUnknown"
.asciz "QueryInterface"
.asciz "AddRef"
.asciz "Release"
.vftable1_names_end:
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.types_end:
+4 -4
View File
@@ -22,21 +22,21 @@
.long CV_SIGNATURE_C13
# Type 1000, string "test"
/* Type 1000, string "test" */
.string1:
.short .string2 - .string1 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "test"
.byte 0xf3
.byte 0xf2
.byte 0xf1
# Type 1001, string "foo"
/* Type 1001, string "foo" */
.string2:
.short .types_end - .string2 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "foo"
.types_end:
+87 -87
View File
@@ -22,200 +22,200 @@
.long CV_SIGNATURE_C13
# Type 1000, string "foo"
/* Type 1000, string "foo" */
.string1:
.short .string2 - .string1 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "foo"
# Type 1001, string "bar"
/* Type 1001, string "bar" */
.string2:
.short .substrlist1 - .string2 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "bar"
# Type 1002, substr list of "foo" and "bar"
/* Type 1002, substr list of "foo" and "bar" */
.substrlist1:
.short .string3 - .substrlist1 - 2
.short LF_SUBSTR_LIST
.long 2 # count
.long 2 /* count */
.long 0x1000
.long 0x1001
# Type 1003, string "baz" referencing substr list 1002
/* Type 1003, string "baz" referencing substr list 1002 */
.string3:
.short .string4 - .string3 - 2
.short LF_STRING_ID
.long 0x1002
.asciz "baz"
# Type 1004, string "/tmp" (build directory)
/* Type 1004, string "/tmp" (build directory) */
.string4:
.short .string5 - .string4 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "/tmp"
.byte 0xf3 # padding
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf3 /* padding */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1005, string "gcc" (compiler)
/* Type 1005, string "gcc" (compiler) */
.string5:
.short .string6 - .string5 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "gcc"
# Type 1006, string "tmp.c" (source file)
/* Type 1006, string "tmp.c" (source file) */
.string6:
.short .string7 - .string6 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "tmp.c"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1007, string "tmp.pdb" (PDB file)
/* Type 1007, string "tmp.pdb" (PDB file) */
.string7:
.short .string8 - .string7 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "tmp.pdb"
# Type 1008, string "-gcodeview" (command arguments)
/* Type 1008, string "-gcodeview" (command arguments) */
.string8:
.short .buildinfo1 - .string8 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "-gcodeview"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
# The 1009, build info
/* The 1009, build info */
.buildinfo1:
.short .string9 - .buildinfo1 - 2
.short LF_BUILDINFO
.short 5 # count
.long 0x1004 # build directory
.long 0x1005 # compiler
.long 0x1006 # source file
.long 0x1007 # PDB file
.long 0x1008 # command arguments
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 5 /* count */
.long 0x1004 /* build directory */
.long 0x1005 /* compiler */
.long 0x1006 /* source file */
.long 0x1007 /* PDB file */
.long 0x1008 /* command arguments */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100a, string "namespace"
/* Type 100a, string "namespace" */
.string9:
.short .arglist1 - .string9 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "namespace"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100b, arg list of type T_INT4
/* Type 100b, arg list of type T_INT4 */
.arglist1:
.short .proc1 - .arglist1 - 2
.short LF_ARGLIST
.long 1 # no. entries
.long 1 /* no. entries */
.long T_INT4
# Type 100c, procedure, return type T_VOID, arg list 100b
/* Type 100c, procedure, return type T_VOID, arg list 100b */
.proc1:
.short .func1 - .proc1 - 2
.short LF_PROCEDURE
.long T_VOID
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x100b
# Type 100d, function "func1"
/* Type 100d, function "func1" */
.func1:
.short .func2 - .func1 - 2
.short LF_FUNC_ID
.long 0 # parent scope
.long 0x100c # type
.long 0 /* parent scope */
.long 0x100c /* type */
.asciz "func1"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100e, function "func2" within scope "namespace"
/* Type 100e, function "func2" within scope "namespace" */
.func2:
.short .class1 - .func2 - 2
.short LF_FUNC_ID
.long 0x100a # parent scope
.long 0x100c # type
.long 0x100a /* parent scope */
.long 0x100c /* type */
.asciz "func2"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 100f, forward declaration of class foo
/* Type 100f, forward declaration of class foo */
.class1:
.short .ptr1 - .class1 - 2
.short LF_CLASS
.short 0 # no. members
.short 0x80 # property (has unique name, forward declaration)
.long 0 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0x80 /* property (has unique name, forward declaration) */
.long 0 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1010, pointer to 100f
/* Type 1010, pointer to 100f */
.ptr1:
.short .mfunction1 - .ptr1 - 2
.short LF_POINTER
.long 0x100f
.long (8 << 13) | CV_PTR_64
# Type 1011, member function of 100f, return type void, arg list 100b
/* Type 1011, member function of 100f, return type void, arg list 100b */
.mfunction1:
.short .fieldlist1 - .mfunction1 - 2
.short LF_MFUNCTION
.long T_VOID
.long 0x100f
.long 0x1010 # type of "this" pointer
.byte 0 # calling convention
.byte 0 # attributes
.short 1 # no. parameters
.long 0x100b # arg list
.long 0 # "this" adjustment
.long 0x1010 /* type of "this" pointer */
.byte 0 /* calling convention */
.byte 0 /* attributes */
.short 1 /* no. parameters */
.long 0x100b /* arg list */
.long 0 /* "this" adjustment */
# Type 1012, field list for class foo
/* Type 1012, field list for class foo */
.fieldlist1:
.short .class2 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_ONEMETHOD
.short 0 # method attribute
.long 0x1010 # method type
.short 0 /* method attribute */
.long 0x1010 /* method type */
.asciz "method"
.byte 0xf1
# Type 1013, actual declaration of class foo
/* Type 1013, actual declaration of class foo */
.class2:
.short .mfunc1 - .class2 - 2
.short LF_CLASS
.short 0 # no. members
.short 0 # property
.long 0x1012 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 0 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 0 /* no. members */
.short 0 /* property */
.long 0x1012 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 0 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1014, function "method" within class "foo"
/* Type 1014, function "method" within class "foo" */
.mfunc1:
.short .types_end - .mfunc1 - 2
.short LF_MFUNC_ID
.long 0x100f # parent class
.long 0x1011 # function type
.long 0x100f /* parent class */
.long 0x1011 /* function type */
.asciz "method"
.byte 0xf1 # padding
.byte 0xf1 /* padding */
.types_end:
+20 -20
View File
@@ -11,47 +11,47 @@
.long CV_SIGNATURE_C13
# Type 1000, fieldlist for struct foo
/* Type 1000, fieldlist for struct foo */
.fieldlist1:
.short .struct1 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_INT4
.short 0 # offset
.short 0 /* offset */
.asciz "num"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1001, struct foo
/* Type 1001, struct foo */
.struct1:
.short .string1 - .struct1 - 2
.short LF_STRUCTURE
.short 1 # no. members
.short 0 # property
.long 0x1000 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 1 /* no. members */
.short 0 /* property */
.long 0x1000 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1002, string "foo"
/* Type 1002, string "foo" */
.string1:
.short .udtsrcline1 - .string1 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "foo.h"
.byte 0xf2
.byte 0xf1
# Type 1003, UDT source line for type 1001
/* Type 1003, UDT source line for type 1001 */
.udtsrcline1:
.short .types_end - .udtsrcline1 - 2
.short LF_UDT_SRC_LINE
.long 0x1001
.long 0x1002 # source file string
.long 42 # line no.
.long 0x1002 /* source file string */
.long 42 /* line no. */
.types_end:
+23 -23
View File
@@ -14,55 +14,55 @@
.long CV_SIGNATURE_C13
# Type 1000, const long
/* Type 1000, const long */
.mod1:
.short .fieldlist1 - .mod1 - 2
.short LF_MODIFIER
.long T_LONG
.short 1 # const
.short 0 # padding
.short 1 /* const */
.short 0 /* padding */
# Type 1001, fieldlist for struct foo
/* Type 1001, fieldlist for struct foo */
.fieldlist1:
.short .struct1 - .fieldlist1 - 2
.short LF_FIELDLIST
.short LF_MEMBER
.short 3 # public
.short 3 /* public */
.long T_INT4
.short 0 # offset
.short 0 /* offset */
.asciz "num"
.byte 0xf2 # padding
.byte 0xf1 # padding
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1002, struct foo
/* Type 1002, struct foo */
.struct1:
.short .string1 - .struct1 - 2
.short LF_STRUCTURE
.short 1 # no. members
.short 0 # property
.long 0x1001 # field list
.long 0 # type derived from
.long 0 # type of vshape table
.short 4 # size
.asciz "foo" # name
.byte 0xf2 # padding
.byte 0xf1 # padding
.short 1 /* no. members */
.short 0 /* property */
.long 0x1001 /* field list */
.long 0 /* type derived from */
.long 0 /* type of vshape table */
.short 4 /* size */
.asciz "foo" /* name */
.byte 0xf2 /* padding */
.byte 0xf1 /* padding */
# Type 1003, string "foo"
/* Type 1003, string "foo" */
.string1:
.short .udtsrcline1 - .string1 - 2
.short LF_STRING_ID
.long 0 # sub-string
.long 0 /* sub-string */
.asciz "foo.h"
.byte 0xf2
.byte 0xf1
# Type 1004, UDT source line for type 1002
/* Type 1004, UDT source line for type 1002 */
.udtsrcline1:
.short .types_end - .udtsrcline1 - 2
.short LF_UDT_SRC_LINE
.long 0x1002
.long 0x1003 # source file string
.long 42 # line no.
.long 0x1003 /* source file string */
.long 42 /* line no. */
.types_end:
+2 -1
View File
@@ -19,7 +19,8 @@
# MA 02110-1301, USA.
if {![istarget i*86-*-mingw*]
&& ![istarget x86_64-*-mingw*]} {
&& ![istarget x86_64-*-mingw*]
&& ![istarget aarch64-*-mingw*]} {
return
}
+24 -24
View File
@@ -37,7 +37,7 @@
.long 0x89abcdef
.long 0xfedcba98
.long 0x67452310
.short 0 # padding
.short 0 /* padding */
.long .src2 - .strings_start
.byte NUM_MD5_BYTES
@@ -46,7 +46,7 @@
.long 0x67452310
.long 0x01234567
.long 0x89abcdef
.short 0 # padding
.short 0 /* padding */
.chksms_end:
@@ -59,39 +59,39 @@
.secrel32 main
.secidx main
.short 0 # flags
.long .main_end - main # length of region
.short 0 /* flags */
.long .main_end - main /* length of region */
.lines_block1:
.long 0 # file ID 0 (foo)
.long 2 # no. lines
.long .lines_block2 - .lines_block1 # length
.long 0 /* file ID 0 (foo) */
.long 2 /* no. lines */
.long .lines_block2 - .lines_block1 /* length */
.long .line1 - main
.long 0x80000001 # line 1
.long 0x80000001 /* line 1 */
.long .line2 - main
.long 0x80000002 # line 2
.long 0x80000002 /* line 2 */
.lines_block2:
.long 0x18 # file ID 18 (bar)
.long 2 # no. lines
.long .lines_block3 - .lines_block2 # length
.long 0x18 /* file ID 18 (bar) */
.long 2 /* no. lines */
.long .lines_block3 - .lines_block2 /* length */
.long .line3 - main
.long 0x80000003 # line 3
.long 0x80000003 /* line 3 */
.long .line4 - main
.long 0x80000004 # line 4
.long 0x80000004 /* line 4 */
.lines_block3:
.long 0 # file ID 0 (foo)
.long 1 # no. lines
.long .lines_end - .lines_block3 # length
.long 0 /* file ID 0 (foo) */
.long 1 /* no. lines */
.long .lines_end - .lines_block3 /* length */
.long .line5 - main
.long 0x80000005 # line 5
.long 0x80000005 /* line 5 */
.lines_end:
@@ -102,17 +102,17 @@
.secrel32 gcfunc
.secidx gcfunc
.short 0 # flags
.long .gcfunc_end - gcfunc # length of region
.short 0 /* flags */
.long .gcfunc_end - gcfunc /* length of region */
.lines_block4:
.long 0 # file ID 0 (foo)
.long 1 # no. lines
.long .lines_end2 - .lines_block4 # length
.long 0 /* file ID 0 (foo) */
.long 1 /* no. lines */
.long .lines_end2 - .lines_block4 /* length */
.long .line6 - gcfunc
.long 0x80000006 # line 6
.long 0x80000006 /* line 6 */
.lines_end2:
+2 -2
View File
@@ -36,7 +36,7 @@
.long 0x67452310
.long 0x01234567
.long 0x89abcdef
.short 0 # padding
.short 0 /* padding */
.long .src2 - .strings_start
.byte NUM_MD5_BYTES
@@ -45,7 +45,7 @@
.long 0x4c5d6e7f
.long 0x7f6e5d4c
.long 0x3b2a1908
.short 0 # padding
.short 0 /* padding */
.chksms_end: