* [patch] SymbianOS Arm executables
@ 2005-02-09 23:38 Paul Brook
2005-02-10 15:58 ` Richard Earnshaw
0 siblings, 1 reply; 5+ messages in thread
From: Paul Brook @ 2005-02-09 23:38 UTC (permalink / raw)
To: binutils
[-- Attachment #1: Type: text/plain, Size: 1576 bytes --]
arm-*-symbianelf executables are relocatable. This has a few implications:
- We need to write out absolute relocations, like we do with shared libraries.
- These need to be against a symbols because the RO and RW segments are
relocated independently. In most cases we use the section symbol.
- Imported data is addressed directly (with absolute relocations).
Most of the changes are arm-specific, however I did need to add a new
common-code flag to allow creation of the local dynamic symbols.
Tested on i686-linux, arm-none-eabi and arm-none-symbianelf.
Ok?
Paul
This depends on a previous patch for correct symbol ordering:
http://sourceware.org/ml/binutils/2005-02/msg00169.html
2005-02-09 Paul Brook <paul@codesourcery.com>
* elf-bfd.h (struct elf_link_hash_table): Add keep_local_dynsyms.
* elf.c (_bfd_elf_link_hash_table_init): Initialize it.
* elflink.c (bfd_elf_link_record_dynamic_symbol): Allow creation of
local dynamic symbols.
(bfd_elf_record_link_assignment): Allow creation of dynamic section
symbols in ecxecutables.
(_bfd_elf_link_renumber_dynsyms): Ditto.
(bfd_elf_final_link): Ditto.
* elf32-arm.c (elf32_arm_final_link_relocate): Copy absolute
relocations into SymbianOS executables.
(elf32_arm_check_relocs): Crate dynamic sections for SymbianOS
executables. Copy absolute relocations into SymbianOS executables.
(elf32_arm_adjust_dynamic_symbol): Don't create copy relocations
in symbian objects.
(allocate_dynrelocs): Copy relocations for SymbianOS executables.
Output dynamic symbols for symbols defined in linker scripts.
[-- Attachment #2: patch.symbian_exec --]
[-- Type: text/x-diff, Size: 6314 bytes --]
Index: bfd/elf-bfd.h
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf-bfd.h,v
retrieving revision 1.170
diff -u -p -r1.170 elf-bfd.h
--- bfd/elf-bfd.h 31 Jan 2005 22:53:24 -0000 1.170
+++ bfd/elf-bfd.h 9 Feb 2005 02:20:12 -0000
@@ -398,6 +398,10 @@ struct elf_link_hash_table
/* A linked list of BFD's loaded in the link. */
struct elf_link_loaded_list *loaded;
+
+ /* True if local symbols should be included in dynamic symbol tables
+ of executable objects. */
+ bfd_boolean keep_local_dynsyms;
};
/* Look up an entry in an ELF linker hash table. */
Index: bfd/elf.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf.c,v
retrieving revision 1.263
diff -u -p -r1.263 elf.c
--- bfd/elf.c 31 Jan 2005 23:13:18 -0000 1.263
+++ bfd/elf.c 9 Feb 2005 02:03:46 -0000
@@ -1493,6 +1493,7 @@ _bfd_elf_link_hash_table_init
table->tls_sec = NULL;
table->tls_size = 0;
table->loaded = NULL;
+ table->keep_local_dynsyms = FALSE;
ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc);
table->root.type = bfd_link_elf_hash_table;
Index: bfd/elf32-arm.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf32-arm.c,v
retrieving revision 1.20
diff -u -p -r1.20 elf32-arm.c
--- bfd/elf32-arm.c 31 Jan 2005 17:50:20 -0000 1.20
+++ bfd/elf32-arm.c 9 Feb 2005 02:23:36 -0000
@@ -2352,7 +2352,7 @@ elf32_arm_final_link_relocate (reloc_how
/* When generating a shared object, these relocations are copied
into the output file to be resolved at run time. */
- if (info->shared
+ if ((info->shared || globals->symbian_p)
&& (input_section->flags & SEC_ALLOC)
&& (r_type != R_ARM_REL32
|| !SYMBOL_CALLS_LOCAL (info, h))
@@ -3985,6 +3985,14 @@ elf32_arm_check_relocs (bfd *abfd, struc
htab = elf32_arm_hash_table (info);
sreloc = NULL;
+ /* Create dynamic sections for SymbianOS executables so that we can
+ copy relocations. */
+ if (htab->symbian_p && ! htab->root.dynamic_sections_created)
+ {
+ if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
+ return FALSE;
+ }
+
dynobj = elf_hash_table (info)->dynobj;
local_got_offsets = elf_local_got_offsets (abfd);
@@ -4117,7 +4125,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
later (it is never cleared). We account for that
possibility below by storing information in the
relocs_copied field of the hash table entry. */
- if (info->shared
+ if ((info->shared || htab->symbian_p)
&& (sec->flags & SEC_ALLOC) != 0
&& ((r_type != R_ARM_PC24
&& r_type != R_ARM_PLT32
@@ -4377,7 +4385,9 @@ elf32_arm_adjust_dynamic_symbol (struct
asection * s;
unsigned int power_of_two;
struct elf32_arm_link_hash_entry * eh;
+ struct elf32_arm_link_hash_table *globals;
+ globals = elf32_arm_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
@@ -4442,8 +4452,10 @@ elf32_arm_adjust_dynamic_symbol (struct
/* If we are creating a shared library, we must presume that the
only references to the symbol are via the global offset table.
For such cases we need not do anything here; the relocations will
- be handled correctly by relocate_section. */
- if (info->shared)
+ be handled correctly by relocate_section. On SymbianOS executables
+ can reference data in shared objects directly, so we don't need to
+ do anything here. */
+ if (info->shared || globals->symbian_p)
return TRUE;
/* We must allocate the symbol in our .dynbss section, which will
@@ -4636,13 +4648,23 @@ allocate_dynrelocs (struct elf_link_hash
space for pc-relative relocs that have become local due to symbol
visibility changes. */
- if (info->shared)
+ if (info->shared || htab->symbian_p)
{
/* Discard relocs on undefined weak syms with non-default
visibility. */
if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
&& h->root.type == bfd_link_hash_undefweak)
eh->relocs_copied = NULL;
+ else if (htab->symbian_p && h->dynindx == -1
+ && h->root.type == bfd_link_hash_new)
+ {
+ /* Output absolute symbols so that we can create relocations
+ against them. For normal symbols we output a relocation
+ against the section that contains them. */
+ if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
}
else
{
@@ -5845,6 +5867,7 @@ elf32_arm_symbian_link_hash_table_create
/* The PLT entries are each three instructions. */
htab->plt_entry_size = 4 * NUM_ELEM (elf32_arm_symbian_plt_entry);
htab->symbian_p = 1;
+ htab->root.keep_local_dynsyms = 1;
}
return ret;
}
Index: bfd/elflink.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elflink.c,v
retrieving revision 1.126
diff -u -p -r1.126 elflink.c
--- bfd/elflink.c 1 Feb 2005 01:11:14 -0000 1.126
+++ bfd/elflink.c 9 Feb 2005 02:07:31 -0000
@@ -386,7 +386,8 @@ bfd_elf_link_record_dynamic_symbol (stru
&& h->root.type != bfd_link_hash_undefweak)
{
h->forced_local = 1;
- return TRUE;
+ if (!elf_hash_table (info)->keep_local_dynsyms)
+ return TRUE;
}
default:
@@ -484,6 +485,6 @@ bfd_elf_record_link_assignment (bfd *out
if ((h->def_dynamic
|| h->ref_dynamic
- || info->shared)
+ || info->shared || elf_hash_table (info)->keep_local_dynsyms)
&& h->dynindx == -1)
{
if (! bfd_elf_link_record_dynamic_symbol (info, h))
@@ -667,7 +701,7 @@ _bfd_elf_link_renumber_dynsyms
{
unsigned long dynsymcount = 0;
- if (info->shared)
+ if (info->shared || elf_hash_table (info)->keep_local_dynsyms)
{
const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
asection *p;
@@ -8104,7 +8143,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
long last_local = 0;
/* Write out the section symbols for the output sections. */
- if (info->shared)
+ if (info->shared || elf_hash_table (info)->keep_local_dynsyms)
{
asection *s;
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch] SymbianOS Arm executables
2005-02-09 23:38 [patch] SymbianOS Arm executables Paul Brook
@ 2005-02-10 15:58 ` Richard Earnshaw
2005-02-10 17:29 ` Paul Brook
0 siblings, 1 reply; 5+ messages in thread
From: Richard Earnshaw @ 2005-02-10 15:58 UTC (permalink / raw)
To: Paul Brook; +Cc: binutils
On Wed, 2005-02-09 at 20:35, Paul Brook wrote:
> arm-*-symbianelf executables are relocatable. This has a few implications:
>
> - We need to write out absolute relocations, like we do with shared libraries.
> - These need to be against a symbols because the RO and RW segments are
> relocated independently. In most cases we use the section symbol.
> - Imported data is addressed directly (with absolute relocations).
>
> Most of the changes are arm-specific, however I did need to add a new
> common-code flag to allow creation of the local dynamic symbols.
>
> Tested on i686-linux, arm-none-eabi and arm-none-symbianelf.
> Ok?
>
> Paul
>
> This depends on a previous patch for correct symbol ordering:
> http://sourceware.org/ml/binutils/2005-02/msg00169.html
I'm uncomfortable about the way globals->symbian_p is getting scattered
throughout the entire linking process. I think we really need to try
and distill that variable into the effects it has on linking (this would
then make porting the linker to platforms with similar properties much
less painful).
In this case you've already identified the abstract property: the
executable is relocated at link time. Most of your used of ->symbian_p
should therefore be ->exec_reloc_p. There should then be exactly one
place where symbian_p is tested, and that is then used to set the
exec_reloc_p property.
R.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch] SymbianOS Arm executables
2005-02-10 15:58 ` Richard Earnshaw
@ 2005-02-10 17:29 ` Paul Brook
2005-02-10 19:54 ` Richard Earnshaw
0 siblings, 1 reply; 5+ messages in thread
From: Paul Brook @ 2005-02-10 17:29 UTC (permalink / raw)
To: binutils; +Cc: Richard Earnshaw
[-- Attachment #1: Type: text/plain, Size: 1690 bytes --]
On Thursday 10 February 2005 10:55, Richard Earnshaw wrote:
> I'm uncomfortable about the way globals->symbian_p is getting scattered
> throughout the entire linking process. I think we really need to try
> and distill that variable into the effects it has on linking (this would
> then make porting the linker to platforms with similar properties much
> less painful).
>
> In this case you've already identified the abstract property: the
> executable is relocated at link time. Most of your used of ->symbian_p
> should therefore be ->exec_reloc_p. There should then be exactly one
> place where symbian_p is tested, and that is then used to set the
> exec_reloc_p property.
Modified patch attached. No functional changes.
Retested on i686-linux, arm-none-elf and arm-none-symbianelf.
Ok?
Paul
2005-02-10 Paul Brook <paul@codesourcery.com>
* elf-bfd.h (struct elf_link_hash_table): Add exec_reloc_p.
* elf.c (_bfd_elf_link_hash_table_init): Initialize it.
* elflink.c (bfd_elf_link_record_dynamic_symbol): Create local dynamic
symbols in relocatable executables.
(bfd_elf_record_link_assignment): Create dynamic section symbols in
relocatable executables.
(_bfd_elf_link_renumber_dynsyms): Ditto.
(bfd_elf_final_link): Ditto.
* elf32-arm.c (elf32_arm_final_link_relocate): Copy absolute
relocations into relocatable executables.
(elf32_arm_check_relocs): Crate dynamic sections for relocatale
executables. Also copy absolute relocations.
(elf32_arm_adjust_dynamic_symbol): Don't create copy relocations
in relocatable executables.
(allocate_dynrelocs): Copy relocations for relocatable executables.
Output dynamic symbols for symbols defined in linker scripts.
[-- Attachment #2: patch.symbian_exec --]
[-- Type: text/x-diff, Size: 7376 bytes --]
Index: bfd/elf-bfd.h
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf-bfd.h,v
retrieving revision 1.171
diff -u -p -r1.171 elf-bfd.h
--- bfd/elf-bfd.h 6 Feb 2005 23:21:44 -0000 1.171
+++ bfd/elf-bfd.h 10 Feb 2005 14:57:52 -0000
@@ -398,6 +398,10 @@ struct elf_link_hash_table
/* A linked list of BFD's loaded in the link. */
struct elf_link_loaded_list *loaded;
+
+ /* True if This target has relocatable executables, so needs dynamic
+ section symbols. */
+ bfd_boolean exec_reloc_p;
};
/* Look up an entry in an ELF linker hash table. */
Index: bfd/elf.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf.c,v
retrieving revision 1.264
diff -u -p -r1.264 elf.c
--- bfd/elf.c 6 Feb 2005 23:21:44 -0000 1.264
+++ bfd/elf.c 10 Feb 2005 15:11:21 -0000
@@ -1496,6 +1496,7 @@ _bfd_elf_link_hash_table_init
table->tls_sec = NULL;
table->tls_size = 0;
table->loaded = NULL;
+ table->exec_reloc_p = FALSE;
ret = _bfd_link_hash_table_init (&table->root, abfd, newfunc);
table->root.type = bfd_link_elf_hash_table;
Index: bfd/elf32-arm.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elf32-arm.c,v
retrieving revision 1.21
diff -u -p -r1.21 elf32-arm.c
--- bfd/elf32-arm.c 10 Feb 2005 14:14:25 -0000 1.21
+++ bfd/elf32-arm.c 10 Feb 2005 14:56:05 -0000
@@ -2352,7 +2352,7 @@ elf32_arm_final_link_relocate (reloc_how
/* When generating a shared object, these relocations are copied
into the output file to be resolved at run time. */
- if (info->shared
+ if ((info->shared || globals->root.exec_reloc_p)
&& (input_section->flags & SEC_ALLOC)
&& (r_type != R_ARM_REL32
|| !SYMBOL_CALLS_LOCAL (info, h))
@@ -3986,6 +3986,14 @@ elf32_arm_check_relocs (bfd *abfd, struc
htab = elf32_arm_hash_table (info);
sreloc = NULL;
+ /* Create dynamic sections for relocatable executables so that we can
+ copy relocations. */
+ if (htab->root.exec_reloc_p && ! htab->root.dynamic_sections_created)
+ {
+ if (! _bfd_elf_link_create_dynamic_sections (abfd, info))
+ return FALSE;
+ }
+
dynobj = elf_hash_table (info)->dynobj;
local_got_offsets = elf_local_got_offsets (abfd);
@@ -4106,11 +4114,11 @@ elf32_arm_check_relocs (bfd *abfd, struc
eh->plt_thumb_refcount += 1;
}
- /* If we are creating a shared library, and this is a reloc
- against a global symbol, or a non PC relative reloc
- against a local symbol, then we need to copy the reloc
- into the shared library. However, if we are linking with
- -Bsymbolic, we do not need to copy a reloc against a
+ /* If we are creating a shared library or relocatable executable,
+ and this is a reloc against a global symbol, or a non PC
+ relative reloc against a local symbol, then we need to copy
+ the reloc into the shared library. However, if we are linking
+ with -Bsymbolic, we do not need to copy a reloc against a
global symbol which is defined in an object we are
including in the link (i.e., DEF_REGULAR is set). At
this point we have not seen all the input files, so it is
@@ -4118,7 +4126,7 @@ elf32_arm_check_relocs (bfd *abfd, struc
later (it is never cleared). We account for that
possibility below by storing information in the
relocs_copied field of the hash table entry. */
- if (info->shared
+ if ((info->shared || htab->root.exec_reloc_p)
&& (sec->flags & SEC_ALLOC) != 0
&& ((r_type != R_ARM_PC24
&& r_type != R_ARM_PLT32
@@ -4378,7 +4386,9 @@ elf32_arm_adjust_dynamic_symbol (struct
asection * s;
unsigned int power_of_two;
struct elf32_arm_link_hash_entry * eh;
+ struct elf32_arm_link_hash_table *globals;
+ globals = elf32_arm_hash_table (info);
dynobj = elf_hash_table (info)->dynobj;
/* Make sure we know what is going on here. */
@@ -4443,8 +4453,10 @@ elf32_arm_adjust_dynamic_symbol (struct
/* If we are creating a shared library, we must presume that the
only references to the symbol are via the global offset table.
For such cases we need not do anything here; the relocations will
- be handled correctly by relocate_section. */
- if (info->shared)
+ be handled correctly by relocate_section. Relocatable executables
+ can reference data in shared objects directly, so we don't need to
+ do anything here. */
+ if (info->shared || globals->root.exec_reloc_p)
return TRUE;
/* We must allocate the symbol in our .dynbss section, which will
@@ -4637,13 +4649,23 @@ allocate_dynrelocs (struct elf_link_hash
space for pc-relative relocs that have become local due to symbol
visibility changes. */
- if (info->shared)
+ if (info->shared || htab->root.exec_reloc_p)
{
/* Discard relocs on undefined weak syms with non-default
visibility. */
if (ELF_ST_VISIBILITY (h->other) != STV_DEFAULT
&& h->root.type == bfd_link_hash_undefweak)
eh->relocs_copied = NULL;
+ else if (htab->root.exec_reloc_p && h->dynindx == -1
+ && h->root.type == bfd_link_hash_new)
+ {
+ /* Output absolute symbols so that we can create relocations
+ against them. For normal symbols we output a relocation
+ against the section that contains them. */
+ if (! bfd_elf_link_record_dynamic_symbol (info, h))
+ return FALSE;
+ }
+
}
else
{
@@ -5846,6 +5868,7 @@ elf32_arm_symbian_link_hash_table_create
/* The PLT entries are each three instructions. */
htab->plt_entry_size = 4 * NUM_ELEM (elf32_arm_symbian_plt_entry);
htab->symbian_p = 1;
+ htab->root.exec_reloc_p = 1;
}
return ret;
}
Index: bfd/elflink.c
===================================================================
RCS file: /var/cvsroot/src-cvs/src/bfd/elflink.c,v
retrieving revision 1.133
diff -u -p -r1.133 elflink.c
--- bfd/elflink.c 10 Feb 2005 14:09:40 -0000 1.133
+++ bfd/elflink.c 10 Feb 2005 15:10:45 -0000
@@ -386,7 +386,8 @@ bfd_elf_link_record_dynamic_symbol (stru
&& h->root.type != bfd_link_hash_undefweak)
{
h->forced_local = 1;
- return TRUE;
+ if (!elf_hash_table (info)->exec_reloc_p)
+ return TRUE;
}
default:
@@ -494,7 +495,8 @@ bfd_elf_record_link_assignment (bfd *out
if ((h->def_dynamic
|| h->ref_dynamic
- || info->shared)
+ || info->shared
+ || (info->executable && elf_hash_table (info)->exec_reloc_p))
&& h->dynindx == -1)
{
if (! bfd_elf_link_record_dynamic_symbol (info, h))
@@ -710,7 +712,7 @@ _bfd_elf_link_renumber_dynsyms (bfd *out
{
unsigned long dynsymcount = 0;
- if (info->shared)
+ if (info->shared || elf_hash_table (info)->exec_reloc_p)
{
const struct elf_backend_data *bed = get_elf_backend_data (output_bfd);
asection *p;
@@ -8167,7 +8169,7 @@ bfd_elf_final_link (bfd *abfd, struct bf
long last_local = 0;
/* Write out the section symbols for the output sections. */
- if (info->shared)
+ if (info->shared || elf_hash_table (info)->exec_reloc_p)
{
asection *s;
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch] SymbianOS Arm executables
2005-02-10 17:29 ` Paul Brook
@ 2005-02-10 19:54 ` Richard Earnshaw
0 siblings, 0 replies; 5+ messages in thread
From: Richard Earnshaw @ 2005-02-10 19:54 UTC (permalink / raw)
To: Paul Brook; +Cc: binutils
On Thu, 2005-02-10 at 15:45, Paul Brook wrote:
> On Thursday 10 February 2005 10:55, Richard Earnshaw wrote:
> > I'm uncomfortable about the way globals->symbian_p is getting scattered
> > throughout the entire linking process. I think we really need to try
> > and distill that variable into the effects it has on linking (this would
> > then make porting the linker to platforms with similar properties much
> > less painful).
> >
> > In this case you've already identified the abstract property: the
> > executable is relocated at link time. Most of your used of ->symbian_p
> > should therefore be ->exec_reloc_p. There should then be exactly one
> > place where symbian_p is tested, and that is then used to set the
> > exec_reloc_p property.
>
> Modified patch attached. No functional changes.
>
That looks much better.
> Retested on i686-linux, arm-none-elf and arm-none-symbianelf.
> Ok?
The ARM parts are OK, but I can't approve the other bits.
R.
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [patch] SymbianOS Arm executables
@ 2005-02-11 15:15 Nick Clifton
0 siblings, 0 replies; 5+ messages in thread
From: Nick Clifton @ 2005-02-11 15:15 UTC (permalink / raw)
To: paul; +Cc: binutils
Hi Paul,
> 2005-02-10 Paul Brook <paul@codesourcery.com>
>
> * elf-bfd.h (struct elf_link_hash_table): Add exec_reloc_p.
> * elf.c (_bfd_elf_link_hash_table_init): Initialize it.
> * elflink.c (bfd_elf_link_record_dynamic_symbol): Create local dynamic
> symbols in relocatable executables.
> (bfd_elf_record_link_assignment): Create dynamic section symbols in
> relocatable executables.
> (_bfd_elf_link_renumber_dynsyms): Ditto.
> (bfd_elf_final_link): Ditto.
> * elf32-arm.c (elf32_arm_final_link_relocate): Copy absolute
> relocations into relocatable executables.
> (elf32_arm_check_relocs): Crate dynamic sections for relocatale
^^^^^^^^^
relocatable ?
> executables. Also copy absolute relocations.
> (elf32_arm_adjust_dynamic_symbol): Don't create copy relocations
> in relocatable executables.
> (allocate_dynrelocs): Copy relocations for relocatable executables.
> Output dynamic symbols for symbols defined in linker scripts.
Approved - please apply. But...
------------------------------------------------------------------------
+ /* True if This target has relocatable executables, so needs dynamic
+ section symbols. */
+ bfd_boolean exec_reloc_p;
There is no need for a capital T on the word "This".
Also - this is a just personal thing, not a requirement - I really
hate the use of ..._p to indicate a boolean value. We are coding in C
here not lisp and I think that we should try to drop hold overs from
that language. Thus I would have called this variable:
"is_relocatable_executable" or
"executable_needs_dynamic_section_syms".
------------------------------------------------------------------------
/* When generating a shared object, these relocations are copied
into the output file to be resolved at run time. */
- if (info->shared
+ if ((info->shared || globals->root.exec_reloc_p)
Since you are updating the if() statement, you should update the
comment describing it.
Cheers
Nick
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2005-02-11 9:34 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2005-02-09 23:38 [patch] SymbianOS Arm executables Paul Brook
2005-02-10 15:58 ` Richard Earnshaw
2005-02-10 17:29 ` Paul Brook
2005-02-10 19:54 ` Richard Earnshaw
2005-02-11 15:15 Nick Clifton
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).