* Re: loadaddr
2001-04-10 16:42 loadaddr Scott A McConnell
@ 2001-04-10 16:38 ` Ralf Baechle
2001-04-10 22:49 ` loadaddr Scott A McConnell
0 siblings, 1 reply; 4+ messages in thread
From: Ralf Baechle @ 2001-04-10 16:38 UTC (permalink / raw)
To: Scott A McConnell; +Cc: linux-mips
On Tue, Apr 10, 2001 at 09:42:02AM -0700, Scott A McConnell wrote:
> What am I doing that is causing the leading ffffffff in the addresses?
Everything right :-)
32-bit addresses on MIPS get sign extended into 64-bit addresses. Binutils
had related bugs; I assume you switched binutils versions between the
two builds?
Ralf
^ permalink raw reply [flat|nested] 4+ messages in thread
* loadaddr
@ 2001-04-10 16:42 Scott A McConnell
2001-04-10 16:38 ` loadaddr Ralf Baechle
0 siblings, 1 reply; 4+ messages in thread
From: Scott A McConnell @ 2001-04-10 16:42 UTC (permalink / raw)
To: linux-mips
When I linked using a 2.4.0 kernel
head System.map
0000000000000000 A usbdevfs_cleanup
0000000080001000 T _ftext
0000000080002288 T except_vec0_r4000
00000000800022f0 T except_vec0_r4600
0000000080002344 T except_vec0_nevada
000000008000239c T except_vec0_r45k_bvahwbug
00000000800023fc T except_vec0_r4k_250MHZhwbug
0000000080002458 T except_vec0_r2300
000000008000249c T except_vec1_generic
00000000800024dc T except_vec2_generic
When I link a 2.4.2 kernlel
head System.map
000000000000002c A usbdevfs_cleanup
ffffffff80002000 T _ftext
ffffffff80002288 T except_vec0_r4000
ffffffff800022f0 T except_vec0_r4600
ffffffff80002344 T except_vec0_nevada
ffffffff8000239c T except_vec0_r45k_bvahwbug
ffffffff800023fc T except_vec0_r4k_250MHZhwbug
ffffffff80002458 T except_vec0_r2300
ffffffff8000249c T except_vec1_generic
ffffffff800024dc T except_vec2_generic
----------------------------------
What am I doing that is causing the leading ffffffff in the addresses?
Thanks,
Scott
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: loadaddr
2001-04-10 22:49 ` loadaddr Scott A McConnell
@ 2001-04-10 22:17 ` Pete Popov
0 siblings, 0 replies; 4+ messages in thread
From: Pete Popov @ 2001-04-10 22:17 UTC (permalink / raw)
To: Scott A McConnell; +Cc: Ralf Baechle, linux-mips
[-- Attachment #1: Type: text/plain, Size: 1798 bytes --]
Scott A McConnell wrote:
>
> Ralf Baechle wrote:
>
> > On Tue, Apr 10, 2001 at 09:42:02AM -0700, Scott A McConnell wrote:
> >
> > > What am I doing that is causing the leading ffffffff in the addresses?
> >
> > Everything right :-)
> >
> > 32-bit addresses on MIPS get sign extended into 64-bit addresses. Binutils
> > had related bugs; I assume you switched binutils versions between the
> > two builds?
>
> OK, I wasn't sure so I asked. Yes, I changed the tools.
>
> I have been able to build a 2.4.2 kernel but I can't make it run.
>
> I have also steped up to the latest kernel in cvs. Having a bit more trouble
> with that:
>
> mipsel-linux-gcc -I /opt/mips/linux-2.4.3/include/asm/gcc -D__KERNEL__
> -I/opt/mips/linux-2.4.3/include -Wall -Wstrict-prototypes -O2
> -fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -mcpu=r5000 -mips2
> -Wa,--trap -pipe -c -o vgacon.o vgacon.c
> {standard input}: Assembler messages:
> {standard input}:1978: Error: expression too complex
> {standard input}:1978: Fatal error: internal Error, line 1823,
> ../../binutils-patched/gas/config/tc-mips.c
> make[3]: *** [vgacon.o] Error 1
> make[3]: Leaving directory `/opt/mips/linux-2.4.3/drivers/video'
> make[2]: *** [first_rule] Error 2
> make[2]: Leaving directory `/opt/mips/linux-2.4.3/drivers/video'
> make[1]: *** [_subdir_video] Error 2
> make[1]: Leaving directory `/opt/mips/linux-2.4.3/drivers'
> make: *** [_dir_drivers] Error 2
Known problem. If I remember correctly, it was caused by a subtle bug
in gcc, triggered by the complex combination of inline functions and
macros in arch/mips/io.h. I believe Daniel Jacobowitz submitted a match
to Ralf, but I don't know if it has been applied yet. Internally, I
applied it and it works. I've attached it if you want to give it a try.
Pete
[-- Attachment #2: hhl-kernel-2.4.2-1.64.patch --]
[-- Type: text/plain, Size: 5230 bytes --]
Version 1.64 (Mon Mar 12 2001 drow <source@mvista.com>)
Use macros instead of inline functions for constant io macros, and
change "ir" to "i#*X" on Geoff's advice.
# This is a BitKeeper generated patch for the following project:
# Project Name: HHL 2.4.2 kernel sources, based on linux-2.4.2
# This patch format is intended for GNU patch command version 2.5 or higher.
# This patch includes the following deltas:
# linux/include/asm-mips/io.h 1.2 -> 1.3
diff -Nru a/linux/include/asm-mips/io.h b/linux/include/asm-mips/io.h
--- a/linux/include/asm-mips/io.h Mon Mar 12 16:52:50 2001
+++ b/linux/include/asm-mips/io.h Mon Mar 12 16:52:50 2001
@@ -248,12 +248,21 @@
#define __OUT(m,s,w) \
__OUT1(s) __OUT2(m) : : "r" (__ioswab##w(value)), "i" (0), "r" (mips_io_port_base+port)); } \
-__OUT1(s##c) __OUT2(m) : : "r" (__ioswab##w(value)), "ir" (port), "r" (mips_io_port_base)); } \
__OUT1(s##_p) __OUT2(m) : : "r" (__ioswab##w(value)), "i" (0), "r" (mips_io_port_base+port)); \
- SLOW_DOWN_IO; } \
-__OUT1(s##c_p) __OUT2(m) : : "r" (__ioswab##w(value)), "ir" (port), "r" (mips_io_port_base)); \
SLOW_DOWN_IO; }
+#define __OUTMAC(m,w,value,port) ({ __OUT2(m) : : "r" (__ioswab##w(value)), "i#*X" (port), \
+ "r" (mips_io_port_base)); })
+#define __OUTMAC_P(m,w,value,port) ({ __OUT2(m) : : "r" (__ioswab##w(value)), "i#*X" (port), \
+ "r" (mips_io_port_base)); SLOW_DOWN_IO; })
+
+#define __outbc(value,port) __OUTMAC(b,8,value,port)
+#define __outwc(value,port) __OUTMAC(h,16,value,port)
+#define __outlc(value,port) __OUTMAC(w,32,value,port)
+#define __outbc_p(value,port) __OUTMAC_P(b,8,value,port)
+#define __outwc_p(value,port) __OUTMAC_P(h,16,value,port)
+#define __outlc_p(value,port) __OUTMAC_P(w,32,value,port)
+
#define __IN1(t,s) \
extern __inline__ t __in##s(unsigned int port) { t _v;
@@ -265,14 +274,24 @@
#define __IN(t,m,s,w) \
__IN1(t,s) __IN2(m) : "=r" (_v) : "i" (0), "r" (mips_io_port_base+port)); return __ioswab##w(_v); } \
-__IN1(t,s##c) __IN2(m) : "=r" (_v) : "ir" (port), "r" (mips_io_port_base)); return __ioswab##w(_v); } \
-__IN1(t,s##_p) __IN2(m) : "=r" (_v) : "i" (0), "r" (mips_io_port_base+port)); SLOW_DOWN_IO; return __ioswab##w(_v); } \
-__IN1(t,s##c_p) __IN2(m) : "=r" (_v) : "ir" (port), "r" (mips_io_port_base)); SLOW_DOWN_IO; return __ioswab##w(_v); }
+__IN1(t,s##_p) __IN2(m) : "=r" (_v) : "i" (0), "r" (mips_io_port_base+port)); SLOW_DOWN_IO; return __ioswab##w(_v); }
+
+#define __INMAC(t,m,w,port) ({ t _v; __IN2(m) : "=r" (_v) : "i#*X" (port), \
+ "r" (mips_io_port_base)); __ioswab##w(_v); })
+#define __INMAC_P(t,m,w,port) ({ t _v; __IN2(m) : "=r" (_v) : "i#*X" (port), \
+ "r" (mips_io_port_base)); SLOW_DOWN_IO; __ioswab##w(_v); })
+
+#define __inbc(port) __INMAC(unsigned char,b,8,port)
+#define __inwc(port) __INMAC(unsigned short,h,16,port)
+#define __inlc(port) __INMAC(unsigned int,w,32,port)
+#define __inbc_p(port) __INMAC_P(unsigned char,b,8,port)
+#define __inwc_p(port) __INMAC_P(unsigned short,h,16,port)
+#define __inlc_p(port) __INMAC_P(unsigned int,w,32,port)
#define __INS1(s) \
extern inline void __ins##s(unsigned int port, void * addr, unsigned long count) {
-#define __INS2(m) \
+#define __INS2(m,count) \
if (count) \
__asm__ __volatile__ ( \
".set\tnoreorder\n\t" \
@@ -286,21 +305,26 @@
".set\treorder"
#define __INS(m,s,i) \
-__INS1(s) __INS2(m) \
+__INS1(s) __INS2(m,count) \
: "=r" (addr), "=r" (count) \
: "0" (addr), "1" (count), "i" (0), \
"r" (mips_io_port_base+port), "I" (i) \
- : "$1");} \
-__INS1(s##c) __INS2(m) \
- : "=r" (addr), "=r" (count) \
- : "0" (addr), "1" (count), "ir" (port), \
- "r" (mips_io_port_base), "I" (i) \
: "$1");}
+#define __INSMAC(m,i,port,addr,count) ({ void *_a = (addr); unsigned long _c = (count); \
+ __INS2(m,_c) \
+ : "=r" (_a), "=r" (_c) \
+ : "0" (_a), "1" (_c), "i#*X" (port), \
+ "r" (mips_io_port_base), "I" (i) \
+ : "$1"); })
+#define __insbc(port,addr,count) __INSMAC(b,1,port,addr,count)
+#define __inswc(port,addr,count) __INSMAC(h,2,port,addr,count)
+#define __inslc(port,addr,count) __INSMAC(w,4,port,addr,count)
+
#define __OUTS1(s) \
extern inline void __outs##s(unsigned int port, const void * addr, unsigned long count) {
-#define __OUTS2(m) \
+#define __OUTS2(m,count) \
if (count) \
__asm__ __volatile__ ( \
".set\tnoreorder\n\t" \
@@ -314,14 +338,19 @@
".set\treorder"
#define __OUTS(m,s,i) \
-__OUTS1(s) __OUTS2(m) \
+__OUTS1(s) __OUTS2(m,count) \
: "=r" (addr), "=r" (count) \
: "0" (addr), "1" (count), "i" (0), "r" (mips_io_port_base+port), "I" (i) \
- : "$1");} \
-__OUTS1(s##c) __OUTS2(m) \
- : "=r" (addr), "=r" (count) \
- : "0" (addr), "1" (count), "ir" (port), "r" (mips_io_port_base), "I" (i) \
: "$1");}
+
+#define __OUTSMAC(m,i,port,addr,count) ({ void *_a = (addr); unsigned long _c = (count); \
+ __OUTS2(m,_c) \
+ : "=r" (_a), "=r" (_c) \
+ : "0" (_a), "1" (_c), "i#*X" (port), "r" (mips_io_port_base), "I" (i) \
+ : "$1"); })
+#define __outsbc(port,addr,count) __OUTSMAC(b,1,port,addr,count)
+#define __outswc(port,addr,count) __OUTSMAC(h,2,port,addr,count)
+#define __outslc(port,addr,count) __OUTSMAC(w,4,port,addr,count)
__IN(unsigned char,b,b,8)
__IN(unsigned short,h,w,16)
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: loadaddr
2001-04-10 16:38 ` loadaddr Ralf Baechle
@ 2001-04-10 22:49 ` Scott A McConnell
2001-04-10 22:17 ` loadaddr Pete Popov
0 siblings, 1 reply; 4+ messages in thread
From: Scott A McConnell @ 2001-04-10 22:49 UTC (permalink / raw)
To: Ralf Baechle; +Cc: linux-mips
Ralf Baechle wrote:
> On Tue, Apr 10, 2001 at 09:42:02AM -0700, Scott A McConnell wrote:
>
> > What am I doing that is causing the leading ffffffff in the addresses?
>
> Everything right :-)
>
> 32-bit addresses on MIPS get sign extended into 64-bit addresses. Binutils
> had related bugs; I assume you switched binutils versions between the
> two builds?
OK, I wasn't sure so I asked. Yes, I changed the tools.
I have been able to build a 2.4.2 kernel but I can't make it run.
I have also steped up to the latest kernel in cvs. Having a bit more trouble
with that:
mipsel-linux-gcc -I /opt/mips/linux-2.4.3/include/asm/gcc -D__KERNEL__
-I/opt/mips/linux-2.4.3/include -Wall -Wstrict-prototypes -O2
-fomit-frame-pointer -G 0 -mno-abicalls -fno-pic -mcpu=r5000 -mips2
-Wa,--trap -pipe -c -o vgacon.o vgacon.c
{standard input}: Assembler messages:
{standard input}:1978: Error: expression too complex
{standard input}:1978: Fatal error: internal Error, line 1823,
../../binutils-patched/gas/config/tc-mips.c
make[3]: *** [vgacon.o] Error 1
make[3]: Leaving directory `/opt/mips/linux-2.4.3/drivers/video'
make[2]: *** [first_rule] Error 2
make[2]: Leaving directory `/opt/mips/linux-2.4.3/drivers/video'
make[1]: *** [_subdir_video] Error 2
make[1]: Leaving directory `/opt/mips/linux-2.4.3/drivers'
make: *** [_dir_drivers] Error 2
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2001-04-10 22:19 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-04-10 16:42 loadaddr Scott A McConnell
2001-04-10 16:38 ` loadaddr Ralf Baechle
2001-04-10 22:49 ` loadaddr Scott A McConnell
2001-04-10 22:17 ` loadaddr Pete Popov
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox