@ and addr do not work correctly for records at absolute addresses
Original Reporter info from Mantis: smiggles
-
Reporter name: Bob Jones
Original Reporter info from Mantis: smiggles
- Reporter name: Bob Jones
Description:
compiler returns same address of record for each record member
Steps to reproduce:
program:
--------------------------------------------------------------------
program addrprob;
const
PERIPH_BASE =$40000000;
type
TIM_TypeDef =record
CR1 :word;
RESERVED0 :word;
CR2 :word;
RESERVED1 :word;
SMCR :word;
RESERVED2 :word;
DIER :word;
RESERVED3 :word;
SR :word;
RESERVED4 :word;
EGR :word;
RESERVED5 :word;
CCMR1 :word;
RESERVED6 :word;
CCMR2 :word;
RESERVED7 :word;
CCER :word;
RESERVED8 :word;
CNT :word;
RESERVED9 :word;
PSC :word;
RESERVED10 :word;
ARR :word;
RESERVED11 :word;
RCR :word;
RESERVED12 :word;
CCR1 :word;
RESERVED13 :word;
CCR2 :word;
RESERVED14 :word;
CCR3 :word;
RESERVED15 :word;
CCR4 :word;
RESERVED16 :word;
BDTR :word;
RESERVED17 :word;
DCR :word;
RESERVED18 :word;
DMAR :word;
RESERVED19 :word;
end;
var
TIM :TIM_TypeDef absolute PERIPH_BASE;
tmp :pointer;
begin
tmp:=@TIM.CR1;
tmp:=@TIM.ARR;
end.
-------------------------------------------------------------------- assembler: --------------------------------------------------------------------
.file "addrprob.pas" .syntax unified # Begin asmlist al_begin # End asmlist al_begin # Begin asmlist al_stabs # End asmlist al_stabs # Begin asmlist al_procedures
.section .text.n_main
.balign 4
.thumb_func
.globl PASCALMAIN
PASCALMAIN:
.thumb_func
.globl main
main:
mov r12,r13
stmfd r13!,{r11,r14}
sub r11,r12,#4
sub r13,r13,#40
bl FPC_INITIALIZEUNITS
mov r1,#1073741824
ldr r0,.Lj5
str r1,[r0]
mov r0,#1073741824
ldr r1,.Lj5
str r0,[r1]
bl FPC_DO_EXIT
mov r13,r11
add r13,#4
ldmdb r13,{r11,r15}
.Lj5:
.long U_P$ADDRPROB_TMP
.Le0:
.size main, .Le0 - main
# End asmlist al_procedures
# Begin asmlist al_globals
.section .bss.n_u_p$addrprob_tmp
.balign 4
.globl U_P$ADDRPROB_TMP
.size U_P$ADDRPROB_TMP,4
U_P$ADDRPROB_TMP:
.zero 4
.section .data.n_THREADVARLIST_P$ADDRPROB
.balign 4
.globl THREADVARLIST_P$ADDRPROB
THREADVARLIST_P$ADDRPROB:
.long 0
.Le1:
.size THREADVARLIST_PADDRPROB, .Le1 - THREADVARLIST_P
ADDRPROB
.section .data.n_INITFINAL
.balign 4
.globl INITFINAL
INITFINAL:
.long 1,0
.long INIT$_SYSTEM
.long 0
.Le2:
.size INITFINAL, .Le2 - INITFINAL
.section .data.n_FPC_THREADVARTABLES
.balign 4
.globl FPC_THREADVARTABLES
FPC_THREADVARTABLES:
.long 3
.long THREADVARLIST_SYSTEM
.long THREADVARLIST_STM32F103
.long THREADVARLIST_P$ADDRPROB
.Le3:
.size FPC_THREADVARTABLES, .Le3 - FPC_THREADVARTABLES
.section .data.n_FPC_RESOURCESTRINGTABLES
.balign 4
.globl FPC_RESOURCESTRINGTABLES
FPC_RESOURCESTRINGTABLES:
.long 0
.Le4:
.size FPC_RESOURCESTRINGTABLES, .Le4 - FPC_RESOURCESTRINGTABLES
.section .data.n_FPC_WIDEINITTABLES
.balign 4
.globl FPC_WIDEINITTABLES
FPC_WIDEINITTABLES:
.long 0
.Le5:
.size FPC_WIDEINITTABLES, .Le5 - FPC_WIDEINITTABLES
.section .fpc.n_version
.balign 4
.ascii "FPC 2.5.1 [2011/05/15] for arm - embedded"
.section .data.n___stklen
.balign 4
.globl __stklen
__stklen:
.long 262144
.section .data.n___heapsize
.balign 4
.globl __heapsize
__heapsize:
.long 0
.section .data.n___fpc_valgrind .globl __fpc_valgrind __fpc_valgrind: .byte 0 # End asmlist al_globals # Begin asmlist al_const # End asmlist al_const # Begin asmlist al_typedconsts # End asmlist al_typedconsts # Begin asmlist al_rotypedconsts # End asmlist al_rotypedconsts # Begin asmlist al_threadvars # End asmlist al_threadvars # Begin asmlist al_imports # End asmlist al_imports # Begin asmlist al_exports # End asmlist al_exports # Begin asmlist al_resources # End asmlist al_resources # Begin asmlist al_rtti # End asmlist al_rtti # Begin asmlist al_dwarf_frame # End asmlist al_dwarf_frame # Begin asmlist al_dwarf_info # End asmlist al_dwarf_info # Begin asmlist al_dwarf_abbrev # End asmlist al_dwarf_abbrev # Begin asmlist al_dwarf_line # End asmlist al_dwarf_line # Begin asmlist al_picdata # End asmlist al_picdata # Begin asmlist al_resourcestrings # End asmlist al_resourcestrings # Begin asmlist al_objc_data # End asmlist al_objc_data # Begin asmlist al_objc_pools # End asmlist al_objc_pools # Begin asmlist al_end # End asmlist al_end
Additional information:
It doesn't seem to matter which record member I want the address of - the compiler always returns the address of the first.
Mantis conversion info:
- Mantis ID: 19357
- OS: embedded
- Build: Head :17474
- Platform: ARM
- Version: 2.4.3
- Fixed in version: 3.0.0
- Fixed in revision: 23428 (#65cbb4e9)