public inbox for binutils@sourceware.org
 help / color / mirror / Atom feed
* How to define a symbol with absolute address for AArch64?
@ 2023-09-12 10:02 Sebastian Huber
  2023-09-12 11:21 ` Richard Earnshaw
  0 siblings, 1 reply; 9+ messages in thread
From: Sebastian Huber @ 2023-09-12 10:02 UTC (permalink / raw)
  To: binutils

Hello,

I would like to define a global symbol with an absolute address in an 
assembly/C source file for the AArch64 target. This works for all other 
architectures I tried so far, but not for AArch64:

extern char abs_symbol[];
extern char abs_symbol_2[];

__asm__(
   "\t.globl abs_symbol\n"
   "\t.set abs_symbol, 0x123\n"
);

unsigned long f_abs_symbol(void)
{
   return (unsigned long)abs_symbol;
}

unsigned long f_abs_symbol_2(void)
{
   return (unsigned long)abs_symbol_2;
}

unsigned long _start(void)
{
   return f_abs_symbol() + f_abs_symbol_2();
}

aarch64-rtems6-gcc abs.c -Wl,--gc-sections -Wl,--defsym=abs_symbol_2=291

aarch64-rtems6-objdump -d a.out

a.out:     file format elf64-littleaarch64


Disassembly of section .text:

0000000000400000 <f_abs_symbol>:
   400000:       90000000        adrp    x0, 400000 <f_abs_symbol>
   400004:       91048c00        add     x0, x0, #0x123
   400008:       d65f03c0        ret

000000000040000c <f_abs_symbol_2>:
   40000c:       90ffe000        adrp    x0, 0 <abs_symbol-0x123>
   400010:       91048c00        add     x0, x0, #0x123
   400014:       d65f03c0        ret

0000000000400018 <_start>:
   400018:       a9be7bfd        stp     x29, x30, [sp, #-32]!
   40001c:       910003fd        mov     x29, sp
   400020:       f9000bf3        str     x19, [sp, #16]
   400024:       97fffff7        bl      400000 <f_abs_symbol>
   400028:       aa0003f3        mov     x19, x0
   40002c:       97fffff8        bl      40000c <f_abs_symbol_2>
   400030:       8b000260        add     x0, x19, x0
   400034:       f9400bf3        ldr     x19, [sp, #16]
   400038:       a8c27bfd        ldp     x29, x30, [sp], #32
   40003c:       d65f03c0        ret

On riscv it works for example:

riscv-rtems6-gcc abs.c -Wl,--gc-sections -Wl,--defsym=abs_symbol_2=291 
-O2 -march=rv64imafd -mabi=lp64d -mcmodel=medany

riscv-rtems6-objdump -d a.out

a.out:     file format elf64-littleriscv


Disassembly of section .text:

00000000000100b0 <f_abs_symbol>:
    100b0:       1230051b                addiw   a0,zero,291
    100b4:       00008067                ret

00000000000100b8 <f_abs_symbol_2>:
    100b8:       12300513                li      a0,291
    100bc:       00008067                ret

00000000000100c0 <_start>:
    100c0:       12300793                li      a5,291
    100c4:       1230051b                addiw   a0,zero,291
    100c8:       00f50533                add     a0,a0,a5
    100cc:       00008067                ret

-- 
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.huber@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax:   +49-89-18 94 741 - 08

Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/

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

end of thread, other threads:[~2023-09-14  7:30 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2023-09-12 10:02 How to define a symbol with absolute address for AArch64? Sebastian Huber
2023-09-12 11:21 ` Richard Earnshaw
2023-09-12 12:58   ` Sebastian Huber
2023-09-12 13:46     ` Xi Ruoyao
2023-09-12 14:23       ` Sebastian Huber
2023-09-12 16:18         ` Richard Earnshaw
2023-09-13  6:04           ` Sebastian Huber
2023-09-13 10:02             ` Richard Earnshaw (lists)
2023-09-14  7:30               ` Sebastian Huber

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).