Ticket #579 (new bug)

Opened 6 years ago

Last modified 4 years ago

build failure on Solaris/x86 with GCC and native assembler

Reported by: joernc Owned by:
Priority: normal Milestone:
Component: core Version:
Severity: medium Keywords:
Cc: jkeenan, cotto, whiteknight Language:
Patch status: new Platform: solaris

Description


Attachments

solbug.txt Download (3.7 KB) - added by joernc 6 years ago.

Change History

Changed 6 years ago by joernc

follow-up: ↓ 2   Changed 6 years ago by coke

OP posted everything as an attachment, including comments.

trap is actually scheduled for deletion; We can probably resolve this issue by finalizing that removal.

in reply to: ↑ 1   Changed 6 years ago by joernc

OP posted everything as an attachment, including comments.

That's how I understood the instructions given by parrot_bug. The section "How To Submit A Bug Report" in docs/submissions.pod could elaborate on this some more as well.

  Changed 4 years ago by jkeenan

  • cc jkeenan added
  • platform set to solaris
  • component changed from none to core
  • patch set to new

In order to address the issue raised in this ticket, I'm going to pull what should have been the Description out of the attachment and re-post it here. Is there someone on Solaris/x86 who could look into this issue?

Thank you very much.

kid51

### Original ###

src/ops/experimental.ops tests for the compiler to choose appropriate assembler code:

#if defined(__GNUC__) && defined(i386)
    __asm__("int3");       /* opcode 0xcc */
#endif

This fails e.g. on Solaris, when using GCC with the native assembler /usr/ccs/bin/as.

This change

--- src/ops/experimental.ops    2009/04/24 11:33:01     1.1
+++ src/ops/experimental.ops    2009/04/24 11:33:17
@@ -45,7 +45,7 @@
 =cut
 
 op trap() :deprecated {
-#if defined(__GNUC__) && defined(i386)
+#if defined(__GNUC__) && defined(i386) && !defined(__sun__)
     __asm__("int3");       /* opcode 0xcc */
 #endif
 #if defined(__GNUC__) && defined(PPC)

does the trick for me, but may not work then using gas. How to implement the real fix (i.e. checking for the assembler, not the compiler in the first place) is unknown to me.

As this file defines experimental opcodes, that are "implicitly deprecated", how about adding a configure flag to switch them off (or switch them off by default and add a flag to turn them on when needed) in Configure.pl?

  Changed 4 years ago by doughera

The analysis is correct. (That particular combination, gcc with native assembler, is probably not too common on Solaris/x86 these days, so this probably won't appear often.) A proper fix is, as the original poster stated, to check for which assembler is being used in Configure.pl. This would also help select the correct assembler syntax for TT #271 (and hence help clean up TT #273 as well). More immediately, simply deleting the offending deprecated experimental opcode would eliminate this particular problem.

  Changed 4 years ago by jkeenan

  • cc cotto, whiteknight added
Note: See TracTickets for help on using tickets.