On 2012-05-28, at 2:52 PM, Andreas Schwab wrote:

> I was telling rubbish, the code is actually ok.
> 
> Andreas.


Thank you for your help sir.

On 2012-05-28, at 4:15 PM, Richard wrote:

> Hi,
> 
> when you suspect the assembler look at the output of "objdump -S test.o" and 
> compare with assembler input. You can also try to singlestep the asm code,
> (stepi, info registers) in gdb and perhaps you have "ddd" or similar 
> available?
> 
> Richard


Hi Richard.  Unfortunately I do not have objdump on NEXTSTEP, but I think I 
have another tool that I can use to disassemble the object file with.  Thank 
you very much for the suggestion on single-stepping the asm code with gdb.  I 
have gdb 4.7 and also SuperDebugger, which is a NEXTSTEP native "equivalent" of 
DDD.  I used them already to narrow the issue down to the jump tables, but have 
very limited experience with asm code debugging.  I will explore this option a 
bit, since I am sinking deeper and deeper into the porting process :-)

On 2012-05-28, at 5:50 PM, Vincent Rivière wrote:

> On 28/05/2012 14:06, t-rexky wrote:
>>      lsll #2,d0
>>      movel pc@(L8,d0:l),d0
>>      movel d0,a0
>>      jmp a0@
>>      .const
>>      .align 1
>> L8:
>>      .long L2
>>      .long L3
>>      .long L4
>>      .long L5
>>      .long L6
>>      .long L7
>>      .text
>> L3:
> 
> On my m68k-atari-mint port, the code generated by GCC is a bit different.
> Especially, I don't have those lines:
> .const
> .align 1
> ...
> .text
> 
> That's quite surprising because I can't find that ".const" directive in the 
> gas manual. I don't know what it does. But if the goal of that directive 
> would be to change the output section, the generated code may be wrong, due 
> to PC-relative addressing.
> 
> I suspect you have that ".const" somewhere in your configuration file, maybe 
> in the ASM_OUTPUT_CASE_END macro. If this is the case, try to remove that.

The NEXTSTEP assembler is a very heavily modified gas-1.38 and the .const 
directive indeed changes the output section.  To quote the NeXT manual 
directly: "The compiler places all data declared const in this section and all 
jump tables it generates for switch statements."  I am trying to figure out 
exactly what has changed in gcc, since the jump tables  worked just fine with 
gcc-3.4.6 and the exact same target configuration I am using.  And because of 
the significant NeXT modifications to gas-1.38, I will not be able to port a 
newer gas version.

As a side note, I also tried to move my configuration over to gcc-4.2.4 and the 
build fails in a very similar way.  It does seem, however, to be at least 3 
times faster than 4.4 and 4.6 :-).

> See the documentation there:
> http://gcc.gnu.org/onlinedocs/gccint/Dispatch-Tables.html
> 
> Also, the following define is probably mandatory if your target allows a 
> separate read-only data section :
> 
> #define JUMP_TABLES_IN_TEXT_SECTION 1
> 
> See there:
> http://gcc.gnu.org/onlinedocs/gccint/Sections.html#index-JUMP_005fTABLES_005fIN_005fTEXT_005fSECTION-4432
> 
> Good luck.
> 
> NB: From the two macros above, JUMP_TABLES_IN_TEXT_SECTION is probably the 
> closest to your solution.

Thank you very much for the references.  Over the last week I tried all 
possible combinations of target configuration, including using PC relative jump 
table configuration from your mint port.  So far I had no luck, unfortunately.  
I really do not understand what I am missing here, but I will spend some more 
time with this.  I feel like I am almost there, and it would be a great step 
forward for the NeXT community.

> -- 
> Vincent Rivière

Thank you again to everyone for your help!
t-rexky

--
To UNSUBSCRIBE, email to [email protected]
with a subject of "unsubscribe". Trouble? Contact [email protected]
Archive: http://lists.debian.org/[email protected]

Reply via email to