public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* How define absolute local symbol by GNU as?
@ 2011-07-07 14:25 Oleksandr Gavenko
  2011-07-07 14:41 ` Andreas Schwab
  0 siblings, 1 reply; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-07 14:25 UTC (permalink / raw)
  To: binutils

To mark object file safe for SEH (to make .lib compatable with MSVC)
it is possible to define absolute local symbol with name '@feat.00'
and with value '1'.

I can achieve this by:

   ASFLAGS += -Wa,"-defsym,@feat.00=1"

With GNU As language syntax I don't know how achieve this.
To make global symbol I use:

     .global @feat.00
     @feat.00=1

But how declare it local?

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-07 14:25 How define absolute local symbol by GNU as? Oleksandr Gavenko
@ 2011-07-07 14:41 ` Andreas Schwab
  2011-07-07 16:18   ` Oleksandr Gavenko
  0 siblings, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2011-07-07 14:41 UTC (permalink / raw)
  To: Oleksandr Gavenko; +Cc: binutils

Oleksandr Gavenko <gavenko@bifit.com.ua> writes:

> But how declare it local?

Don't declare it global.

Andreas.

-- 
Andreas Schwab, schwab@redhat.com
GPG Key fingerprint = D4E8 DBE3 3813 BB5D FA84  5EC7 45C6 250E 6F00 984E
"And now for something completely different."

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-07 14:41 ` Andreas Schwab
@ 2011-07-07 16:18   ` Oleksandr Gavenko
  2011-07-07 16:30     ` Bob Plantz
  2011-07-08  0:53     ` Andreas Schwab
  0 siblings, 2 replies; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-07 16:18 UTC (permalink / raw)
  To: binutils

On 07.07.2011 17:25, Andreas Schwab wrote:
> Oleksandr Gavenko<gavenko@bifit.com.ua>  writes:
>
>> But how declare it local?
>
> Don't declare it global.
>
OK, but how?

If I write:

    .global @feat.00
     @feat.00=1

I get:

   $ nm test.obj | grep feat
00000001 A @feat.00

If I write:

    /* .global @feat.00 */
     @feat.00=1

I get:

   $ nm test.obj | grep feat
<empty>

So I expect existence of some directive to get wanted.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-07 16:18   ` Oleksandr Gavenko
@ 2011-07-07 16:30     ` Bob Plantz
  2011-07-08  0:53     ` Andreas Schwab
  1 sibling, 0 replies; 9+ messages in thread
From: Bob Plantz @ 2011-07-07 16:30 UTC (permalink / raw)
  To: Oleksandr Gavenko; +Cc: binutils

On 07/07/2011 07:40 AM, Oleksandr Gavenko wrote:
> On 07.07.2011 17:25, Andreas Schwab wrote:
>> Oleksandr Gavenko<gavenko@bifit.com.ua>  writes:
>>
>>> But how declare it local?
>>
>> Don't declare it global.
>>
> OK, but how?
>
> If I write:
>
>    .global @feat.00
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> 00000001 A @feat.00
>
> If I write:
>
>    /* .global @feat.00 */
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> <empty>
>
> So I expect existence of some directive to get wanted.
One suggestion is to write what you want in C, then use gcc's -S option 
to produce the assembly language, and look to see how gcc does it. For 
example,
int y = 456;

int func() {
     static int x = 123;
     x = x + 1;
     y = y + 1;
     return x + y;
}

gives

     .file    "static.c"
.globl y
     .data
     .align 4
     .type    y, @object
     .size    y, 4
y:
     .long    456
     .text
.globl func
     .type    func, @function
func:On 07/07/2011 07:40 AM, Oleksandr Gavenko wrote:
> On 07.07.2011 17:25, Andreas Schwab wrote:
>> Oleksandr Gavenko<gavenko@bifit.com.ua>  writes:
>>
>>> But how declare it local?
>>
>> Don't declare it global.
>>
> OK, but how?
>
> If I write:
>
>    .global @feat.00
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> 00000001 A @feat.00
>
> If I write:
>
>    /* .global @feat.00 */
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> <empty>
>
> So I expect existence of some directive to get wanted.
One suggestion is to write what you want in C, then use gcc's -S option 
to produce the assembly language, and look to see how gcc does it. For 
example,
int y = 456;

