https://sourceware.org/bugzilla/show_bug.cgi?id=29004

Nelson Chu <nelsonc1225 at sourceware dot org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |nelsonc1225 at sourceware dot 
org

--- Comment #2 from Nelson Chu <nelsonc1225 at sourceware dot org> ---
(In reply to Mark Manning from comment #0)
> The following macro has worked perfectly for decades with numerous versions
> of the GNU assembler for countless processors but fails with riscv.
> 
> .macro _header_ name, cfa
>   .section .data            // assemble into head space
>   .quad _thread
>   .set _thread, .
> 8:                          // address to link next word header against
>   hstring "\name"
>   .set lex, 0
>   .quad \cfa                // point header at new words cfa
>   .previous                 // assemble into list space
> .endm
> 
> 
> the .set _thread . is where it fails.  This was originally a highly critical
> bug for me as not having this macro in a working state killed my project but
> I found a workaround
> 
> ...
> .set _thread, 9f
> 9:
> ...

Not sure what's . fails mean.  I can get the same symbol value 8 for _thread,
when using . and 9f:

% cat tmp.s
.macro _header_ name, cfa
  .section .data            # assemble into head space
  .quad _thread
  .set _thread, .
8:                          # address to link next word header against
  .string "\name"
  .set lex, 0
  .quad \cfa                # point header at new words cfa
  .previous                 # assemble into list space
.endm

_header_ A, B
% riscv64-unknown-elf-as -mno-arch-attr tmp.s -o tmp.o
% riscv64-unknown-elf-readelf -Ws tmp.o   

Symbol table '.symtab' contains 7 entries:
   Num:    Value          Size Type    Bind   Vis      Ndx Name
     0: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 0000000000000000     0 SECTION LOCAL  DEFAULT    1 .text
     2: 0000000000000000     0 SECTION LOCAL  DEFAULT    2 .data
     3: 0000000000000000     0 SECTION LOCAL  DEFAULT    4 .bss
     4: 0000000000000008     0 NOTYPE  LOCAL  DEFAULT    2 _thread
     5: 0000000000000000     0 NOTYPE  LOCAL  DEFAULT  ABS lex
     6: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND B

> Second problem,  the RISCV version of the GNU assembler does not allow me to
> alias register names so now i have to remember that x29 is my floating point
> stack pointer, x28 is my return stack pointer, x27 is my parameter stack
> pointer, x26 is my interpretive pointer and x25 and x24 are my w1 and w2
> working registers respectively.

Could you please share which directive or which method that you expect to alias
register names?  Thanks.

> Last bug,  for some reason I cannot do .ascii "abcd;efgh" because the
> semicolon throws things off... i cant even explain the error here it
> literally makes no sense based on the text of the source...
> 
> compile.s:207: Error: junk at end of line, first unrecognized character is
> `:'

I don't get error for this...

% cat tmp.s
.ascii "abcd;efgh"
% riscv64-unknown-elf-as -mno-arch-attr tmp.s -o tmp.o
% riscv64-unknown-elf-objdump -sj .text tmp.o         

tmp.o:     file format elf64-littleriscv

Contents of section .text:
 0000 61626364 3b656667 68000000           abcd;efgh... 

> 
> where line 207 is...
> .colon "(;)", p_semi
> 
> and this is the macros it invokes which works flawlessly if there is no ; in
> the word name....
> 
> .macro .colon name, cfa
>   .header "\name", \cfa
> \cfa:
>   jal x25, nest
> .endm

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to