--- /dev/null
+http://sourceware.org/ml/gdb-patches/2007-12/msg00397.html
+
+2007-12-22 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.arch/i386-interface.S, gdb.arch/i386-interface.exp: New files.
+
+2008-03-02 Jan Kratochvil <jan.kratochvil@redhat.com>
+
+ * gdb.arch/i386-interface.exp: Fix a testcase race.
+
+--- /dev/null 1 Jan 1970 00:00:00 -0000
++++ ./gdb/testsuite/gdb.arch/i386-interface.S 22 Dec 2007 19:07:28 -0000
+@@ -0,0 +1,628 @@
++/* Copyright 2007 Free Software Foundation, Inc.
++
++ This program 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 of the License, or
++ (at your option) any later version.
++
++ This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
++
++ Please email any bugs, comments, and/or additions to this file to:
++ bug-gdb@gnu.org
++
++ This file is part of the gdb testsuite.
++
++ This file was produced by:
++ $ gcj -S interface.java -ggdb2 -Wall -m32
++ from the .java file:
++ interface Interface
++ {
++ }
++ class Class implements Interface
++ {
++ }
++*/
++
++ .file "cc28Pp2B.jar"
++ .section .debug_abbrev,"",@progbits
++.Ldebug_abbrev0:
++ .section .debug_info,"",@progbits
++.Ldebug_info0:
++ .section .debug_line,"",@progbits
++.Ldebug_line0:
++ .text
++.Ltext0:
++ .local _MT_Interface
++ .comm _MT_Interface,0,4
++ .data
++ .align 4
++ .type _catch_classes_Interface, @object
++ .size _catch_classes_Interface, 24
++_catch_classes_Interface:
++ .zero 24
++ .section .rodata
++ .align 2
++ .type _Utf1, @object
++ .size _Utf1, 4
++_Utf1:
++ .value 36121
++ .value 9
++ .ascii "Interface"
++ .zero 1
++.globl _ZN9Interface6class$E
++ .data
++ .align 32
++ .type _ZN9Interface6class$E, @object
++ .size _ZN9Interface6class$E, 144
++_ZN9Interface6class$E:
++ .long _ZTVN4java4lang5ClassE+8
++ .long 403000
++ .long _Utf1
++ .value 1536
++ .zero 2
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long _MT_Interface
++ .value 0
++ .value 6
++ .long 0
++ .long 4
++ .value 0
++ .value 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long _catch_classes_Interface
++ .long 0
++ .long 0
++ .value 0
++ .byte 1
++ .zero 1
++ .long 0
++ .value 0
++ .zero 2
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .hidden _ZN9Interface7class$$E
++.globl _ZN9Interface7class$$E
++ .section .rodata
++ .align 4
++ .type _ZN9Interface7class$$E, @object
++ .size _ZN9Interface7class$$E, 4
++_ZN9Interface7class$$E:
++ .long _ZN9Interface6class$E
++ .text
++ .align 2
++.globl _ZN5ClassC1Ev
++ .type _ZN5ClassC1Ev, @function
++_ZN5ClassC1Ev:
++.LFB2:
++ pushl %ebp
++.LCFI0:
++ movl %esp, %ebp
++.LCFI1:
++ subl $24, %esp
++.LCFI2:
++.LBB2:
++#if 0
++ .file 1 "interface.java"
++#else
++ .file "interface.java"
++#endif
++ .loc 1 4 0
++ movl 8(%ebp), %eax
++ movl %eax, -4(%ebp)
++ movl -4(%ebp), %eax
++ movl %eax, (%esp)
++ call _ZN4java4lang6ObjectC1Ev
++.LBE2:
++ leave
++ ret
++.LFE2:
++ .size _ZN5ClassC1Ev, .-_ZN5ClassC1Ev
++ .hidden _ZTVN5ClassE
++.globl _ZTVN5ClassE
++ .data
++ .align 32
++ .type _ZTVN5ClassE, @object
++ .size _ZTVN5ClassE, 40
++_ZTVN5ClassE:
++ .long 0
++ .long 0
++ .long _ZN5Class6class$E
++ .long 4
++ .long _ZN4java4lang6Object8finalizeEJvv
++ .long _ZN4java4lang6Object8hashCodeEJiv
++ .long _ZN4java4lang6Object6equalsEJbPS1_
++ .long _ZN4java4lang6Object8toStringEJPNS0_6StringEv
++ .long _ZN4java4lang6Object5cloneEJPS1_v
++ .long _ZN4java4lang6Object22throwNoSuchMethodErrorEJvv
++ .set .L_ZN5ClassC1Ev0,_ZN5ClassC1Ev
++ .section .rodata
++ .align 2
++ .type _Utf2, @object
++ .size _Utf2, 4
++_Utf2:
++ .value 626
++ .value 6
++ .ascii "<init>"
++ .zero 1
++ .align 2
++ .type _Utf3, @object
++ .size _Utf3, 4
++_Utf3:
++ .value 39797
++ .value 3
++ .ascii "()V"
++ .zero 1
++ .data
++ .align 4
++ .type _MT_Class, @object
++ .size _MT_Class, 20
++_MT_Class:
++ .long _Utf2
++ .long _Utf3
++ .value 16384
++ .value -1
++ .long .L_ZN5ClassC1Ev0
++ .long 0
++ .align 4
++ .type _IF_Class, @object
++ .size _IF_Class, 4
++_IF_Class:
++ .long _ZN9Interface6class$E
++ .align 4
++ .type _catch_classes_Class, @object
++ .size _catch_classes_Class, 24
++_catch_classes_Class:
++ .zero 24
++ .section .rodata
++ .align 2
++ .type _Utf4, @object
++ .size _Utf4, 4
++_Utf4:
++ .value 47448
++ .value 5
++ .ascii "Class"
++ .zero 1
++.globl _ZN5Class6class$E
++ .data
++ .align 32
++ .type _ZN5Class6class$E, @object
++ .size _ZN5Class6class$E, 144
++_ZN5Class6class$E:
++ .long _ZTVN4java4lang5ClassE+8
++ .long 403000
++ .long _Utf4
++ .value 32
++ .zero 2
++ .long _ZN4java4lang6Object6class$E
++ .long 0
++ .long 0
++ .long 0
++ .long _MT_Class
++ .value 1
++ .value 6
++ .long 0
++ .long 4
++ .value 0
++ .value 0
++ .long _ZTVN5ClassE+8
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long _catch_classes_Class
++ .long _IF_Class
++ .long 0
++ .value 1
++ .byte 1
++ .zero 1
++ .long 0
++ .value 0
++ .zero 2
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .long 0
++ .hidden _ZN5Class7class$$E
++.globl _ZN5Class7class$$E
++ .section .rodata
++ .align 4
++ .type _ZN5Class7class$$E, @object
++ .size _ZN5Class7class$$E, 4
++_ZN5Class7class$$E:
++ .long _ZN5Class6class$E
++ .section .jcr,"aw",@progbits
++ .align 4
++ .long _ZN9Interface6class$E
++ .long _ZN5Class6class$E
++ .section .debug_frame,"",@progbits
++.Lframe0:
++ .long .LECIE0-.LSCIE0
++.LSCIE0:
++ .long 0xffffffff
++ .byte 0x1
++ .string ""
++ .uleb128 0x1
++ .sleb128 -4
++ .byte 0x8
++ .byte 0xc
++ .uleb128 0x4
++ .uleb128 0x4
++ .byte 0x88
++ .uleb128 0x1
++ .align 4
++.LECIE0:
++.LSFDE0:
++ .long .LEFDE0-.LASFDE0
++.LASFDE0:
++ .long .Lframe0
++ .long .LFB2
++ .long .LFE2-.LFB2
++ .byte 0x4
++ .long .LCFI0-.LFB2
++ .byte 0xe
++ .uleb128 0x8
++ .byte 0x85
++ .uleb128 0x2
++ .byte 0x4
++ .long .LCFI1-.LCFI0
++ .byte 0xd
++ .uleb128 0x5
++ .align 4
++.LEFDE0:
++ .section .eh_frame,"a",@progbits
++.Lframe1:
++ .long .LECIE1-.LSCIE1
++.LSCIE1:
++ .long 0x0
++ .byte 0x1
++.globl __gcj_personality_v0
++ .string "zP"
++ .uleb128 0x1
++ .sleb128 -4
++ .byte 0x8
++ .uleb128 0x5
++ .byte 0x0
++ .long __gcj_personality_v0
++ .byte 0xc
++ .uleb128 0x4
++ .uleb128 0x4
++ .byte 0x88
++ .uleb128 0x1
++ .align 4
++.LECIE1:
++.LSFDE1:
++ .long .LEFDE1-.LASFDE1
++.LASFDE1:
++ .long .LASFDE1-.Lframe1
++ .long .LFB2
++ .long .LFE2-.LFB2
++ .uleb128 0x0
++ .byte 0x4
++ .long .LCFI0-.LFB2
++ .byte 0xe
++ .uleb128 0x8
++ .byte 0x85
++ .uleb128 0x2
++ .byte 0x4
++ .long .LCFI1-.LCFI0
++ .byte 0xd
++ .uleb128 0x5
++ .align 4
++.LEFDE1:
++ .text
++.Letext0:
++ .section .debug_loc,"",@progbits
++.Ldebug_loc0:
++.LLST0:
++ .long .LFB2-.Ltext0
++ .long .LCFI0-.Ltext0
++ .value 0x2
++ .byte 0x74
++ .sleb128 4
++ .long .LCFI0-.Ltext0
++ .long .LCFI1-.Ltext0
++ .value 0x2
++ .byte 0x74
++ .sleb128 8
++ .long .LCFI1-.Ltext0
++ .long .LFE2-.Ltext0
++ .value 0x2
++ .byte 0x75
++ .sleb128 8
++ .long 0x0
++ .long 0x0
++ .section .debug_info
++ .long 0x117
++ .value 0x2
++ .long .Ldebug_abbrev0
++ .byte 0x4
++ .uleb128 0x1
++ .string "GNU Java 4.3.0 20071221 (experimental)"
++ .byte 0xb
++ .string "interface.java"
++ .string "/home/jkratoch/redhat/bz371831"
++ .long .Ltext0
++ .long .Letext0
++ .long .Ldebug_line0
++ .uleb128 0x2
++ .string "Interface"
++ .byte 0x4
++ .byte 0x1
++ .byte 0x0
++ .long 0x8e
++ .long 0x8e
++ .uleb128 0x3
++ .long 0x8e
++ .byte 0x2
++ .byte 0x23
++ .uleb128 0x0
++ .byte 0x1
++ .byte 0x0
++ .uleb128 0x4
++ .string "java.lang.Object"
++ .byte 0x1
++ .uleb128 0x5
++ .string "Class"
++ .byte 0x4
++ .byte 0x1
++ .byte 0x0
++ .long 0x8e
++ .long 0xe8
++ .uleb128 0x3
++ .long 0x8e
++ .byte 0x2
++ .byte 0x23
++ .uleb128 0x0
++ .byte 0x1
++ .uleb128 0x6
++ .long 0x6e
++ .byte 0x2
++ .byte 0x23
++ .uleb128 0x0
++ .byte 0x1
++ .byte 0x1
++ .uleb128 0x7
++ .byte 0x1
++ .string "<init>"
++ .byte 0x1
++ .byte 0x0
++ .string "_ZN5ClassC1Ev"
++ .byte 0x1
++ .uleb128 0x8
++ .long 0xe8
++ .byte 0x1
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x9
++ .byte 0x4
++ .long 0xa1
++ .uleb128 0xa
++ .long 0xc6
++ .long .LFB2
++ .long .LFE2
++ .long .LLST0
++ .long 0x114
++ .uleb128 0xb
++ .long 0xe8
++ .byte 0x2
++ .byte 0x91
++ .sleb128 0
++ .uleb128 0xc
++ .long 0x114
++ .byte 0x2
++ .byte 0x91
++ .sleb128 -12
++ .byte 0x0
++ .uleb128 0x9
++ .byte 0x4
++ .long 0x8e
++ .byte 0x0
++ .section .debug_abbrev
++ .uleb128 0x1
++ .uleb128 0x11
++ .byte 0x1
++ .uleb128 0x25
++ .uleb128 0x8
++ .uleb128 0x13
++ .uleb128 0xb
++ .uleb128 0x3
++ .uleb128 0x8
++ .uleb128 0x1b
++ .uleb128 0x8
++ .uleb128 0x11
++ .uleb128 0x1
++ .uleb128 0x12
++ .uleb128 0x1
++ .uleb128 0x10
++ .uleb128 0x6
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x2
++ .uleb128 0x38
++ .byte 0x1
++ .uleb128 0x3
++ .uleb128 0x8
++ .uleb128 0xb
++ .uleb128 0xb
++ .uleb128 0x3a
++ .uleb128 0xb
++ .uleb128 0x3b
++ .uleb128 0xb
++ .uleb128 0x1d
++ .uleb128 0x13
++ .uleb128 0x1
++ .uleb128 0x13
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x3
++ .uleb128 0x1c
++ .byte 0x0
++ .uleb128 0x49
++ .uleb128 0x13
++ .uleb128 0x38
++ .uleb128 0xa
++ .uleb128 0x32
++ .uleb128 0xb
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x4
++ .uleb128 0x2
++ .byte 0x0
++ .uleb128 0x3
++ .uleb128 0x8
++ .uleb128 0x3c
++ .uleb128 0xc
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x5
++ .uleb128 0x2
++ .byte 0x1
++ .uleb128 0x3
++ .uleb128 0x8
++ .uleb128 0xb
++ .uleb128 0xb
++ .uleb128 0x3a
++ .uleb128 0xb
++ .uleb128 0x3b
++ .uleb128 0xb
++ .uleb128 0x1d
++ .uleb128 0x13
++ .uleb128 0x1
++ .uleb128 0x13
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x6
++ .uleb128 0x1c
++ .byte 0x0
++ .uleb128 0x49
++ .uleb128 0x13
++ .uleb128 0x38
++ .uleb128 0xa
++ .uleb128 0x4c
++ .uleb128 0xb
++ .uleb128 0x32
++ .uleb128 0xb
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x7
++ .uleb128 0x2e
++ .byte 0x1
++ .uleb128 0x3f
++ .uleb128 0xc
++ .uleb128 0x3
++ .uleb128 0x8
++ .uleb128 0x3a
++ .uleb128 0xb
++ .uleb128 0x3b
++ .uleb128 0xb
++ .uleb128 0x2007
++ .uleb128 0x8
++ .uleb128 0x3c
++ .uleb128 0xc
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x8
++ .uleb128 0x5
++ .byte 0x0
++ .uleb128 0x49
++ .uleb128 0x13
++ .uleb128 0x34
++ .uleb128 0xc
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0x9
++ .uleb128 0xf
++ .byte 0x0
++ .uleb128 0xb
++ .uleb128 0xb
++ .uleb128 0x49
++ .uleb128 0x13
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0xa
++ .uleb128 0x2e
++ .byte 0x1
++ .uleb128 0x47
++ .uleb128 0x13
++ .uleb128 0x11
++ .uleb128 0x1
++ .uleb128 0x12
++ .uleb128 0x1
++ .uleb128 0x40
++ .uleb128 0x6
++ .uleb128 0x1
++ .uleb128 0x13
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0xb
++ .uleb128 0x5
++ .byte 0x0
++ .uleb128 0x49
++ .uleb128 0x13
++ .uleb128 0x2
++ .uleb128 0xa
++ .byte 0x0
++ .byte 0x0
++ .uleb128 0xc
++ .uleb128 0x34
++ .byte 0x0
++ .uleb128 0x49
++ .uleb128 0x13
++ .uleb128 0x2
++ .uleb128 0xa
++ .byte 0x0
++ .byte 0x0
++ .byte 0x0
++ .section .debug_pubnames,"",@progbits
++ .long 0x15
++ .value 0x2
++ .long .Ldebug_info0
++ .long 0x11b
++ .long 0xee
++ .string "()"
++ .long 0x0
++ .section .debug_aranges,"",@progbits
++ .long 0x1c
++ .value 0x2
++ .long .Ldebug_info0
++ .byte 0x4
++ .byte 0x0
++ .value 0x0
++ .value 0x0
++ .long .Ltext0
++ .long .Letext0-.Ltext0
++ .long 0x0
++ .long 0x0
++ .ident "GCC: (GNU) 4.3.0 20071221 (experimental)"
++ .section .note.GNU-stack,"",@progbits
+--- /dev/null 1 Jan 1970 00:00:00 -0000
++++ ./gdb/testsuite/gdb.arch/i386-interface.exp 22 Dec 2007 19:07:28 -0000
+@@ -0,0 +1,66 @@
++# Copyright 2007 Free Software Foundation, Inc.
++
++# This program 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 of the License, or
++# (at your option) any later version.
++#
++# This program 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 this program. If not, see <http://www.gnu.org/licenses/>.
++
++# Please email any bugs, comments, and/or additions to this file to:
++# bug-gdb@gnu.org
++
++# This file is part of the gdb testsuite.
++
++# Test basis recognization of DW_TAG_interface_type.
++# GCC java_classify_record() produces it if returns RECORD_IS_INTERFACE.
++
++if $tracelevel {
++ strace $tracelevel
++}
++
++set prms_id 0
++set bug_id 0
++
++if {![istarget "i?86-*-*"] && ![istarget "x86_64-*-*"]} then {
++ verbose "Skipping i386 Java DW_TAG_interface_type test."
++ return
++}
++
++set testfile "i386-interface"
++set srcfile ${testfile}.S
++set binfile ${objdir}/${subdir}/${testfile}.o
++
++if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" object {debug additional_flags=-m32}] != "" } {
++ untested i386-gnu-cfi.exp
++ return -1
++}
++
++# Get things started.
++
++gdb_exit
++gdb_start
++gdb_reinitialize_dir $srcdir/$subdir
++gdb_load ${binfile}
++
++gdb_test "set language java"
++
++set test "ptype Interface"
++gdb_test_multiple $test $test {
++ -re "type = class Interface *extends java.lang.Object \{.*$gdb_prompt $" {
++ pass $test
++ }
++}
++
++set test "ptype Class"
++gdb_test_multiple $test $test {
++ -re "type = class Class *extends java.lang.Object implements Interface \{.*$gdb_prompt $" {
++ pass $test
++ }
++}