int func() {
     static int x = 123;
     x = x + 1;
     y = y + 1;
     return x + y;
}

gives

     .file    "static.c"
.globl y
     .data
     .align 4
     .type    y, @object
     .size    y, 4
y:
     .long    456
     .text
.globl func
     .type    func, @function
func:
.LFB0:
     .cfi_startproc
     pushq    %rbp
     .cfi_def_cfa_offset 16
     movq    %rsp, %rbp
     .cfi_offset 6, -16On 07/07/2011 07:40 AM, Oleksandr Gavenko wrote:
> On 07.07.2011 17:25, Andreas Schwab wrote:
>> Oleksandr Gavenko<gavenko@bifit.com.ua>  writes:
>>
>>> But how declare it local?
>>
>> Don't declare it global.
>>
> OK, but how?
>
> If I write:
>
>    .global @feat.00
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> 00000001 A @feat.00
>
> If I write:
>
>    /* .global @feat.00 */
>     @feat.00=1
>
> I get:
>
>   $ nm test.obj | grep feat
> <empty>
>
> So I expect existence of some directive to get wanted.
One suggestion is to write what you want in C, then use gcc's -S option 
to produce the assembly language, and look to see how gcc does it. For 
example,
int y = 456;

int func() {
     static int x = 123;
     x = x + 1;
     y = y + 1;
     return x + y;
}

gives

     .file    "static.c"
.globl y
     .data
     .align 4
     .type    y, @object
     .size    y, 4
y:
     .long    456
     .text
.globl func
     .type    func, @function
func:
.LFB0:
     .cfi_startproc
     pushq    %rbp
     .cfi_def_cfa_offset 16
     movq    %rsp, %rbp
     .cfi_offset 6, -16
     .cfi_def_cfa_register 6
     movl    x.1616(%rip), %eax
     addl    $1, %eax
     movl    %eax, x.1616(%rip)
     movl    y(%rip), %eax
     addl    $1, %eax
     movl    %eax, y(%rip)
     movl    x.1616(%rip), %edx
     movl    y(%rip), %eax
     leal    (%rdx,%rax), %eax
     leave
     .cfi_def_cfa 7, 8
     ret
     .cfi_endproc
.LFE0:
     .size    func, .-func
     .data
     .align 4
     .type    x.1616, @object
     .size    x.1616, 4
x.1616:
     .long    123
     .ident    "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
     .section    .note.GNU-stack,"",@progbits
     .cfi_def_cfa_register 6
     movl    x.1616(%rip), %eax
     addl    $1, %eax
     movl    %eax, x.1616(%rip)
     movl    y(%rip), %eax
     addl    $1, %eax
     movl    %eax, y(%rip)
     movl    x.1616(%rip), %edx
     movl    y(%rip), %eax
     leal    (%rdx,%rax), %eax
     leave
     .cfi_def_cfa 7, 8
     ret
     .cfi_endproc
.LFE0:
     .size    func, .-func
     .data
     .align 4
     .type    x.1616, @object
     .size    x.1616, 4
x.1616:
     .long    123
     .ident    "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
     .section    .note.GNU-stack,"",@progbits
.LFB0:
     .cfi_startproc
     pushq    %rbp
     .cfi_def_cfa_offset 16
     movq    %rsp, %rbp
     .cfi_offset 6, -16
     .cfi_def_cfa_register 6
     movl    x.1616(%rip), %eax
     addl    $1, %eax
     movl    %eax, x.1616(%rip)
     movl    y(%rip), %eax
     addl    $1, %eax
     movl    %eax, y(%rip)
     movl    x.1616(%rip), %edx
     movl    y(%rip), %eax
     leal    (%rdx,%rax), %eax
     leave
     .cfi_def_cfa 7, 8
     ret
     .cfi_endproc
.LFE0:
     .size    func, .-func
     .data
     .align 4
     .type    x.1616, @object
     .size    x.1616, 4
x.1616:
     .long    123
     .ident    "GCC: (Ubuntu/Linaro 4.5.2-8ubuntu4) 4.5.2"
     .section    .note.GNU-stack,"",@progbits

which causes me to believe that placing your variable in the .data 
segment without a .global directive would give what you want.

--Bob

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-07 16:18   ` Oleksandr Gavenko
  2011-07-07 16:30     ` Bob Plantz
