On Tue, 28 Mar 2000, Matthew Dillon wrote:

>     I found a couple of minor nits, but only one real bug.  In i386/swtch.s
>     I forgot to change out a WANT_RESCHED for AST_RESCHED:
> 
> sw1a:
>         call    _chooseproc                     /* trash ecx, edx, ret eax*/
>         testl   %eax,%eax
>         CROSSJUMP(je, _idle, jne)               /* if no proc, idle */
>         movl    %eax,%ecx
> 
>         xorl    %eax,%eax
>         andl    $~WANT_RESCHED,_astpending
> 
>     The problem is that a kernel build is not reporting any errors!   
>     WANT_RESCHED does not exist at all, anywhere.  If I change it to 
>     a garbage name the kernel still builds.  I don't get it.

It seems to be a gas bug.  The error is detected if ~WANT_RESCHED is
replaced by WANT_RESCHED.  ~WANT_RESCHED is no a simple relocatable
expression, so it isn't clear that gas or elf can handle it.  They
don't seem to for the following simpler case:

$ echo "movl $~FOO,%eax" >z.s
$ echo ".globl foo; .set FOO,0x55555555" >z1.s
$ cc -c z.s z1.s
$ ld -o z z.o z1.s
$ objdump --disassemble z

z:     file format elf32-i386

Disassembly of section .text:

08048074 <.text>:
 8048074:       b8 ff ff ff ff  movl   $0xffffffff,%eax
                                          ^^^^^^^^ should be aaaaaaaa
                                                   but still has best guess
                                                   at time of assembly of z.s
 8048079:       90              nop    
 804807a:       90              nop    
 804807b:       90              nop    

Everthing works right for "FOO" instead of ~FOO.

The aout case gets this wrong in a more obvious way.  Gas produces the same
code for "movl $~FOO,%eax" as for "movl $FOO,%eax".  Linking to z1.o then
gives the right value for $FOO and the wrong value for $~FOO.

Gas notices the problem for "movl $-FOO,%eax":
    z.s: Assembler messages:
    z.s:1: Error: Negative of non-absolute symbol FOO
Similarly for the a.out case.  Complementation is equivalent to negation
on 2's complement machines, so gas should produce this error for $~FOO too.

Bruce



To Unsubscribe: send mail to [EMAIL PROTECTED]
with "unsubscribe freebsd-current" in the body of the message

Reply via email to