home bbs files messages ]

Just a sample of the Echomail archive

COMPOSVM:

<< oldest | < older | list | newer > | newest >> ]

 Message 263,284 of 264,034 
 Waldek Hebisch to Dan Cross 
 Re: Binutils 
 08 Sep 25 11:30:50 
 
From: antispam@fricas.org

Dan Cross  wrote:
> In article <109g1s1$3jb20$1@paganini.bofh.team>,
> Waldek Hebisch  wrote:
>>Lawrence Dâ??Oliveiro  wrote:
>>> On Fri, 5 Sep 2025 21:32:01 -0000 (UTC), Waldek Hebisch wrote:
>>>
>>>> All indicates that GNU assembler can not handle simple symbol
>>>> equality as intended.
>>>
>>> I tried creating a source file test.s containing just your two problem
>>> lines:
>>>
>>>     .globl _ZN10__cxxabiv117__array_type_infoD1Ev
>>>     _ZN10__cxxabiv117__array_type_infoD1Ev = _ZN10__cxxabiv1
7__array_type_infoD2E
>>>
>>> and when I try to assemble it,
>>>
>>>     gcc -c test.s
>>>
>>> there is no error, and test.o is created OK. Trying objdump on it
>>>
>>>     objdump -t test.o
>>>
>>> shows it has the correct symbol reference in it, albeit undefined:
>>>
>>>     test.o:     file format elf64-x86-64
>>>
>>>     SYMBOL TABLE:
>>>     0000000000000000         *UND*  0000000000000000 _ZN10__
xxabiv117__array_type_infoD2E
>>>
>>> So no, the issue is not with those two particular lines on their own.
>>> Something else is involved.
>>
>>Yes.  AFAICS main issue is creating alias name for an exported
>>function.  Internal aliases work fine.  Probably data aliases too.
>
> I caution against putting it in those terms.  What you are doing
> in GNU `as` when you use the `a = e` syntax is creating a symbol
> called "a" from that is set to the evalue of some expression.
> In this contrived example, that expression is just "e", which I
> used as a stand-in for any arbitrary expression, but if taken
> literally, would just be valuated to the value of some other
> symbol, called "e".  If "e" was not defined already, it is
> assumed to be an external.
>
> When you assemble troll's file, an object file is generated; the
> results from `objdump` above show that there is a single symbol
> in that object file's symbol table, one you referred to when
> creating '_ZN10__cxxabiv117__array_type_infoD2E'.  But note that
> '_ZN10__cxxabiv117__array_type_infoD2E' itself (the symbol that
> you created when you assigned to it) is not in the symbol table.
>
> However, the symbol that you created is not in the symbol table,
> which is the fundamental problem.

Well, one issue is if needed construct is supported at all.

Other platforms have code like:

        .text
        .globl  exp_fun
        .type   exp_fun, @function
exp_fun:
        ret
.LFE0:
        .size   exp_fun, .-exp_fun
        .globl alias_fun
        .set alias_fun,exp_fun

Assembling this on x86 Linux gives object file exporting two symbols:
exp_fun and alias_fun.  IIUC this behaviour is wanted by C++
compiler.

Alpha VMS needs more complicated function definition.  And more
important: '.set alias_fun,exp_fun' causes assembler message
about wrong syntax.

In DEC assembler '=' apparently gives effect that you describe:
new name is not exported.  In DEC assembler '==' apparently creates
an alias, but as a data symbol.  I am not aware of DEC construct
to get effect of '.set' as in x86 Linux example above (but up
to now I did not look into macro manual).  So '=' probably is
wrong syntatx, I do not know why gcc uses it.

--
                              Waldek Hebisch

--- SoupGate-Win32 v1.05
 * Origin: you cannot sedate... all the things you hate (1:229/2)

<< oldest | < older | list | newer > | newest >> ]


(c) 1994,  bbs@darkrealms.ca