@ 2011-07-08  0:53     ` Andreas Schwab
  2011-07-08 12:44       ` Oleksandr Gavenko
  1 sibling, 1 reply; 9+ messages in thread
From: Andreas Schwab @ 2011-07-08  0:53 UTC (permalink / raw)
  To: Oleksandr Gavenko; +Cc: binutils

Works for me.

$ echo a=1 | as
$ nm
00000001 a a

Andreas.

-- 
Andreas Schwab, schwab@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-08  0:53     ` Andreas Schwab
@ 2011-07-08 12:44       ` Oleksandr Gavenko
  2011-07-08 20:28         ` Oleksandr Gavenko
  2011-07-11 19:58         ` Oleksandr Gavenko
  0 siblings, 2 replies; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-08 12:44 UTC (permalink / raw)
  To: binutils

On 07.07.2011 19:29, Andreas Schwab wrote:
> Works for me.
>
> $ echo a=1 | as
> $ nm
> 00000001 a a
>
I try on Linux and FreeBSD host and get similar result (GOOD).

But with Cygwin:

/usr/bin/as
/usr/bin/i686-pc-mingw32-as.exe
/usr/bin/i686-w64-mingw32-as.exe

with version:

GNU assembler (GNU Binutils) 2.20.51.20100410
GNU assembler (GNU Binutils) 2.21
GNU assembler (GNU Binutils) 2.21.51.20110605

   $ echo a=1 | i686-pc-mingw32-as
   $ nm
00000000 b .bss
00000000 d .data
00000000 t .text

I can not get same result. So this can be related to COFF format?

--keep-locals also have no effect.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-08 12:44       ` Oleksandr Gavenko
@ 2011-07-08 20:28         ` Oleksandr Gavenko
  2011-07-11 19:58         ` Oleksandr Gavenko
  1 sibling, 0 replies; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-08 20:28 UTC (permalink / raw)
  To: binutils

On 08.07.2011 11:47, Oleksandr Gavenko wrote:
> On 07.07.2011 19:29, Andreas Schwab wrote:
>> Works for me.
>>
>> $ echo a=1 | as
>> $ nm
>> 00000001 a a
>>
> I try on Linux and FreeBSD host and get similar result (GOOD).
>
> But with Cygwin:
>
> /usr/bin/as
> /usr/bin/i686-pc-mingw32-as.exe
> /usr/bin/i686-w64-mingw32-as.exe
>
> with version:
>
> GNU assembler (GNU Binutils) 2.20.51.20100410
> GNU assembler (GNU Binutils) 2.21
> GNU assembler (GNU Binutils) 2.21.51.20110605
>
> $ echo a=1 | i686-pc-mingw32-as
> $ nm
> 00000000 b .bss
> 00000000 d .data
> 00000000 t .text
>
> I can not get same result. So this can be related to COFF format?
>
> --keep-locals also have no effect.
I try another approach:

   $ gcc -c  -o test.o -Wa,"-defsym,my=1" test.c
   $ objdump -t test.o
[  2](sec -1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000001 my

To get same result I try write .s file:

   .def my; .scl 3; .endef

then I get:

   $ as -o test.o test.s; objdump -t test.o; nm test.o
[  8](sec  0)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 my
          U my


Note: scl is 2, not 3!! With:

   .def my; .scl 3; .val 1; .endef


   $ as -o test.o test.s; objdump -t test.o; nm test.o
2.s: Assembler messages:
2.s:14: Internal error!
Assertion failure in coff_frob_symbol at 
/netrel/src/binutils-2.20.51-2/gas/config/obj-coff.c line 1335.
Please report this bug.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-08 12:44       ` Oleksandr Gavenko
  2011-07-08 20:28         ` Oleksandr Gavenko
@ 2011-07-11 19:58         ` Oleksandr Gavenko
  2011-07-11 20:09           ` Oleksandr Gavenko
  1 sibling, 1 reply; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-11 19:58 UTC (permalink / raw)
  To: binutils

I repost my question as no one replay and my job SMTP server
in range of spam area of ISP (I think is just blocked).

On 08.07.2011 11:47, Oleksandr Gavenko wrote:
> On 07.07.2011 19:29, Andreas Schwab wrote:
>> Works for me.
>>
>> $ echo a=1 | as
>> $ nm
>> 00000001 a a
>>
> I try on Linux and FreeBSD host and get similar result (GOOD).
>
> But with Cygwin:
>
> /usr/bin/as
> /usr/bin/i686-pc-mingw32-as.exe
> /usr/bin/i686-w64-mingw32-as.exe
>
> with version:
>
> GNU assembler (GNU Binutils) 2.20.51.20100410
> GNU assembler (GNU Binutils) 2.21
> GNU assembler (GNU Binutils) 2.21.51.20110605
>
> $ echo a=1 | i686-pc-mingw32-as
> $ nm
> 00000000 b .bss
> 00000000 d .data
> 00000000 t .text
>
> I can not get same result. So this can be related to COFF format?
>
> --keep-locals also have no effect.
I try another approach:

   $ gcc -c  -o test.o -Wa,"-defsym,my=1" test.c
   $ objdump -t test.o
[  2](sec -1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000001 my

To get same result I try write .s file:

   .def my; .scl 3; .endef

then I get:

   $ as -o test.o test.s; objdump -t test.o; nm test.o
[  8](sec  0)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 my
          U my


Note: scl is 2, not 3!! With:

   .def my; .scl 3; .val 1; .endef


   $ as -o test.o test.s; objdump -t test.o; nm test.o
2.s: Assembler messages:
2.s:14: Internal error!
Assertion failure in coff_frob_symbol at 
/netrel/src/binutils-2.20.51-2/gas/config/obj-coff.c line 1335.
Please report this bug.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: How define absolute local symbol by GNU as?
  2011-07-11 19:58         ` Oleksandr Gavenko
