[parisc-linux] compiling kernels with gcc-3.1
Matthew Wilcox
willy@debian.org
Mon, 15 Jul 2002 18:43:20 +0100
On Mon, Jul 15, 2002 at 10:32:33AM -0700, Randolph Chung wrote:
> In reference to a message from John David Anglin, dated Jul 15:
> > > Is --disable-indexing used in kernel builds? This should stop gcc
> > > from generating the above.
> >
> > Oops, that should be "-mdisable-indexing".
>
> right now we use:
> -Wall -Wstrict-prototypes -Wno-trigraphs -O2 -fomit-frame-pointer
> -fno-strict-aliasing -fno-common -D__linux__ -pipe -fno-strength-reduce
> -mno-space-regs -mfast-indirect-calls -mdisable-fpregs
> -ffunction-sections -march=2.0 -mschedule=8000
>
> (the last two are only for pa8x00 builds...)
>
> i'll try the disable-indexing stuff...
while we're on the subject of gcc flags ...
right now, we have an interesting patch in the kernel to get around a
fun feature of the PA ABI that no other ABI seems to have:
-asmlinkage ssize_t sys_pread(unsigned int fd, char * buf,
- size_t count, loff_t pos)
+static inline
+ssize_t do_pread(unsigned int fd, char * buf, size_t count, loff_t pos)
[...]
+#if BITS_PER_LONG == 32
+#ifdef __BIG_ENDIAN
+#define LOFF_T(high, low) unsigned int high, unsigned int low
+#else
+#define LOFF_T(high, low) unsigned int low, unsigned int high
+#endif
+
+asmlinkage
+ssize_t sys_pread(unsigned int fd, char *buf, size_t count, LOFF_T(high, low))
+{
+ return do_pread(fd, buf, count, (loff_t)high << 32 | low);
+}
+
+ssize_t sys_pwrite(unsigned int fd, char *buf, size_t count, LOFF_T(high, low))
+{
+ return do_pwrite(fd, buf, count, (loff_t)high << 32 | low);
+}
the problem is that the PA ABI specifies that quantities shall be
`naturally' aligned, even 64-bit quantities on 32-bit machines. so the
kernel is expecting to see:
fd (32 bits)
buf (32 bits)
count (32 bits)
(empty)
pos (64 bits)
what it _actually_ gets (because glibc is hideously broken, IMO):
fd
buf
count
(pos >> 32)
pos & 0xffffffff
is there any chance of having a flag (or maybe an __attribute__ that
we could #define asmlinkage to?) which would change the ABI to be more
compressed like all the other architectures?
--
Revolutions do not require corporate support.