🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: gnu.gcc.bug
Article #2129

problem with gcc 1.32 and the Ultrix LK linker

#2129
From: nesheim
Date: Fri, 06 Jan 1989 16:29
89 lines
2705 bytes
For the following code fragment, 
extern int *_CMI_scratch_ram;

test(field1)
    int field1;
{
    int field1_loc_1;
    {
	field1_loc_1 = 
	    _CMI_scratch_ram[ (((short*)&(field1))[1] <<2) ] 
		+                 (((short*)&(field1))[0] ) ;
    }
    return (field1_loc_1);
}

gcc version 1.32 generates the
following assembly code:

.text
            .align 1
    .globl _test
    _test:
            .word 0xc0
            subl2 $4,sp
            cvtwl 6(ap),r6
            moval 0[r6],r6    <--- Flagged as illegal by the LK linker
            cvtwl 4(ap),r7
            addl3 *__CMI_scratch_ram[r6],r7,-4(fp)
        movl -4(fp),r0
            ret
            ret

The Ultrix LK linker doesn't allow references off page zero.  So  when
it tries to link the object produced by assembling the above
code, you get the following error message:

%LK-W-UDEFPSC, attempt to reference undefined psect number 255.
	in module test file test.o

The following patch to vax.md is necessary to avoid this problem:

loki-90% rcsdiff -c vax.md
RCS file: vax.md,v
retrieving revision 1.1
diff -c -r1.1 vax.md
*** /tmp/,RCSt1a02861	Thu Jan  5 20:43:46 1989
--- vax.md	Thu Jan  5 20:37:13 1989
***************
*** 1060,1065 ****
--- 1060,1069 ----
    operands[2] = negate_rtx (QImode, operands[2]);
  }")
  
+ ;; The moval 0[%1],%0 hack below blows up 
+ ;; the LK linker under ultrix, as addressing off 
+ ;; page zero is not allowed.
+ ;;
  (define_insn "ashlsi3"
    [(set (match_operand:SI 0 "general_operand" "=g")
  	(ashift:SI (match_operand:SI 1 "general_operand" "g")
***************
*** 1075,1084 ****
        int i = INTVAL (operands[2]);
        if (i == 1)
  	return \"addl3 %1,%1,%0\";
!       if (i == 2)
  	return \"moval 0[%1],%0\";
        if (i == 3)
! 	return \"movad 0[%1],%0\";
      }
    return \"ashl %2,%1,%0\";
  }")
--- 1079,1088 ----
        int i = INTVAL (operands[2]);
        if (i == 1)
  	return \"addl3 %1,%1,%0\";
!       /*if (i == 2)
  	return \"moval 0[%1],%0\";
        if (i == 3)
! 	return \"movad 0[%1],%0\";*/
      }
    return \"ashl %2,%1,%0\";
  }")
loki-91% 


-- Bill Nesheim; Thinking Machines Corporation, Cambridge, MA +1 617-876-1111
   nesheim@think.com, {harvard,bloom-beacon,topaz}!think!nesheim
Technical Details
Message-ID: <8901061629.AA03921@loki.think.com>
Path: arc1-ca.pugleaf.net!utzoo!telly!ddsw1!lll-winken!killer!mit-eddie!bloom-beacon!tut.cis.ohio-state.edu!THINK.COM!nesheim

Show Full Headers
Complete Article Headers
Path: arc1-ca.pugleaf.net!utzoo!telly!ddsw1!lll-winken!killer!mit-eddie!bloom-beacon!tut.cis.ohio-state.edu!THINK.COM!nesheim
From: nesheim@THINK.COM
Newsgroups: gnu.gcc.bug
Subject: problem with gcc 1.32 and the Ultrix LK linker
Message-ID: <8901061629.AA03921@loki.think.com>
Date: 6 Jan 89 16:29:56 GMT
Sender: news@tut.cis.ohio-state.edu
Organization: GNUs Not Usenet
Lines: 89