@ 2011-07-11 20:09           ` Oleksandr Gavenko
  0 siblings, 0 replies; 9+ messages in thread
From: Oleksandr Gavenko @ 2011-07-11 20:09 UTC (permalink / raw)
  To: binutils

I repost my question as no one replay and my job SMTP server
in range of spam area of ISP (I think is just blocked).

On 08.07.2011 11:47, Oleksandr Gavenko wrote:
> On 07.07.2011 19:29, Andreas Schwab wrote:
>> Works for me.
>>
>> $ echo a=1 | as
>> $ nm
>> 00000001 a a
>>
> I try on Linux and FreeBSD host and get similar result (GOOD).
>
> But with Cygwin:
>
> /usr/bin/as
> /usr/bin/i686-pc-mingw32-as.exe
> /usr/bin/i686-w64-mingw32-as.exe
>
> with version:
>
> GNU assembler (GNU Binutils) 2.20.51.20100410
> GNU assembler (GNU Binutils) 2.21
> GNU assembler (GNU Binutils) 2.21.51.20110605
>
> $ echo a=1 | i686-pc-mingw32-as
> $ nm
> 00000000 b .bss
> 00000000 d .data
> 00000000 t .text
>
> I can not get same result. So this can be related to COFF format?
>
> --keep-locals also have no effect.
I try another approach:

   $ gcc -c  -o test.o -Wa,"-defsym,my=1" test.c
   $ objdump -t test.o
[  2](sec -1)(fl 0x00)(ty   0)(scl   3) (nx 0) 0x00000001 my

To get same result I try write .s file:

   .def my; .scl 3; .endef

then I get:

   $ as -o test.o test.s; objdump -t test.o; nm test.o
[  8](sec  0)(fl 0x00)(ty   0)(scl   2) (nx 0) 0x00000000 my
          U my


Note: scl is 2, not 3!! With:

   .def my; .scl 3; .val 1; .endef


   $ as -o test.o test.s; objdump -t test.o; nm test.o
2.s: Assembler messages:
2.s:14: Internal error!
Assertion failure in coff_frob_symbol at 
/netrel/src/binutils-2.20.51-2/gas/config/obj-coff.c line 1335.
Please report this bug.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2011-07-11 19:49 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-07-07 14:25 How define absolute local symbol by GNU as? Oleksandr Gavenko
2011-07-07 14:41 ` Andreas Schwab
2011-07-07 16:18   ` Oleksandr Gavenko
2011-07-07 16:30     ` Bob Plantz
2011-07-08  0:53     ` Andreas Schwab
2011-07-08 12:44       ` Oleksandr Gavenko
2011-07-08 20:28         ` Oleksandr Gavenko
2011-07-11 19:58         ` Oleksandr Gavenko
2011-07-11 20:09           ` Oleksandr Gavenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).