Re: gcj on OpenBSD

Andrew Haley <[email protected]>
Newsgroups gmane.comp.gcc.java.devel
Message-ID <[email protected]>
Andrew Haley wrote:
> Kurt Miller wrote:
> 
>> I've been working on getting gcj up and running on OpenBSD/i386.
>> Currently I'm working on adding gcj to gcc 4.2 port. I'm pretty far
>> along with the work: enabled dwarf2 exceptions, thread model posix, etc.
>> The build completes but gcj-dbtool segfaults and gij too. The segfault
>> occurs when initializing the class loader because engine is null.
>>
>> Could anyone suggest some ideas for diagnosing the root cause of this?
> 
> This happens because class registration hasn't been done.  gcc generates
> a magic section called .jcr, and this is a list of pointers to classes.
> 
> On x86_64 a .jcr section in an .o file with two classes looks like this:
> 
> RELOCATION RECORDS FOR [.jcr]:
> OFFSET           TYPE              VALUE
> 0000000000000000 R_X86_64_64       P::class$
> 0000000000000008 R_X86_64_64       Hello::class$
> 
> And the .init section:

Of an executable, I mean.  There is no init section in the .o file.

> 0000000000400bb0 <_init>:
>   400bb0:       48 83 ec 08             sub    $0x8,%rsp
>   400bb4:       e8 63 01 00 00          callq  400d1c <call_gmon_start>
>   400bb9:       e8 f2 01 00 00          callq  400db0 <frame_dummy>
>   400bbe:       e8 2d 04 00 00          callq  400ff0 <__do_global_ctors_aux>
>   400bc3:       48 83 c4 08             add    $0x8,%rsp
>   400bc7:       c3                      retq
> 
> which calls (*_Jv_RegisterClasses)
> 
> 0000000000400db0 <frame_dummy>:
>   400db0:       55                      push   %rbp
>   400db1:       48 83 3d 87 04 20 00    cmpq   $0x0,0x200487(%rip)        # 601240 <__JCR_LIST__>
>   400db8:       00
>   400db9:       48 89 e5                mov    %rsp,%rbp
>   400dbc:       74 1a                   je     400dd8 <frame_dummy+0x28>
>   400dbe:       41 bb 18 0c 40 00       mov    $0x400c18 <_Jv_RegisterClasses@plt>,%r11d
>   400dc4:       4d 85 db                test   %r11,%r11
>   400dc7:       74 0f                   je     400dd8 <frame_dummy+0x28>
>   400dc9:       bf 40 12 60 00          mov    $0x601240 <__JCR_LIST__>,%edi
>   400dce:       c9                      leaveq
>   400dcf:       41 ff e3                jmpq   *%r11
>   400dd2:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
>   400dd8:       c9                      leaveq
>   400dd9:       c3                      retq
> 
> I suspect that this mechanism is not working on BSD.
> 
> Andrew.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.