[lkml]   [2004]   [Jun]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    SubjectRe: swsusp.S: meaningfull assembly labels
    On Fri, Jun 25, 2004 at 12:02:47PM -0400, Richard B. Johnson wrote:
    > On Fri, 25 Jun 2004, Daniel Jacobowitz wrote:
    > > On Fri, Jun 25, 2004 at 08:37:45AM -0400, Richard B. Johnson wrote:
    > > > NO! You just made those labels public! The LOCAL symbols need to
    > > > begin with ".L". Now, if you have a 'copy_loop' in another module,
    > > > linked with this, anywhere in the kernel, they will share the
    > > > same address -- not what you expected, I'm sure! The assembler
    > > > has some strange rules you need to understand. Use `nm` and you
    > > > will find that your new labels are in the object file!
    > >
    > > Er, no. They'll show up in the object file. That doesn't mean they're
    > > global; static symbols also show up in the object file.
    > >
    > > --
    > > Daniel Jacobowitz
    > I got caught on these, thinking that they weren't globals when
    > I made a assembly files that used, not only named labels but
    > also definitions like:
    > BUF = 0x08
    > LEN = 0x0c
    > code: movl BUF(%esp), %ebx
    > movl LEN(%esp), %ecx
    > This was done in several files. When linked, I got 'duplicate synbol'
    > errors. These symbols, while not 'globals' in the sense that 'C'
    > code can link with them are global definitions that are seen by
    > the linker and cause duplicate symbol errors. I went through

    Those are what gas calls absolute symbols.

    > the gas documentation, trying to find how to prevent these
    > private symbols from being written to the object file and there
    > is no command-line mechanism. You just have to start every name
    > with .L to keep them local.
    > When I used labels like 'code' above, even though not declared
    > '.global', the labels also showed up as duplicate symbols when
    > linking the resulting object files.

    Does this only happen in your world? Or were you using a broken
    non-GNU linker?

    drow@nevyn:~% cat a.s
    BUF = 0x1
    mov %eax, 0
    drow@nevyn:~% as -o a.o a.s
    drow@nevyn:~% as -o b.o a.s
    drow@nevyn:~% ld -o a a.o b.o
    ld: warning: cannot find entry symbol _start; defaulting to 0000000008048074
    drow@nevyn:~% nm a.o
    00000001 a BUF
    00000000 t code
    drow@nevyn:~% nm a
    00000001 a BUF
    00000001 a BUF
    08049084 A __bss_start
    08049084 A _edata
    08049084 A _end
    08048074 t code
    0804807c t code

    LD won't even warn about duplicate absolute symbols unless they have
    different values.

    Daniel Jacobowitz
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to
    More majordomo info at
    Please read the FAQ at

     \ /
      Last update: 2005-03-22 14:04    [W:0.043 / U:7.256 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site