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.