earle@SUN.COM (Greg Earle) (02/20/89)
Try these patches to gcc 1.33; they're from RMS (thus blessed) and
they enabled me to build the core X R3 distribution with gcc 1.33 after they
were applied. I didn't even need to use `-traditional'. Actually, I should
qualify that; fonts/bdftosnf/fontutil.c uses `inline' as a local variable
name (Non `-traditional' gcc reserves `inline' as a keyword), and that name
needs to be changed; and fonts/bdftosnf/showsnf.c gets a self-induced abort()
somewhere (`gcc got fatal signal 6'); a workaround is to move a variable
declaration outside of a function. Try the following patches for these 2
files (the patches for gcc are after them, strip them out and put in a
separate patch file):
Note that these patches only help the Core X distribution. My first foray
into the contrib stuff (adding the PEX extension to the server, and building
the PEX extension demonstration clients) is meeting considerably more
resistance. 2 files cause gcc to self-abort, a couple have code that gcc
complains about, and a couple of directories have code that tries to be
ANSI-ized (has `#if (__STDC__) && !(__HIGHC__)' and such), but still makes
gcc complain anyway. It's a tough battle ...
Hope this helps,
- Greg Earle
Sun Los Angeles - JPL on-site software support
poseur!earle@Sun.COM
------------------------------------------------------------------------------
Apply the following patch from your top level X directory, using `patch -c -p0':
*** fonts/bdftosnf/fontutil.c.orig Fri Oct 14 10:33:27 1988
--- fonts/bdftosnf/fontutil.c Thu Feb 9 04:57:45 1989
***************
*** 399,412 ****
{
int x, y;
int dx, dy;
! unsigned char *inline, *outline;
int inwidth;
dx = pCI->metrics.leftSideBearing;
dy = ascent - pCI->metrics.ascent;
bzero (newglyph, width * (ascent + descent));
! inline = oldglyphs + pCI->byteOffset;
! outline = newglyph + dy * width;
inwidth = GLWIDTHBYTESPADDED (pCI->metrics.characterWidth, glyphPad);
for (y = 0; y < pCI->metrics.ascent + pCI->metrics.descent; y++) {
for (x = 0;
--- 399,412 ----
{
int x, y;
int dx, dy;
! unsigned char *in_line, *out_line;
int inwidth;
dx = pCI->metrics.leftSideBearing;
dy = ascent - pCI->metrics.ascent;
bzero (newglyph, width * (ascent + descent));
! in_line = oldglyphs + pCI->byteOffset;
! out_line = newglyph + dy * width;
inwidth = GLWIDTHBYTESPADDED (pCI->metrics.characterWidth, glyphPad);
for (y = 0; y < pCI->metrics.ascent + pCI->metrics.descent; y++) {
for (x = 0;
***************
*** 413,423 ****
x < pCI->metrics.rightSideBearing - pCI->metrics.leftSideBearing;
x++)
{
! if (ISBITON (x, inline))
! SETBIT (x + dx, outline);
}
! inline += inwidth;
! outline += width;
}
pCI->metrics.leftSideBearing = 0;
pCI->metrics.rightSideBearing = pCI->metrics.characterWidth;
--- 413,423 ----
x < pCI->metrics.rightSideBearing - pCI->metrics.leftSideBearing;
x++)
{
! if (ISBITON (x, in_line))
! SETBIT (x + dx, out_line);
}
! in_line += inwidth;
! out_line += width;
}
pCI->metrics.leftSideBearing = 0;
pCI->metrics.rightSideBearing = pCI->metrics.characterWidth;
*** fonts/bdftosnf/showsnf.c.orig Fri Oct 14 10:15:15 1988
--- fonts/bdftosnf/showsnf.c Thu Feb 9 05:23:06 1989
***************
*** 81,86 ****
--- 81,90 ----
exit (1);
}
+ #if defined(__GNUC__) || defined(__STDC__)
+ int total;
+ #endif
+
showfont(file, verbose)
char *file;
int verbose;
***************
*** 91,97 ****
--- 95,105 ----
FontInfoRec f;
int fd, i, strings;
int bytesGlUsed;
+ #if defined(__GNUC__) || defined(__STDC__)
+ ;
+ #else
int total;
+ #endif
if (stat(file, &st) < 0) {
fprintf(stderr, "can't stat %s\n", file);
------------------------------------------------------------------------------
Apply these patches to your gcc 1.33 source directory:
*** expmed.c.orig Sat Jan 28 16:48:11 1989
--- expmed.c Mon Feb 6 09:08:57 1989
***************
*** 193,206 ****
{
if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
{
- /* Avoid making subreg of a subreg. */
- if (GET_CODE (value1) == SUBREG)
- value1 = copy_to_reg (value1);
/* Optimization: Don't bother really extending VALUE
if it has all the bits we will actually use. */
! value1 = gen_rtx (SUBREG, SImode, value1, 0);
! if (GET_CODE (SUBREG_REG (value1)) != REG)
value1 = copy_to_reg (value1);
}
else if (!CONSTANT_P (value))
/* Parse phase is supposed to make VALUE's data type
--- 193,205 ----
{
if (GET_MODE_BITSIZE (GET_MODE (value)) >= bitsize)
{
/* Optimization: Don't bother really extending VALUE
if it has all the bits we will actually use. */
!
! /* Avoid making subreg of a subreg. */
! if (GET_CODE (value1) != REG)
value1 = copy_to_reg (value1);
+ value1 = gen_rtx (SUBREG, SImode, value1, 0);
}
else if (!CONSTANT_P (value))
/* Parse phase is supposed to make VALUE's data type
*** integrate.c.orig Mon Jan 16 13:05:38 1989
--- integrate.c Tue Feb 7 12:48:13 1989
***************
*** 613,618 ****
--- 613,620 ----
{
int size = int_size_in_bytes (TREE_TYPE (formal));
copy = assign_stack_local (tmode, size);
+ if (!memory_address_p (DECL_MODE (formal), XEXP (copy, 0)))
+ copy = change_address (copy, VOIDmode, copy_rtx (XEXP (copy, 0)));
store_expr (arg, copy, 0);
}
else if (! TREE_READONLY (formal)
*** output-sparc.c.orig Mon Jan 30 23:50:45 1989
--- output-sparc.c Sat Feb 4 23:30:12 1989
***************
*** 1429,1434 ****
--- 1429,1435 ----
int lucky1 = ((unsigned)REGNO (operands[1]) - 8) <= 1;
int lucky2 = ((unsigned)REGNO (operands[2]) - 8) <= 1;
+ CC_STATUS_INIT; /* this forgotten in virgin 1.33. */
if (lucky1)
if (lucky2)
output_asm_insn ("call .mul,2\n\tnop", operands);thewalt@RITZ.CIVE.CMU.EDU (Chris Thewalt) (02/22/89)
In article <8902200730.AA14576@poseur.Sun.COM> earle@SUN.COM (Greg Earle) writes: > > Try these patches to gcc 1.33; they're from RMS (thus blessed) and >they enabled me to build the core X R3 distribution with gcc 1.33 after they >were applied. I didn't even need to use `-traditional'. ... I modified gcc 1.33 and X11 with your patches and I still can't compile the core distribution. I am running a MicroVAX II, Ultrix 2.2, X11R3 with patches 1-7 installed and the PURDUE 2.0 and 2.1 enhancements The examples in PROBLEMS 1 and 2 below actually occurred in many different locations. (this worked with gcc 1.31 and -traditional) ******* PROBLEM 1 ******* I can't compile the libraries without -traditional, for example, the following macro in lib/X/XBackgnd.c, gets expanded as follows: GetReqExtra (ChangeWindowAttributes, 4, req); ------ gcc -E -traditional gives: if ((dpy->bufptr + 12 + 4) > dpy->bufmax) _XFlush(dpy); req = (xChangeWindowAttributesReq *)(dpy->last_req = dpy->bufptr); req->reqType = 2 ; req->length = (12 + 4)>>2; dpy->bufptr += 12 + 4; dpy->request++; ------ gcc -E gives (lots of errors about sz_): if ((dpy->bufptr + sz_* req + 4) > dpy->bufmax) _XFlush(dpy); req = (xChangeWindowAttributesReq *)(dpy->last_req = dpy->bufptr); req->reqType = 2 ; req->length = (sz_* req + 4)>>2; dpy->bufptr += sz_* req + 4; dpy->request++ ; ******** PROBLEM 2 ******** There are problems in handling the asm statements from the PURDUE changes. For example, in server/ddx/mfb/mfbgetsp.c line 118 getandputbits0(psrc, srcBit, w, pdst); ------- gcc -E gives: { register unsigned int _tmpbits; asm ("extzv %1,%2,%3,%0" : "g" ( _tmpbits) : "g" ( srcBit), "g" ( w), "m" (*(char *)(psrc))); asm ("insv %3,%1,%2,%0" : "m" (*(char *)( pdst)) : "g" ( 0), "g" ( w), "g" (_tmpbits)); }; which results in the errors: mfbgetsp.c: In function mfbGetSpans: mfbgetsp.c: output operand constraint lacks `=' mfbgetsp.c: output operand constraint lacks `=' I hope this helps, Chris thewalt@ce.cmu.edu =-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-= Christopher Robin Thewalt These opinions are not necessarily thewalt@ce.cmu.edu shared by my employer... Carnegie Mellon University --