Thanks guys.

I really don't want to have to install an additional toolchain if I
can avoid it.

I just discovered the following messages which provide some seemingly
relevant clues but doesn't really address collapsing INITIALIZER and
INITIALIZED areas into one:

https://sourceforge.net/p/sdcc/mailman/message/34781898/

I guess I need to dig into understanding the linker scripts and see if
I can figure it out.

Brad

On Fri, Apr 3, 2020 at 6:11 AM Sergey Belyashov
<sergey.belyas...@gmail.com> wrote:
>
> Hi,
> SDCC uses very simple scheme for storing initialization data. It generates 
> two copies of variables, one copy is initialization data which is stored 
> after code section, and copied to variables area on startup. I think, it is 
> caused by very simple linkers supported. More complex linkers can do this job 
> instead of compiler, so result binary can be customized to generate data 
> section initialized, or separate initialization data. For example, GNU LD may 
> change LMA (load memory address, address after loading, before startup) of 
> data segment, so result will be same as produced by SDCC. But you may exclude 
> LMA changing, so VMA (virtual memory address, address where program expects 
> objects to be, "CPU memory") and LMA will be same - it is what you want.
>
> I have upgraded GNU Binutils to support SDCC. So you may generate assembler 
> for your code, then compile it by GNU AS and link by GNU LD (I suggest use 
> z80-unknown-elf toolchain). You may try to create your own liker script, 
> which stores INITIALIZER section to .data output section, and creates 
> INITIALIZED as separate section with same VMA as INITIALIZER but with 
> different LMA (I suggest put it out of address space). You need binutils 
> 2.34+. I suggest master branch of their GIT repo (there are some useful fixes 
> and upgrades). Build using --target=z80-unknown-elf as configure option. 
> Also, you may vote for: https://sourceforge.net/p/sdcc/feature-requests/666/
>
> ...
> .text 0x8000 :
> {
>   __text_start = .;
>   *(_HOME)
>   *(_CABS)
>   *(_CODE)
>   *(_RODATA)
>   *(.text *.text.* .gnu.linkonce.t.*) /* it is required for  proper section 
> attributes */
>   __text_end = .;
> }
> .data :
> {
>   __data_start = .;
>   *(_INITIALIZER)
>   *(.data *.data.* .gnu.linkonce.d.*) /* it is required for  proper section 
> attributes */
>   __data_end = .;
> }
> .bss :
> {
>   __bss_start = .;
>   *(_DABS)
>   *(_DATA)
>   *(.bss *.bss.* .gnu.linkonce.b.*) /* it is required for  proper section 
> attributes */
>   __bss_end = .;
> }
> .data_init ADDR(__data_start) : AT(0x10000) /* LMA is out of address space */
> {
>   *(_INITIALIZED)
> }
> ...
>
> Sergey
>
> ср, 1 апр. 2020 г. в 11:01, Brad Robinson <brobin...@toptensoftware.com>:
>>
>> Hey All,
>>
>> I've got a Z80 project where the generated image will be loaded
>> directly into RAM and therefore the initialization data doesn't need
>> to be copied from the image to a specified RAM area.
>>
>> How can I configure SDCC to generate an image like this?  A working
>> example would be great.
>>
>> Brad
>>
>>
>> _______________________________________________
>> Sdcc-user mailing list
>> Sdcc-user@lists.sourceforge.net
>> https://lists.sourceforge.net/lists/listinfo/sdcc-user
>
> _______________________________________________
> Sdcc-user mailing list
> Sdcc-user@lists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/sdcc-user


_______________________________________________
Sdcc-user mailing list
Sdcc-user@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/sdcc-user

Reply via email to