This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
weird staff in binutils symbol value caculation
- From: daniel tian <daniel dot xntian at gmail dot com>
- To: binutils <binutils at sourceware dot org>
- Cc: Ian Lance Taylor <iant at google dot com>, peng dot zheng at mavrixtech dot com
- Date: Thu, 6 May 2010 21:19:11 +0800
- Subject: weird staff in binutils symbol value caculation
Hello, all:
I just ported the binutils to my NEW RISC machine. Now the
assemble codes were compiled with this tools.
But here is the stuff I just found out:
.equ REF_FRAMES_BUFFER_SIZE ,
((6*DISPLAY_SCALED)+(12*(DISPLAY_SCALED==NO)))
When the DISPLAY_SCALED and DISPLAY_SCALED, and NO are 0x0.
But the value REF_FRAMES_BUFFER_SIZE is to be -12.
When I hacked the gas, I found the expr.c:
case O_eq:
resultP->X_add_number =
resultP->X_add_number == v ? ~ (offsetT) 0 : 0;
break;
case O_ne:
resultP->X_add_number =
resultP->X_add_number != v ? ~ (offsetT) 0 : 0;
break;
case O_lt:
resultP->X_add_number =
resultP->X_add_number < v ? ~ (offsetT) 0 : 0;
break;
case O_le:
resultP->X_add_number =
resultP->X_add_number <= v ? ~ (offsetT) 0 : 0;
break;
case O_ge:
resultP->X_add_number =
resultP->X_add_number >= v ? ~ (offsetT) 0 : 0;
break;
case O_gt:
resultP->X_add_number =
resultP->X_add_number > v ? ~ (offsetT) 0 : 0;
break;
which means when the condition is true, the value
will be -1(0xFFFFFFFF). If I want to make the value to be 0x1, when
the condition is true. Do I have to rewrite this part? or Is there
anyway, I can deal with. I just afraid when I revised this part, some
other bugs will come about.
thanks.
daniel