bbadger@x102c.harris-atd.com (Badger BA 64810) (09/25/89)
I noticed what seems to be an error in ATT System V Release 3.2 Upgrade 2.1 system file sysmacros.h. The error only affects pdp11 systems, because it is conditionally compiled. Since this is a 80386 release, perhaps no one is affected. Nonetheless, here's my patch: diff -c /user03/sec/l/V3_2_1/usr/src/uts/i386/sys/sysmacros.h /user03/sec/l/Vcm/usr/src/Vcm/uts/i386/sys/sysmacros.h *** /user03/sec/l/V3_2_1/usr/src/uts/i386/sys/sysmacros.h Tue May 17 17:22:08 1988 --- /user03/sec/l/Vcm/usr/src/Vcm/uts/i386/sys/sysmacros.h Sun Sep 24 16:44:28 1989 *************** *** 191,197 **** #ifdef pdp11 #define SALIGN(p) (char *)(((int)p+1) & ~1) #define IALIGN(p) (char *)(((int)p+1) & ~1) ! #define LALIGN(p) (char *)(((int)p+1) & ~3) #endif #if vax | i386 #define SALIGN(p) (char *)(((int)p+1) & ~1) --- 191,197 ---- #ifdef pdp11 #define SALIGN(p) (char *)(((int)p+1) & ~1) #define IALIGN(p) (char *)(((int)p+1) & ~1) ! #define LALIGN(p) (char *)(((int)p+3) & ~3) #endif #if vax | i386 #define SALIGN(p) (char *)(((int)p+1) & ~1) Note that I've changed a space to a tab and a '1' to a '3'. Now the LALIGN(p) matches the one defined for when ``#if vax | i386'' is in effect (not shown here). I have two questions about this. 1. Technical: Is it really a good idea to convert to (int)? Wouldn't (unsigned int) or (unsigned long) be safer? I've seen a similar operation elsewhere in kernel code which does: (char *)((int)p + 3) & ~3L) Is this any better? 2. Procedural: What's the official way to submit these things to ATT? I haven't seen any ``problem report'' forms in the backs of our manuals, (unlike DIGITAL which puts one in theirs). Is there an ATT network address which accepts bug reports, like Sun has? ----- - - - - - - - ---- Bernard A. Badger Jr. 407/984-6385 |``Get a LIFE!'' -- J.H. Conway Harris GISD, Melbourne, FL 32902 |Buddy, can you paradigm? Internet: bbadger%x102c@trantor.harris-atd.com|'s/./&&/g' Tom sed expansively.
gwyn@smoke.BRL.MIL (Doug Gwyn) (09/25/89)
In article <2721@trantor.harris-atd.com> bbadger@x102c.harris-atd.com (Badger BA 64810) writes: >Now the LALIGN(p) matches the one defined for when >``#if vax | i386'' is in effect (not shown here). Yeah, and now you've broken it. PDP-11 longs need be aligned only on a word boundary, not on a longword boundary. >1. Technical: Is it really a good idea to convert to (int)? On a PDP-11, sure. >2. Procedural: What's the official way to submit these things to ATT? Submit a software trouble report. If you have subscribed to the appropriate level of software support, you should have a folder that contains forms and instructions. >Is there an ATT network address which accepts bug reports, like Sun has? There is (or was) a command "trenter" that would guide you through the steps of filling out a trouble report then e-mail it somewhere.
bbadger@x102c.harris-atd.com (Badger BA 64810) (09/29/89)
In article <11150@smoke.BRL.MIL> gwyn@brl.arpa (Doug Gwyn) writes: >In article <2721@trantor.harris-atd.com> bbadger@x102c.harris-atd.com (Badger BA 64810) writes: >>Now the LALIGN(p) matches the one defined for when >>``#if vax | i386'' is in effect (not shown here). > >Yeah, and now you've broken it. PDP-11 longs need be aligned >only on a word boundary, not on a longword boundary. > Well, I thought that longs might only be aligned to even bytes, but then shouldn't the definition of LALIGN be the same as IALIGN? #ifdef pdp11 #define SALIGN(p) (char *)(((int)p+1) & ~1) #define IALIGN(p) (char *)(((int)p+1) & ~1) #define LALIGN(p) (char *)(((int)p+1) & ~3) /* ??? */ #endif #if vax | i386 #define SALIGN(p) (char *)(((int)p+1) & ~1) #define IALIGN(p) (char *)(((int)p+3) & ~3) #define LALIGN(p) (char *)(((int)p+3) & ~3) #endif An generalized alignment macro would always use the same number like this: #define ALIGN(p,m) (char *)(((int)p+m) & ~m) p +1&~3 +3&~3 0 0 0 1 0 4 2 0 4 3 4 4 4 4 4 5 4 8 6 4 8 7 8 8 8 8 8 Is there any possible reason to use the +1&~3 pattern? I can't see it. >>1. Technical: Is it really a good idea to convert to (int)? > >On a PDP-11, sure. I was more worried about the VAX. #define LALIGN(p) (char *)(((int)p+3) & ~3) However, I guess since each macro set is machine dependent, it could be changed to handle whatever int size that pointers turned out to be. I guess that there isn't a machine-independent way to do this. It should only be a problem if (sizeof(int) != sizeof(* char)). > >>2. Procedural: What's the official way to submit these things to ATT? > >Submit a software trouble report. If you have subscribed to >the appropriate level of software support, you should have a >folder that contains forms and instructions. > >>Is there an ATT network address which accepts bug reports, like Sun has? > >There is (or was) a command "trenter" that would guide you through >the steps of filling out a trouble report then e-mail it somewhere. No such command here. ----- - - - - - - - ---- Bernard A. Badger Jr. 407/984-6385 |``Get a LIFE!'' -- J.H. Conway Harris GISD, Melbourne, FL 32902 |Buddy, can you paradigm? Internet: bbadger%x102c@trantor.harris-atd.com|'s/./&&/g' Tom sed expansively.